Repository navigation
EN Studio Storyboard
Français · Type: how-to · Audience: author · Context: local Studio · Status: ready · Applies from: 4.2.1
The local Studio · contract: stable · verified by CI (support matrix of 4.4.0, 2026-10-23): Chromium end to end (the Studio's checks); Windows: the unit suite only · automated checks: jobs
e2e,windows; CI plane2e,windows; 2 test files · people's passes:studio-hero-matrixnot run (#238) · known limits:whole-document-save
The Storyboard tab edits storyboard.json, the script of the game, board by board and panel by panel, shows each
panel the way the game would stage it, and says what of it the game already does.
A games/<id>/storyboard.json written by the Studio, each panel previewed as a frame, a coverage badge on every board
and panel, and, if you want, a storyboard.md to read or share.
The local Studio, in the engine repository or a created project; the demo Studio too (its edits stay in the browser). True from 4.2.1. Why the storyboard is the source of truth, and how it relates to the content: The storyboard, source of truth.
- The Studio running (overview).
- No
storyboard.jsonyet is fine: the tab starts from{ boards: [] }. The schema istools/pages/storyboard-schema.md.
In the browser, on the Studio's Storyboard tab. The optional command line export runs in the engine repository.
- Boards. On the left, the boards (title, room, goal), with move up, move down, add and delete.
-
The selected board, in the middle: title, id, room ("Open in Rooms" switches to that room), goal, exit, its
arrival lines, then its panels as cards in play order. A panel has a title, an id, the player action
that triggers it, and lines with a speaker chooser (the game's characters,
hero,action,stage) and sfx chips taken from the game'saudio.sfx. Per line: move, delete, "+ line". Per card: move, duplicate, delete. Then the board's hints (ordered), the talk topics per character (topic and lines) and the optional reactions (action and lines).
-
The frame, on the right: the selected panel composed like a storyboard frame, with the room's decor, the
portraits of the panel's speakers (the one speaking highlighted), the current line in the game's speech style (the
speaker's colour; step through the lines, or click one in the script below), the action as the game's sentence bar,
and the sfx. Under it, the notes about this panel (
about= the panel id) and a box to add one (Notes).
- Save. Every edit stays in memory until Save (or Ctrl/Cmd+S while the tab is shown) writes the whole document. "● Unsaved changes" shows until then, and leaving the page asks first. Save refuses duplicate or empty panel ids, because notes hang on them. An unchanged storyboard is not rewritten; a changed one is written compactly (what fits on 120 columns stays on one line).
-
Read the coverage. After every load and save, the saved storyboard is checked against the content
(
src/engine/tools/coverage.ts): a badge on each board and panel, ✓ everything is in the game, ~ partly, ✗ something is missing, ? prose. Under a panel, the list of what is not there yet: an action no rule answers, a line the game does not say, a sound not inaudio.sfx. The bar shows the overall score. The same check is in the Check tab ("Storyboard coverage") and is thestoryboard_coverageMCP tool.
-
Export Markdown writes
games/<id>/storyboard.mdfrom the saved file; it offers to save first. The same text comes from the command line:# in the engine repository npm run page:storyboard -- --md
Limit ·
whole-document-saveSave writes the whole document. Whenstoryboard.jsonchanges on disk (an AI, an editor, git), a banner offers to reload; with unsaved edits, it warns that saving would overwrite that change. Reload first if you want to keep it.
"● Unsaved changes" disappears after Save; git diff games/<id>/storyboard.json shows your change; the badges turn
✓ as the content catches up with the script.
| Symptom | Cause | Fix |
|---|---|---|
| Save refused: a panel id is empty or used twice | Notes hang on panel ids | Give each panel a unique id |
| A banner says the file changed on disk | An AI, an editor or git wrote it | Reload, or save knowingly over it |
| Export Markdown answers 404 | No storyboard.json saved yet |
Save first |
| ✗ under a panel | The game does not do it yet | Write the rule, line or sound it names |
games/<id>/storyboard.json; games/<id>/storyboard.md on export; games/<id>/notes.json for panel notes.
The header's Undo does not cover the storyboard (nor the notes): a Save is a journal operation, but not an undoable
one. Go back with git: git checkout -- games/<id>/storyboard.json.
-
src/studio/storyboard.ts,src/studio/storyboard-model.ts,tools/pages/storyboard-data.ts(schema, normalisation and Markdown export, shared by the page generator, the core and the UI). - The storyboard, source of truth, Check.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.4.0 r1, documentation revision · révision de la documentation 8dc717c69acb62c4742b69c54a7e7dfb620f75d8.
Earlier versions and permalinks · versions précédentes et liens permanents: https://wanoo.github.io/quest-n-click/docs/
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Start (6)
Play (9)
Install (17)
- Requirements
- Install from the release archive
- Install from npm, once published
- Install from the repository to work on the engine
- doctor: checking your machine
- Image toolchain
- Audio toolchain: ffmpeg, fluidsynth, Furnace, uv
- Upgrade
- Upgrade notes: 4.4
- Upgrade notes: 4.3
- Upgrade notes: 4.2
- Upgrade notes: 4.1
- Upgrade notes: v3
- Upgrade notes: v2 to v3
- Coming from web-scumm
- Package reference
- Install troubleshooting
Create a game (55)
- Your first game
- Layout of a created project and of the engine repository
- The working loop
- Content principles and the identity contract
- Rooms
- Geometry: placement, walk zones, masks, layers, camera
- Something is visible but unreachable
- Reactions
- Game commands
- Conditions
- Flags, variables and events: which to use
- Custom code
- Characters
- Items and inventory
- World map
- Dialogues
- Scripts and events
- Moving characters: patrols and walks
- Exits
- Chapters and objectives
- State and saves: persistent or temporary, renaming an id, migrations
- Staging: wide rooms and animations
- The stage: lights, particles, floors
- Skin and fonts
- Title and credits
- Heroes: several characters and hero choice
- Built-in minigames
- A custom minigame
- Translations
- Music in stems
- Sound effects
- Voices: per language and per hero
- Images: prompts, cutting sheets, transparency, scale
- Asset provenance
- The storyboard, source of truth
- Puzzle design
- Classic mechanics
- Review pages
- DSL reference
- Checking your game
- What the solver proves
- Solver options
- Playtests
- Remix
- Speedrun for authors
- The sealed ending
- Production template
- Example games
- Working with an AI
- Build and release a game
- Publish on GitHub Pages
- The static game on Clever Cloud
- Other static hosts
- Sub-path, cache and service worker, incomplete deploys, going back
- Testing on a phone over the LAN
Local Studio (24)
- The local Studio: overview and launch
- Edit a room
- Placement and stage
- Preview, apply, undo
- Storyboard
- Assets and cutting
- Check: validator, solver, critical path, heat, health, coverage
- Before and after captures
- Semantic diff
- Play and replay a session
- Rule explainer
- Language and objectives
- Voices and the heroes × languages matrix
- Map
- Notes
- Remix in the Studio
- Music
- The Assistant: bring your own key
- Demo mode and studio-apply
- Local and LAN security
- Studio API
- Local MCP: setting up each client
- MCP tools
- Studio troubleshooting
Team Studio (21)
- What runs where
- Concepts: revision, transaction, span, lease, preview, build
- Starting as an invited dev
- Working together day to day
- Roles and actions: the full matrix
- Invitations
- Managing members
- Write refused on the hosted Studio: stale base revision (409)
- Write refused on the hosted Studio: span locked (423)
- Recovering after a lost lease, a disconnection or a stale preview
- Comments
- Map and semantic diff
- Publishing builds
- Remote MCP
- The game in Git
- Upgrading the engine of a hosted game
- Hosted assets
- The server's command line
- Health and metrics routes
- Trying it locally with compose.yml
- Known limits
Clever Cloud (23)
- Clever Cloud: overview, cost and prerequisites
- Apps and add-ons
- Domains and TLS
- Keycloak
- Generic OIDC and GitLab
- Configuration
- First deployment
- Backups
- RPO and RTO
- Restore the Studio on a fresh installation
- Redeploys
- Upgrading the server and checking state after a migration
- Limits of going back
- Monitoring
- Security
- Rotating keys
- Recovering admin access
- Changing domain or OIDC provider
- Worker, PostgreSQL or Cellar down
- Exporting the game and leaving the installation
- Retention
- Clever Cloud troubleshooting
- Costs and teardown
Reality Bridge and connectors (16)
- The Reality Bridge: what it is
- Quick start
- Guarantees
- Install and run the Bridge
- Backup and restore
- Several tenants
- Signals and the manifest
- The Bridge's command line
- Connectors overview
- Email connector
- Telnet connector
- SSH connector
- Open Badges connector
- The connector SDK
- Security: Biscuit and signatures
- Bridge and connector troubleshooting
Contribute (25)
- Welcome
- Developer setup
- The dev loop
- Before a pull request
- Conventions
- Writing documentation
- Architecture
- Code tour
- Import boundaries
- Which tests run when
- Mutation testing
- The coverage ratchet
- The quality baseline
- CI explained
- Field passes
- Benchmarks
- Releasing
- npm packages
- Decisions and ADRs
- Governance
- Bot pull requests
- Contributing with AI agents
- Security policy
- Code of conduct
- Licences and credits