A17 Switches fills name, variable, value and When off in the toggle window (#361) and saves with its Done; the Pick one line says Show in Assembler. Retaken on the PC against dev f30185d3.
* refactor(note): open the note's text in the kit Modal instead of a one-off window shell
NodeEditWindow duplicated the kit's Modal (header, body, footer, × with Esc)
and lacked its focus handling. The note text window now uses Modal at size lg
with a ConfirmModal before discarding changes; NodeEditWindow and its kit
page entry are gone.
* chore(docs): regenerate docs index after dropping the NodeEditWindow kit entry
Callout hold rule, dead-pause fix after runs, A17 rewrite (toggle variables first), AI3 ends by rendering with the built pack's top bundle, AI1 line, box lines in A16/T10/T12, N13 at 20x, and three starter-library items (Daydream, Lights on or off, Shot per frame).
The text and a live preview move into a window like the module editors
(NodeEditWindow, shared with the Toggles editor). The node keeps tone,
look, colour, title, pin and the bookmark settings. An open Note or
Bookmark editor now lets presses on its background through, so the node
drags.
AI4 asks the chat for a tag from the local tag list instead of the live Danbooru lookup. Retake fixes: template tooltips left open (A04/A18/A19), A18 convert box timing, N12 grid label, T10 reset line split, T12 callouts held for their lines.
* feat(tutorials): in-depth Context Loop, Context Injector and Image Filter videos
N05 walks the whole Context Loop (frames vs batch size vs Run count, Edit
frame chips, Override Context seed, strategies, the seeds panel, Ctrl/Alt
click, values, a rule on $iteration, Seed List, Hold, Bypass loop). N04
takes the Context Injector apart and N12 the Image Filter (labels, prompt
edits with clip, the mask painter, Compare, Zoom, Send to Loop, the node's
settings). The old Nodes videos move to their new numbers (Debug N03,
Label & Grid N13, Note N14, Bookmark N15); N12 replaces the old N01.
* fix(tutorials): tick both rows in T03's bulk edit
The selection bar slides in after the first tick and moves the rows, so the
second click could land where its row used to be. Tick one row at a time and
check each one took.
* fix(tutorials): scroll T05's rules into view before boxing them
scrollTo now falls back to scrolling the part's own scrolling box when the
wheel doesn't move it, and T05 scrolls each branch (and the second action)
to the upper screen before its callout, so the boxes are on screen.
* fix(tutorials): narrate T06's canvas build so it plays at normal speed
The two builds had no line, so the render squeezed them to 4.5x and the
hand looked rushed. A line over each keeps them at normal speed.
* fix(tutorials): a hand at work plays at most 2x in the render
The Tutor now records when the hand clicks, drags, types or presses a key
(cues.json acts), and render.mjs speeds a silent stretch with hand work up
by at most 2x instead of up to 8x, so builds don't look rushed. The ten
longest silent builds (T04, A04, A05, A06, A09, A10, A12, L03 and two in
N14) get a line, so they play at normal speed.
* fix(tutorials): give N04's Injector room beside the stand-in nodes
The Injector landed on the first text box and covered its output, so the
first wire never connected. The stand-ins sit further right, the Injector
further right still, and the canvas slides left before the Context step.
* fix(tutorials): keep both ends of N12's new wires on screen
The mask wire was dragged from the filter to a node that had scrolled off
the top, so it dropped on empty canvas. The canvas now fits the nodes of
each wire into the free part of the screen first, and the new Set Latent
Noise Mask goes under the refine sampler.
* fix(tutorials): N05 and N04 fixes from the first takes
N05: zoom in on the Seed List while it's talked about (it sat under the
caption), and drop the callout labels that covered the frame chips and the
template. N04: narrate the Context / Assembler / preview build (36 s of
silence) and move the hand off the rows so the globe tooltip closes.
* fix(tutorials): paint N12's mask on the painter's canvas
In paint mode the mask painter replaces the detail image, so the strokes
aimed at an image that was no longer there.
* fix(tutorials): a single click doesn't hold a long wait at 2x
A Run click followed by a long wait counted as hand work, so the wait played
at 2x instead of being squeezed. A stretch now needs two or more hand
actions to be capped.
* fix(tutorials): tuck N12's picker away with its minus button
Escape in Detail goes back to the grid instead of tucking the picker away,
so the waiting pill never showed.
* fix(tutorials): box N12's two extra slots as a pair
The callout took one locator matching both slot dots, which strict mode
refuses.
* fix(image-filter): keep the picker's keys after a view change
Switching mode or leaving the painter removed the focused control and dropped
focus to body, so the picker's keys went to the canvas bookmarks. Focus goes
back to the picker. N12 hands the keys back before Compare and Zoom.
* fix(tutorials): L05 waits for Role's save to store a history entry
* fix(tutorials): a few clicks across a long wait don't cap the squeeze
* fix(tutorials): review 2026-11-11 first half (lines over empty canvas, late boxes, N12 framing)
* fix(tutorials): review 2026-11-11 A09-A19 findings
* fix(tutorials): review 2026-11-11 L03, L05, N14, E4 findings; jumpTo keeps tall notes above the caption
* fix(tutorials): A06 and T05 build their Context before the line
* fix(tutorials): N14 keeps the label's peek open through its line
* fix(tutorials): N12 boxes the extra slot rows; callouts fall back to the raw box
* fix(tutorials): N14 hovers the label before its line
* fix(tutorials): N14 keeps the hover card up while its line plays
Render: squeeze silent stretches over 12 s and cut a silent opening.
Tutor: clear tooltips after each line, close suggestion lists in DOM-widget
fields, deselect(), zoomOn(top), jumpTo() zooms example steps and boxes
their notes; the caption moves up over open lists.
Tests: AI4 fails on a refused lookup, AI3 fixes until clean, Assembler
preview out of frame (A05/A12/A13), actions before their lines, late and
oversized callouts, parts under the caption, Done before the outros.
* feat(tutorials): narrate with Qwen3-TTS, checked takes and a Kokoro stand-in
* fix(tutorials): load faster-whisper with a test transcribe, CPU when CUDA 12 is missing
* feat(tutorials): spoken text apart from captions
* feat(tutorials): voice short lines like statements
* feat(tutorials): render the voice at -19 LUFS
Fixes every recording issue from the tutorial video review; T10 shows ComfyUI palettes; records on Watchwright 0.16 high quality at 60 fps with correct colours.
Clipped callouts, addNode blur, A04/A15/A16 test fixes, L06 tidy library, example workflows on an installed SDXL checkpoint without the missing-model toast or old tabs.
Reworks the video tutorials from the review notes: a new precise tutorial library, every video moved to it, a new pool video (A03b), pool filter by variable in A05/A12/A15, and presenter fixes.
* feat(tutorials): smaller straight-moving pointer, callouts follow their target, Flux Klein showcase
- the pointer is smaller and scrolls along a straight line to its target
- a callout follows its target and leaves when the target is hidden or covered
- the showcase loads a UNET + CLIP + VAE (Flux 3 Klein by default) or a checkpoint
- the voice reads LoRA, ComfyUI and $var_names the way they are said
- T01 boxes the whole Import committed toast
* style(tutorials): shorten speak.py docstring
The preview dropped 11 instance keys the engine reads (constraint reach, cell/exception overrides, derivation branch edits, hold seeds), so it could show picks the run never makes. A test now checks the whitelist against the engine handlers.
A06 showed the fallback with the constraint below Setting, where it reached nothing. The video now shows the wrong pick and the badge, drags the constraint into place, then shows the throne room on every seed.
Get started opens with the tour (T00), then the library import (T01), then the first prompt (T02), with re-chained narration and a 2.21 version note. AI1 says models can make things up and bigger ones do better.
All 51 video tutorials as Watchwright tests in tutorials/ (T00-T12, A01-A19, L01-L06, N01-N05, E1-E4, AI1-AI4), with the Tutor fixes found while recording them.
* fix(tutorials): cut page loads out of the videos
go() waits for the line being spoken, then the page load and the canvas
clean-up are cut from the video instead of playing under the narration.
* fix(tutorials): open the page before the line that talks about it
A line spoken before go() played over the previous page (at the start of a
take, the last take's canvas). Load first, then speak; a take that opens a
page first starts after that load.
* fix(tutorials): never wheel-scroll on the canvas, where the wheel zooms
* chore(tutorials): T04 hides Hero and Outfit once the combine uses them
* chore(tutorials): show WP Debug while the showcase images land
* chore(tutorials): T07 templates: save, load and edit Prompt Assembler templates
* chore(tutorials): T08 bundles; keep WP Debug above the captions
* chore(tutorials): T09 Context node, A01 tag groups, hide unused variables, WAI checkpoint
- T09: seed after-run modes, item seed lock, row menu, per-node edit, node help
- A01: tag groups (descriptive and accepts), $gear.SHOES; Travel gear in library.json
- T04, T05, T08 hide variables no template prints; T08 opens its bundles before folding them
- Fast-forward waits for the caption so it no longer flashes past
- WP Debug refits after each run; a tall Context folds its rows first
- Default checkpoint waiIllustriousSDXL_v170
* fix(tutorials): render starts a sped-up part after the caption on screen ends
* fix(tutorials): WP Debug sits snug under the Context; node search retries; T09 picks Randomize
* style(tutorials): wrap a long line in speak.py
* fix(tutorials): keep voice in sync, bigger previews, one bundle open at a time
render.mjs makes the recording constant frame rate before cutting it (the
recorder only writes changed frames, so still stretches dropped out at each
cut and the picture ran ahead of the voice), lines the voice up at every
sync mark and paints the marks out. The hand waits until the voice is
partway into a line, and page loads no longer wait for the line to end.
Nodes sit higher and the Assembler further left, so the preview and the
Debug rows fit; T08 opens one bundle at a time; T09 really sets Randomize.
Adds the tutorials/ Watchwright pack (T01 "Your first random prompt"), Kokoro voice lines and render.mjs; bench resetLibrary checks the fixture's own module count.