Sounds, Videos: a video's own node in the Master routing

- Sounds, Videos, Compositions and Architecture describe the video
  node: links, its own bus, the rule for the links of a new video, and
  that the tabs play straight into the Master.
- Videos: the recording badge is an HTML element over the canvas.
- Development: 2043 e2e checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-12 16:16:11 +02:00
1 parent 43764a8500
commit 0598e2d27d
5 files changed
+33 -20

No files matched your search

+4 -3
@@ -168,9 +168,10 @@ src/core/music/ time (ticks, 480 to the quarter, tempo and meter, a posit
the sequence a song plays, the level of a track's bus, an item cut at a tick),
routing + routingNodes (#350: a song's routing graph, a node per track and the output;
`addLink` is the one rule for a link both routings keep), projectRouting (#351: the
Master routing, a node per sound, instrument, pattern, song and bus and the master; a
new asset takes the links most others of its type have), songBuses (the buses a song
plays on, mute and solo as gates), mixer (the master bus and `mix:<id>`), needs (a
Master routing, a node per sound, instrument, pattern, song, video with sound and bus
and the master; a new asset takes the links most others of its type have), songBuses
(the buses a song plays on, mute and solo as gates), mixer (the master bus and
`mix:<id>`, `videoBusesOf` the bus of each video file), needs (a
sound FX with its parameters, or none), playbacks (what a sequence loads before it
plays), embedded (#355: what a song keeps to itself), ghosts (#339: the notes around a
pattern item), take (#342: a recorded take as 16-bit WAV, cut to where the song started),
+2 -1
@@ -84,7 +84,8 @@ the clips as narrower bars above them. The header bar has **+ Track**, **Play**
**The picture** is a scene view whose objects are the items alive at the playhead. A click picks
an item or its child, dragging moves the real object. It takes nothing from the asset panel and
nothing from `Ctrl+V`: an object put there would have no item. Driven videos follow the playhead
and are heard while it plays.
and are heard while it plays, straight into the master as in every tab. In a game they go along
the links of their video in the [Master routing](Sounds#master-routing).
**The hierarchy** lists the items alive at the playhead; re-parenting is off there, because items
stay at the top. **The inspector** of an item shows its object's rows and a block **TIMING**:
+1 -1
@@ -21,7 +21,7 @@ php tests/php/releases.test.php # the release stor
php tests/php/files.test.php # uploaded files in a folder per account (#344), the same way
php tests/php/videos.test.php # the video store, its queue and the worker (#402), with the
# real ffmpeg: the CI image and game-maker-video have it
node tools/seed-e2e.mjs && node tools/e2e.mjs # 2040 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 2043 editor checks, screenshots in /tmp/gm-e2e-*.png
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
./e2e.sh start [GM_STEPS] # the same run detached, see below
./e2e.sh status # live progress, or the last run's result
+13 -9
@@ -335,16 +335,18 @@ master goes straight out.
**Menu → Master routing** opens a tab with one graph per project (#351). It works like the
[routing of a song](Songs#routing), one level up:
- **A node per asset.** Every sound, instrument, pattern, song and bus of the project has one,
named after it, and there is one **Master**. The nodes come and go with the assets: a new asset
- **A node per asset.** Every sound, instrument, pattern, song, [video](Videos) with sound and
bus of the project has one, named after it, and there is one **Master**. The nodes come and go with the assets: a new asset
gets its node in a column for its type, and a deleted one takes its node and its links along.
They cannot be added or deleted by hand. What a song keeps to itself (an embedded sound or
pattern) has no node: its song routes it.
- **A new or duplicated asset goes where the others go** (#365). A sound, instrument, pattern or
song gets the links most others of its type have, at their volume: with two sounds in *SFX* and
*Reverb* and one on the master, the next one goes into *SFX* and *Reverb*. On a tie the latest
of them decides, so if there is only one song, the next one follows it. Where nothing of its
type is linked yet, it goes as most of all that plays, and where nothing is, to the master.
- **A new or duplicated asset goes where the others go** (#365). A sound, instrument, pattern,
song or video gets the links most others of its type have, at their volume: with two sounds
in *SFX* and *Reverb* and one on the master, the next one goes into *SFX* and *Reverb*. On a
tie the latest of them decides, so if there is only one song, the next one follows it. Where
nothing of its type is linked yet, it goes as most of all that plays, and where nothing is, to
the master. Videos and the music go by each other apart: a video where no other video is
linked goes to the master, not where the sounds go, and a song does not follow the videos.
A new bus is always linked to the master.
- **Links are sends.** A drag from the out of a node into the in of a bus or of the master links
them. A node may have several links, the same sound then goes everywhere it is linked at once:
@@ -353,7 +355,8 @@ master goes straight out.
- **Volume and Mode of a link** are in the inspector when it is picked: its level from -60 to
+12 dB, 0 by default. A link out of a bus or a song also has a **Mode**, as on a track: after the
volume (the default), after the sound FX but before the volume, or before the sound FX. A link
out of a sound, an instrument or a pattern always takes it after the volume and the sound FX.
out of a sound, an instrument, a pattern or a video always takes it after the volume and the
sound FX.
- **No loops.** A link that would lead round to where it started is refused.
- **A node without a link is never heard.** It says *Goes nowhere*, and the header counts how many
do. A deleted bus leaves what went only into it on the master, so deleting a bus silences
@@ -393,7 +396,8 @@ in its pause menu sets a bus volume itself, for instance *SFX* to 0 while *Music
**In the editor** the tabs leave the Master routing out (#368). The Sound, Sound FX, Instrument,
Pattern and Song tab play through the sound FX of their asset and then straight into the master,
whatever its links say. So a bus with a reverb on it is not heard in a tab, but a compressor on
whatever its links say. The Video tab, the Composition tab and the preview of the Animations tab
play a video's sound straight into the master too. So a bus with a reverb on it is not heard in a tab, but a compressor on
the master is. Inside a song its own [routing](Songs#routing) still counts. The Sound FX tab plays
the sound it tries out through the FX in the tab instead of the sound's own.
+13 -6
@@ -54,7 +54,9 @@ The clip gestures are the same as in the [Sound tab](Sounds), with the track in
- **A click in the ruler** shows that moment, and stops a play.
- **Play** (or **Space**) plays the picked clip, else the whole video, with its sound and its
Loop. It starts at the playhead when that stands inside, else at the start, so Stop and Play
go on where it stopped. The playhead runs along the ruler.
go on where it stopped. The playhead runs along the ruler. The sound goes straight into the
master, past the video's links, as in every tab (see
[Sounds](Sounds#master-routing)). So a recording of the editor has it.
- The wheel zooms the time, the middle button pans, **Fit** shows the whole video. A wheel step
and Fit are shown as the short zoom transition of the other tabs (see [Concepts](Concepts)).
- **Download** saves the MP4 the server made, under the asset's name.
@@ -72,9 +74,13 @@ take pictures only.
- **In the editor** a placed video plays in the scene view without sound, round and round, as a
preview. The sprite's PREVIEW in the inspector plays it too, placed or not. A video nothing
shows for 2 s is let go and starts over the next time it is shown.
- **Play** starts every video over at its clip's start and lets it be heard through the master
bus at the video's Volume. A pause holds it, Esc makes it a quiet preview again. A
[released game](Concepts) does the same.
- **Play** starts every video over at its clip's start and lets it be heard at the video's
Volume, along its links in the [Master routing](Sounds#master-routing). A pause holds it, Esc
makes it a quiet preview again. A [released game](Concepts) does the same.
- **A video with sound has a node in the Master routing**, like a sound: a new one goes where
most other videos go, or to the master where none is linked yet, never by where the sounds
go. A link sends it into a bus or the master. A video without sound has none.
Where two video assets use the same file, the links of the first one count for both.
- **Two sprites wearing the same clip share one player** and show the same picture at the same
moment. A video plays in real time; the game's time scale does not slow it down.
@@ -213,8 +219,9 @@ beside the menu button.
- **The mouse pointer is drawn in.** The system draws it over the page, so it is not in the canvas;
the recording draws its own in the shape the editor shows (arrow, hand, resize arrows, I-beam,
crosshair).
- **The red dot is not in it.** It is drawn onto the screen after the frame is taken, and the room
it needs beside the menu stays empty in the recording.
- **The red dot is not in it.** It is an HTML element over the canvas, the one thing on the page
outside it, so the copy of the canvas never holds it; the room it needs beside the menu stays
empty in the recording. Clicks go through it.
- **Everything else is**, the menu that stops it included: cut the end off afterwards if it is in
the way.
- **It costs no second drawing.** The frame is copied from the canvas right after the editor drew