---
name: tile-shift
description: Build an editable mosaic interruption over a continuous background take, hold a short message, and return to the progressing scene.
version: 1.0.2
category: video
delivery: download-only
---

# Tile Shift

Use for a short statement that interrupts a continuous shot. This is a parameterized renderer, with authoring needed to choose copy, footage and musical pitches. Node 22+, Python 3, FFmpeg and HyperFrames 0.8.30 are required. GSAP 3.14.2 and Noto CJK Sans2.004 are local, with notices in assets/licenses/.

Create a JSON brief with `headline` (1–64 characters), `eyebrow` (1–28), `footer` (1–70), `footage` (path relative to the brief), and `palette` (`canopy`, `tidal`, `clay`). Optional `seconds` is 6–12, `columns` 4–12, `rows` 3–8; grid values are integers. Optional `notes` supplies 1–8 MIDI pitches, 24–90. Use concise claims supplied by the brief; do not invent measured outcomes.

Run `node scripts/create.mjs /absolute/brief.json /absolute/project`. Then run `node scripts/render.mjs /absolute/project`. The latter downloads the pinned HyperFrames CLI if needed. Source media must be at least the film duration; no looping or extension occurs. Original footage sound is muted. Output is 1920×1080, 30 fps.

Read references/direction.md. Cells cover in center-distance order; they withdraw in reverse order. The background continues beneath the cover. Keep the cells independent and the reading hold stable. Choose a new palette and deliberate copy for each brief; keep a coherent subject within a film.

The output project contains local media and fonts, editable HTML/GSAP, project.json, audio-timeline.json, score.py and a synthesized music/effects score.wav. Edit the audio timeline and rerun `python3 score.py audio-timeline.json score.wav`; render again to mix. `picture.mp4` is the silent render; `film.mp4` contains the score. This is procedural audio, not narration or an audio-editor session.

Verify text bounds, crop, transitions at frame intervals, backward/forward seeks, and full 1× playback. Use HyperFrames lint/validate/inspect, then ffprobe and a complete FFmpeg decode. Inspect actual encoded frames. Tool success does not establish aesthetic, listening or user acceptance. Obtain rights for supplied footage. Demo footage and finished films are intentionally outside this generic package.
