diff --git a/Development.md b/Development.md index 502920a..56004a4 100644 --- a/Development.md +++ b/Development.md @@ -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 # 2061 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 2062 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 diff --git a/Videos.md b/Videos.md index 43449c4..884f77a 100644 --- a/Videos.md +++ b/Videos.md @@ -171,13 +171,14 @@ Two action nodes record what the game view shows, with what the master plays (#4 | Node | | |---|---| -| **Start recording** | **name** (empty: `Recording 2026-10-11 16:42:05`, when it started), **resolution** (*Game view*, *720p*, *1080p*), **fps** (*60*, *30*) | +| **Start recording** | **name** (empty: `Recording 2026-10-11 16:42:05`, when it started), **resolution** (*Game view*, *720p*, *1080p*, *1440p*, *4K*), **fps** (*60*, *30*), **Sound**, **Convert**, **Import after conversion** (all three on, as in **Start recording…** below) | | **Stop recording** | ends it and saves it | - **The picture** is the camera's, nothing of what lies over it: no notice, no fullscreen button, no performance overlay, no letterbox, no menu or window of the editor. *Game view* records at the - size the picture has on screen when the first frame is taken (at most 3840x2160), *720p* and - *1080p* at that height, the width from the camera's shape. A window smaller than that is no + size the picture has on screen when the first frame is taken, *720p* to *4K* at that height, + the width from the camera's shape. Either is at most 3840x2160: a camera wider than 16:9 comes + out at *4K* scaled down to 3840 wide, a little lower. A window smaller than that is no loss: the frame is drawn into a picture of its own at its full size. Text and a camera shader are drawn at the size of the screen, though, and are scaled up with it, so they come out softer. The size holds for the whole recording. @@ -186,6 +187,7 @@ Two action nodes record what the game view shows, with what the master plays (#4 drawn there flickered in its corner. The picture comes back from the graphics card a frame or two later, without the editor waiting for it. - **The sound** is what leaves the master behind its limiter, what you hear. Opus, 160 kbit/s. + With **Sound** off the file has the picture alone. - **It goes on** through `Load scene` and `Restart game`. The editor's pause holds it and leaves the paused time out; a game that pauses itself is still seen, so that is recorded. Another tab in front of the Game tab does not stop it. Ending the run (Esc, `Stop game`) saves it. @@ -194,14 +196,22 @@ Two action nodes record what the game view shows, with what the master plays (#4 time is left out too, for at most 3 s at a time. A `Start recording` right after `Play composition` therefore begins with the composition's first picture, not with the empty frames while its video loads. +- **The game waits for the recording to start.** Setting up the encoders takes a moment, in a + test about 0.17 s, and no frame can be taken meanwhile. So the run holds until they are ready, + for at most 3 s, as it holds for its videos at Play. A `Start recording` in `On start` therefore + has the first frame of the run, and one later on starts at the frame it ran in. The game stands + still on screen for that moment; a sound already playing goes on. - **One at a time:** a second `Start recording` while one records is ignored and says so in the log, and so does a `Stop recording` with none. In the editor run (*Run in editor*) the nodes only write to the log. - **In the editor** the recording goes up to the server like any upload and is converted to MP4. Once that is done, and the run is over, it is a video asset of the project with its name, ready - for a sprite or for **Download** in its tab. The notice line says how far it is. + for a sprite or for **Download** in its tab. The notice line says how far it is. **Convert** and + **Import after conversion** stop it short of either step, as for the editor recording: it is + always uploaded, and the video picker has it. - **In a released game** there is no project to put it in: the browser downloads it as an `.mkv` - when it ends. That file is the one the browser made (H.264 and Opus), not converted. + when it ends. That file is the one the browser made (H.264 and Opus), not converted; **Convert** + and **Import after conversion** do nothing there. - **A file of 2 GB**, the most an upload may be, ends the recording and saves it, with a line in the log. At 1080p60 that is roughly half an hour. - **When the encoder cannot keep up**, a frame is left out rather than everything falling behind;