Filmeditorn i guiden är en mapp med en datafil per film, en motor som ritar scenerna och regler som Claude Code följer. Du drar inga klipp på en tidslinje. Claude Code arbetar med filerna i en mapp på din dator (Claude Code, översikt), och det räcker för att gå från manus till färdig film. Motorn är en skill i Claude Code, och med den gör jag annonsfilm i StoryLens.
Steg 1: Avgränsa filmen så att scenerna följer rösten
Bestäm först vad rösten ska säga, mening för mening, och låt varje scen visa just det. Mitt första försök var en annonsfilm till en Performance Max-grupp, byggd som ett bildspel av färdiga annonsbilder med zoom och skjutövergångar, och jag kallade den osammanhängande och pinsam. Filmen som godkändes hade scener byggda för det rösten säger, och storyboarden kommenterade jag innan något renderades.
Steg 2: Skriv filmen som data
Varje film är en JSON-fil: scenerna i ordning med mall, speaktext och text i bild, ett tema med färger, typsnitt och logga, och layouten per format. Min motor har nio scenmallar, och ingenting om en kund står i motorn. Nästa film får nya färger och texter i sin egen fil.
Låt texten i bild säga samma sak som rösten i samma stund, fast kortare. Skriv speaktexten i hela meningar, eftersom tidsättningen i steg 4 räknar meningar, och variera mallarna mellan filmerna i en kampanj.
Steg 3: Gör röst och musik i ElevenLabs
Koppla ElevenLabs som MCP-server i Claude Code, så kan Claude beställa röst och musik direkt från sessionen (Claude Code och MCP). Använd ElevenLabs officiella server på api.elevenlabs.io/v1/mcp, eftersom den lokala versionen på GitHub är arkiverad (elevenlabs-mcp på GitHub).
Godkänn texten innan något genereras, eftersom röst och musik kostar krediter och varje ändrad mening kräver en ny tagning. Rösten gör jag med Multilingual v2, som har svenska bland sina språk (ElevenLabs, modeller).
Musiken beställer jag med force_instrumental, som garanterar att den blir instrumental, och med music_length_ms nära filmens längd. API:t tar 3 000 till 600 000 millisekunder (ElevenLabs, Compose music).
Steg 4: Tidsätt scenerna efter rösten
ffmpegs filter silencedetect loggar när ljudnivån ligger på eller under en tröskel i minst en viss tid, som standard -60 dB i 2 sekunder (ffmpeg, silencedetect). Min motor letar efter tystnad på minst 0,12 sekunder under -30 dB. De längsta pauserna blir meningsgränser, och antalet ska stämma med manuset. Stämmer det inte justerar du trösklarna och mäter igen, och hjälper inte det är tagningen fel.
Scenbytet läggs 0,1 sekunder före nästa menings första ord, och slutskylten står kvar 0,7 sekunder efter sista ordet. Värdena kalibrerade jag mot pilotfilmen som godkändes.
Steg 5: Godkänn en storyboard innan något renderas
Motorn bygger en canvas i Claude Design med en artboard per scen och format. Där kommenterar jag direkt på elementen och ändrar färg, typsnitt och text med reglage som Claude lägger till (Anthropic om Claude Design), och ändringarna läses tillbaka in i filmens JSON-fil. Filmen i rörelse med ljud skrubbar jag i en förhandsvisning i Hyperframes, HeyGens öppna ramverk som gör HTML till video med headless Chrome och FFmpeg (Hyperframes på GitHub).
Bygg in en grind före renderingen. Min motor vägrar rendera innan storyboarden är godkänd för exakt det innehåll som ska renderas. Godkännandet sparas med ett fingeravtryck av filmens fil, bilderna och tiderna, och ändras något efteråt krävs ett nytt ok, som bara jag ger i chatten.
Steg 6: Ge varje element sin egen rörelse
Rubrikerna i min motor reser sig rad för rad bakom en mask, bockarna kommer in från vänster, produktbilden lägger sig från lätt förstorad och en bild över hela rutan öppnas som en slutare, och ingenting studsar. Scenbytet väljer du per scen bland glid, klipp, mask och tona. Högst en scen per film får en signaturrörelse, en större och längre variant av scenens huvudelement.
Skriv reglerna som en kontroll som Claude kan köra. Anthropic råder dig att ge Claude ett sätt att kontrollera sitt eget arbete (Anthropics tips för Claude Code). Min kontroll varnar när fyra eller fler elementtyper har samma rörelse, tid och kurva, när alla scenbyten är av samma typ och när fler än en scen har signatur. En kurva som slår över ger stopp.
Steg 7: Rendera i tre format och kontrollera
Google tar emot Performance Max-video i 16:9, 1:1 och 9:16, med 1920x1080, 1080x1080 och 1080x1920 som rekommenderad storlek, och rekommenderar en längd på 10 sekunder eller mer. Upp till 15 videor får ligga i en tillgångsgrupp, och ljudfiler godtas inte (Google Ads hjälp om videotillgångar i Performance Max).
Min motor renderar alla tre formaten. Varje ruta fotas i headless Chrome med animationerna pausade på rätt tid, ffmpeg kodar mp4-filen och ljudet masteras till -14 LUFS, som är mitt eget mål. Före renderingen stoppar layoutkontrollen text på bakgrundsbandet eller närmare det än 1 procent av bildens kortsida, text som krockar och färgpar med för låg kontrast. Efteråt tas kontrollrutor ut ur mp4-filen, och en faktagranskare läser text, siffror och ljud före leverans. Motorn har 180 tester i version 1.6.1 och laddar inte upp något åt dig.
Steg 8: Börja med prompten
Prompten nedan är en startpunkt för en första version av motorn. Den börjar i kontrollerna, eftersom flera av felen i min egen motor syntes först när något mättes eller när jag tittade på en bild. Med ffmpegs standardkodning fick färgerna upp till 19 nivåers fel när filmen visades i Chrome, och loudnorm i ett pass lade ljudet 1 LU för lågt. Text som låg på bakgrundsbandet ringade jag in på storyboarden, och sedan dess stoppar layoutkontrollen den. Därför bygger prompten en scen hela vägen först, medan ett fel bara finns på ett ställe.
Bygg en filmeditor i den här mappen. Intervjua mig först och
skriv en kort SPEC.md: format, längd, färger, typsnitt, logga,
röst och vad filmen får lova. Vänta på mitt ok.
Skriv kontrollerna före funktionerna och kör dem efter varje
ändring: ffprobe för storlek och längd, ebur128 för ljudnivån
efter kodningen, en kontaktkarta med en ruta var 0,1 sekund
runt varje scenbyte och en layoutkontroll som stoppar text på
bakgrundsbandet eller under läsbar storlek.
Bygg sedan en enda scen hela vägen innan något annat: tre
sekunder i 9:16, från film.json till mp4. film.json har scener
(mall, speaktext, text i bild), tema och layout per format. En
Python-motor ritar varje scen som HTML och CSS, fotar rutorna
i headless Chrome med pausade animationer och kodar mp4 med
ffmpeg och BT.709-taggar.
Röst och musik kommer från ElevenLabs, och jag lägger dem i
mappen. Mät meningarna med ffmpeg silencedetect, kontrollera
att antalet stämmer med manuset och lägg scenbytena strax före
varje menings första ord. Transkribera rösten och jämför med
manuset.
Bygg en storyboard med en bild per scen och format och vänta
på mitt ok före rendering. Ge varje elementtyp en egen
rörelse, låt inget studsa och låt högst en scen ha en
signaturrörelse. Läs plattformens formatsida live innan du
bestämmer format och längd. Visa utskrifterna och rutorna som
bevis när du rapporterar att något är klart.
Det tar flera varv innan motorn ritar det du vill ha. Min egen gick från version 1.0 till 1.6.1 mellan 15 och 17 oktober.
Mejla mig så skickar jag skillen
Claude skriver utkastet ur det jag arbetat med under veckan, och jag läser och godkänner varje inlägg innan det publiceras.