Repository navigation
Releases: farhan-syah/motion-video-skill
Releases · farhan-syah/motion-video-skill
Release list
v1.7.0
Added
references/delivery.md, Listing text and covers: one text file per video, a series title form, two hashtag lists, chapters, and one cover template for a series. It names the vertical safe zones and how to split a long film into standalone parts.templates/timeline.mjs,templates/words.jsandtemplates/subtitles.mjs: scene timing from the narration's words, theat()anddata-wanchors, SRT and VTT files, and YouTube chapter lines. Seereferences/narration.md, Scenes that follow the narration.video.json"outDir": the output folder, relative to the manifest, defaultout. Several manifests can share one project directory, each with its own frame cache, check stamp and outputs. The defaultoutputis<outDir>/video.mp4.
Changed
render --draftwritesout/draft.mp4, never the master. The thumbnail and the compressed copy come from a full render only.checkkeeps text in a 9:16 frame clear of the platform bands: the top 170 px and bottom 480 px of 1920.templates/ui.csslifts captions to 28% from the bottom in a tall frame, clear of the platform bands.SKILL.mdpicks the platform output in Direct (step 4), not at Deliver.- The sound system moved from
references/building.mdtoreferences/sound.md. Each duplicated rule has one owner file, andSKILL.mdkeeps routing only. templates/tts-elevenlabs.mjsneedsELEVEN_VOICE, pauses 0.8 s at a blank line likespeak, and keeps no project name in its messages.
Fixed
references/delivery.mdsaid the-compressed.mp4copy is 1080p. It keeps the master's size.
v1.6.0
Added
render --capture png|jpeg: JPEG q92 frames in a full-quality render. About 35% faster than PNG, files about 50% larger. Defaultpng.references/delivery.md: the output per platform (ratio, size, fps, upload copy), YouTube 1440p and HEVC rules, and screen recording for footage.SKILL.mdasks for the platform and for captions, and routes to it.references/tts/elevenlabs.mdandtemplates/tts-elevenlabs.mjs: ElevenLabs narration as one cached take per piece, with exact silence, a section pause, fades, a tail-level retry, andeleven_v4as the default model. It records the breath finding foreleven_multilingual_v2.references/narration.md, Joining takes: exact silence, a pause at section changes, fades, tail checks and ear punctuation for any engine that gives separate takes. Captions are asked first and left out of text-heavy videos.references/direction.md, Teaching films: aspirational tone, one worked example, no disclaimer framing, spoken-name and copy audits.references/building.md, Frame determinism: fixes for "Pixels change on real time".
Changed
renderruns one Chromium per worker, not one for all pages. One Chromium serialises screenshot encoding, so PNG capture stayed near 15 fps at any page count. Measured on a 24-thread machine at 2560x1440: 8 pages in one browser 14.7 fps, 8 browsers 56.7, 12 browsers 68.1. The default--jobscap rises from 8 to 12.
Fixed
render --scaleproduced frames at the manifest size. The capture clip now carries the scale, so--scale 1.3333334gives 2560x1440.
v1.5.0
Added
checkwarns when a visible element in scene 1 is still entering at frame 0, the thumbnail, and names how far through its entrance it is. It reads each animation's computed timing, so a custom--in-durand a stagger count.speakwarns when it designs a voice from an opening of fewer than 25 words: the reference is short and holds the voice loosely.- The setup notes say when
uvis needed: only for the skill's Python runner, which runs VoxCPM2 without a CUDAblazrand--modelvoices with PyTorch-only weights.
Changed
- The scene template starts its hero and HUD line a full entrance early (
--t: calc(-1 * var(--in-dur, var(--dur-in)))), so frame 0 of the opening scene shows them at rest. Later scenes keep-0.2s, which cuts mid-entrance. - The palette is written once, in
:rootofbase.css(and--surfaceand--on-accentinui.css), dark or light.class="light"switches only grain and surface shadows. The old light values wait in a comment as a ready light palette. A scene that relied onclass="light"for its colors must paste that palette into:root. checktests each cue's sound against the narration over the windowauditmeasures: from its start, lead-in included, over its first 80-300 ms. Typing cues and each container accent are tested too. One shared function sets the window for both commands.<skill-dir>is defined once: the absolute path of the directorySKILL.mdloaded from.- The speech check summary counts the parts marked
ok ?, with their part numbers and kinds. It no longer says every phrase was heard back as written when some need a listen. The exit code stays 0. - A VoxCPM2 stray pause advises
--reroll, not a comma: any edit to the text draws the whole part again. Each stray pause counts against a take, so retries and re-rolls keep the take with fewer. speakandtranscriberun inblazr(https://github.com/ml-rust/blazr) when version 0.1.2 or newer, built with theaudiofeature, is installed. Flags, outputs and exit codes stay the same. The config key"blazr"names the binary, and"blazr": falseturns it off. A configuredblazrthat cannot run the command is an error. Whenblazris missing, too old, or exits 3, the skill's own runner speaks or transcribes as before. With a CUDAblazr, VoxCPM2 needs nouv.- The developer sound review runs in
blazr sound-review <dir> [--no-model], with nouvor PyTorch.scripts/dev/sound-review.pystays. building.mdsays what--out-tcounts: seconds from the scene's start, the clock--tuses. An exit still running at the cut is cut mid-way, since the next scene and the end card open on their own frame 0.- The workflow step that runs
initsays it writes a placeholderscenes/01-hook.htmland a one-scenevideo.jsonto replace. narration.mdsends a doubtful name in a VoxCPM2 take to--rerollfirst, up to 3 times. A spoken form draws the whole part again, so it comes only when the re-rolls still miss the name.
Fixed
- A plain
.tiledraws its icon in--tile-ink,--on-accentby default, so the icon reads on the accent of a dark or a light palette. A brand--tilesets its own--tile-ink. cli.mdand--helpmatch whatrenderdoes: a render of the whole video, draft or not, runsauditand writesout/sheet.png,out/thumbnail.pngandout/stems/. Only a non-draft render writes the compressed copy.SKILL.mdno longer sends a render's review to a secondauditrun:renderalready ran it. A sound-only fix needsrenderagain.tts.mdno longer says every Hugging Face model needsuv. Only PyTorch-only weights do.- The near-empty-opening advice in
checkno longer pushes scene 1 to a mid-entrance frame 0. checkno longer crashes on text over acolor-mix()fill, such as the default card. It reads every computed color as sRGB.render --sceneon a one-scene video runsauditand writesout/sheet.png, as a render of the whole video does.checkno longer reports caption words in a.hudas screen text that drifts with the camera. It matched text across frames by its place in the page, and each caption line replaces its words, so it compared different words, some mid-pop. A caption track is one box now, measured by the block that holds it, and every text element keeps its own track across frames..chiptext mixes its color with--fg, not black, so it passes the contrast rule on the dark and the light palette..tile.softtints toward--bgand--fgthe same way: on the dark palette its icon was light gray on near-white.- A caption line that shows at video time 0 opens at rest, so frame 0, the thumbnail, never shows it dim mid-pop. A project made earlier keeps its own
motion.js: copy the template's over it.
v1.4.1
Fixed
- VoxCPM2 takes its pace from the reference alone. The guide,
narration.mdand the pace line no longer suggest pace words in--styleor a note: on top of the slow reference they skewed the voice and dragged words out. A take outside the range needs another reference or--seed.
v1.4.0
Added
checkwarns when a text's outline is nearly its fill's color, which fills in the letters.speakpolishes a generated voice: loudness evened per sentence, gentle compression, de-essing, then the whole voice normalized to a -1 dB peak. It never changes the pace.--rawskips it.renderwrites each audio layer toout/stems/: voice, music and effects, as they sit in the mix.speak --hificlones VoxCPM2 from the reference and its exact transcript. A designed voice saves the words it was designed on.speak --written FILEpairs the ear script with a written one. The voice speaks the ear script's pauses. Captions andtranscribeshow the written script's punctuation. Scripts whose words differ stopspeakbefore any audio, with exit code 2.
Changed
- Before VoxCPM2 clones a reference, the breaths in its pauses are turned down by 20 dB, a thin reference's bass is lifted, and the reference is compressed gently, then normalized to a -1 dB peak. Clones no longer take on a breathy manner. A user's recording is cloned from a copy, and the recording is never changed. A voice
speakprepared itself, passed back as--reference, is used as it is. - A designed VoxCPM2 voice speaks its opening again, calm and natural at a slow pace, and that becomes the reference. Clones follow the reference's pace and manner. The first design stays in the cache as
voice-<key>.design.wav. - VoxCPM2 is never time-stretched:
--speedandtts.speedare ignored for it, with a warning. The pace line points to--styleand every delivery note. A stretch turned the voice's faint crackle in an "s" into audible static. - VoxCPM2 speaks the whole script as one take (a line with a delivery note is its own take, and a script over 700 words splits), then sets the silence at each blank line and
[pause]mark. A failing take is spoken again by beats, then by sentences. - VoxCPM2 phrase spans are per sentence.
- The pitch-swing check runs per sentence and skips questions, sentences under 0.8 s of voicing and octave errors.
narration.mdcovers punctuating a script for the ear, with before-and-after examples of where a spoken sentence breathes.- How long each punctuation mark pauses is documented per engine, measured on VoxCPM2 and Kokoro. A script for text to speech is written after reading the engine's guide.
speak --reviewflags a missing breath after an opening word, sentences of 9 words or more with no breath, and with VoxCPM2 a question without its own line and delivery note.narration.mdlists the devices spoken narration uses.- The VoxCPM2 guide states how delivery notes behave and what makes a read flat or expressive, with a directed example.
--reroll: a fresh take that passes as well as the earlier one replaces it.speak'sok ?lines name the part number--rerolltakes.
Fixed
- The docs and cloning guidance name the voice that can be cloned: the user's own, or one they have consent to use.
- A dash or ellipsis standing alone counts as a break in the stray-pause check.
- VoxCPM2 repairs a click or a thump in a take in place instead of speaking the take again. A click left after the repair is marked
ok ?. A designed voice's reference is repaired the same way. - The click check counts only a spike in a pause. Inside speech it had flagged /t/ bursts as clicks.
v1.3.0
Added
speakflags a VoxCPM2 part whose pitch swings far above the voice's usual pitch.{written|spoken}script syntax: captions show the written form, and the voice says the spoken form.doctorsays when a sandbox may hide the browser and the GPU.speak --reviewlists what a voice is likely to misread in a script, before any audio.speakprints the same review first.speakflags a pause where the script has no break.- The sound intent error names the intents the sound fits and the sounds that fit the intent.
Changed
- The VoxCPM2 guide states how delivery notes and energy words change the voice.
- Palette rules name where a generated palette drifts, and ask for three candidate palettes before choosing one.
Fixed
narration.mdstates the file namestranscribewrites.transcribedrops words a recognizer invents in digital silence.- The audit measures an appearance over the element's whole box, so text scaling into place no longer marks a correctly placed sound as early.
- The palette guidance no longer gives genre example palettes.
Full changelog: v1.2.0...v1.3.0
v1.2.0
Added
speak --stylesets the VoxCPM2 delivery for the whole script.- Delivery notes at the start of a script line set the VoxCPM2 delivery for that line.
- VoxCPM2 non-verbal tags (
[laughing],[sigh]and the other recommended tags) in scripts. speak --cfgand--stepsfor VoxCPM2.speak --paceand thetts.paceconfig key set the pace target.speakwrites the designed VoxCPM2 voice to<out>.voice.wav.speakde-esses generated speech.- Engine guides in
references/tts/: VoxCPM2, Kokoro, Hugging Face models and the user's own TTS. doctorwarns when free GPU memory is under 8 GB.renderwrites frame 0 asout/thumbnail.png.speakreports how much de-essing it applied.- Direction and craft rules for the opening: the subject is named in the first 3 s, and frame 0 works as a thumbnail.
Changed
speakpicks the best engine the machine runs when none is named: VoxCPM2 with an NVIDIA GPU of 8 GB anduv, else Kokoro.- VoxCPM2 designs one reference voice from the script's opening, then speaks one beat per generation.
- A VoxCPM2 voice is reused across
speakcalls with the same--voice,--seedand--language. voiceover.takes.jsonrecords the voice's seed. A later run without--seedkeeps the voice and its takes.- VoxCPM2 defaults to cfg 1.6 and 16 steps.
- Pace target is 4.1 syllables per second, with a range of 3.5 to 4.7.
- Pace is measured over sounding speech only.
references/tts.mdcovers only what applies to every engine.- A word both recognizers miss is marked
ok ?. - Narrated mixes always reach the loudness target.
speakexplains a VoxCPM2 out-of-memory stop.- A VoxCPM2 part's first seed comes from its text, not its position.
--scene Nmatches the number a scene's file name starts with.
Removed
- MMS-TTS recommendations in
doctor,speakand the docs: its license bars commercial use.
Fixed
- Numbers such as "eleven hundred" read as 1100 in the speech check.
- Data units (GB, MB, GHz) match their spoken words in the speech check.
- Words the recognizer splits apart rejoin in the speech check.
- Hard consonants no longer count as clicks.
- The audit judges an appearance sound by the element's fastest change, not by glyph movement.
Full changelog: v1.1.0...v1.2.0