Fieldnotes motion library — review-stage toolkit
Source-mapped editing recipes sharing a typed Remotion renderer. This package is an extension of the approved fieldnotes benchmark, not a replacement. No entry is a fidelity pass merely because it appears in the catalog or renders.
Start with AGENT_GUIDE.md; the project-local skill is in
.agents/skills/fieldnotes-editing/SKILL.md.
Run
Requirements: Node 22.18+, FFmpeg/FFprobe, and a Chromium executable. Remotion and
React versions are pinned in package-lock.json. Set
REMOTION_BROWSER_EXECUTABLE when the browser is not discoverable on PATH.
The render process does not download external assets or a browser.
Its pinned renderer integration binds the local asset server to loopback. This
also avoids the sandbox's uv_interface_addresses failure seen with the bare
Remotion CLI. Use this package's npm run render command; the compatibility path
is covered by the real-Chromium smoke test and is version-specific.
npm ci
npm run typecheck
npm test
npm run catalog -- search --family camera --duration '1..6'
npm run catalog -- show RECIPE_ID
npm run render -- --recipe RECIPE_ID --variant default --out out/original.mp4
npm run render -- --recipe RECIPE_ID --variant adaptation --out out/adaptation.mp4
npm run verify -- out/original.mp4
Replace RECIPE_ID with a returned ID. Search is machine-readable and supports
intent, treatment, film, duration, input and neighbor filters. show loads one
full recipe. Copy its documented content object to your own JSON and pass
--content my-content.json; do not patch the component implementation. Output
files are never overwritten. Use a new output path for another revision.
Custom JSON must be inside the toolkit project. Keep it under inputs/ and
preserve its relative location with the output and manifest when moving the
toolkit. docs/PORTABILITY.md describes relocation checks, symlink limits,
external-input migration and historical manifests.
For a parser or pipeline, use npm --silent run catalog -- search QUERY or
npm --silent run catalog -- show RECIPE_ID. --silent removes npm's launcher
banner; the CLI's stdout is then a single JSON document.
Assemble an edit
The EditInput type in src/types.ts accepts a name, output fps rational,
shots containing complete RenderInput objects, and one explicit joins
decision between each adjacent pair. A shot contains the selected recipe JSON
and its substituted content, plus optional native-frame opening/closing holds.
Use the returned recipe objects; do not invent their source tracks.
import type {EditInput, RenderInput} from './src/types.ts';
export const makeEdit = (first: RenderInput, second: RenderInput): EditInput => ({
name: 'Material study',
fps: {numerator: 30, denominator: 1},
shots: [first, second],
joins: [{
kind: 'cut',
continuity: 'reset',
reason: 'The title gives way to the established work surface.',
equalSlots: [],
}],
});
Serialize that object as my-edit.json, then:
npm run render -- --edit my-edit.json --out out/my-edit.mp4
npm run verify -- --edit my-edit.json --out out/my-edit.mp4
A match join requires compatible entry/exit field types and at least one pair
of equal content slots. This catches broken asset/text continuity, not all
perceptual discontinuities; inspect every join in the rendered edit. Durations
are converted in seconds, with cumulative boundaries rounded to the output
clock. A mixed-fps edit is a labeled adaptation, not a native source comparison.
All shot canvases must match; there is no implicit crop, stretch or scale-to-fit.
Assets and evidence
Only original/permitted content belongs under public/. The licensed Geist font
is included with public/fonts/OFL.txt; it is not the identified source font.
Per-recipe declarations distinguish measurements, estimates, implementation
choices and unresolved source differences. Source films and research comparisons
are not bundled as editable production assets.
Read ASSET_RIGHTS.md for the separately credited NASA photographs, font license,
and the limits of the prototype's declaration-based permission check.
The output manifest binds selected code, recipe, content and asset hashes to the MP4. It is a reproducibility record, not a cryptographic signature or visual approval. Mechanical verification checks decoding, dimensions, frame count, cadence, silence and those bindings. Fresh-context moving-source review and independent content adaptation remain separate requirements.
The library is under review. Publication requires explicit approval and must
preserve the existing openai-film-fieldnotes-100 Cloudflare Pages project. This
toolkit does not authorize the final all-hands presentation.
Public draft download
Read DOWNLOAD_TOOLKIT.md for verified archive merging, dependency setup,
selected-asset limitations and licenses. Artifact history is intentionally
omitted locally; public-guide/index.html opens the published review.