Videos: recording the whole editor from the main menu

- New section "Recording the editor": the menu entry, no options, the
  pointer drawn in, the red dot left out, no second drawing.
- Development: 2039 editor checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-12 13:40:56 +02:00
1 parent 440c0e4428
commit 796bf8d460
2 files changed
+27 -2

No files matched your search

+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 # 2038 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 2039 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
+26 -1
@@ -197,7 +197,32 @@ the editor itself (`src/core/recording/matroska.ts`) in clusters as the frames c
frame rate and the colour (BT.709) in its head, so nothing has to guess them. The rules (size,
codec level, which frames are taken, where the picture goes in a frame) are plain functions in
`src/core/recording/recording.ts`, the browser's side is `src/viewport/GameRecorder.ts`, and
`src/viewport/PictureReader.ts` reads the frames back through pixel buffers with a fence.
`src/viewport/PictureReader.ts` reads the frames back through pixel buffers with a fence. The
encoders, the sound and the file are `src/viewport/RecordingTake.ts`, which the editor recording
below shares.
## Recording the editor
**Start recording** in the main menu (top left) records the whole editor, for a tutorial or a bug
report. While it records, the entry reads **Stop recording**, and a red dot with the time stands
beside the menu button.
- **No options:** the name is `Recording <date> <time>`, the size is the editor's canvas in device
pixels (an odd row or column is cut off), 60 fps. The sound is the master, as for the game view.
- **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.
- **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
it. An idle editor draws nothing, and the recording repeats its last picture.
- **A resized window** is fitted into the size the recording started with, centred, the rest dark.
- It runs on through Play and Stop, beside a recording of the game view if a game starts one.
Saving is the same: up to the server, then a video asset once the editor is not playing.
The code is `src/editor/EditorRecorder.ts`, the pointer shapes are `src/core/recording/cursors.ts`.
## The worker