← All styles

Kinetic Type

Heavy condensed type slamming in on the beat, with full-frame colour-block cuts — for gig promos, quotes and countdowns.

Full promptPaste it into Claude Code, Codex or any agent to make the first video above.

Make a video in the Kinetic Type style from ultramotion.ai: https://ultramotion.ai/styles/kinetic-type/
The style is an open-source Agent Skill. If you can install skills, run npx skills add sunsiyuan/ultramotion first and build it with the kinetic-type template (scene.html draws the frames, score.py makes the music). If you can't, write it from scratch following the description below.

[Deliverable]
- A promo for a Halloween gig: NIGHT SHIFT, 10.31, Pier 9, doors 8PM. The band names are made up.
- Vertical 1080×1920, 30 fps, exactly 32 beats at 128 BPM (about 15 seconds), an mp4 with music, saved in the current directory.
- The whole video is drawn by one web page with Canvas 2D (no WebGL): every frame is a pure function of time t, with no state carried between frames. Render it with a headless browser by calling seek(t) and screenshotting each frame, encode with ffmpeg (libx264, yuv420p), then mux the music in (-shortest).

[The look]
- Two grounds and one accent: paper #efefe6, ink #151713, and a Halloween orange #ff6a13. Every scene is one flat block of one of the three, taking turns. No second accent.
- The heaviest condensed type: Anton (fall back to Helvetica Neue Condensed Black / Impact), weight 900. Only use fonts that are installed; if one isn't, the browser falls back to something wide and soft and it shows immediately.
- Type fills the width: 72 px margins, a 936 px measure, and a line that's too long shrinks as a whole. Each beat has one big thing; supporting text is a quarter of its size or less.
- A small line of HUD text in each corner: NIGHT SHIFT top-left, 10.31 top-right, PIER 9 bottom-left, DOORS 8PM bottom-right.

[How it moves — this is the style]
- Write every time in beats: b(n) = beat n = n × 60/128 seconds. Every word, cut and wipe starts on a beat or half-beat. Never place anything in raw seconds.
- Slam in: letters drop from above one at a time with a slight twist and an overshoot; single words punch in from 1.5× scale on their beat.
- Leave with a smear: letters slide out sideways with motion blur, staggered.
- Cut with a diagonal wipe: a colour block sweeps across the frame in one beat, and the scene changes at the moment it covers everything.
- Keep something moving between hits: starburst badges rotate, a box tunnel rushes toward the camera, tape bands scroll, rings of text spin — and things bump on every beat.
- Hold the strongest frame for a full beat before the next cut.

[Shots: five sections, 6 to 8 beats each]
1 · The name (beats 0–8): paper ground. Three huge left-aligned lines, NIGHT, SHIFT, 2026 (440 px), slam in letter by letter on beats 0.5, 1.5 and 2.5. On beat 3.5 an orange round badge pops in at the top right with an ink starburst spinning inside it. On beat 6.5 the lines and the badge smear out together. On beat 7.5 an ink block wipes across diagonally.
2 · The headliner (beats 8–14): ink ground, with a tunnel of box outlines rushing toward the camera (orange and translucent paper, alternating, one layer every two beats) and a thin orange circle in the middle. On beat 8.5 a small orange HEADLINER (wide letter-spacing) punches in, on beat 9.5 a huge paper-coloured NEON, on beat 10.5 DENTIST, one beat each; from beat 12 the two words shake against each other. Orange diagonal wipe on beat 13.5.
3 · The date (beats 14–20): full-frame orange. A huge 10.31 (560 px) counts up from 00.00 over two beats, then bumps on every beat. Below it, ONE NIGHT ONLY. Above, a ring of text "NIGHT SHIFT ✱ NIGHT SHIFT ✱" turns slowly, with an ink starburst in its centre turning the other way and bumping on the beat. A riser starts on beat 14.5. Ink diagonal wipe on beat 19.5.
4 · The line-up (beats 20–26): paper ground. LINE-UP slams in on beat 21. Two wide tape bands slide in from either side and cross — one ink with orange text tilted left, one orange with ink text tilted right — with band names scrolling along them non-stop: PALE ENGINE, MOSSKIN, ODD HOURS / GLASS PIGEON, TINY GIANT, HALF MOON SOCIETY. Ink diagonal wipe on beat 25.5.
5 · Tickets (beats 26–32): ink ground. A huge paper-coloured TICKETS slams in on beat 26.5, a huge orange ON SALE on beat 27.5. On beat 28.5 an orange rule draws across the full width. On beat 29 a small "PIER 9 — DOORS 8PM" fades in, and on beat 29.5 an orange badge pops in at the bottom right.

[Sound]
- Synthesize the music in code (numpy / scipy is enough): 128 BPM, kick on every beat, claps on 2 and 4, hats, an off-beat bass ducked by the kick, electronic.
- A chord stab and a low impact on every slam: beats 0.5, 1.5, 2.5, 3.5, 8.5, 9.5, 10.5, 12, 14.5, 16.5, 21, 26.5, 27.5, 29.5.
- A whoosh with each wipe on beats 7.5, 13.5, 19.5 and 25.5, and a two-beat riser from beat 14.5.
- Sound and picture should read their timings from the same data, not two hand-written copies.

[Check before you hand it over]
- Pull 8–10 frames from the finished mp4 into one contact sheet and look at it.
- Wide, soft-looking letters: the font isn't installed and the browser fell back — pick an installed one.
- Motion that feels late or mushy against the music: something is placed in seconds instead of beats, or its hit time is missing.
- A badge or band sitting on top of a title: move the element, not the font size.
- It looks like every other kinetic-type video: go back and choose the colours and type from this event.

Use it

Install the skills, then ask your agent for a video in this style. For example:

npx skills add sunsiyuan/ultramotion
View the prompt

Make a promo video for a gig, in a kinetic typography style (huge heavy type slamming in on the beat, full-frame colour-block cuts). Gig: Echo Project — city tour, Chicago night Date and venue: November 22, The Foundry Requirements: - Vertical 1080×1920, 30 fps, 15–25 seconds - Structure: open on the gig name → bring in the band, date and venue over 2–3 scenes → end with ticket info - Include music and sound effects; export one mp4 with audio to the current directory

Source on GitHub →