<feed xmlns='http://www.w3.org/2005/Atom'>
<title>demo.git/cnn_v3/training, branch main</title>
<subtitle>Vide-coded 64k demo system</subtitle>
<id>https://git.taar-o.com/demo.git/atom?h=main</id>
<link rel='self' href='https://git.taar-o.com/demo.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/'/>
<updated>2026-03-29T14:39:53Z</updated>
<entry>
<title>update assets and weights</title>
<updated>2026-03-29T14:39:53Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-29T14:38:10Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=45f8436a5c2410e2f15a0006f6a4540de0d913a5'/>
<id>urn:sha1:45f8436a5c2410e2f15a0006f6a4540de0d913a5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>more 3d assets for cnn_v3</title>
<updated>2026-03-29T14:07:09Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-29T14:07:09Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=febd68030e8ef1a51411a0ab8593343a954e152b'/>
<id>urn:sha1:febd68030e8ef1a51411a0ab8593343a954e152b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>new script</title>
<updated>2026-03-29T13:18:54Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-29T13:18:54Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=c82ddfa3fda67e50ee73a578500b56282c377476'/>
<id>urn:sha1:c82ddfa3fda67e50ee73a578500b56282c377476</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(cnn_v3): handle OPEN_EXR_MULTILAYER removal in Blender 5.x</title>
<updated>2026-03-29T08:00:27Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-29T08:00:27Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=3be659d9f0a150f8a6527ad0edc31787b0d39994'/>
<id>urn:sha1:3be659d9f0a150f8a6527ad0edc31787b0d39994</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(cnn_v3): L1 loss + depth-grad tanh normalization to reduce flat convergence</title>
<updated>2026-03-27T07:41:05Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-27T07:41:05Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=37df61d1a0dbd5e253f9db778c17c4187e453b8d'/>
<id>urn:sha1:37df61d1a0dbd5e253f9db778c17c4187e453b8d</id>
<content type='text'>
- Switch MSELoss → L1Loss in train_cnn_v3.py (median-seeking, avoids gray-blob)
- Normalize depth_grad channels with tanh(10x) in cnn_v3_utils.py (bounds ±∞ signed values)
- Match normalization in gbuf_pack.wgsl: tanh((right-left)*5.0) == tanh(10*central_diff)

handoff(Gemini): training pipeline only; no C++ or test changes needed.
</content>
</entry>
<entry>
<title>fix(cnn_v3): remove dec0 ReLU, load FiLM MLP at runtime</title>
<updated>2026-03-27T06:59:00Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-27T06:59:00Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=fb13e67acbc7d7dd2974a456fcb134966c47cee0'/>
<id>urn:sha1:fb13e67acbc7d7dd2974a456fcb134966c47cee0</id>
<content type='text'>
Two bugs blocking training convergence:

1. dec0 ReLU before sigmoid constrained output to [0.5,1.0] — network
   could never produce dark pixels. Removed F.relu in train_cnn_v3.py
   and max(0,…) in cnn_v3_dec0.wgsl. Test vectors regenerated.

2. set_film_params() used hardcoded heuristics instead of the trained MLP.
   Added CNNv3FilmMlp struct + load_film_mlp() to cnn_v3_effect.h/.cc.
   MLP auto-loaded from ASSET_WEIGHTS_CNN_V3_FILM_MLP at construction;
   Linear(5→16)→ReLU→Linear(16→72) runs CPU-side each frame.

36/36 tests pass. Parity max_err=4.88e-4 unchanged.

handoff(Gemini): retrain from scratch — needs ≥50 samples (currently 11).
See cnn_v3/docs/HOWTO.md §2-3.
</content>
</entry>
<entry>
<title>fix(cnn_v3/training): fix defaults and help strings across py tools</title>
<updated>2026-03-26T06:10:19Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-26T06:10:19Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=130d70ea130242533a0fd3a7ffeabdb68598c88e'/>
<id>urn:sha1:130d70ea130242533a0fd3a7ffeabdb68598c88e</id>
<content type='text'>
- train_cnn_v3.py: enc-channels 4,8→8,16; checkpoint-every 50→100;
  add help strings for epochs/batch-size/lr/checkpoint-dir
- gen_test_vectors.py: add help strings for --W/--H/--seed
- export_cnn_v3_weights.py: fix --output help string (export/→export)
</content>
</entry>
<entry>
<title>feat(cnn_v3): upgrade architecture to enc_channels=[8,16]</title>
<updated>2026-03-26T06:03:01Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-26T06:03:01Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=8f14bdd66cb002b2f89265b2a578ad93249089c9'/>
<id>urn:sha1:8f14bdd66cb002b2f89265b2a578ad93249089c9</id>
<content type='text'>
Double encoder capacity: enc0 4→8ch, enc1 8→16ch, bottleneck 16→16ch,
dec1 32→8ch, dec0 16→4ch. Total weights 2476→7828 f16 (~15.3 KB).
FiLM MLP output 40→72 params (L1: 16×40→16×72).

16-ch textures split into _lo/_hi rgba32uint pairs (enc1, bottleneck).
enc0 and dec1 textures changed from rgba16float to rgba32uint (8ch).
GBUF_RGBA32UINT node gains CopySrc for parity test readback.

- WGSL shaders: all 5 passes rewritten for new channel counts
- C++ CNNv3Effect: new weight offsets/sizes, 8ch uniform structs
- Web tool (shaders.js + tester.js): matching texture formats and bindings
- Parity test: readback_rgba32uint_8ch helper, updated vector counts
- Training scripts: default enc_channels=[8,16], updated docstrings
- Docs + architecture PNG regenerated

handoff(Gemini): CNN v3 [8,16] upgrade complete. All code, tests, web
tool, training scripts, and docs updated. Next: run training pass.
</content>
</entry>
<entry>
<title>fix(cnn_v3/training): rebuild optimizer before loading state on resume past FiLM warmup</title>
<updated>2026-03-25T21:08:19Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-25T21:08:19Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=4ca498277b033ae10134045dae9c8c249a8d2b2b'/>
<id>urn:sha1:4ca498277b033ae10134045dae9c8c249a8d2b2b</id>
<content type='text'>
When resuming a checkpoint saved after the FiLM warmup phase, the optimizer
was created with frozen (fewer) param groups, causing a size mismatch when
loading the saved optimizer state. Fix: detect ckpt['epoch'] &gt;= film_warmup,
unfreeze FiLM MLP, and rebuild the optimizer before loading its state dict.

handoff(Gemini): train_cnn_v3.py --resume now works past epoch 1500.
</content>
</entry>
<entry>
<title>feat(cnn_v3/training): load prev.png when available; document web tool prev gap</title>
<updated>2026-03-25T09:48:08Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-03-25T09:48:08Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=3b2c9c04d3380c2bfd87e2fea1ba92574590766b'/>
<id>urn:sha1:3b2c9c04d3380c2bfd87e2fea1ba92574590766b</id>
<content type='text'>
- assemble_features() accepts optional prev ndarray (None → zeros)
- _load_sample() loads prev.png if present, else None
- __getitem__ slices/resizes prev alongside other channels
- TODO.md: note that cnn_v3/tools/shaders.js hardcodes prev=0 in both
  pack shaders while C++ gbuf_pack.wgsl reads a real prev_cnn texture

handoff(Gemini): prev.png now used in training when present; web tool gap documented in TODO.md
</content>
</entry>
</feed>
