Three skills that take an Academy lesson from a source text to a storyboard you can approve: the spoken script, the burned captions, the in-scene text, the shot list, the generation prompts, and a page of rendered frames.
Each stage owns a narrow contract: what it reads, what it writes, what it is not allowed to touch, and where it stops.
One command for the whole chain. It takes a subject, a lesson URL or a pasted text, works out what already exists on disk, and calls the right stage next. Every rule about what may be written and how a shot is prompted lives in the stage skills, never here.
| Reads |
What the user brought, and the state already on disk under
episodes/<slug>/
|
| Writes | Nothing itself. Every file is written by the stage it delegates to |
| Owns | The routing decision, and presenting each stage's gate |
Converts one Academy lesson into an episode: the spoken script, the burned captions with their timings, and the in-scene text, written into a manifest that the storyboard stage and the render pipeline both read. The script is also the voiceover.
| Reads | The source text, the series glossary, the pipeline config |
| Writes |
source.md, episode.yaml,
script.md
|
| Owns |
slug, title, duration,
intro, vo, subs,
cards, marks
|
| Never touches |
shots, and anything the production stage writes
|
| Stops at | A validated manifest and a script presented for reading. It does not storyboard |
Two stops: the case line with its beat sheet, and the finished script. Nothing reaches a review page without a written go, per episode.
Turns the episode manifest into its shot list, its generation prompts and the page of rendered frames that gets approved before anything is generated. It reuses footage that already exists before writing a prompt for footage that does not.
| Reads | The episode manifest, the prompt recipe, the config, the shot library |
| Writes |
shots in the manifest,
storyboard.md, the rendered storyboard page
|
| Owns |
shots only: duration, beat, reuse or prompt,
reservation, optional replay speed
|
| Never touches | The wording of the script, the captions, the cards or the duration. Those belong to stage 1 |
| Stops at | A storyboard page presented for review. It does not generate |
The storyboard page needs a written go. Nothing is generated, and nothing reaches a review page, before that page has been answered.
None of these is a preference. Each one is the result of a generation that came back wrong, measured on the frame, and written into the skill so it is not repeated.
The manifest is validated before anything is shown to a human, so a review is spent on judgement rather than on catching arithmetic. Every one of these is a hard refusal, not a warning.
The skills call a small set of local tools.
# the whole chain, from a subject or a pasted lesson /layerv-academy-video # or one stage at a time /layerv-video-script /layerv-video-storyboard # check the script against the source it came from python3 tools/check_source_fidelity.py <slug> # validate the manifest: timings, counts, figures, labels python3 manifest.py episodes/<slug>/episode.yaml # what footage already exists and does not need generating python3 library.py # render the review page: two frames a shot, captions burned in python3 build_storyboard.py
| File | Carries |
|---|---|
| source.md | The lesson verbatim, with where it came from and the date. Every later claim is checked against it |
| episode.yaml | The source of truth: title, duration, voiceover, captions, in-scene text, shots and prompts |
| script.md | The readable artefact: the gate line, the product door, the voiceover by beat, the captions with their timings, the word counts |
| storyboard.md | One section a shot: its window, its beat, what the character does, the overlays landing on it, and the prompt in full |
| storyboard page | The review artefact: rendered frames with the spoken line and the caption beside each one |