
The lab notebook / Evidence
Technical evidence is published in English.
Tool / pipeline · ACTIVE · verified 2026-10-03
R1 Console is the studio behind the games: one entry point that generates, validates and publishes. It keeps a catalogue of 577,910 indexed sprites with a per-asset licence table, improves existing art with a local SDXL + ControlNet pass, synthesises audio in pure Python, runs a dual-GPU video pipeline, and delivers every file into a product only through a SHA-256 manifest. The games are separate products with their own repositories; the studio is the authority that produces and certifies them, not a library they import at runtime.
Numbers below were re-measured on disk on 2026-10-03 by walking library/triagem/sprites (os.walk) and by querying library/triagem/indice.db read-only, plus the studio's own CLI (python r1.py doctor, python r1.py acervo --full) and its test suite. Where a figure in the studio's own README disagrees with the disk, the disagreement is stated.
The official path is a single line, written in the architecture document and repeated in the README: brief -> DeepSeek in worktree -> tests -> local generation -> validation -> SHA-256 manifest -> publication -> product build.
Code generation is delegated, not hand-waved. The studio hands a task to a DeepSeek agent running inside its own git worktree, and the result has to pass local tests before it is allowed into a product — that is invariant 6, not a convention.
Art and audio are generated locally: an SDXL + ControlNet pass for sprites, a pure-Python synthesiser for sound, and a two-GPU pipeline for video. Everything lands first in a delivery area, never straight into the product.
Publication is the part with the most machinery, and it is worth being precise about it. python r1.py publish-manifest closes an open list of files and stamps each one with a SHA-256. python r1.py publish then runs a preflight over the whole manifest before touching a single destination: every source must exist, every destination must stay inside the product, no destination may repeat, and every declared hash must match the bytes on disk. A manifest with no files is refused, and so is a file with no hash.
Only after that preflight does it write. Every byte is copied to a temporary file beside its destination and re-hashed; every existing destination is moved aside to a backup; then each staged file is swapped in. If any swap fails, the already-applied ones are rolled back in reverse order and the error is re-raised. The receipt — project, timestamp, dry_run flag and the full file list with hashes — is written to var/runs/publish/.
python r1.py publish <manifest> --dry-run runs the same preflight and returns the same receipt without writing anything. The reference for a product is its own manifest: projects/star_swarm/manifests/PUBLISH-star_swarm.json.
1. No junction between R1 and the products.
2. No fallback that makes a game read R1 console/assets at runtime.
3. Publication only through a manifest and a hash.
4. Every model and engine has a state, a version, a licence and a health check.
5. Every generation records prompt, seed, workflow, hardware, models and output.
6. Generated code passes local tests before it enters the product.
7. The CLI, ComfyUI and the products run in separate environments.
These seven are the load-bearing part of the design: they are what keeps the studio from becoming a runtime dependency of the things it makes. The separation is real and not aspirational — config/studio.toml points each product at its own repository, and the studio doctor checks that every product path resolves outside the studio root.
The catalogue is a SQLite index, indice.db, with one row per sprite. Each row carries the path, category, view (side/top/iso/front/unknown), whether the sprite has alpha, a size band, width, height, byte count, source repo and branch. Choosing art becomes a query instead of a filesystem search.
Measured on 2026-10-03 by querying indice.db read-only: 577,910 rows, of which 329,337 are classified alpha; the byte column sums to exactly 15,317,369,625. Those three numbers also match the studio's own vault contract file and its runtime inspection.
The same figures were confirmed a second way, independently of the index: walking the 577,910 files under library/triagem/sprites returned 577,910 files totalling 15,317,369,625 bytes — the index and the bytes agree exactly.
The catalogue is spread over 23 categories. The largest are outro (186,859), terreno (82,053), modelo_3d (45,202), interface (42,769) and item (38,145). The ones that matter for 2D games are personagem (31,924), monstro (15,206), nave (9,632), asteroide (3,618), arma (3,459) and projetil (2,622).
This is not a convenience. The source collection these bytes came from has been deleted — the whole f51-labs folder is gone — and the index cannot be rebuilt, because the script that built it read a laboratory database that no longer exists. Each file is the last known link to its own bytes.
Note on the index file size: the studio's README quotes '340 MB' in one place and '348 MiB' in another, and the method document quotes '324,8 MB'. The file on disk is 364,650,496 bytes = 347.8 MiB, so '348 MiB' is the correct figure and the other two are stale — the index grew when the destino column was rewritten during the 2026-09-29 migration, and the method document was not updated afterwards.
The catalogue solves provenance; it does not solve resolution. Some of the right sprites are 38x36 and do not have enough pixels. The studio's answer is not to generate a replacement but to enlarge what is already there under the control of its own silhouette.
The recipe takes an existing sprite, centres it on a square, upscales with LANCZOS, extracts the edges with Canny, and runs SDXL with controlnet-canny-sdxl. The ControlNet holds the shape; the denoise setting decides how much the model is allowed to invent. Low denoise mostly cleans what is there; high denoise redraws it.
Three results are kept as proof, all 512x512, from a 38x36 tank body. At denoise 0.4 the upscale keeps its blockiness and nothing is added. At 0.6 volume appears: the centre circle becomes two bolts, a hatch appears, the tracks gain segments. At 0.8 it is a drawn tank — panelled lines, rivets, a raised cupola, tracks with highlights. 0.8 is the point for that sprite; it is not a rule.
The recipe also carries two corrections that the laboratory script did not have, and both are recorded with their reason: centre before enlarging, because the original stretched non-square sprites into 512x512, and re-apply the alpha at the end, because the SaveImage node writes RGB and the sprite becomes an opaque square.
This part is proven for one sprite. It is not proven for a set: seven sprites going through the same process and coming out coherent with each other has not been attempted, and the studio says so itself.
The soundtrack is generated here rather than licensed from anyone. pipelines/sound/procedural/ writes everything with the standard library alone — wave and struct, no third-party samples and no audio library.
What it adds over the original mould: a phase accumulator so a swept frequency does not click, filtered noise, envelopes measured in seconds instead of fractions, and normalisation to a peak measured below 0 dBFS. The star_swarm trail writes two 44.1 kHz square-wave files at 118 bpm, and 136 bpm for the boss.
This matters for exactly one reason, and the studio states it plainly: being the house's own work is what sustains the licence table and keeps the game sellable.
The 2D video factory chains three models: Animagine XL 4.0 defines the drawing, FLUX.1 Kontext Dev corrects the keyframes, Wan 2.2 TI2V-5B animates from the first frame.
It is written to use two cards, not to fall back to one: one GPU runs the diffusion with dynamic offload while the second runs the VAE, and there is no layer splitting over PCIe. Each run stores its workflow, telemetry, ffprobe output and hashes under var/runs/video-2d/, because without proof that both cards were used there is no complete receipt.
The studio configuration declares that requirement explicitly rather than leaving it implied: the ComfyUI service declares required_cuda_devices = 2 and enables dynamic VRAM.
One model in this chain is not commercially usable, and it is registered as such: FLUX.1 Kontext Dev carries a non-commercial licence and the registry notes it is used in the laboratory only, for editing and keyframe continuity.
Every asset came from somewhere with a different legal status, and the studio keeps that written down because it is the table that decides what may be sold. Assets were matched to their origin by md5, not by resemblance.
The star_swarm and tank_duel art is CC0, from the Kenney 2D packs (space-shooter-remastered, space-shooter-extension, top-down-tanks-remastered). The star_swarm art under assets/arte/ is different: it was generated on this machine by the r1-sdxl pipeline with seed 77001, and is the house's own. The arcade_dagger art is GPL — Endless Sky and Wesnoth — and is the one part that cannot be sold as it stands; the studio marks that project as laboratory with commercial = false.
The engine is the only dependency that is neither CC0 nor MIT: raylib-python is EPL-2.0, which permits commercial use but is not public domain.
One honest gap is recorded rather than hidden: an older manifest for the star_swarm art covers 16 of 23 PNG files. The provenance of the missing ones was confirmed by md5 — they are Kenney CC0 — but the manifest itself does not list them.
(local source: R1 console and several of the paths it expects were left behind.)
(local source: R1Vault, so that broad searches do not walk 577,910 files. On disk it is now a plain directory, and the vault target does not exist. The studio's own inspector reports three problems: not a junction, vault absent, and the junction resolving to itself.)
This does not mean the bytes are lost — they are present and complete. The index and the disk agree exactly on both count and total bytes. What changed is the arrangement, not the content: the vault was flattened back inside the repository. The move to D: also lengthened the logical paths: the longest path measured on disk is 274 characters, 15 more than the 259 recorded for the shorter vault root, which is the arithmetic of a 37-character base instead of a 22-character one. The index file itself still verifies: the studio's full check passes the SHA-256 comparison against the manifest.
The second real failure is the star_swarm delivery. The verifier reports the delivered art and audio manifests as divergent, 2 art files missing from the delivery, and 5 delivery files missing from the product. It counts 39 manifested art files where the studio's own test expects 42.
The studio is also not as tested as its README implies. The README says the suite is 44 tests. There are indeed 44 test functions, but pytest collects 47 cases and the honest result is 2 failed, 43 passed, 2 skipped. The two failures are the vault check and the delivery check described above — the suite is catching real drift, which is the point of having it.
Two more things are recorded as missing rather than solved: animation. The studio has proven a still sprite can be redrawn properly; the same sprite across several frames of a walk cycle has not been attempted or measured. And the Triagem folder is no longer rebuildable at all, by any code path.





D:\R1 console\README.md
The flow, the catalogue figures, the detail pass corrections, the audio method, the provenance table, the known traps, and the list of what is still missing.
D:\R1 console\docs\ARQUITETURA-ALVO.md
The official flow and the seven invariants, verbatim.
D:\R1 console\docs\ACERVO.md
What the collection is, how much of it there is, why it cannot be replaced, what was verified and how, and the index migration.
D:\R1 console\docs\ESTUDIO.md
The catalogue and index method, the denoise experiment described file by file, and the honest list of gaps.
D:\R1 console\docs\INVENTARIO-MOTORES.md
The state, canonical destination and version of every registered engine and generator, verified 2026-09-30.
D:\R1 console\library\triagem\VAULT.json
The expected file count, byte total, maximum physical path and index SHA-256 that the studio checks against.
D:\R1 console\LICENSE
Per-file md5 provenance for the GPL art, and the materialised licence position of every third-party component. The studio's own licence is stated as undecided.
D:\R1 console\registry\
Machine-readable register: engines.toml, licenses.toml, models.toml, tools.toml, each component with state, licence and canonical path.