---
name: calendar-shift
description: Create an editable schedule film in which a single booking moves between visible calendar cells, followed by a message confirmation.
version: 1.0.6
category: video
delivery: download-only
---

# Calendar Shift

Build a short scheduling explanation with a persistent board, an identifiable moving booking and a phone conversation. This is a parameterized HTML/GSAP renderer, with HyperFrames capture and a separate editable procedural audio score. New briefs supply the schedule and copy; custom story structures require authoring.

Read `references/input.md` for the data contract and timing. Node.js 22+, Python 3.10+, FFmpeg and Chrome are required. The renderer uses HyperFrames 0.8.155. Runtime GSAP 3.14.2 and Noto Sans SC 2.004 are bundled with their notices. Installation requires no model account or paid generation.

1. Write your brief as JSON following the contract.
2. Run `node scripts/compose.mjs brief.json /absolute/project`.
3. Edit the resulting `index.html`, `brief.json` or `score.json` as needed. Regenerating overwrites generated files, so preserve hand edits separately.
4. Run `node scripts/render.mjs /absolute/project`. The actual HyperFrames export is `picture.mp4`; `film.mp4` includes the generated music and action sounds.
5. Review the encoded start, lift, travel, landing and confirmation, then play the complete film at normal speed. Check actual audio independently of the waveform. Do not call a render user acceptance.

The project exposes `window.jump(seconds)` and `window.__timelines`. Seeking must produce the same position regardless of earlier playback. The booking starts inside `origin`, ends inside `destination`, and remains one element throughout. Confirmation begins after landing. Occupied cells must not cover either endpoint.

Use English or Chinese; the bundled font covers Simplified Chinese. Short labels are mandatory. Inputs are checked before output is written. The default film lasts eight seconds at 1920 × 1080, 30 fps. Two visual treatments are available: `observatory` and `kiln`; `graphite` provides a third neutral treatment.

A local presenter film is optional through `presenterFile`. Supply `identityPhoto` as a local PNG for the phone identity portrait. Its duration must cover the whole film. The inset uses a crop of that film with source audio muted. No presenter performance, photo, voice or narration is generated. Without footage the inset is a labeled status instrument, not a human presenter. The audio is an original synthesized music bed plus action sounds; it is not narration or studio scoring.

Keep briefs, presenter footage, rendered movies and posters outside this generic package. Preserve `assets/resources/OFL.txt`, the GSAP header and `assets/resources/GSAP-LICENSE.html` when redistributing the runtime.
