---
name: present-backfill
description: Explain one current percentage split before revealing its historical context as editable animated columns.
version: 1.0.1
---

# Present Backfill

Turn two to five observations into a percentage film. The focal stack reaches its value and displays both percentages before any other stack develops. Historical stacks then fill in array order on a common 100% scale. The result is a parameterized renderer, with authored input data rather than automatic research or fact checking.

Example brief:

```json
{"headline":"Repairs stay in service longer","context":"Harbor repair workshop · illustrative sample","segments":["Repaired","Replaced"],"observations":[{"caption":"2022","portion":37},{"caption":"2023","portion":49},{"caption":"2024","portion":58},{"caption":"2025","portion":72}],"spotlight":3,"footnote":"Share of workshop intake by outcome. Fictional figures for demonstration."}
```

Use Node 22 and FFmpeg. From this folder:

```sh
node scripts/install.mjs
node scripts/compose.mjs --brief brief.json --dest ./project --palette lagoon
node scripts/render.mjs ./project ./film.mp4
```

Installation runs ordinary npm lifecycle scripts using the exact lock in `references/npm-lock.json`. GSAP and both fonts are bundled with notices; no asset download occurs during composition. HyperFrames dependencies need npm registry access when not cached. No credentials, paid APIs or remote generation are used.

Read [the input contract](references/authoring.md), [timeline and validation](references/timeline.md) and [dependency constraints](references/dependencies.md). Four palettes are available: `lagoon`, `vineyard`, `copper`, `graphite`. All share the same animation. CJK text uses the bundled Noto Sans SC fallback. Labels at 0% and 100% move outside their zero-area segments without altering the scale.

Inspect the generated HTML, `timeline.json` and encoded film before sharing. Briefs reject invalid percentages and excessive density. Text that exceeds the supported layout must be shortened; do not silently reduce label sizes. Local technical validation is distinct from visual acceptance, sound listening and publication.

FAQ: This creates a chart film, not a forecast. It contains no photos or presenter footage and requests no image assets. Audio is absent by design; `timeline.json` records an empty track list. Add authorized audio in an editor if a brief calls for it, and verify the mixed export separately. Unknown or remote briefs are outside the assessed execution scope.
