Skip to content

cinetic v1.0.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 23:46

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, and palette.py builds and checks the palette in OKLCH. A brand you supply always wins.
  • One beat grid for picture, sound and QA. src/timeline.ts holds FPS, BPM, b(bar, beat, sub), acts, cues and copy, and grid-check.ts checks it. Starters for Remotion 4 (React, the default) and HyperFrames (HTML and GSAP) are scaffolded by new-film.sh, which also copies every script into the project.
  • Sound computed from the picture. export-cues.ts takes sync frames from the same springs and eases as the picture. score.py synthesizes a tuned score and effects with stems, and master.py masters 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.py holds true peak at or under −1 dBTP after encoding.
  • Finishing. render.sh makes previews, sharp masters and motion-blurred masters. With --blur, measure-speed.py reads on-screen speed with optical flow and picks the sub-frames per frame, and accumulate.py averages them in float and quantizes once to BT.709 yuv420p, dithering only smooth ramps. --budget caps the cost and --10bit writes a High 10 master. probe.py and check-sync.py gate every file.
  • Measured review. lint-film.mjs and layout-audit.sh (safe zones including 9:16 feed presets, covered text, text speed) run while you build. forensics.py checks pops, stalls, holds, ghosts, borders, judder, banding, compression smear, hook energy and loop seams. av-audit.py checks 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.mjs and palette.py enforce the bans, and regression tests cover both. A supplied brand is recorded in BRIEF.md, and a cinetic: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.sh writes 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 in qa/. For an invented brand, brand-kit.sh exports 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 --speed it 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-speed sets the limit. It is on by default with --cues, and --no-speed turns it off. The Step 4 gate and review-loop.md use the same limit.
  • av-audit.py warns 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 as visual.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.md documents it.
  • Claude Code plugin marketplace (.claude-plugin/marketplace.json and plugin.json), MIT license, and license and compatibility fields 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.skill on each version tag, checks that plugin.json matches 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.md adds "Scale each sound to its cause": a caret blink or small tick sits 12-18 dB under the landing hit, set through each event's weight in src/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 with outline-text.py, and only the feature that carries the idea changes, so it matches the font's stroke weight, terminals and curve tension.