Commit Graph

38 Commits

Author SHA1 Message Date
kashorin a4c25ea76b refactor: make narrative projection an explicit author relation 2026-10-08 15:42:44 +08:00
kashorin 91fd9328f5 docs: align production guidance with the 0.3 model 2026-10-08 14:38:45 +08:00
kashorin a54f7ee8cc docs: align public guidance with the 0.3 architecture 2026-10-07 20:45:22 +08:00
kashorin 3c9e635d01 docs: teach the 0.3 author model 2026-10-07 20:44:28 +08:00
kashorin 168c537c4f fix(seedance): require visual reference classification for 0.2.8 2026-09-19 23:02:46 +08:00
kashorin a6f84f5564 feat(production): inspect frames and prepare retained performances 2026-09-19 06:50:37 +08:00
kashorin bd728d05b9 feat(script)!: delimit semantic markers and preserve caption spacing 2026-09-17 06:58:25 +08:00
kashorin b679e32192 refactor: unify adaptive timeline and presentation composition
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.
2026-09-13 01:01:47 +08:00
rpone 78a642df05 docs: give each page one title and put its video under the heading
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.
2026-09-10 21:22:19 +08:00
kashorin e90b070c33 feat(composition): support authored clocks alongside semantic timelines 2026-09-09 23:38:46 +08:00
kashorin 1f203a4f9f refactor(composition): separate semantic performance from visual layout
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.
2026-09-09 17:30:30 +08:00
kashorin 88c3deab5b merge: integrate upload lifecycle fixes and restore Quickstart demonstrations 2026-09-08 22:06:16 +08:00
kashorin e8dc1d07b6 refactor(runtime): replace content-addressed artifacts with resources 2026-09-03 13:25:57 +08:00
rponeawa e2e64d8a8e fix: remove the friction a reconstruction run actually paid for (#63)
A full reconstruction reported fourteen places the route cost it time. Twelve held. What is here is
the subset that changes the next run rather than the last one, and most of it is code: a fact stated
in a document is a fact every future reader has to carry, so where the tool could stop being wrong
instead, it does.

**The cut re-anchors instead of dropping.** An element given the span it occupies and a Moment to
close it — `during="program" until={story.moment.done}` — is on screen for the whole of any stretch
that ends before that word. `render_element` dropped it, so the one element a reference is about was
unrenderable over every Segment but the last, while the loop asks for it to be compared over each of
them. A close that has not arrived is now removed from the tag and the element stays. Marked before
the cut it really is gone, and marked inside it survived already. Measured on the run that found it:
one Segment renderable before, four after, and the two that still refuse now name a Producer failure
the drop was hiding.

**The package root comes from the Run.** It was the working directory, so naming a Run by path
resolved its imports somewhere else and the project's own elements read as packages that do not
exist. It is now the nearest `package.json` at or above the Run — the same walk `hypit check` makes.
`--package-root` still overrides it and is no longer needed to check a project from anywhere.

**The mock's frame is a hairline.** At a twentieth of the shorter side it was fifty pixels thick on a
full-frame mock, and an observer measuring what an element covers read that as the element stopping
short of the edge — reported every round, about the mock rather than about the Source.

**The comparison names its own pair.** The prompt asks for each difference to say which of the two it
is in, and `observers.md` says which is which: one is the reference, two is the render. The observer
is not told, and the caller was not either.

**`--reference-id` is in the command block** it was missing from, with what it decides. Six of the
run's first comparisons were refused for a mismatch this flag exists to prevent, and it was found by
grepping the tool's source.

Corrections that cost no length: `vocabulary.md` had the inspect output's shape wrong — Recipe
properties are inside the `recipe` attribute, not beside `attributes` — which is why the run read the
file's central claim as false. `styles.md` and `composition.md` documented two Cue keys the Style
refuses and a `display=` that is `document=`.

Two facts moved to where the reader already is rather than into the skill: `media-track`'s `extent`
summary says the ratio is what it decides, and `VisualElement` says position is measured from the
parent. The other runtime-only errors already name their own fix.
2026-08-25 02:01:28 +08:00
kashorin 490fe1125a refactor: externalize temporal windows and simplify studio adapters 2026-08-23 04:11:52 +08:00
rpone 429a2275e9 Say what the tools take, not what they stopped taking
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`.
2026-08-21 01:04:03 +08:00
rpone 03d0257b0b Rename the Playground to Studio wherever a reader is sent
`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.
2026-08-21 00:40:42 +08:00
kashorin f3d319db22 refactor: make SemanticTrack the program skeleton 2026-08-21 00:11:28 +08:00
rpone baf63f6c84 fix: stop the examples teaching a take with no picture
Three fixtures generated video from a prompt alone, and one of them was a street
interview whose own format playbook says to prepare a scene image and reference
it. Fixtures are read and copied, so they taught the shape the craft rules now
forbid.

Each establishes its location once and references that image from every take,
which is the rule it should have been demonstrating: one street stays one
street, one studio stays one studio. The scene prompts carry the reality
contract verbatim. All three still check.

The composition quickstart did the same in both languages and is fixed the same
way — including the prompt and import the converted example needs, since a doc
example that does not hold together is worse than the one it replaced. The
generation quickstart keeps its prompt-only section, because that section
documents a shape the model has; it now says plainly that craft authors with a
first frame or ordered references.

Three playbooks hardcoded 4–15 seconds, which is already wrong for one model.
They now name the selected model's declared range.

Two examples fail `hypit check` for a missing asset file. That is pre-existing
and untouched here.
2026-08-20 01:29:00 +08:00
rpone df23c73d97 refactor: rebrand Narratage as Hypit 2026-08-19 15:51:58 +08:00
kashorin 3a7c60f8cb refactor: simplify package loading and runtime execution 2026-08-17 14:03:52 +08:00
kashorin fdc17b4194 refactor: separate workspace from runtime hosts 2026-08-15 18:58:06 +08:00
rpone 5a320045de docs: start in the checkout, and stop documenting the Playground as a Develop topic
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.
2026-08-14 15:44:32 +08:00
kashorin 75f3e752b7 refactor: simplify extension boundaries and runtime presentation 2026-08-13 23:25:19 +08:00
kashorin 28bb464f25 docs: streamline project authoring and runtime guidance 2026-08-12 15:43:29 +08:00
kashorin 29c031b28c refactor(video): normalize media at track boundaries 2026-08-11 17:18:11 +08:00
kashorin 9238ad2416 docs: align local developer workflows 2026-08-11 13:41:28 +08:00
kashorin 80bcd3d8e1 feat: isolate caption authoring and close package dependencies
Replace the generic playground with a file-backed Caption Playground, separate source workspaces from installed package roots, and derive exact transitive Module providers in Node package locks.
2026-08-10 22:33:02 +08:00
kashorin 0066ab51c5 feat: normalize generated media at consumer surfaces 2026-08-10 20:16:14 +08:00
kashorin cdb29b16e0 feat: complete estimate and media authoring paths 2026-08-10 13:22:42 +08:00
kashorin 76cae8eaab refactor: separate markup text and typography
Rename the author frontend around Markup, replace PromptKit with graph-native Text templates, and keep video typography in its own package. Wire ordinary Text through explicit graph edges into model and visible consumers, refresh examples, locks, tests, and architecture documentation.
2026-08-10 10:55:46 +08:00
kashorin 81aeb2d169 Normalize logical identities and migration docs 2026-08-10 03:58:39 +08:00
kashorin 21c7b8fd8e feat: freeze the visual ir compatibility waist 2026-08-09 23:01:12 +08:00
kashorin 56e3e8f6db feat: complete unified media track 2026-08-09 17:19:10 +08:00
kashorin 4d714877aa feat: establish shared track authoring foundations 2026-08-09 13:36:28 +08:00
kashorin a3114f992b refactor: make caption planning atom-safe 2026-08-09 07:14:59 +08:00
kashorin f3d47a43c2 refactor: separate caption planning from style rendering 2026-08-09 05:22:35 +08:00
rpone 5348844381 docs: split quickstart into per-component sub-pages
Break the single quickstart.md into 7 sub-pages covering Script,
SVS Stylesheets, Media & Generation, Timing & Assembly, Tracks,
Film & Rendering, and Run Source & Builds. Each component has
standalone usage examples and combination examples. Chinese
translations for all 7 sub-pages.
2026-08-08 03:46:51 +08:00