Repository navigation
cinetic v1.0.0
cinetic is an agent skill that has your coding agent direct, score and render short films from code: launch films and teasers, product and feature videos, looping feature animations, logo stings, UI walkthroughs and social cut-downs. One beat grid in timeline.ts drives the picture, a synthesized soundtrack and the QA scripts, and a film counts as done only after its render has been measured and reviewed.
Install it with the skills CLI (npx skills add Leonxlnx/cinetic), or in Claude Code with /plugin marketplace add Leonxlnx/cinetic followed by /plugin install cinetic@cinetic. To install by hand, download cinetic.skill from the release page (a zip whose top folder is cinetic/; the four demo films are attached next to it) and unzip it into ~/.claude/skills/.
Changes since 0.5.0 are listed under Added and Changed below. The rule and check changes come from the fifth evaluation round, which tested 0.5.0 against the same agent working without cinetic but with the official Remotion agent skills. In that round the cinetic runs met 54 of 56 written expectations (96%) against 41 of 56 (73%), won 2 of 4 blind comparisons with a neutral judge, and won 4 of 4 with a second blind judge applying the house style guide (the hard bans). The neutral judge's remaining craft points, such as quiet stretches, end cards without a descriptor and a loud sound on a still frame, fed the new rules. The plugin manifests, the license and CI were added for the public release. 1.0.0 itself has not been through a separate blind round; see the evaluation for the method and every round.
Highlights
- A directed workflow from brief to delivery. Steps 0 to 8 each write a file, every gate is a check you run, and the review loop ends at the ship gate. The concept step writes three concepts through different lenses, runs the ownership, deletion, specificity and feature-word tests, picks one story device the film owns, and writes a treatment with a beat sheet. Stings, loops and short clips take a scaled-down path.
- A brand built from three personality adjectives. They set the typeface (vendored with
add-font.mjs), the stage, the accent and the motion character. Marks are explored on a sheet of 6-10 directions with a 64 px misread test, lockups are compared in three settings, andpalette.pybuilds and checks the palette in OKLCH. A brand you supply always wins. - One beat grid for picture, sound and QA.
src/timeline.tsholds FPS, BPM,b(bar, beat, sub), acts, cues and copy, andgrid-check.tschecks it. Starters for Remotion 4 (React, the default) and HyperFrames (HTML and GSAP) are scaffolded bynew-film.sh, which also copies every script into the project. - Sound computed from the picture.
export-cues.tstakes sync frames from the same springs and eases as the picture.score.pysynthesizes a tuned score and effects with stems, andmaster.pymasters to −14 LUFS (−16 for calm brands and short stings) with true peak at or under −1.5 dBTP on the WAV and a 3 ms fade-in at sample 0.check-sync.pyholds true peak at or under −1 dBTP after encoding. - Finishing.
render.shmakes previews, sharp masters and motion-blurred masters. With--blur,measure-speed.pyreads on-screen speed with optical flow and picks the sub-frames per frame, andaccumulate.pyaverages them in float and quantizes once to BT.709 yuv420p, dithering only smooth ramps.--budgetcaps the cost and--10bitwrites a High 10 master.probe.pyandcheck-sync.pygate every file. - Measured review.
lint-film.mjsandlayout-audit.sh(safe zones including 9:16 feed presets, covered text, text speed) run while you build.forensics.pychecks pops, stalls, holds, ghosts, borders, judder, banding, compression smear, hook energy and loop seams.av-audit.pychecks onsets against cues per stem, whoosh apexes, the loudness target, a click at the head and loud sounds on a still picture. Contact sheets (sheet.py) feed five critic prompts, and a ship gate on an 11-dimension rubric decides when a film is done. - Hard bans against the generated look. No eyebrow labels, stacked taglines or filler text; no serif or italic; no orange, amber, beige or cream; no neon or glow; no purple, violet or indigo, and no multi-hue gradients; no glassmorphism, emoji, sparkles, particles or confetti; no bouncy overshoot except on a true landing.
lint-film.mjsandpalette.pyenforce the bans, and regression tests cover both. A supplied brand is recorded inBRIEF.md, and acinetic:brand-supplied <what>comment exempts its own line and the next, or the whole file when it sits in the file's leading comment. - Deliverables.
deliver.shwrites a poster from a clean still, MP4, WebM and GIF loops with a loop-seam check, ProRes 4444 alpha stings, 9:16 and 1:1 re-layouts (never crops of the master) and a manifest inqa/. For an invented brand,brand-kit.shexports SVG and PNG marks and lockups, favicons, an avatar and an X header. - Guides. 17 files in
references/cover concept, copy and type, brand and color, timing, motion tokens, camera, transitions, product UI, sound, finishing, Chromium rendering traps, both engines, formats, the review loop and a catalog of generated-look tells. A worked example follows Tessel, a 33 s launch film, from idea to master, including 15 mistakes and their fixes.
Added
- Text-speed check in
layout-audit.sh: with--speedit also renders the frame after each audited frame and fails readable text (effective opacity at least 0.5, at least the minimum size) whose center moves more than 20 px per frame (px/f), measured in a 1080 px tall frame.--max-text-speedsets the limit. It is on by default with--cues, and--no-speedturns it off. The Step 4 gate andreview-loop.mduse the same limit. av-audit.pywarns when a loud effect (within 6 dB of the loudest) lands on a picture that barely changes from 3 frames before it to 6 frames after, and lists these asvisual.still_hits.- Hook check in
forensics.py: a film over 6 s that starts at frame 0 and is not a loop gets a warning when its first 2 s move less than max(0.5, 0.5× the film's median 2 s window).review-loop.mddocuments it. - Claude Code plugin marketplace (
.claude-plugin/marketplace.jsonandplugin.json), MIT license, andlicenseandcompatibilityfields in the SKILL.md frontmatter. - CI checks the SKILL.md frontmatter and the JSON manifests, confirms the skills CLI discovers the skill, and runs the lint regression tests and Python and shell syntax checks. A release workflow packages
cinetic.skillon each version tag, checks thatplugin.jsonmatches the tag, and takes the release notes from CHANGELOG.md.
Changed
- Launch films and product videos end on a card that says what the product is in one short line under the name ("The build cache for CI.") when the brief gives no practical fact to carry. A bare name is for stings.
- When a gate flags a quiet stretch, the fix is motion, not a looser threshold.
- The master check covers the fastest frames of every act at full size, including the lockup's entrance and exit, where a sliding wordmark most often shows stepped copies. The fix is
measure-speed.py --floor a-b:n. - The Step 5 gate asks for each sound's loudness to match the size of its visible cause.
sound.mdadds "Scale each sound to its cause": a caret blink or small tick sits 12-18 dB under the landing hit, set through each event'sweightinsrc/sync.ts.product-ui.md: a changed digit rolls (a masked vertical slide) or cuts. Two numbers are never crossfaded in place, because the half-and-half frames read as a ghosted double image, worse after motion blur.brand-and-color.md: a letter redrawn inside a wordmark is traced from the typeface's own glyph withoutline-text.py, and only the feature that carries the idea changes, so it matches the font's stroke weight, terminals and curve tension.