{"slug":"cinetic","title":"cinetic","summary":"Direct, build and render premium cinematic motion design from code — launch films, product and feature videos, looping feature animations for landing pages and social, logo stings and reveals, UI walkthroughs, app demos, kinetic type, teasers, trailers, intros and promo clips. Us","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-19T20:29:39.788793Z","repo":{"url":"https://github.com/Leonxlnx/cinetic","stars":654,"forks":43,"license":"MIT","updatedAt":"2026-10-18T00:26:40Z"},"bodyHtml":"<h1>fonts/</h1>\n<p>Every face the film uses ships here as a local <code>.woff2</code>, declared with <code>@font-face</code> in the file that uses it (inside the <code>&lt;template&gt;</code> for an act in <code>compositions/</code>).</p>\n<p>Why local:</p>\n<ul>\n<li>HyperFrames embeds a small set of common families and silently aliases other well-known system names to one of them, so a family you name but don't ship can render as a different face with no warning.</li>\n<li>A hosted web-font link is fetched at build time and fails when the render runs offline.</li>\n<li><code>hyperframes lint</code> reports <code>font_family_without_font_face</code> for any family it cannot resolve.</li>\n</ul>\n<p>The starter uses one variable sans, Geist, as a stand-in: its <code>@font-face</code> block in <code>index.html</code> carries a <code>cinetic:placeholder</code> marker, and <code>lint-film.mjs</code> fails until you choose the family for this brand's personality (<code>references/brand-and-color.md</code> §2 in the skill) and delete the marker. <code>npm install</code> runs <code>setup.mjs</code>, which copies the face here from its <code>@fontsource-variable/*</code> package:</p>\n<pre><code>fonts/geist-latin-wght-normal.woff2   &lt;-  node_modules/@fontsource-variable/geist/files/\n</code></pre>\n<p>To swap the family, or to add a mono (for code or tabular numbers):</p>\n<ol>\n<li><code>npm i -D @fontsource-variable/schibsted-grotesk</code> (a sans from the table in <code>references/brand-and-color.md</code> §2, or the brand's package; the file is <code>files/&lt;name&gt;-latin-wght-normal.woff2</code>).</li>\n<li>Add a line to <code>COPIES</code> in <code>setup.mjs</code>, e.g. <code>['node_modules/@fontsource-variable/schibsted-grotesk/files/schibsted-grotesk-latin-wght-normal.woff2', 'fonts/schibsted-grotesk-latin-wght-normal.woff2']</code>, then run <code>node setup.mjs</code>.</li>\n<li>Add its <code>@font-face</code> block and use the family name literally in <code>font-family</code> (lint cannot see through <code>var(...)</code>).</li>\n</ol>\n<p>When <code>node_modules</code> is shared with other projects (<code>new-film.sh --link-modules</code>), <code>npm i</code> would write into that shared folder. Use <code>node scripts/add-font.mjs &lt;name&gt;</code> instead of steps 1–2: it fetches the package with <code>npm pack</code> into a temp folder, copies the upright latin and latin-ext <code>.woff2</code> files and the licence into <code>fonts/</code>, and prints the <code>@font-face</code> blocks for step 3.</p>\n<p>When you invent the look the family is a sans (serif and italic are hard bans). For brand-supplied fonts, which may be anything, convert them to <code>.woff2</code> (for example <code>fonttools ttLib.woff2 compress Brand.ttf</code>, which needs the <code>brotli</code> module) and put them here directly. A variable font needs one <code>@font-face</code> with a weight range (<code>font-weight: 100 900</code>); static fonts need one block per weight. Keep each family's licence file next to its fonts when you hand the project on.</p>\n<p><code>bash scripts/hf-finish.sh</code> refuses to render when an <code>@font-face</code> <code>url(...)</code> points at a missing file, because the fallback face would otherwise ship silently.</p>\n","files":[{"path":"assets/critics/art-copy-ui.md","sizeBytes":11340,"isText":true},{"path":"assets/critics/director.md","sizeBytes":10941,"isText":true},{"path":"assets/critics/forensics.md","sizeBytes":5880,"isText":true},{"path":"assets/critics/sound-sync.md","sizeBytes":12748,"isText":true},{"path":"assets/critics/verifier.md","sizeBytes":3986,"isText":true},{"path":"assets/hyperframes-starter/audio/kit.json","sizeBytes":6147,"isText":true},{"path":"assets/hyperframes-starter/audio/score.json","sizeBytes":576,"isText":true},{"path":"assets/hyperframes-starter/fonts/README.md","sizeBytes":2706,"isText":true},{"path":"assets/hyperframes-starter/index.html","sizeBytes":8044,"isText":false},{"path":"assets/hyperframes-starter/motion.js","sizeBytes":18443,"isText":true},{"path":"assets/hyperframes-starter/package.json","sizeBytes":1041,"isText":true},{"path":"assets/hyperframes-starter/setup.mjs","sizeBytes":1365,"isText":false},{"path":"assets/hyperframes-starter/timeline.js","sizeBytes":6968,"isText":true},{"path":"assets/library/techniques.json","sizeBytes":524625,"isText":true},{"path":"assets/remotion-starter/audio/kit.json","sizeBytes":6147,"isText":true},{"path":"assets/remotion-starter/audio/score.json","sizeBytes":653,"isText":true},{"path":"assets/remotion-starter/.gitignore","sizeBytes":83,"isText":false},{"path":"assets/remotion-starter/package.json","sizeBytes":1902,"isText":true},{"path":"assets/remotion-starter/public/audio/.gitkeep","sizeBytes":0,"isText":false},{"path":"assets/remotion-starter/remotion.config.ts","sizeBytes":2268,"isText":true},{"path":"assets/remotion-starter/src/acts/Act1.tsx","sizeBytes":5604,"isText":false},{"path":"assets/remotion-starter/src/acts/Act2.tsx","sizeBytes":6107,"isText":false},{"path":"assets/remotion-starter/src/blur.ts","sizeBytes":1924,"isText":true},{"path":"assets/remotion-starter/src/brand/fonts.ts","sizeBytes":635,"isText":true},{"path":"assets/remotion-starter/src/brand/Mark.tsx","sizeBytes":3149,"isText":false},{"path":"assets/remotion-starter/src/brand/tokens.ts","sizeBytes":3808,"isText":true},{"path":"assets/remotion-starter/src/FilmSub.tsx","sizeBytes":1234,"isText":false},{"path":"assets/remotion-starter/src/Film.tsx","sizeBytes":1535,"isText":false},{"path":"assets/remotion-starter/src/fx/Chain.tsx","sizeBytes":10741,"isText":false},{"path":"assets/remotion-starter/src/fx/Cursor.tsx","sizeBytes":1966,"isText":false},{"path":"assets/remotion-starter/src/fx/Iris.tsx","sizeBytes":4193,"isText":false},{"path":"assets/remotion-starter/src/fx/MaskRise.tsx","sizeBytes":4824,"isText":false},{"path":"assets/remotion-starter/src/fx/Morph.tsx","sizeBytes":5006,"isText":false},{"path":"assets/remotion-starter/src/fx/RackFocus.tsx","sizeBytes":1772,"isText":false},{"path":"assets/remotion-starter/src/fx/Roll.tsx","sizeBytes":6747,"isText":false},{"path":"assets/remotion-starter/src/fx/Scramble.tsx","sizeBytes":6427,"isText":false},{"path":"assets/remotion-starter/src/fx/TypeOn.tsx","sizeBytes":7185,"isText":false},{"path":"assets/remotion-starter/src/fx/Words.tsx","sizeBytes":4428,"isText":false},{"path":"assets/remotion-starter/src/index.ts","sizeBytes":109,"isText":true},{"path":"assets/remotion-starter/src/lib/anim.ts","sizeBytes":11912,"isText":true},{"path":"assets/remotion-starter/src/lib/Audit.tsx","sizeBytes":8557,"isText":false},{"path":"assets/remotion-starter/src/lib/camera.ts","sizeBytes":4290,"isText":true},{"path":"assets/remotion-starter/src/lib/color.ts","sizeBytes":2311,"isText":true},{"path":"assets/remotion-starter/src/lib/FontGate.tsx","sizeBytes":1517,"isText":false},{"path":"assets/remotion-starter/src/lib/measure.ts","sizeBytes":3051,"isText":true},{"path":"assets/remotion-starter/src/lib/pace.ts","sizeBytes":7715,"isText":true},{"path":"assets/remotion-starter/src/lib/safe.ts","sizeBytes":3813,"isText":true},{"path":"assets/remotion-starter/src/lib/sync.ts","sizeBytes":1768,"isText":true},{"path":"assets/remotion-starter/src/Root.tsx","sizeBytes":3172,"isText":false},{"path":"assets/remotion-starter/src/Stills.tsx","sizeBytes":3788,"isText":false},{"path":"assets/remotion-starter/src/sync.ts","sizeBytes":5639,"isText":true},{"path":"assets/remotion-starter/src/timeline.ts","sizeBytes":8290,"isText":true},{"path":"assets/remotion-starter/tsconfig.json","sizeBytes":344,"isText":true},{"path":"assets/TREATMENT.md","sizeBytes":16662,"isText":true},{"path":"LICENSE.txt","sizeBytes":1065,"isText":true},{"path":"references/brand-and-color.md","sizeBytes":41215,"isText":true},{"path":"references/camera.md","sizeBytes":14961,"isText":true},{"path":"references/chromium-rendering.md","sizeBytes":16628,"isText":true},{"path":"references/concept-and-story.md","sizeBytes":28302,"isText":true},{"path":"references/copy-and-type.md","sizeBytes":43654,"isText":true},{"path":"references/craft-rules.md","sizeBytes":49691,"isText":true},{"path":"references/finishing.md","sizeBytes":33444,"isText":true},{"path":"references/formats.md","sizeBytes":31190,"isText":true},{"path":"references/hyperframes-engine.md","sizeBytes":29092,"isText":true},{"path":"references/motion-tokens.md","sizeBytes":29730,"isText":true},{"path":"references/product-ui.md","sizeBytes":24913,"isText":true},{"path":"references/remotion-engine.md","sizeBytes":23077,"isText":true},{"path":"references/review-loop.md","sizeBytes":32328,"isText":true},{"path":"references/sound.md","sizeBytes":82879,"isText":true},{"path":"references/taste-and-slop.md","sizeBytes":31977,"isText":true},{"path":"references/technique-library.md","sizeBytes":475918,"isText":true},{"path":"references/timing-grid.md","sizeBytes":29782,"isText":true},{"path":"references/transitions.md","sizeBytes":18943,"isText":true},{"path":"references/worked-example.md","sizeBytes":22364,"isText":true},{"path":"scripts/accumulate.py","sizeBytes":19115,"isText":true},{"path":"scripts/add-font.mjs","sizeBytes":14430,"isText":false},{"path":"scripts/audio/kit.py","sizeBytes":38044,"isText":true},{"path":"scripts/audio/listen.py","sizeBytes":13446,"isText":true},{"path":"scripts/audio/master.py","sizeBytes":15202,"isText":true},{"path":"scripts/audio/score.py","sizeBytes":115393,"isText":true},{"path":"scripts/audio/synth.py","sizeBytes":40711,"isText":true},{"path":"scripts/av-audit.py","sizeBytes":50871,"isText":true},{"path":"scripts/brand-kit.sh","sizeBytes":4291,"isText":true},{"path":"scripts/brand-svg.ts","sizeBytes":6634,"isText":true},{"path":"scripts/check-sync.py","sizeBytes":9495,"isText":true},{"path":"scripts/deliver.sh","sizeBytes":19759,"isText":true},{"path":"scripts/dither-gradient.py","sizeBytes":11767,"isText":true},{"path":"scripts/export-cues.ts","sizeBytes":11733,"isText":true},{"path":"scripts/forensics.py","sizeBytes":63771,"isText":true},{"path":"scripts/grab.sh","sizeBytes":2661,"isText":true},{"path":"scripts/grid-check.ts","sizeBytes":32109,"isText":true},{"path":"scripts/hf-finish.sh","sizeBytes":13911,"isText":true},{"path":"scripts/hf-preflight.cjs","sizeBytes":5297,"isText":false},{"path":"scripts/layout-audit.sh","sizeBytes":15771,"isText":true},{"path":"scripts/lint-film.mjs","sizeBytes":59588,"isText":false},{"path":"scripts/measure-speed.py","sizeBytes":31898,"isText":true},{"path":"scripts/new-film.sh","sizeBytes":14186,"isText":true},{"path":"scripts/outline-text.py","sizeBytes":5004,"isText":true},{"path":"scripts/palette.py","sizeBytes":17885,"isText":true},{"path":"scripts/pick.py","sizeBytes":21578,"isText":true},{"path":"scripts/probe.py","sizeBytes":14004,"isText":true},{"path":"scripts/render-chunks.sh","sizeBytes":5913,"isText":true},{"path":"scripts/render.sh","sizeBytes":20332,"isText":true},{"path":"scripts/sheet.py","sizeBytes":13202,"isText":true},{"path":"scripts/test/bash32.test.py","sizeBytes":9855,"isText":true},{"path":"scripts/test/encode-tags.test.py","sizeBytes":4963,"isText":true},{"path":"scripts/test/grid-check.test.mjs","sizeBytes":11050,"isText":false},{"path":"scripts/test/grid-fixtures/calm-chains.ts","sizeBytes":1230,"isText":true},{"path":"scripts/test/grid-fixtures/chain-beat.ts","sizeBytes":788,"isText":true},{"path":"scripts/test/grid-fixtures/chain-gaps.ts","sizeBytes":1481,"isText":true},{"path":"scripts/test/grid-fixtures/crisp-legacy.ts","sizeBytes":717,"isText":true},{"path":"scripts/test/grid-fixtures/crisp-soft.ts","sizeBytes":1122,"isText":true},{"path":"scripts/test/grid-fixtures/lines-together.ts","sizeBytes":1002,"isText":true},{"path":"scripts/test/grid-fixtures/read-quiet.ts","sizeBytes":616,"isText":true},{"path":"scripts/test/grid-fixtures/reads-and-gaps.ts","sizeBytes":603,"isText":true},{"path":"scripts/test/grid-fixtures/replace-exit.ts","sizeBytes":866,"isText":true},{"path":"scripts/test/grid-fixtures/sentence-dump.ts","sizeBytes":789,"isText":true},{"path":"scripts/test/lint-film.test.mjs","sizeBytes":6882,"isText":false},{"path":"scripts/test/lint-fixtures/act-copy-literal.tsx","sizeBytes":858,"isText":false},{"path":"scripts/test/lint-fixtures/act-sibling-words.tsx","sizeBytes":752,"isText":false},{"path":"scripts/test/lint-fixtures/banned-color.ts","sizeBytes":1168,"isText":true},{"path":"scripts/test/lint-fixtures/banned-named.tsx","sizeBytes":320,"isText":false},{"path":"scripts/test/lint-fixtures/brand-file.tsx","sizeBytes":357,"isText":false},{"path":"scripts/test/lint-fixtures/brand-line.tsx","sizeBytes":318,"isText":false},{"path":"scripts/test/lint-fixtures/emoji-decoration.tsx","sizeBytes":316,"isText":false},{"path":"scripts/test/lint-fixtures/glass-glow.tsx","sizeBytes":1148,"isText":false},{"path":"scripts/test/lint-fixtures/gradient.tsx","sizeBytes":411,"isText":false},{"path":"scripts/test/lint-fixtures/hyperframes-brand.html","sizeBytes":389,"isText":false},{"path":"scripts/test/lint-fixtures/hyperframes.html","sizeBytes":725,"isText":false},{"path":"scripts/test/lint-fixtures/italic.tsx","sizeBytes":526,"isText":false},{"path":"scripts/test/lint-fixtures/number-labels.tsx","sizeBytes":569,"isText":false},{"path":"scripts/test/lint-fixtures/per-letter-arrays.tsx","sizeBytes":761,"isText":false},{"path":"scripts/test/lint-fixtures/per-letter.tsx","sizeBytes":873,"isText":false},{"path":"scripts/test/lint-fixtures/serif.tsx","sizeBytes":748,"isText":false},{"path":"scripts/test/lint-fixtures/text-pace.tsx","sizeBytes":777,"isText":false},{"path":"scripts/test/lint-fixtures/text-spring-keys.tsx","sizeBytes":1036,"isText":false},{"path":"scripts/test/lint-fixtures/text-spring.tsx","sizeBytes":967,"isText":false},{"path":"scripts/test/lint-fixtures/text-spring-wrapper.tsx","sizeBytes":792,"isText":false},{"path":"scripts/test/lint-fixtures/timeline.ts","sizeBytes":247,"isText":true},{"path":"scripts/test/lint-fixtures/typing-follow.tsx","sizeBytes":829,"isText":false},{"path":"scripts/test/lint-fixtures/typing-rate.tsx","sizeBytes":855,"isText":false},{"path":"scripts/test/pick-fixtures/library.json","sizeBytes":9560,"isText":true},{"path":"scripts/test/pick.test.py","sizeBytes":12790,"isText":true},{"path":"scripts/test/score.test.py","sizeBytes":39273,"isText":true},{"path":"scripts/test/scripts-docs.test.mjs","sizeBytes":6275,"isText":false},{"path":"SKILL.md","sizeBytes":67199,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-19T20:29:49.560687Z","sha256":"4F1A742C42AC8404FB5E15F37A89C83CCCD6931461A5990AC6F102B17788E97A","sizeBytes":1042605},"review":null,"source":{"repositoryUrl":"https://github.com/Leonxlnx/cinetic","path":"skills/cinetic","license":"MIT","commit":"ecfa6605de1adb9345ce937724810dc32267d068","subtreeSha":"9D0E488FFE0BD9E5149DB700C3276432AFF3E1890A640A327A370DAC86C07860","lastSyncedAt":"2026-10-19T20:29:39.785099Z"},"reviewedAt":"2026-10-19T20:30:39.292791Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/Leonxlnx/cinetic/tree/main/skills/cinetic"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install leonxlnx-cinetic@llmmart"},{"target":"git","command":"git clone https://github.com/Leonxlnx/cinetic.git"}]}