Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ motionPreset("spin-forge", { target: logo, energy: 0.8, seed: 3 })
`energy` (clean to springy) and `speed` are universal knobs. The preset emits a
beat you can retime, and a waypoint you drag on its path becomes an overlay edit
that survives a knob-driven regeneration: knobs regenerate the base, hand craft
persists. Two new primitives back it:
persists. Two primitives back it:

- **`path` node**: a true vector SVG shape with a `progress` draw-on, so the
outline draws itself, stays crisp at any zoom, and recolors by animating fill.
Expand Down Expand Up @@ -256,9 +256,9 @@ export default scene({
```

Scaffold one with `pnpm reframe new my-scene`. Full syntax (node types,
states, timeline operators, behaviors): `pnpm reframe guide` — the same
~1,700-token guide that lets an LLM write valid scenes on the first try
(33/33 first-attempt renders in our benchmark).
states, timeline operators, behaviors): `pnpm reframe guide` — the guide an
LLM reads to write valid scenes on the first try (33/33 first-attempt renders
in our benchmark).

A scene is a single self-contained file, not an app: it can live in **any
directory** — no package.json or node_modules next to it. `render` bundles it
Expand Down Expand Up @@ -293,8 +293,8 @@ your scene.

## How edits survive regeneration

Overlays address the scene by **node id, state name, and timeline label** —
never by position or index. When an AI regenerates a scene it follows one
Overlays address the scene by **node id, state name, and timeline label (or
beat name)** — never by position or index. When an AI regenerates a scene it follows one
contract (`docs/guides/regen-contract.md`, or `pnpm reframe guide --regen`): keep
those names stable for every concept that survives the redesign. When the
contract is broken anyway, `composeScene` skips the affected edits and reports
Expand Down Expand Up @@ -355,7 +355,8 @@ same structured shape on the CLI: `{ ok: false, kind, issues: [{ code, path, mes

## Documentation

The [`docs/`](docs/) folder is a [Mintlify](https://mintlify.com)-ready site (`docs/docs.json`):
📖 **[docs.reframe-video.com](https://docs.reframe-video.com)** — the full documentation
site. The [`docs/`](docs/) folder is its [Mintlify](https://mintlify.com) source (`docs/docs.json`):

| page | what |
|---|---|
Expand Down
16 changes: 6 additions & 10 deletions docs/the-loop.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@ title: The loop
description: "AI writes the scene, a human tweaks it, the render is deterministic — and the tweaks survive the next regeneration."
---

```
scene.ts ──(written by you, or by an AI given `reframe guide`)──▶ IR (plain JSON data)
│ │
▼ ▼
preview: scrub + knobs ──▶ edits recorded as an overlay JSON (non-destructive)
│ │
▼ ▼
render: deterministic mp4 (same input → byte-identical frames) ◀── overlay reapplies
even after an AI
regenerates the base
```mermaid
flowchart LR
S["scene.ts<br/>you · or an AI given 'reframe guide'"] --> IR["IR<br/>plain JSON data"]
IR --> P["preview<br/>scrub + knobs"] --> O["overlay JSON<br/>non-destructive edits"]
IR --> R["render<br/>deterministic mp4<br/>same input → byte-identical"]
O -. reapplies even after an AI<br/>regenerates the base .-> R
```

Everything is a pure function of time: `evaluate(scene, t)` — no wall clocks, no randomness without a seed, so scrubbing and distributed rendering come for free. `reframe lint` *enforces* it: the scene is compiled twice and any IR that differs (a `Math.random()` or `Date` baked into a prop) is flagged, so a scene that would render differently each time fails the gate before you ship it.
Expand Down
2 changes: 1 addition & 1 deletion packages/reframe-video/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"type": "git",
"url": "git+https://github.com/kiyeonjeon21/reframe.git"
},
"homepage": "https://github.com/kiyeonjeon21/reframe#readme",
"homepage": "https://docs.reframe-video.com",
"type": "module",
"bin": {
"reframe": "./dist/bin.js",
Expand Down
Loading