Place prepared Takes on an independent Timeline with gaps and overlaps. Present picture, sound and captions through explicit Use rules while preserving source timing and project-authored styles.
Unify Companion bands, parameter ownership and source writeback in Studio. Migrate components, examples and authoring guidance, remove retired Speech/Semantic Track interfaces, and retain protocol identifiers at @1.
Validation: repository suite (786 tests; six sandbox-blocked tests passed on permitted rerun), 43 Studio tests after audit fixes, TypeScript, public declarations, four example-package builds, chat Source check and npm file inventory.
Every page carried a frontmatter `title` and repeated it as a body `# `, which
the site renders as two headings with two permalinks. The heading text matched
the frontmatter on 41 of the 43 pages; on the two quickstarts it did not, so
"Make a video with your Agent" and "和 Agent 一起制作视频" give way to the
titles already in their frontmatter.
Each step's video now sits directly under that step's heading rather than after
its prose, and the avatars link keeps a blank line beneath it.
Speech publishes semantic timing and original audio. Media Performance and project components consume the prepared material, preserving source offsets across Takes while controlling their own framing and motion.
Add explicit renderer programs for coordinated HTML/CSS/JavaScript scenes, with typed media children, backdrop filtering and blending. Remove stand-in and estimated-take preview paths, migrate Sources and documentation, and demonstrate a Moment-driven video-to-diagram handoff.
Two problems in the same pages, found by reading them as a newcomer would.
The tables contradicted the examples printed directly above them. Every author
surface now takes `semantic`; `map` is gone from all ten, and `space` with it.
The code samples were updated when the attribute changed, the attribute tables
were not — fourteen rows across `quickstart/tracks.md`, `composition.md` and
both `zh` mirrors still listed `map` as required, so a reader following the
table wrote SVML the surface rejects.
Ranking had drifted further than the rename. `triggers` and `terminal` survive
only on `TierBoard` and `TopThree`; `Column` takes `canvas` instead, and its
items carry `rank` plus their own reveal window, with `during` required unless
`preset="true"`. The worked example still passed `triggers`/`terminal` to a
`Column` and omitted `rank`, so the one example a reader would copy was
invalid. Deck, Screen and Comment are corrected the same way — Comment now
requires `semantic` unconditionally rather than only when a sticker binds to
the Script.
The rest is my own mess. Describing Studio, I wrote what it no longer does
rather than what it does — "no stand-ins", "no black frames", "no estimated
mode", "does not degrade" — four times across the skill alone, plus a section
explaining two badges that can only read `measured`, plus two example READMEs
whose headline was that they cannot be opened. A reader who never knew about
stand-ins learns nothing from being told they are gone; they need to know that
Studio opens a Run whose material is satisfied, which is one sentence. Where a
limit is genuinely current behaviour — one unresolved capability refusing the
whole Run — it stays, because that is how the thing works rather than a note
about how it used to.
Removed the same way from `quickstart/timing.md` and its mirror, where the
whole-program transcription pass was announced as absent instead of the
per-Take alignment simply being described. Also unwrapped one `zh` paragraph
that had been split mid-sentence.
`pnpm check` clean; `pnpm test` 510 pass, 0 fail; `pnpm test:release` 8 pass;
`preview-check` still passes `talking-film-graph-check` and still fails
`image-only.svrun`.
`b32e8253` replaced both Playgrounds with `packages/studio`, but the rename
stopped at `examples/`. The skill and the docs still named the tool, the
command and the recipe sheet that no longer exist.
`studio.svs` becomes `recipes.svs` with its import alias, in the 39 files the
examples rename had left behind — docs, the `docs/zh` mirrors, the skill
references and the package manifests whose authoring snippets show the alias.
The old name was already loose, since an `.svs` file is a parameter-recipe
sheet rather than anything Studio reads; once `studio` names the application
it reads as Studio's own config file, which it is not. Two test fixtures keyed
the alias as a plain string rather than inside `{}`, so they moved with it —
`packages/text` had a real reference to `recipes.shot` resolving against a
`studio.shot` fixture.
`pnpm svml:playground -- --source main.svml` becomes `pnpm studio -- --run
build.svrun` throughout. The Run Source is not an optional extra any more:
Studio's unit of work is the Run, and it reads the Author SVML back out of it.
`preview-check.mjs` imported `svml-playground/src/pipeline/preview.js`, which
this branch deleted, so the skill's own build gate had been dead since
`b32e8253`. It is rebuilt on Studio's real entry path — `loadStudioDomain`,
`loadStudioRun`, `inspectStudioRun`, `readStudioSession` — and reports
`provenance.errors` and unresolved Candidates instead of the `waiting` and
`stand-in` fields Studio no longer has. It stays in URL space for Windows, as
`e0ecccb9` established, and closes the archive before exiting rather than
leaving it open behind a `process.exit` in a `try`.
The preview pages are rewritten rather than renamed, because what they
describe is gone. Studio has no stand-ins, no black frames and no estimated
timing; it refuses to open and names what is missing. So the pages document
the five refusals verbatim, and say plainly that a Source still declaring
ungenerated shots will not open — including the warning that no example in
this repository currently does. Running the ported check over all nine
committed Run Sources: six refuse on unresolved capabilities or a target that
is not a Film, and three on footage under the gitignored `examples/**/assets/`.
Claiming otherwise would have shipped a quickstart whose first command fails.
`pnpm check` clean; `pnpm test` 510 pass, 0 fail; `pnpm test:release` 8 pass.
Both entry points told the reader to send a prompt without saying where to
send it from. The skill lives in the checkout, so the clone comes first and
the agent runs inside it; the prompt is now the `/narratage` invocation.
The Playground leaves the Develop guide. That section is for people
extending the system, and a preview tool nobody edits is not one of its
subjects. What a reader actually needs - the selection behaviour, the
nesting colours, sound, and that it draws every Track whichever package
made it - moves to the quickstart page. The one authoring fact the guide
carried, that Frame edges are absolute positions rather than insets, moves
to the page where a Frame is first declared.
The preview page ended by sending the reader to /guide/svml-playground, but
that section is for people extending the system, not for someone authoring a
video. The page now says how to move around the preview itself - the
three-way selection and the transport keys - and ends there.
"Start one server, not four" invents a quantity to be wry about; the
reader's actual problem is a second server on another port. The heading now
names the action. "Feeding it" goes the same way, for the same reason.
The Playground had a guide page and nothing in the quickstart, so the one
question it answers - what does this look like before anything is made -
was only findable by someone who already knew the tool existed.
A new quickstart page follows Media & Generation, where the reader has
just met a Seedance take that names a gpt-image reference. That take does
not exist yet, but the Source says what it will be made from and how long
it will hold, which is exactly what the preview draws: the right subject,
in the right shape, for the right length, before the picture flows into
video generation and before a take is paid for.
The skill starts the Playground after each step that changes a Source and
sends the author the link, which is where a misplaced card is cheapest to
catch. Its B-roll playbook says the same thing at the moment it matters,
and points here rather than repeating the arguments.