From 8532a33988632bfe2266935b80d02245a7712533 Mon Sep 17 00:00:00 2001 From: Ken Yasue Date: Mon, 22 Sep 2025 17:15:05 +0200 Subject: [PATCH] save changes --- src/musicspot_generator/images.ts | 66 +- .../infinitydance/scenes.json | 1368 +++++++++++++++++ src/musicspot_generator/videos.ts | 6 +- 3 files changed, 1420 insertions(+), 20 deletions(-) create mode 100644 src/musicspot_generator/infinitydance/scenes.json diff --git a/src/musicspot_generator/images.ts b/src/musicspot_generator/images.ts index 95ff6be..c16335d 100644 --- a/src/musicspot_generator/images.ts +++ b/src/musicspot_generator/images.ts @@ -5,7 +5,8 @@ import fs from 'fs/promises'; import { logger } from '../lib/logger'; import { callOpenAI } from '../lib/openai'; import { callLMStudio } from '../lib/lmstudio'; -import { generateImage as generateFaceImage } from '../lib/image-generator-face'; +// import { generateImage as generateFaceImage } from '../lib/image-generator-face'; // Removed +import { generateImage } from '../lib/image-generator'; // Added dotenv.config(); @@ -43,8 +44,8 @@ interface Server { name: string; } -const DEFAULT_SIZE: Size = { width: 720, height: 1280 }; -const FOLDER = process.argv[2] || process.env.MUSICSPOT_FOLDER || 'zagreb'; +const DEFAULT_SIZE: Size = { width: 1280, height: 720 }; +const FOLDER = process.argv[2] || process.env.MUSICSPOT_FOLDER || 'infinitydance'; const FOLDER_SAFE = FOLDER.replace(/[/\\?%*:|"<>]/g, '_'); const FACE_SRC = path.resolve(`src/musicspot_generator/${FOLDER}/face.png`); const GENERATED_DIR = path.resolve('generated'); @@ -84,14 +85,16 @@ async function ensureDirs() { await fs.mkdir(GENERATED_DIR, { recursive: true }); } -async function copyFaceToServers(servers: Server[]): Promise { +async function copyFaceToServers(servers: Server[]): Promise { const faceFileName = 'face.png'; // Validate face source try { await fs.access(FACE_SRC); } catch { - throw new Error(`Face image not found at ${FACE_SRC}`); + // If face.png doesn't exist, we don't need to copy anything. + // The caller should handle this case. + return undefined; } for (const srv of servers) { @@ -113,14 +116,25 @@ function buildImagePromptRequest( character: MusicSpotCharacter, scene: MusicSpotScene, cut: MusicSpotCut, - cameraIntent: string + cameraIntent: string, + hasFaceImage: boolean // Added parameter ): string { + let promptInstructions = ` +Write "imagePrompt" in around 110–140 words to generate a still portrait image (720x1280 vertical). +`; + + if (hasFaceImage) { + promptInstructions += `Keep a consistent character identity using the provided face image (identity preservation), but do not mention any camera brand/model. +`; + } else { + promptInstructions += `Do not use any face image for identity preservation. +`; + } + return ` Return exactly one JSON object, nothing else: { "imagePrompt": "Cinematic realistic photo, (camera framing),(character),(pose),(time),(location),(outfit),(action),(lighting)" }. -Write "imagePrompt" in around 110–140 words to generate a still portrait image (720x1280 vertical). -Keep a consistent character identity using the provided face image (identity preservation), but do not mention any camera brand/model. - +${promptInstructions} Describe clearly and concretely: - Character: ${character.bodyType}; hair: ${character.hairStyle} - Camera framing/composition intention: ${cameraIntent} @@ -178,6 +192,16 @@ async function main() { try { await ensureDirs(); + // Check if face.png exists + let faceImageExists = false; + try { + await fs.access(FACE_SRC); + faceImageExists = true; + logger.info(`Face image found at ${FACE_SRC}`); + } catch { + logger.warn(`Face image not found at ${FACE_SRC}. Images will be generated without face conditioning.`); + } + // Load scenes.json const configRaw = await fs.readFile(path.resolve(`src/musicspot_generator/${FOLDER}/scenes.json`), 'utf-8'); const cfg: MusicSpotConfig = JSON.parse(configRaw); @@ -187,8 +211,13 @@ async function main() { return; } - // Ensure face.png in each server's input - const faceFileName = await copyFaceToServers(servers); + // Ensure face.png in each server's input, only if it exists + let faceFileName: string | undefined = undefined; + if (faceImageExists) { + faceFileName = await copyFaceToServers(servers); + } else { + logger.info('Skipping copyFaceToServers as face image does not exist.'); + } // Generate images only (no video here). Intended to be run first. let imageTaskIndex = 0; @@ -218,7 +247,8 @@ async function main() { // 1) Generate image prompt for this camera logger.info(`Scene ${scene.sceneId} - Cut ${cut.cutId} - Cam${variantIndex}: generating image prompt...`); - const imgPromptReq = buildImagePromptRequest(cfg.character, scene, cut, cameraIntent); + // Pass faceImageExists to buildImagePromptRequest + const imgPromptReq = buildImagePromptRequest(cfg.character, scene, cut, cameraIntent, faceImageExists); let imagePrompt: string; try { imagePrompt = await getImagePrompt(imgPromptReq); @@ -229,18 +259,20 @@ async function main() { continue; } - // 2) Generate one image using face conditioning for this specific camera + // 2) Generate one image using the new generateImage function const serverForImage = pickServer(servers, imageTaskIndex++); logger.info(`Generating image (${imgFileName}) on ${serverForImage.name}...`); try { - // Use only the face file name for the workflow image input (Comfy expects it in its input dir) - const finalImagePath = await generateFaceImage( - `Realistic photo, ultra detailed, high contrast, ${imagePrompt}`, - faceFileName, + // Use the generic generateImage function from image-generator.ts + // The faceFileName is no longer passed as an argument, but its existence + // influenced the imagePrompt. + const finalImagePath = await generateImage( + imagePrompt, // The prompt now contains face instructions if faceImageExists is true imgFileName, serverForImage.baseUrl!, serverForImage.outputDir!, + 'flux', // Use default imageModel ('qwen') DEFAULT_SIZE ); logger.info(`Image generated: ${finalImagePath}`); diff --git a/src/musicspot_generator/infinitydance/scenes.json b/src/musicspot_generator/infinitydance/scenes.json new file mode 100644 index 0000000..334428a --- /dev/null +++ b/src/musicspot_generator/infinitydance/scenes.json @@ -0,0 +1,1368 @@ +{ + "character": { + "bodyType": "a lots of dancers from russia, female,", + "hairStyle": "a variety of hairstyles" + }, + "scenes": [ + { + "sceneId": 1, + "time": "Morning", + "location": "Rooftop with pastel sunrise skyline in the background", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "group wide formation facing sunrise", + "action": "the dancers extend both arms upward and then sweep them down in wide arcs, stepping side to side in unison; their movements rise and fall with the beat, creating the effect of a sunrise wave across the rooftop.", + "camera": [ + "drone shot pulling back from skyline to reveal group", + "low angle with sun flare between dancers", + "tracking pan across the wide formation", + "over-shoulder from rooftop edge with sky glowing", + "close-up on smiling faces catching sunlight" + ] + }, + { + "cutId": 2, + "pose": "two groups facing each other", + "action": "the dancers split into two groups and mirror each other’s moves: one side performs sharp chest pops while the other side responds with quick spins and arm sweeps, building a call-and-response energy across the rooftop.", + "camera": [ + "front medium shot showing both groups facing", + "handheld circling around groups during exchange", + "close-up on feet sliding across rooftop", + "low angle emphasizing power of chest pops", + "side tracking shot moving along both groups" + ] + }, + { + "cutId": 3, + "pose": "kneeling group pose", + "action": "the dancers start kneeling, then rise in a ripple from left to right, lifting their arms in fluid motion as if pulling sunlight up with them; the ripple continues through the group until everyone is standing tall with arms extended.", + "camera": [ + "front wide shot capturing the full ripple", + "slow dolly-in highlighting rising motion", + "rear silhouette against the sunrise glow", + "handheld pan left to right following the wave", + "top-down drone view showing symmetry" + ] + }, + { + "cutId": 4, + "pose": "center freestyle dancer", + "action": "one dancer steps into the center, spinning on one foot and throwing arms outward dramatically while the rest clap and stomp to the rhythm, amplifying the solo’s energy before they all rejoin in sync.", + "camera": [ + "circle tracking shot around solo dancer", + "close-up on cheering group clapping", + "front medium focusing on solo moves", + "low angle highlighting spin motion", + "overhead wide shot of entire formation" + ] + }, + { + "cutId": 5, + "pose": "large group finale", + "action": "all dancers leap into the air together, spinning 180° and landing in a crouched pose with one arm pointing skyward; the move is executed in perfect unison, creating a dramatic rooftop climax as the sun bursts through the clouds.", + "camera": [ + "slow-motion side pan capturing leap and spin", + "drone wide shot revealing entire rooftop", + "front close-up on synchronized landing", + "rear shot catching skyline and sunburst", + "medium tilt-up from feet to arms pointing upward" + ] + } + ] + }, + { + "sceneId": 2, + "time": "Morning", + "location": "Urban street with colorful buildings", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "circle formation", + "action": "the dancers gather in a tight circle, bouncing their shoulders and swaying as one dancer steps into the center, freestyling with foot shuffles and fast arm swings while the others clap and chant to the rhythm.", + "camera": [ + "overhead drone shot of circle", + "handheld push-in on solo dancer", + "side wide shot capturing whole group", + "close-up on cheering hands clapping", + "tracking shot circling around formation" + ] + }, + { + "cutId": 2, + "pose": "line formation along the street", + "action": "the dancers shuffle side-to-side with quick steps, pumping their arms downward on each beat, while tilting their heads in sync; their sneakers squeak on the pavement as the line pulses with energy.", + "camera": [ + "tracking dolly shot from front", + "low side angle focused on legs", + "wide shot showing colorful street", + "rear pan capturing full line", + "medium tilt capturing faces in rhythm" + ] + }, + { + "cutId": 3, + "pose": "pyramid formation", + "action": "the front dancer drops low into a squat while those behind lean outward, sending a ripple wave from the center outward with swinging arms; the move flows like water through the group before resetting back to neutral.", + "camera": [ + "drone top-down showing pyramid symmetry", + "front wide shot capturing ripple effect", + "close-up on front dancer squatting low", + "side tracking shot following wave outward", + "handheld pan across row of dancers" + ] + }, + { + "cutId": 4, + "pose": "duo in middle", + "action": "two dancers grab each other’s hands and spin in opposite directions, releasing with a jump outward while the rest stomp and clap around them, creating a dynamic spotlight moment in the street.", + "camera": [ + "medium close-up on spinning duo", + "rear shot showing group clapping", + "low angle emphasizing jump release", + "wide establishing shot", + "POV as if from inside circle" + ] + }, + { + "cutId": 5, + "pose": "full group freestyle", + "action": "the dancers spread across the street, each performing their own short freestyle move—body rolls, head whips, shuffles—before converging into one final synchronized chest pop that lands on the beat.", + "camera": [ + "front handheld capturing chaos", + "close-up on individual dancer expressions", + "side tracking shot across group", + "drone pulling upward as they converge", + "rear tilt capturing final chest pop" + ] + } + ] + }, + { + "sceneId": 3, + "time": "Morning", + "location": "School gym hall with polished wooden floor", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "diagonal formation", + "action": "the dancers jump high, clapping overhead before landing into a crouch; their movements echo down the diagonal line, giving the effect of a wave crashing across the gym floor.", + "camera": [ + "wide shot from bleachers", + "front close-up on claps and jumps", + "low angle from floor level", + "side pan following line of dancers", + "slow dolly-in toward the formation" + ] + }, + { + "cutId": 2, + "pose": "pairs facing each other", + "action": "each pair spins in toward their partner, locking hands and dipping backward before snapping back upright in sync; the pairs create a mirrored reflection effect across the hall.", + "camera": [ + "front medium shot showing pairs in sync", + "overhead shot from gym lights", + "circle tracking shot moving between pairs", + "side wide shot capturing entire hall", + "close-up on hands locking together" + ] + }, + { + "cutId": 3, + "pose": "center kneeling group", + "action": "the dancers kneel in a cluster and slowly rise, extending one arm upward like reaching for the ceiling, then snap into a sharp arm wave that travels through the entire group.", + "camera": [ + "front wide capturing group rise", + "rear silhouette with sunlight through windows", + "handheld circling cluster", + "close-up on raised hands", + "drone top-down for symmetry" + ] + }, + { + "cutId": 4, + "pose": "tight huddle", + "action": "the dancers press together in a huddle, bouncing to the beat before exploding outward into jumps and kicks, scattering dramatically across the gym floor before reforming.", + "camera": [ + "overhead capturing huddle burst", + "front wide shot of scattering dancers", + "low angle under jumps", + "side dolly following outward kicks", + "rear tilt showing regroup" + ] + }, + { + "cutId": 5, + "pose": "rows of dancers", + "action": "two rows face each other, sending a fast ripple wave of arm rolls and hip swings from left to right; the rows then cross-step toward each other and clap hands in rhythm.", + "camera": [ + "front medium showing rows interacting", + "side tracking across row movement", + "drone wide shot for symmetry", + "rear close-up on hip swings", + "top-down pan following ripple" + ] + } + ] + }, + { + "sceneId": 4, + "time": "Morning", + "location": "Subway station platform", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "staggered formation", + "action": "the dancers stomp in heavy rhythm, swinging arms forward sharply on each beat; heads nod and shoulders bounce as the sound of their feet echoes against the tiled platform walls.", + "camera": [ + "wide shot with train arriving in background", + "low floor angle focused on stomps", + "side tracking parallel to dancers", + "rear pan showing commuters watching", + "front close-up capturing foot impact" + ] + }, + { + "cutId": 2, + "pose": "center line", + "action": "two rows face front, pumping their chests outward in sync while snapping their arms down fast, adding head tilts and hip drops to punctuate each beat of the song.", + "camera": [ + "front medium capturing chest pops", + "circle handheld shot around formation", + "close-up on torsos and arm snaps", + "rear shot showing symmetry", + "tilt up from feet to faces" + ] + }, + { + "cutId": 3, + "pose": "duo in spotlight", + "action": "two dancers step forward, hitting sharp foot slides with popping shoulders while the rest freeze in place; after a beat, the group snaps back into movement, surrounding them with claps.", + "camera": [ + "front close-up on spotlight duo", + "overhead wide showing frozen group", + "low angle emphasizing foot slides", + "rear tilt from group to duo", + "handheld zoom into solo shoulders popping" + ] + }, + { + "cutId": 4, + "pose": "group staggered at different levels", + "action": "half the dancers crouch while others leap upward, creating vertical contrast; they rotate clockwise in formation, switching levels as the move repeats with fast energy.", + "camera": [ + "drone top view capturing rotating circle", + "front wide showing level contrast", + "low upward shot on leaping dancers", + "side tracking across formation", + "handheld circling close-up" + ] + }, + { + "cutId": 5, + "pose": "platform finale", + "action": "the entire group charges forward in sync, sliding feet across the ground and throwing arms outward dramatically, ending in a strong frozen pose as the train doors close behind them.", + "camera": [ + "slow-motion front shot of charge forward", + "rear wide shot with closing train doors", + "low side close-up on sliding feet", + "tracking dolly through middle of group", + "drone upward pull to reveal station" + ] + } + ] + }, + { + "sceneId": 5, + "time": "Noon", + "location": "Graffiti wall alley", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "tight group against wall", + "action": "the dancers suddenly jump away from the wall in explosive stomps, swinging their arms across their chests and snapping their heads side to side in raw hip-hop intensity.", + "camera": [ + "low angle emphasizing stomps", + "wide shot with graffiti background", + "handheld shaky cam for raw energy", + "rear pan catching head snaps", + "front close-up on arm swings" + ] + }, + { + "cutId": 2, + "pose": "semi-circle formation", + "action": "the dancers sway their shoulders in rhythm, raising one arm high and dropping it sharply on the beat, creating a chain reaction of arm drops across the formation.", + "camera": [ + "front close-up on arms rising and falling", + "side tracking shot of semi-circle", + "fish-eye lens exaggerating sway", + "rear tilt capturing chain reaction", + "medium dolly circling semi-circle" + ] + }, + { + "cutId": 3, + "pose": "solo dancer in middle", + "action": "the soloist hits a series of fast body rolls and sharp foot taps while the group freezes behind, then on the next beat everyone bursts into freestyle arm waves together.", + "camera": [ + "front close-up on solo body rolls", + "rear wide shot showing frozen group", + "low shot capturing foot taps", + "handheld pan across group bursting in", + "drone upward tilt to reveal whole alley" + ] + }, + { + "cutId": 4, + "pose": "staggered line", + "action": "the group bends forward and rolls shoulders back in sync, stepping diagonally across the alley while snapping fingers; their steps echo sharply on the pavement.", + "camera": [ + "front medium capturing shoulder rolls", + "side pan following diagonal steps", + "low close-up on snapping fingers", + "rear tracking behind group", + "drone top-down view of staggered line" + ] + }, + { + "cutId": 5, + "pose": "graffiti finale pose", + "action": "all dancers freeze in strong angular poses against the graffiti wall, arms bent sharply and legs spread wide, holding still for a dramatic picture-perfect ending.", + "camera": [ + "front wide showing whole group", + "low angle emphasizing frozen stance", + "side shot with wall textures", + "handheld push-in for intensity", + "drone zoom-out revealing alley backdrop" + ] + } + ] + }, + { + "sceneId": 6, + "time": "Noon", + "location": "Shopping mall atrium with glass ceiling", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "flash mob starting from crowd", + "action": "dancers blend in as regular shoppers, then suddenly burst into synchronized jumps and claps; they spin outward in a ripple pattern, filling the atrium with high energy.", + "camera": [ + "overhead shot from balcony showing formation", + "front wide capturing surprised bystanders", + "close-up on first dancer breaking into move", + "side tracking across ripple wave", + "handheld pan around atrium floor" + ] + }, + { + "cutId": 2, + "pose": "staircase choreography", + "action": "dancers form lines on mall stairs, stepping up and down in alternating rhythm; they swing arms diagonally while stomping to create a criss-cross visual effect.", + "camera": [ + "low angle from bottom of stairs", + "wide establishing atrium view", + "front medium capturing diagonal arms", + "drone tilt down from glass ceiling", + "side dolly along railing" + ] + }, + { + "cutId": 3, + "pose": "balcony group", + "action": "a group on the upper balcony leans over the rail, snapping fingers and swaying, while the dancers below mirror the same moves, creating a two-level visual exchange.", + "camera": [ + "wide two-level split shot", + "close-up on balcony fingers snapping", + "rear shot from above dancers below", + "side pan connecting balcony and floor", + "handheld tilt between levels" + ] + }, + { + "cutId": 4, + "pose": "circular group in center", + "action": "the dancers spin inward, linking arms at the shoulders, then explode outward with synchronized kicks, spinning in opposite directions before reforming into a circle.", + "camera": [ + "overhead drone shot of circle", + "front medium capturing inward spin", + "close-up on outward kicks", + "rear wide shot across mall floor", + "handheld rotating with dancers" + ] + }, + { + "cutId": 5, + "pose": "atrium finale", + "action": "all dancers leap simultaneously, throwing arms up toward the glass ceiling as confetti falls, freezing in a triumphant final pose with legs spread and arms stretched wide.", + "camera": [ + "slow-motion side capturing leaps", + "drone wide showing confetti", + "front close-up on faces looking up", + "low upward angle emphasizing ceiling", + "rear wide revealing crowd cheering" + ] + } + ] + }, + { + "sceneId": 7, + "time": "Afternoon", + "location": "Park fountain with stone basin and trees", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "circle around fountain", + "action": "dancers spin with arms extended, lightly splashing water with each turn; their skirts and shirts flow with the motion, creating rippling reflections in the fountain.", + "camera": [ + "drone circling above fountain", + "front wide capturing water splashes", + "close-up on skirts fluttering", + "side pan following arm extensions", + "rear silhouette with sunlight glare" + ] + }, + { + "cutId": 2, + "pose": "pairs on fountain edge", + "action": "dancers pair up, hopping on the fountain edge and swinging arms playfully back and forth; their feet tap rhythmically against the stone ledge in sync.", + "camera": [ + "profile shot of pairs hopping", + "tracking dolly following feet", + "close-up on playful hand swings", + "rear wide capturing full circle", + "drone tilt showing edge symmetry" + ] + }, + { + "cutId": 3, + "pose": "group crouch and rise", + "action": "the group crouches low around the fountain, then rises in a ripple wave, throwing both arms upward in sync to mimic water spraying upward.", + "camera": [ + "front wide capturing rise", + "drone top-down showing ripple pattern", + "low angle emphasizing upward arms", + "rear tilt into sunlight reflection", + "close-up on splashes around basin" + ] + }, + { + "cutId": 4, + "pose": "playful freestyle", + "action": "two dancers leap into the fountain’s shallow edge, splashing water as they freestyle with body rolls and spins, while others cheer and clap in rhythm.", + "camera": [ + "front handheld capturing splashes", + "close-up on rolling shoulders", + "wide shot of cheering group", + "side low angle catching spin", + "rear pan with water droplets sparkling" + ] + }, + { + "cutId": 5, + "pose": "fountain finale", + "action": "all dancers join hands, circling quickly around the fountain while laughing and stomping in rhythm, then freeze mid-spin with arms stretched outward.", + "camera": [ + "drone wide circling above group", + "front slow-motion capturing spin", + "close-up on linked hands", + "side tracking following feet stomps", + "rear tilt showing frozen finale" + ] + } + ] + }, + { + "sceneId": 8, + "time": "Afternoon", + "location": "Beach boardwalk with ocean view", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "line formation facing ocean", + "action": "dancers perform wide sweeping arm waves above their heads while stepping side to side, matching the rhythm of waves crashing behind them.", + "camera": [ + "drone shot from above beach", + "front wide capturing ocean horizon", + "close-up on arm waves against sky", + "side pan following stepping rhythm", + "rear wide with sunset glow" + ] + }, + { + "cutId": 2, + "pose": "group scattered playfully", + "action": "the dancers scatter across the boardwalk, jumping in rhythm while twisting hips and clapping overhead, creating a lively, festival-like energy.", + "camera": [ + "front handheld capturing scattered group", + "wide establishing ocean view", + "close-up on clapping hands", + "rear dolly pulling through group", + "drone tilt showing full scatter" + ] + }, + { + "cutId": 3, + "pose": "pairs freestyle", + "action": "pairs face each other, mirroring quick steps and hip sways; each duo spins outward and rejoins the formation with playful foot taps.", + "camera": [ + "front medium showing mirrored duos", + "side pan across pairs spinning", + "close-up on foot taps", + "rear tilt showing synchronized sway", + "drone wide of entire boardwalk" + ] + }, + { + "cutId": 4, + "pose": "jump spin sequence", + "action": "the group performs a sequence of jumps and mid-air spins, landing with a stomp and clap in perfect sync, sending sand flying from their sandals.", + "camera": [ + "slow-motion front capturing spin", + "low close-up on sand scattering", + "rear wide capturing synchronized land", + "side tracking following line of jumps", + "drone wide from above" + ] + }, + { + "cutId": 5, + "pose": "boardwalk finale", + "action": "all dancers run toward the ocean in slow rhythm, then stop suddenly to strike playful beach poses—hands up, heads thrown back, and legs spread wide against the sunset.", + "camera": [ + "rear wide with ocean in frame", + "front slow-motion capturing stop", + "close-up on laughing faces", + "low angle emphasizing arms up", + "drone pull-out revealing coastline" + ] + } + ] + }, + { + "sceneId": 9, + "time": "Afternoon", + "location": "Festival grounds with neon decorations", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "large crowd wave", + "action": "dancers raise glow sticks high and wave them side to side in sync, jumping lightly to the beat as colored smoke fills the background.", + "camera": [ + "front wide capturing glow sticks", + "overhead drone view of crowd wave", + "close-up on neon accessories", + "rear wide with smoke flares", + "side dolly along jumping line" + ] + }, + { + "cutId": 2, + "pose": "circle jump formation", + "action": "dancers form a circle, jumping in place while pumping fists upward; every fourth beat they all crouch low and spring up together, amplifying the crowd’s energy.", + "camera": [ + "drone top-down showing circle symmetry", + "front close-up on spring jump", + "side handheld capturing crowd energy", + "rear tilt emphasizing upward fists", + "wide establishing festival backdrop" + ] + }, + { + "cutId": 3, + "pose": "wave chain", + "action": "the dancers stand in a long line and send a ripple of body rolls from one end to the other, then reverse it back with synchronized hip drops and head tilts.", + "camera": [ + "side tracking shot following ripple", + "front wide capturing full line", + "close-up on torso rolls", + "rear tilt following head tilts", + "drone high angle above line" + ] + }, + { + "cutId": 4, + "pose": "spotlight solo", + "action": "one dancer steps into the center with fast foot shuffles and breakdance spins while the group kneels around, clapping to keep the beat.", + "camera": [ + "front close-up on solo spin", + "overhead wide showing kneeling group", + "low angle emphasizing foot shuffle", + "circle dolly around spotlight", + "handheld push-in capturing claps" + ] + }, + { + "cutId": 5, + "pose": "festival finale", + "action": "all dancers rush together, jumping in sync with both arms raised as fireworks light up behind them; they land in a frozen V-formation pose.", + "camera": [ + "slow-motion front capturing jump", + "rear wide showing fireworks", + "close-up on arms raised high", + "low angle emphasizing frozen V pose", + "drone wide pull-out of festival grounds" + ] + } + ] + }, + { + "sceneId": 10, + "time": "Sunset", + "location": "Bridge with city skyline and orange sky", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "line facing sunset", + "action": "the dancers extend arms wide and sway side to side slowly, stepping with heavy rhythm as the setting sun casts long shadows behind them.", + "camera": [ + "rear wide silhouette against sun", + "front medium capturing sways", + "side tracking following steps", + "drone tilt above bridge", + "close-up on hands extending" + ] + }, + { + "cutId": 2, + "pose": "pairs spin", + "action": "dancers pair off, spinning around each other with skirts flaring, then separating into opposite directions before rejoining in a clap.", + "camera": [ + "front medium on spinning pairs", + "low angle emphasizing skirts", + "side pan following spins", + "rear tilt capturing sunset backdrop", + "drone overhead capturing whole bridge" + ] + }, + { + "cutId": 3, + "pose": "staggered levels", + "action": "half the dancers crouch while others stretch arms upward, rotating slowly in unison to create a visual spiral across the bridge.", + "camera": [ + "drone top-down showing spiral", + "front wide capturing contrast", + "rear close-up on crouched dancers", + "side dolly around group", + "handheld push-in capturing rotation" + ] + }, + { + "cutId": 4, + "pose": "running sequence", + "action": "the group jogs forward in rhythm, pumping arms and stomping feet loudly, then stop suddenly to throw arms skyward in a freeze pose.", + "camera": [ + "front slow-motion of jog", + "low angle focused on stomps", + "rear wide showing skyline", + "side pan following arms thrown up", + "drone upward pull above bridge" + ] + }, + { + "cutId": 5, + "pose": "bridge finale", + "action": "all dancers spread across the bridge, leaning backward dramatically with arms open wide as the sun sets behind them, holding the pose until the beat drops.", + "camera": [ + "rear wide with sun in frame", + "front close-up on dramatic lean", + "low upward angle emphasizing openness", + "side dolly following group line", + "drone wide establishing finale" + ] + } + ] + }, + { + "sceneId": 11, + "time": "Afternoon", + "location": "Modern art gallery with white walls and abstract installations", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "group spread across gallery hall", + "action": "the dancers move in slow, angular gestures, extending arms sharply toward sculptures and then pulling back, their bodies echoing the geometric art around them.", + "camera": [ + "wide establishing shot of gallery hall", + "front medium capturing angular arms", + "side dolly following gestures", + "rear tilt showing symmetry with art pieces", + "close-up on dancer’s hand near sculpture" + ] + }, + { + "cutId": 2, + "pose": "mirror duet", + "action": "two dancers face each other in the center, mirroring fluid body waves that travel from shoulders to hips, while the group around them freezes like statues.", + "camera": [ + "front medium shot on duo", + "circle dolly around frozen group", + "close-up on hip waves", + "rear wide shot including abstract art", + "overhead drone capturing symmetry" + ] + }, + { + "cutId": 3, + "pose": "floor choreography", + "action": "dancers drop to the floor, sliding on hands and spinning on knees, then rise suddenly with arms cutting upward like brush strokes.", + "camera": [ + "low close-up on slides across floor", + "front wide capturing sudden rise", + "side handheld following spins", + "rear tilt into gallery ceiling lights", + "drone high angle showing floor pattern" + ] + }, + { + "cutId": 4, + "pose": "interaction with installation", + "action": "the dancers weave between art pieces, ducking and twirling around pedestals, before grouping together to hit a synchronized chest pop.", + "camera": [ + "handheld weaving between sculptures", + "front close-up on chest pop", + "wide shot showing gallery layout", + "side dolly across pedestals", + "rear tilt showing art and group interaction" + ] + }, + { + "cutId": 5, + "pose": "gallery finale", + "action": "all dancers freeze in exaggerated poses, arms stretched and bodies twisted like living statues among the art installations.", + "camera": [ + "front wide capturing frozen tableau", + "low angle emphasizing stretched arms", + "close-up on dancer faces still as statues", + "rear wide blending art and people", + "drone overhead capturing symmetry" + ] + } + ] + }, + { + "sceneId": 12, + "time": "Afternoon", + "location": "Luxury café with bright modern interior and tall windows", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "group around tables", + "action": "dancers sit on café chairs, drumming their hands on tables in rhythm before standing together and spinning outward with skirts flaring.", + "camera": [ + "front wide capturing tables and group", + "close-up on hands drumming tabletop", + "side dolly following spin outward", + "rear tilt showing tall windows", + "overhead shot capturing café symmetry" + ] + }, + { + "cutId": 2, + "pose": "window choreography", + "action": "the group lines up against the tall windows, swaying hips side to side while clapping above their heads in sync with the light streaming through.", + "camera": [ + "profile shot with sunlight flare", + "front medium showing hip sways", + "close-up on clapping hands", + "rear silhouette against window glow", + "drone tilt down from ceiling" + ] + }, + { + "cutId": 3, + "pose": "chair choreography", + "action": "dancers straddle café chairs, leaning back dramatically before snapping forward into sharp chest pops, adding playful winks at the camera.", + "camera": [ + "front close-up on chest pops", + "low angle emphasizing lean back", + "side tracking along chairs", + "rear wide capturing café backdrop", + "handheld push-in catching winks" + ] + }, + { + "cutId": 4, + "pose": "bar counter sequence", + "action": "several dancers lean on the bar, tapping feet in sync before sliding across the counter in playful spins, landing smoothly back on the floor.", + "camera": [ + "front wide showing bar area", + "close-up on synchronized foot taps", + "side dolly following spin across bar", + "low upward shot emphasizing slide", + "rear tilt capturing full bar counter" + ] + }, + { + "cutId": 5, + "pose": "café finale", + "action": "all dancers gather in the center, raising cups as props and freezing mid-toast with big smiles and outstretched arms.", + "camera": [ + "front wide capturing group freeze", + "close-up on raised cups", + "side handheld showing laughing faces", + "rear wide capturing café décor", + "drone upward pull revealing full interior" + ] + } + ] + }, + { + "sceneId": 13, + "time": "Evening", + "location": "Industrial warehouse with concrete floors and dim lights", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "line formation", + "action": "the dancers stomp heavily in boots, shoulders jerking with each beat, while arms punch forward in raw, mechanical rhythm echoing through the warehouse.", + "camera": [ + "front wide showing warehouse depth", + "low close-up on stomping boots", + "side dolly across jerking shoulders", + "rear wide with dust rising", + "handheld shaky capturing intensity" + ] + }, + { + "cutId": 2, + "pose": "circle battle", + "action": "dancers form a tight circle while two in the center freestyle with breakdance spins and freezes, the group cheering and stomping loudly.", + "camera": [ + "overhead drone of circle", + "front medium on battle duo", + "close-up on spins and freezes", + "rear tilt showing cheering group", + "handheld circling around" + ] + }, + { + "cutId": 3, + "pose": "staggered group", + "action": "half the dancers drop low with floor sweeps while the others leap overhead, arms cutting sharply in opposite directions to create visual chaos.", + "camera": [ + "front wide capturing chaos", + "low angle emphasizing leaps", + "side pan following floor sweeps", + "rear tilt capturing arm cuts", + "drone top view showing split levels" + ] + }, + { + "cutId": 4, + "pose": "wall choreography", + "action": "the dancers slam their hands against the warehouse wall in rhythm, then bounce backward with shoulder hits before spinning back into line.", + "camera": [ + "front close-up on hands slamming wall", + "side dolly following bounce back", + "rear wide capturing gritty wall", + "low angle emphasizing spins", + "handheld pan across group" + ] + }, + { + "cutId": 5, + "pose": "warehouse finale", + "action": "all dancers crouch low, then spring upward with arms crossed overhead, freezing in a gritty final pose as dust fills the air.", + "camera": [ + "slow-motion front capturing leap", + "rear wide with dust clouds", + "close-up on crossed arms", + "side dolly across frozen group", + "drone wide showing full warehouse" + ] + } + ] + }, + { + "sceneId": 14, + "time": "Evening", + "location": "Train tracks at golden hour (safe staged area)", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "line on tracks", + "action": "dancers line both rails, stepping in alternating rhythm with arms swinging outward, their shoes hitting the wooden ties in sync.", + "camera": [ + "drone wide above tracks", + "front medium capturing step rhythm", + "side dolly following swings", + "low close-up on feet hitting ties", + "rear wide showing golden sky" + ] + }, + { + "cutId": 2, + "pose": "partner spins", + "action": "pairs link hands and spin quickly in circles on the tracks, skirts and shirts flowing outward before releasing dramatically into open poses.", + "camera": [ + "front close-up on spinning pairs", + "low angle emphasizing flowing skirts", + "side pan following spins", + "rear tilt capturing sky backdrop", + "drone wide revealing track symmetry" + ] + }, + { + "cutId": 3, + "pose": "wave formation", + "action": "the group lines across the tracks and performs a rolling body wave from left to right, arms sweeping overhead like a flowing current.", + "camera": [ + "side tracking capturing full wave", + "front wide showing entire line", + "close-up on arm sweeps", + "rear tilt emphasizing flowing motion", + "drone top-down for ripple effect" + ] + }, + { + "cutId": 4, + "pose": "freestyle battle", + "action": "two dancers in the center perform freestyle footwork and spins while the group claps and stomps in rhythm along the rails.", + "camera": [ + "front medium focusing on duo", + "rear wide capturing group clapping", + "low angle emphasizing fast footwork", + "circle handheld around duo", + "drone tilt above tracks" + ] + }, + { + "cutId": 5, + "pose": "track finale", + "action": "the whole group crouches along the rails, then rises together with arms stretched skyward, freezing as the golden sunset lights them from behind.", + "camera": [ + "rear silhouette against golden sun", + "front close-up on upward arms", + "low angle emphasizing rise", + "side dolly following group", + "drone wide establishing finale" + ] + } + ] + }, + { + "sceneId": 15, + "time": "Night", + "location": "Rooftop with neon lights and city skyline", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "line facing skyline", + "action": "dancers hit sharp robotic moves, elbows snapping and heads jerking in rhythm, glowing LED strips on their outfits leaving light trails in the dark.", + "camera": [ + "front wide capturing city skyline", + "low angle emphasizing LED trails", + "side pan along robotic moves", + "rear wide with neon signs", + "drone top-down of glowing group" + ] + }, + { + "cutId": 2, + "pose": "circle formation", + "action": "the dancers crouch and then spring upward, spinning with neon sticks in hand, creating glowing arcs that form a circle of light.", + "camera": [ + "overhead drone showing neon circle", + "front medium capturing arcs of light", + "low slow-motion on spin", + "rear tilt emphasizing neon glow", + "side dolly following circle motion" + ] + }, + { + "cutId": 3, + "pose": "duo spotlight", + "action": "two dancers step into the front, performing sharp popping chest isolations while glowing accessories flash in sync with the beat.", + "camera": [ + "front close-up on chest pops", + "side handheld showing glowing accessories", + "low upward angle emphasizing power", + "rear wide with group frozen", + "circle dolly around duo" + ] + }, + { + "cutId": 4, + "pose": "wave line", + "action": "the group forms a line and sends a ripple of robotic arm waves down the row, each dancer lighting up in sequence with timed LED flickers.", + "camera": [ + "side tracking following wave", + "front wide capturing light sequence", + "close-up on LED flickers", + "rear tilt showing skyline backdrop", + "drone top-down view of glowing line" + ] + }, + { + "cutId": 5, + "pose": "neon rooftop finale", + "action": "all dancers leap forward together, landing in a crouch with glowing arms crossed, then freeze as the city skyline sparkles behind them.", + "camera": [ + "front slow-motion leap capture", + "rear wide skyline background", + "close-up on glowing crossed arms", + "side dolly following group landing", + "drone wide pull-out above rooftop" + ] + } + ] + }, + { + "sceneId": 16, + "time": "Night", + "location": "Packed nightclub with flashing strobes and disco lights", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "tight group on dance floor", + "action": "the dancers bounce with the beat, stomping feet and swaying hips while strobes flash; they raise hands above their heads and roll shoulders to the rhythm of the bass.", + "camera": [ + "front wide capturing crowded floor", + "low close-up on stomping heels", + "side handheld moving with the beat", + "rear wide showing flashing lights", + "circle dolly weaving through dancers" + ] + }, + { + "cutId": 2, + "pose": "spotlight circle", + "action": "a spotlight hits the center as one dancer freestyles with spins and drops, while the group around her claps and stomps in unison to amplify the performance.", + "camera": [ + "front medium highlighting soloist", + "overhead shot showing cheering circle", + "close-up on clapping hands", + "low angle emphasizing spins", + "handheld circling the spotlight" + ] + }, + { + "cutId": 3, + "pose": "back-to-back pairs", + "action": "pairs dance back-to-back, swinging arms outward dramatically before switching partners with a spin, creating a chaotic but playful exchange.", + "camera": [ + "front wide capturing multiple pairs", + "side dolly following spins", + "rear tilt catching arm swings", + "close-up on laughing faces", + "handheld weaving between pairs" + ] + }, + { + "cutId": 4, + "pose": "stage sequence", + "action": "a small group jumps onto a stage platform, performing sharp hip isolations and head whips, while the floor group mirrors their moves below.", + "camera": [ + "front wide capturing both levels", + "low upward shot emphasizing stage", + "side pan across mirrored groups", + "rear wide with flashing strobes", + "close-up on head whips" + ] + }, + { + "cutId": 5, + "pose": "club finale", + "action": "all dancers throw arms outward, then freeze mid-motion with lights flashing behind them, holding strong poses as if paused in time.", + "camera": [ + "front wide capturing freeze", + "rear silhouette with strobes", + "low close-up on arms extended", + "side dolly across group", + "drone overhead establishing finale" + ] + } + ] + }, + { + "sceneId": 17, + "time": "Day", + "location": "Street parade with colorful flags and drums", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "marching line", + "action": "the dancers march in sync with drummers, swinging hips and waving flags while stepping high in rhythm down the street.", + "camera": [ + "front wide showing parade movement", + "side dolly along marching line", + "close-up on waving flags", + "rear wide capturing crowd", + "drone overhead following street" + ] + }, + { + "cutId": 2, + "pose": "circle in street", + "action": "the dancers form a circle around a drummer, stomping feet heavily and clapping above their heads to build energy as the beat speeds up.", + "camera": [ + "front medium on drummer center", + "overhead drone capturing circle", + "low close-up on stomping feet", + "side pan following claps", + "rear wide showing cheering crowd" + ] + }, + { + "cutId": 3, + "pose": "partner lifts", + "action": "pairs spin and then one partner lifts the other briefly, twirling before lowering back to the ground in sync with the music.", + "camera": [ + "front close-up on lifts", + "low angle emphasizing spins", + "side dolly across pairs", + "rear tilt showing flags in background", + "wide establishing street" + ] + }, + { + "cutId": 4, + "pose": "group wave", + "action": "the group extends arms outward, swaying side to side while stepping back and forth; their clothes and accessories ripple like a living wave.", + "camera": [ + "front wide capturing sway", + "close-up on rippling fabrics", + "side pan following movement", + "rear wide with crowd backdrop", + "drone overhead wave effect" + ] + }, + { + "cutId": 5, + "pose": "parade finale", + "action": "the dancers form a V-shape, marching toward the camera with arms swinging high, ending in a loud stomp as confetti rains from above.", + "camera": [ + "front slow-motion stomp capture", + "low close-up on swinging arms", + "rear wide with confetti falling", + "side dolly along V formation", + "drone wide overhead finale" + ] + } + ] + }, + { + "sceneId": 18, + "time": "Evening", + "location": "Grand ballroom with chandeliers and golden décor", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "waltz line", + "action": "dancers pair up, gliding in a modern waltz across the ballroom floor, spinning with flowing gowns catching the golden light.", + "camera": [ + "front wide showing ballroom depth", + "low close-up on gown hems spinning", + "side dolly following pairs", + "rear wide with chandelier glow", + "drone tilt down capturing formations" + ] + }, + { + "cutId": 2, + "pose": "center lift", + "action": "a lead dancer lifts their partner dramatically in the center, while the group around them spins in smaller circles, creating layered motion.", + "camera": [ + "front medium on lifted pair", + "low upward shot emphasizing lift", + "wide capturing layered spins", + "rear tilt showing chandelier overhead", + "circle dolly around center lift" + ] + }, + { + "cutId": 3, + "pose": "line spin", + "action": "the group lines up, holding hands and spinning outward in waves, skirts flaring in perfect symmetry across the ballroom.", + "camera": [ + "overhead drone capturing symmetry", + "front wide showing outward spins", + "close-up on skirts flaring", + "rear wide capturing line of dancers", + "side dolly along spinning wave" + ] + }, + { + "cutId": 4, + "pose": "mirror choreography", + "action": "two rows face each other and perform mirrored spins, dipping low and rising together in a dramatic mirrored reflection.", + "camera": [ + "front wide showing symmetry", + "side pan across both rows", + "close-up on dipping moves", + "rear tilt capturing chandelier light", + "drone top-down of mirrored motion" + ] + }, + { + "cutId": 5, + "pose": "ballroom finale", + "action": "all dancers join hands in a circle, rising onto tiptoes with arms extended upward, freezing in a radiant pose beneath the chandeliers.", + "camera": [ + "front wide capturing circle", + "rear silhouette under golden lights", + "close-up on upward arms", + "side dolly around circle", + "drone upward pull revealing ballroom" + ] + } + ] + }, + { + "sceneId": 19, + "time": "Night", + "location": "Bonfire beach with glowing flames and waves", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "circle around fire", + "action": "the dancers move in a circle around the bonfire, stomping rhythmically and clapping above their heads as sparks fly into the night sky.", + "camera": [ + "front wide capturing fire and circle", + "rear silhouette against flames", + "close-up on clapping hands", + "side handheld circling group", + "drone top-down view with glowing fire" + ] + }, + { + "cutId": 2, + "pose": "duo freestyle", + "action": "two dancers freestyle in the firelight, performing spins and body rolls while the group chants and claps rhythmically around them.", + "camera": [ + "front medium on duo", + "circle handheld around freestyle", + "close-up on rolling shoulders", + "rear wide with fire backdrop", + "drone wide showing whole beach" + ] + }, + { + "cutId": 3, + "pose": "group wave", + "action": "the dancers extend arms outward and sway in slow waves, hips rolling as flames cast long shadows across the sand.", + "camera": [ + "front wide showing wave motion", + "side dolly following hip rolls", + "close-up on arms swaying", + "rear tilt capturing shadows", + "drone overhead with wave pattern" + ] + }, + { + "cutId": 4, + "pose": "jump sequence", + "action": "the group leaps together around the fire, landing with heavy stomps that send sand flying as their silhouettes flash against the flames.", + "camera": [ + "slow-motion front capturing leaps", + "low close-up on sand scattering", + "rear wide firelit backdrop", + "side pan following landings", + "drone wide establishing circle" + ] + }, + { + "cutId": 5, + "pose": "beach finale", + "action": "all dancers hold hands in a wide circle, leaning back dramatically while raising one leg, freezing mid-motion as the fire roars in the center.", + "camera": [ + "front wide capturing dramatic lean", + "close-up on linked hands", + "rear wide with firelight glow", + "side handheld circling finale", + "drone overhead frozen circle" + ] + } + ] + }, + { + "sceneId": 20, + "time": "Night", + "location": "Stadium stage with massive crowd and fireworks", + "outfit": "casua oversidedl, skirt and dress, ", + "cuts": [ + { + "cutId": 1, + "pose": "line formation center stage", + "action": "the dancers stomp in sync, arms pumping upward with fireworks bursting behind them, creating a dramatic opening sequence.", + "camera": [ + "front wide capturing full stage", + "rear wide showing fireworks", + "close-up on stomping boots", + "low angle emphasizing arm pumps", + "drone high above stadium" + ] + }, + { + "cutId": 2, + "pose": "duo spotlight", + "action": "two lead dancers step forward, spinning in sync and striking strong poses, while the group behind claps and stomps in rhythm.", + "camera": [ + "front close-up on duo spins", + "circle dolly around spotlight", + "rear wide with cheering crowd", + "side pan capturing group claps", + "drone wide overhead" + ] + }, + { + "cutId": 3, + "pose": "rows marching", + "action": "the group marches forward in three rows, stomping feet in sync and swinging arms high, moving closer to the audience with each beat.", + "camera": [ + "front slow-motion capturing march", + "low close-up on synchronized feet", + "rear wide showing massive crowd", + "side dolly following rows", + "drone tilt capturing stage depth" + ] + }, + { + "cutId": 4, + "pose": "circle burst", + "action": "the dancers form a tight circle, then burst outward with spins and jumps, landing in scattered poses across the stage.", + "camera": [ + "overhead drone capturing burst", + "front wide showing scattered dancers", + "low angle emphasizing jumps", + "rear tilt with crowd reaction", + "side handheld circling group" + ] + }, + { + "cutId": 5, + "pose": "stadium finale", + "action": "all dancers converge in a massive V-shape, stomping forward as fireworks explode above, ending in a frozen pose with arms raised high toward the crowd.", + "camera": [ + "front wide capturing V formation", + "rear silhouette with fireworks", + "close-up on raised arms", + "low angle emphasizing finale", + "drone wide pull-out above stadium" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/musicspot_generator/videos.ts b/src/musicspot_generator/videos.ts index ac32135..b3cb0de 100644 --- a/src/musicspot_generator/videos.ts +++ b/src/musicspot_generator/videos.ts @@ -42,8 +42,8 @@ interface Server { name: string; } -const DEFAULT_SIZE: Size = { width: 720, height: 1280 }; -const FOLDER = process.argv[2] || process.env.MUSICSPOT_FOLDER || 'zagreb'; +const DEFAULT_SIZE: Size = { width: 1280, height: 720 }; +const FOLDER = process.argv[2] || process.env.MUSICSPOT_FOLDER || 'infinitydance'; const FOLDER_SAFE = FOLDER.replace(/[/\\?%*:|"<>]/g, '_'); const GENERATED_DIR = path.resolve('generated'); @@ -234,7 +234,7 @@ async function main() { serverForVideo.baseUrl!, serverForVideo.outputDir!, DEFAULT_SIZE, - false, + true, true );