The project's README from github.com/tugrawork-creator/saas-motion-kit. As one markdown file: README.md.
Promo and motion videos for software products, made with HyperFrames and Claude Code.
The one rule: no two films should feel like the same film. Don't repeat effects, transitions or components. Invent a new component for every film. Decide the message and the tone before you pick a single effect.
This kit trains that creative muscle. It combines a staged process, a component strategy, 100 visual themes, a 24-transition atlas and a variety audit that catches repetition in your storyboard before you build it.
Türkçe README → · Theme gallery → · Transition atlas → · Creative muscle → · Six films → · Example →
New: start from a real prompt. The exact prompt behind a finished 35 s mascot promo, plus a fill-in template and what happened at each gate.

tools/pick_themes.py shortlists gallery themes for a tone and an audience, and skips the ones you used in your last five films:python tools/pick_themes.py --tone playful --audience "developers" --history ~/.motion-ledger.json
tools/history_report.py turns your motion history into a one-page report: the transitions, entrances and eases you keep reaching for, and the atlas transitions and themes you have never tried. variety_audit.py --append now also takes --theme NNN, so the history knows which theme each film used.variety-audit.yml) audits every STORYBOARD.md on each push and pull request. A storyboard that repeats itself fails the check.creative/ is the new heart of the kit: seven questions to ask at every storyboard, a tone matrix ("I want to say ___ in a ___ tone") that maps tone to speed, eases, camera, colour, type, transitions and sound, the variety rules, and a component forge for inventing a new component in 15 minutes.tools/variety_audit.py reads the storyboard ledger and flags repeated transitions, entrances, eases, directions, uniform shot lengths, missing surprises, accent overuse, tone mismatches and missing new components. With --history it remembers your previous films, so you don't repeat your last three.examples/acme-suite-loop, and the new render is on the v1.1 release./saas-motion-video skill runs a creative pass gate before any build.
Every example in this repo uses Acme, a fictional company, and its fictional products. All numbers are invented.
| Path | What it is |
|---|---|
creative/ |
The creative muscle: the seven questions, tone matrix, variety rules, component forge and transition atlas |
playbook/ |
A 7-stage production playbook with a review gate at each stage |
components/ |
The clean-or-imaginary component rule: use the product's real UI when it is clean, otherwise design imaginary UI |
docs/ |
GitHub Pages: the 100-theme gallery (4 key frames, component kit, motion notes and references per theme) and the live transition atlas |
examples/six-films/ |
Same story, six films: one 12 s script built in six themes, each with its storyboard, ledger and new component, plus the shared brief |
examples/acme-suite-loop/ |
A complete HyperFrames project: a silent, seamless 40 s 3D booth loop, with its v1 → v2 variety-audit lesson |
.claude/skills/saas-motion-video/ |
A Claude Code skill that runs the whole process with you |
templates/ |
BRIEF.md, STORYBOARD.md and the theme-sheet template |
examples/prompts/ |
Real prompts that produced finished films, each with a fill-in template |
tools/ |
Variety audit, theme picker, history report, delivery (4K → 1080p/2K), loop-seam check, warm UI SFX synth, gallery builders |
.github/workflows/ |
The variety audit as a GitHub Action: every storyboard is checked on push and pull request |
1 Brief ──▶ 2 Components ──▶ 3 Theme ──▶ 4 Storyboard ──▶ 5 Build ──▶ 6 Sound ──▶ 7 Deliver
▲ gate ▲ gate ▲ gate ▲ gate ▲ gate ▲ gate ▲ gate
Each stage ends with a human decision. The agent does the production work; you bring taste at the gates. That split is what makes the result feel made by a person. See playbook/.
At stage 4 the creative pass is mandatory: write the message-and-tone sentence, fill the ledger, run python tools/variety_audit.py STORYBOARD.md, then fix the repeats or mark them as deliberate motif:s.
Promo videos for software live or die on the UI you show. The rule:
Details, a decision checklist and examples: components/.
The same 45-second story about the fictional Acme Pulse, an AI that watches product metrics and flags anomalies, is drawn in 100 different visual languages across 10 families:
| Family | Themes |
|---|---|
| Product UI as the stage | 001–010 |
| Typography & graphic systems | 011–020 |
| Material & 3D | 021–030 |
| Light, optics & texture | 031–040 |
| Metaphor concepts | 041–050 |
| Signature directions | 051–062 |
| Data storytelling | 063–072 |
| Characters & mascots | 073–082 |
| Art movements & eras | 083–092 |
| Camera & edit grammar | 093–100 |
Each sheet shows Hook → Reveal → Proof moment → CTA. It also lists six components, three motion techniques with timings, the risk to watch for, how to adapt the theme to your own product, and references. Open the gallery, pick two or three themes, and put them in your brief.
Requirements: Node.js 22+, ffmpeg, Claude Code. HyperFrames downloads its own headless Chrome.
Click Use this template on GitHub to start your own film repo with the audit Action already wired in, or clone the kit:
# 1. get the kit
git clone https://github.com/tugrawork-creator/saas-motion-kit && cd saas-motion-kit
# 2. install the HyperFrames skills for Claude Code (not vendored here)
npx skills add heygen-com/hyperframes
# 3. try the example
cd examples/acme-suite-loop
npx hyperframes preview # live preview in the Studio
npx hyperframes render --quality delivery --resolution landscape-4k --output renders/loop-2160.mp4
Then open Claude Code in the repo root and start a video:
/saas-motion-video Make a 45 s LinkedIn promo for https://your-product.com — theme 055 (Bento Grid), music-driven, no voiceover.
The skill walks you through the seven stages and stops at each gate.
Rendered MP4s are attached to the Releases page, so the repository stays small. The v1.2 release has the six films, their synced grid and the Acme v1/v2 comparison.
landscape-4k or square-4k, then downscale with Lanczos (tools/deliver.sh). Edges, text and 3D come out visibly cleaner than a native 1080p render.hf-seek, no Date.now(), no unseeded random.sin(2π·n·t/LOOP)), and verify the seam with tools/loop_check.py.latin-ext subsets locally. Built-in fallbacks silently lose glyphs such as ş, ğ and İ.text-transform: uppercase changes "i" into "İ". Type display text in uppercase yourself and set lang per word.tools/warm_sfx.py).docs/assets/fonts and examples/*/assets/fonts (Manrope, Instrument Serif, JetBrains Mono): SIL Open Font License 1.1, see LICENSES.npx skills add heygen-com/hyperframes.