DESIGN.md@plugins/motion-launch-videos/skills/motion-pixel/templates · git:20260929.d216aca · 2026-09-29 · sha256 07011b207ad24bb0
DESIGN.md@plugins/motion-launch-videos/skills/motion-pixel/templates git:20260929.d216acaA
Immutable. This exact content never changes and is served at /api/v1/blob/07011b207ad24bb0.
# Design: <film> The spec the film is built from. Numbers here and in the FILM config agree; when one changes, change both. Positions are logical pixels on the small canvas, top-left origin; `render.mjs layout` reports the measured boxes, speeds and repeats. ## Pixel grid - Logical canvas 180 x 180 at x6 = 1080 x 1080 (16:9: 320 x 180; 9:16: 180 x 320, from the same film with `--format`). The scale is a whole, even number. - 60 fps, 10.000 s = 600 frames, cycle loop. Motion blur off. - Live area: margin 8 logical px (8 to 172 on both axes). Text stays inside it; the world bleeds. - Tempo 120 BPM: beat 0.5 s, 16th 0.125 s, bar 2 s. Entrances, hops and blinks sit on the grid. ## Palette At most 16 colours, drawn for this film (or the brand's colours quantised into it). Every pixel is one of them. | Role | Hex | Used for | Contrast where it matters | |---|---|---|---| | bg | | the sky's top, the page background | | | ink | | outlines, text outline | | | | | | | ## Sprites | Sprite | Size | Frames | fps | Period (s) | Whole per loop | Notes | |---|---|---|---|---|---|---| | hero | 16 x 20 | 6 | 12 | 0.5 | 20 | run: contact, down, pass, then the other leg | | | | | | | | | ## Layers, back to front | Layer | Kind | y | Speed (px/s) | Step | Repeat (px) | Period (s) | What is on it | |---|---|---|---|---|---|---|---| | SKY | sky | 0 | | | | | bands and dithered changes | | | strip | | 20 | 1 px / 3 frames | 200 | 10 | | | | tiles | | 60 | 1 px / frame | | | | Nothing unique on a layer shows twice: speed x DUR is at least the screen width plus the object's width. ## Text | Layer | Text | Scale | Box (logical) | Output cap height | Fill | Outline / drop | Backdrop, contrast | |---|---|---|---|---|---|---|---| | | | 3 | | 126 px | | ink / deep [0, 2] | ink, : 1 | | DEMO | DEMO COPY, FICTIONAL PRODUCT | 1 | | 42 px | | none | , : 1 | At most 4 words of display type (scale 2 and up) on screen at once. ## Formats Every position above is on the base canvas. Each layer's `pin` maps it into the other formats; each delivered format has a patch in `FILM.formats` (engine.md, Formats). | Format | Logical canvas | Patch | Staging | |---|---|---|---| | 1:1 | 180 x 180 | none: the base | <as above> | | 9:16 | 180 x 320 | <titles a scale up, higher drops> | <140 rows more sky; the title fills it> | | 16:9 | 320 x 180 | <far layers at 30 px/s, 300 px repeat; title lower> | <140 columns more world; nothing unique shows twice> | - Pins: <world layers 'b', clouds 't', title and sparkles centred>. - Composition at each format (from `render.mjs stills --format`): <1:1 x %, 9:16 x %, 16:9 x %>. ## Timeline | Time (s) | Beat | What happens | Spring / effect | |---|---|---|---| | 0.00 | 0 | | | | | | | | - Accents: <layer> lands at <t>; shake <px> px for <dur> s on <layer>. - Something moves on every beat: <the run cycle, the scroll, blinks, hops>. ## The loop - Cycle loop: every period above divides DUR; the world is speed x DUR px long, so every item passes once per loop. - Layers that enter also leave (or have a `show` window), so nothing pops at its entrance. - `seam` in the critique: the film drawn on to t = DUR is frame 0. ## Review stills Written by `render.mjs stills`: frame 0 and the last frame, each text landing and at rest, each exit, the first glint, the first hop and pickup, the shake, the poster, plus `stills/contact.png`.