<feed xmlns='http://www.w3.org/2005/Atom'>
<title>demo.git/src/gpu/effects, 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-02-14T13:55:58Z</updated>
<entry>
<title>refactor(gpu): Relocate effects to src/effects and streamline includes</title>
<updated>2026-02-14T13:55:58Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-14T13:55:58Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=d6cc50eb49275bbc0de21d4c65a5172d5d65f790'/>
<id>urn:sha1:d6cc50eb49275bbc0de21d4c65a5172d5d65f790</id>
<content type='text'>
This refactoring improves the project's structure by decoupling visual effects from the core GPU module. All effect implementations have been moved from  to a new top-level  directory. Shared utilities like , , and  have been consolidated into the parent  directory.

- **Motivation**: To create a clearer separation of concerns, making the codebase easier to navigate and maintain. This move treats effects as a distinct layer that depends on the core GPU module, rather than being embedded within it.

- **Changes**:
  - Created new  directory.
  - Moved all effect source files (, ) to .
  - Moved shared helpers (, , ) to .
  - Updated  and  to reflect the new file locations for all build targets.
  - Corrected all  directives across the entire codebase (, , ) to point to the new paths.
  - Updated all markdown documentation ( files) to ensure file paths and architectural descriptions are accurate.
  - Fixed several compiler errors related to incorrect enum casting () that were exposed during cross-compilation for Windows.

- **Verification**:
  - The entire project builds successfully for both native and Windows cross-compilation targets.
  - All 34 tests pass (Usage

  ctest [options]).
  - The --- Running Native Build &amp; Tests ---
Configuring with all options enabled (tests + tools)...
--
-- Build Configuration:
--   DEMO_SIZE_OPT:           ON
--   DEMO_STRIP_ALL:          ON
--   DEMO_FINAL_STRIP:        OFF
--   DEMO_STRIP_EXTERNAL_LIBS: OFF
--   DEMO_BUILD_TESTS:        ON
--   DEMO_BUILD_TOOLS:        ON
--   DEMO_ENABLE_COVERAGE:    OFF
--   DEMO_ENABLE_DEBUG_LOGS:  OFF
--   DEMO_HEADLESS:           OFF
--   DEMO_WORKSPACE:          main
--
-- Loaded workspace: Main Demo
--   Timeline: timeline.seq
--   Music: pop_punk_drums.track
--   Assets: assets.txt
-- Using workspace: main
-- Configuring done (0.0s)
-- Generating done (0.1s)
-- Build files have been written to: /Users/skal/demo/build
Building all targets (demo, tests, and tools)...
[  0%] Built target validate_uniforms_script
[  1%] Built target procedural
[  2%] Validating uniform buffer sizes and alignments...
[  3%] Built target tracker_compiler
[  4%] Built target test_3d
[  4%] Built target test_maths
[  4%] Built target seq_compiler
[  4%] Built target tracker_compiler_host
[  5%] Built target asset_packer
[  5%] Built target test_procedural
[  6%] Compiling demo sequence from workspace main...
[  6%] Built target generate_tracker_music
[  6%] Built target generate_test_demo_music
[  6%] Compiling test_demo sequence...
Using BPM: 90
Successfully generated timeline with 16 sequences.
Using BPM: 120
Demo end time: 16.000000s
Successfully generated timeline with 1 sequences.
[  6%] Built target generate_test_demo_timeline
[  6%] Built target generate_timeline
Validation Warning for 'CommonPostProcessUniforms': Matching WGSL struct not found.
Validation OK for 'FadeParams': Size 16 matches C++ expected size.
Validation OK for 'ThemeModulationParams': Size 16 matches C++ expected size.
Validation OK for 'GaussianBlurParams': Size 8 matches C++ expected size.
Validation OK for 'DistortParams': Size 8 matches C++ expected size.
Validation OK for 'CircleMaskParams': Size 16 matches C++ expected size.
[  6%] Built target generate_test_assets
[  7%] Built target generate_demo_assets
[  7%] Built target validate_uniforms
[  8%] Built target util
[ 10%] Built target test_assets
[ 11%] Built target test_shader_assets
[ 12%] Built target test_file_watcher
[ 15%] Built target 3d
[ 21%] Built target test_platform
[ 22%] Built target audio
[ 23%] Built target test_window
[ 26%] Built target test_fft
[ 27%] Built target test_synth
[ 27%] Built target test_spectral_brush
[ 27%] Built target test_physics
[ 28%] Built target test_dct
[ 31%] Building CXX object CMakeFiles/gpu.dir/src/gpu/effect.cc.o
[ 30%] Built target test_mock_backend
[ 32%] Built target test_scene_loader
[ 33%] Built target test_audio_backend
[ 34%] Built target test_audio_gen
[ 36%] Built target test_silent_backend
[ 39%] Built target test_jittered_audio
[ 39%] Building CXX object CMakeFiles/gpu.dir/src/effects/heptagon_effect.cc.o
[ 42%] Built target test_wav_dump
[ 44%] Built target test_tracker_timing
[ 44%] Building CXX object CMakeFiles/gpu.dir/src/effects/particles_effect.cc.o
[ 45%] Building CXX object CMakeFiles/gpu.dir/src/effects/passthrough_effect.cc.o
[ 47%] Built target test_variable_tempo
[ 50%] Built target test_audio_engine
[ 52%] Built target test_tracker
[ 52%] Building CXX object CMakeFiles/gpu.dir/src/effects/moving_ellipse_effect.cc.o
[ 52%] Building CXX object CMakeFiles/gpu.dir/src/effects/particle_spray_effect.cc.o
[ 52%] Building CXX object CMakeFiles/gpu.dir/src/effects/gaussian_blur_effect.cc.o
[ 54%] Built target test_spectool
[ 55%] Building CXX object CMakeFiles/gpu.dir/src/effects/solarize_effect.cc.o
[ 55%] Building CXX object CMakeFiles/gpu.dir/src/effects/scene1_effect.cc.o
[ 55%] Building CXX object CMakeFiles/gpu.dir/src/effects/chroma_aberration_effect.cc.o
[ 55%] Building CXX object CMakeFiles/gpu.dir/src/gpu/shaders.cc.o
[ 57%] Building CXX object CMakeFiles/gpu.dir/src/effects/vignette_effect.cc.o
[ 57%] Building CXX object CMakeFiles/gpu.dir/src/gpu/post_process_helper.cc.o
[ 57%] Linking CXX static library libgpu.a
[ 60%] Built target gpu
[ 60%] Linking CXX executable test_uniform_helper
[ 60%] Linking CXX executable test_shader_composer
[ 60%] Building CXX object CMakeFiles/test_sequence.dir/src/tests/assets/test_sequence.cc.o
[ 61%] Linking CXX executable test_noise_functions
[ 62%] Linking CXX executable test_shader_compilation
[ 62%] Building CXX object CMakeFiles/test_demo.dir/src/app/test_demo.cc.o
[ 62%] Building CXX object CMakeFiles/demo64k.dir/src/app/main.cc.o
[ 62%] Building CXX object CMakeFiles/test_3d_render.dir/src/generated/timeline.cc.o
[ 63%] Built target test_uniform_helper
[ 64%] Built target test_shader_composer
[ 64%] Building CXX object CMakeFiles/test_3d_physics.dir/src/generated/timeline.cc.o
[ 65%] Built target test_noise_functions
[ 66%] Built target test_shader_compilation
[ 67%] Building CXX object CMakeFiles/test_mesh.dir/src/generated/timeline.cc.o
[ 67%] Building CXX object CMakeFiles/test_effect_base.dir/src/tests/gpu/test_effect_base.cc.o
[ 67%] Building CXX object CMakeFiles/test_demo_effects.dir/src/tests/gpu/test_demo_effects.cc.o
[ 67%] Building CXX object CMakeFiles/test_sequence.dir/src/generated/timeline.cc.o
[ 68%] Building CXX object CMakeFiles/test_demo.dir/src/generated/test_demo_timeline.cc.o
[ 68%] Building CXX object CMakeFiles/demo64k.dir/src/generated/timeline.cc.o
[ 68%] Linking CXX executable test_3d_render
[ 68%] Building CXX object CMakeFiles/test_effect_base.dir/src/generated/timeline.cc.o
[ 68%] Linking CXX executable test_3d_physics
[ 68%] Linking CXX executable test_mesh
[ 71%] Built target test_3d_render
[ 71%] Building CXX object CMakeFiles/test_post_process_helper.dir/src/tests/gpu/test_post_process_helper.cc.o
[ 72%] Building CXX object CMakeFiles/test_demo_effects.dir/src/generated/timeline.cc.o
[ 72%] Linking CXX executable test_demo
[ 75%] Built target test_3d_physics
[ 77%] Built target test_mesh
[ 77%] Linking CXX executable test_texture_manager
[ 78%] Linking CXX executable test_sequence
[ 78%] Linking CXX executable test_gpu_procedural
[ 80%] Built target test_demo
[ 81%] Linking CXX executable test_gpu_composite
[ 81%] Linking CXX executable demo64k
[ 83%] Built target test_sequence
[ 85%] Built target test_texture_manager
[ 86%] Built target test_gpu_procedural
[ 86%] Linking CXX executable test_post_process_helper
[ 86%] Linking CXX executable test_effect_base
[ 87%] Built target test_gpu_composite
[ 90%] Built target demo64k
[ 92%] Built target test_post_process_helper
[ 96%] Built target test_effect_base
[ 96%] Linking CXX executable test_demo_effects
[100%] Built target test_demo_effects
Running test suite...
Test project /Users/skal/demo/build
      Start  1: HammingWindowTest
 1/34 Test  #1: HammingWindowTest ................   Passed    0.00 sec
      Start  2: MathUtilsTest
 2/34 Test  #2: MathUtilsTest ....................   Passed    0.00 sec
      Start  3: FileWatcherTest
 3/34 Test  #3: FileWatcherTest ..................   Passed    0.00 sec
      Start  4: SynthEngineTest
 4/34 Test  #4: SynthEngineTest ..................   Passed    0.00 sec
      Start  5: DctTest
 5/34 Test  #5: DctTest ..........................   Passed    0.00 sec
      Start  6: FftTest
 6/34 Test  #6: FftTest ..........................   Passed    0.01 sec
      Start  7: SpectralBrushTest
 7/34 Test  #7: SpectralBrushTest ................   Passed    0.01 sec
      Start  8: AudioGenTest
 8/34 Test  #8: AudioGenTest .....................   Passed    0.00 sec
      Start  9: AudioBackendTest
 9/34 Test  #9: AudioBackendTest .................   Passed    0.00 sec
      Start 10: SilentBackendTest
10/34 Test #10: SilentBackendTest ................   Passed    0.00 sec
      Start 11: MockAudioBackendTest
11/34 Test #11: MockAudioBackendTest .............   Passed    0.00 sec
      Start 12: WavDumpBackendTest
12/34 Test #12: WavDumpBackendTest ...............   Passed    0.00 sec
      Start 13: JitteredAudioBackendTest
13/34 Test #13: JitteredAudioBackendTest .........   Passed    0.00 sec
      Start 14: TrackerTimingTest
14/34 Test #14: TrackerTimingTest ................   Passed    0.00 sec
      Start 15: VariableTempoTest
15/34 Test #15: VariableTempoTest ................   Passed    0.00 sec
      Start 16: TrackerSystemTest
16/34 Test #16: TrackerSystemTest ................   Passed    0.01 sec
      Start 17: AudioEngineTest
17/34 Test #17: AudioEngineTest ..................   Passed    0.00 sec
      Start 18: ShaderAssetValidation
18/34 Test #18: ShaderAssetValidation ............   Passed    0.00 sec
      Start 19: ShaderCompilationTest
19/34 Test #19: ShaderCompilationTest ............   Passed    0.02 sec
      Start 20: NoiseFunctionsTest
20/34 Test #20: NoiseFunctionsTest ...............   Passed    0.01 sec
      Start 21: UniformHelperTest
21/34 Test #21: UniformHelperTest ................   Passed    0.00 sec
      Start 22: AssetManagerTest
22/34 Test #22: AssetManagerTest .................   Passed    0.01 sec
      Start 23: SequenceSystemTest
23/34 Test #23: SequenceSystemTest ...............   Passed    0.01 sec
      Start 24: ProceduralGenTest
24/34 Test #24: ProceduralGenTest ................   Passed    0.01 sec
      Start 25: PhysicsTest
25/34 Test #25: PhysicsTest ......................   Passed    0.01 sec
      Start 26: ThreeDSystemTest
26/34 Test #26: ThreeDSystemTest .................   Passed    0.00 sec
      Start 27: ShaderComposerTest
27/34 Test #27: ShaderComposerTest ...............   Passed    0.01 sec
      Start 28: SceneLoaderTest
28/34 Test #28: SceneLoaderTest ..................   Passed    0.01 sec
      Start 29: EffectBaseTest
29/34 Test #29: EffectBaseTest ...................   Passed    0.04 sec
      Start 30: DemoEffectsTest
30/34 Test #30: DemoEffectsTest ..................   Passed    0.03 sec
      Start 31: PostProcessHelperTest
31/34 Test #31: PostProcessHelperTest ............   Passed    0.02 sec
      Start 32: TextureManagerTest
32/34 Test #32: TextureManagerTest ...............   Passed    0.02 sec
      Start 33: GpuProceduralTest
33/34 Test #33: GpuProceduralTest ................   Passed    0.18 sec
      Start 34: GpuCompositeTest
34/34 Test #34: GpuCompositeTest .................   Passed    0.20 sec

100% tests passed, 0 tests failed out of 34

Label Time Summary:
3d        =   0.01 sec*proc (3 tests)
assets    =   0.02 sec*proc (2 tests)
audio     =   0.07 sec*proc (15 tests)
gpu       =   0.54 sec*proc (11 tests)
util      =   0.01 sec*proc (3 tests)

Total Test time (real) =   0.67 sec
Verifying tools compile...
[  9%] Built target procedural
[ 18%] Built target tracker_compiler_host
[ 18%] Built target tracker_compiler
[ 18%] Built target generate_tracker_music
[ 18%] Built target asset_packer
[ 27%] Built target generate_demo_assets
[ 27%] Built target generate_test_assets
[ 36%] Built target util
[ 81%] Built target audio
[100%] Built target test_spectool

--- Running Windows Cross-Compilation Build ---
Building native tools...
--
-- Build Configuration:
--   DEMO_SIZE_OPT:           OFF
--   DEMO_STRIP_ALL:          OFF
--   DEMO_FINAL_STRIP:        OFF
--   DEMO_STRIP_EXTERNAL_LIBS: OFF
--   DEMO_BUILD_TESTS:        OFF
--   DEMO_BUILD_TOOLS:        OFF
--   DEMO_ENABLE_COVERAGE:    OFF
--   DEMO_ENABLE_DEBUG_LOGS:  OFF
--   DEMO_HEADLESS:           OFF
--   DEMO_WORKSPACE:          main
--
-- Loaded workspace: Main Demo
--   Timeline: timeline.seq
--   Music: pop_punk_drums.track
--   Assets: assets.txt
-- Using workspace: main
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/skal/demo/build_native
[ 50%] Built target procedural
[100%] Built target asset_packer
[100%] Built target seq_compiler
[100%] Built target tracker_compiler_host
Cross-compiling for Windows...
--
-- Build Configuration:
--   DEMO_SIZE_OPT:           ON
--   DEMO_STRIP_ALL:          ON
--   DEMO_FINAL_STRIP:        OFF
--   DEMO_STRIP_EXTERNAL_LIBS: OFF
--   DEMO_BUILD_TESTS:        OFF
--   DEMO_BUILD_TOOLS:        OFF
--   DEMO_ENABLE_COVERAGE:    OFF
--   DEMO_ENABLE_DEBUG_LOGS:  OFF
--   DEMO_HEADLESS:           OFF
--   DEMO_WORKSPACE:          main
--
-- Loaded workspace: Main Demo
--   Timeline: timeline.seq
--   Music: pop_punk_drums.track
--   Assets: assets.txt
-- Using workspace: main
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/skal/demo/build_win
[  2%] Built target validate_uniforms_script
[  2%] Built target generate_timeline
[  4%] Built target generate_test_demo_timeline
[  4%] Built target generate_demo_assets
[  4%] Built target generate_test_assets
[  6%] Built target procedural
[  9%] Built target tracker_compiler_host
[ 10%] Validating uniform buffer sizes and alignments...
[ 11%] Built target generate_tracker_music
[ 13%] Built target generate_test_demo_music
[ 16%] Built target util
[ 28%] Built target 3d
[ 45%] Built target audio
[ 49%] Building CXX object CMakeFiles/gpu.dir/src/effects/heptagon_effect.cc.obj
[ 52%] Building CXX object CMakeFiles/gpu.dir/src/effects/gaussian_blur_effect.cc.obj
[ 54%] Building CXX object CMakeFiles/gpu.dir/src/effects/particles_effect.cc.obj
[ 54%] Building CXX object CMakeFiles/gpu.dir/src/effects/moving_ellipse_effect.cc.obj
[ 54%] Building CXX object CMakeFiles/gpu.dir/src/gpu/effect.cc.obj
[ 54%] Building CXX object CMakeFiles/gpu.dir/src/effects/passthrough_effect.cc.obj
[ 54%] Building CXX object CMakeFiles/gpu.dir/src/effects/particle_spray_effect.cc.obj
Validation Warning for 'CommonPostProcessUniforms': Matching WGSL struct not found.
Validation OK for 'FadeParams': Size 16 matches C++ expected size.
Validation OK for 'ThemeModulationParams': Size 16 matches C++ expected size.
Validation OK for 'GaussianBlurParams': Size 8 matches C++ expected size.
Validation OK for 'DistortParams': Size 8 matches C++ expected size.
Validation OK for 'CircleMaskParams': Size 16 matches C++ expected size.
[ 54%] Built target validate_uniforms
[ 55%] Building CXX object CMakeFiles/gpu.dir/src/effects/solarize_effect.cc.obj
[ 57%] Building CXX object CMakeFiles/gpu.dir/src/effects/scene1_effect.cc.obj
[ 57%] Building CXX object CMakeFiles/gpu.dir/src/effects/chroma_aberration_effect.cc.obj
[ 58%] Building CXX object CMakeFiles/gpu.dir/src/effects/vignette_effect.cc.obj
[ 59%] Building CXX object CMakeFiles/gpu.dir/src/gpu/post_process_helper.cc.obj
[ 60%] Building CXX object CMakeFiles/gpu.dir/src/gpu/shaders.cc.obj
[ 62%] Linking CXX static library libgpu.a
[ 77%] Built target gpu
[ 79%] Building CXX object CMakeFiles/demo64k.dir/src/app/main.cc.obj
[ 79%] Building CXX object CMakeFiles/test_demo.dir/src/app/test_demo.cc.obj
[ 80%] Building CXX object CMakeFiles/demo64k.dir/src/generated/timeline.cc.obj
[ 81%] Building CXX object CMakeFiles/test_demo.dir/src/generated/test_demo_timeline.cc.obj
[ 82%] Linking CXX executable test_demo.exe
[ 90%] Built target test_demo
[ 91%] Linking CXX executable demo64k.exe
[100%] Built target demo64k
Copying MinGW DLLs...
Crunching build_win/demo64k.exe...
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2026
UPX 5.1.0       Markus Oberhumer, Laszlo Molnar &amp; John Reiser    Jan 7th 2026

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   7036416 -&gt;   4680704   66.52%    win64/pe     demo64k_packed.exe

Packed 1 file.
------------------------------------------------
Size Report:
-rwxr-xr-x  1 skal  89939   6.7M Feb 14 14:55 build_win/demo64k.exe
-rwxr-xr-x  1 skal  89939   6.7M Feb 14 14:55 build_win/demo64k_stripped.exe
-rwxr-xr-x  1 skal  89939   4.5M Feb 14 14:55 build_win/demo64k_packed.exe
------------------------------------------------
Top 20 Largest Symbols (from unstripped):
------------------------------------------------
Build complete. Output: build_win/demo64k.exe

All checks passed successfully. script completes without errors.

This change streamlines the project's architecture without altering any functionality.
</content>
</entry>
<entry>
<title>Refactor: factorize common WGPU patterns into helper functions</title>
<updated>2026-02-14T11:38:59Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-14T11:38:59Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=c4cfc8459dbc6fde74d5553519dc3fcb1afccad0'/>
<id>urn:sha1:c4cfc8459dbc6fde74d5553519dc3fcb1afccad0</id>
<content type='text'>
Add texture creation helpers (gpu_create_texture_2d, gpu_create_storage_texture_2d,
gpu_create_mip_view) and extend BindGroupLayoutBuilder with uint_texture and
storage_texture methods.

Refactored files:
- cnn_v2_effect.cc: Use texture helpers (~70% code reduction in create_textures)
- rotating_cube_effect.cc: Use BindGroupLayoutBuilder and texture helpers
- circle_mask_effect.cc: Use BindGroupBuilder

Benefits:
- Improved code readability
- Reduced boilerplate for texture/bind group creation
- Consistent patterns across effects

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>CNN v2: bilinear mip-level sampling and UI improvements</title>
<updated>2026-02-14T06:24:51Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-14T06:22:17Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=0f53ed1ed8ed7c07cd7ea8e88e21b5be5d5494e5'/>
<id>urn:sha1:0f53ed1ed8ed7c07cd7ea8e88e21b5be5d5494e5</id>
<content type='text'>
**CNN v2 Changes:**
- Replace point sampling with bilinear interpolation for mip-level features
- Add linear sampler (binding 6) to static features shader
- Update CNNv2Effect, cnn_test, and HTML tool

**HTML Tool UI:**
- Move controls to floating bottom bar in central view
- Consolidate video controls + Blend/Depth/Save PNG in single container
- Increase left panel width: 300px → 315px (+5%)
- Remove per-frame debug messages (visualization, rendering logs)

**Technical:**
- WGSL: textureSample() with linear_sampler vs textureLoad()
- C++: Create WGPUSampler with Linear filtering
- HTML: Change sampler from 'nearest' to 'linear'

handoff(Claude): CNN v2 now uses bilinear mip-level sampling across all tools
</content>
</entry>
<entry>
<title>CNN v2: Fix weight buffer offset bug</title>
<updated>2026-02-13T23:27:53Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T23:27:53Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=f7c5c19af1b4638958c6875c6f691b2c9aa05a94'/>
<id>urn:sha1:f7c5c19af1b4638958c6875c6f691b2c9aa05a94</id>
<content type='text'>
Root cause: Binary format is [header:20B][layer_info:20B×N][weights].
Both cnn_test and CNNv2Effect uploaded entire file to weights_buffer,
but shader reads weights_buffer[0] expecting first weight, not header.

Fix: Skip header + layer_info when uploading to GPU buffer.
- cnn_test.cc: Calculate weights_offset, upload only weights section
- cnn_v2_effect.cc: Same fix for runtime effect

Before: layer_0 output showed [R, uv_x, uv_y, black] (wrong channels)
After: layer_0 output shows [R, G, B, D] (correct identity mapping)

Tests: 34/36 passing (2 unrelated failures)
</content>
</entry>
<entry>
<title>CNN v2: Alpha channel depth handling and layer visualization</title>
<updated>2026-02-13T22:17:42Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T22:17:42Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=6fa9ccf86b0bbefb48cefae19d4162115a3d63d3'/>
<id>urn:sha1:6fa9ccf86b0bbefb48cefae19d4162115a3d63d3</id>
<content type='text'>
Training changes:
- Changed p3 default depth from 0.0 to 1.0 (far plane semantics)
- Extract depth from target alpha channel in both datasets
- Consistent alpha-as-depth across training/validation

Test tool enhancements (cnn_test):
- Added load_depth_from_alpha() for R32Float depth texture
- Fixed bind group layout for UnfilterableFloat sampling
- Added --save-intermediates with per-channel grayscale composites
- Each layer saved as 4x wide PNG (p0-p3 stacked horizontally)
- Global layers_composite.png for vertical layer stack overview

Investigation notes:
- Static features p4-p7 ARE computed and bound correctly
- Sin_20_y pattern visibility difference between tools under investigation
- Binary weights timestamp (Feb 13 20:36) vs HTML tool (Feb 13 22:12)
- Next: Update HTML tool with canonical binary weights

handoff(Claude): HTML tool weights update pending - base64 encoded
canonical weights ready in /tmp/weights_b64.txt for line 392 replacement.

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>CNN v2: Fix WebGPU validation error in uniform buffer alignment</title>
<updated>2026-02-13T16:16:56Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T16:16:56Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=f6b3ea72a03850654b69986bc82bb249aaabe2e3'/>
<id>urn:sha1:f6b3ea72a03850654b69986bc82bb249aaabe2e3</id>
<content type='text'>
Fix two issues causing validation errors in test_demo:
1. Remove redundant pipeline creation without layout (static_pipeline_)
2. Change vec3&lt;u32&gt; to 3× u32 fields in StaticFeatureParams struct

WGSL vec3&lt;u32&gt; aligns to 16 bytes (std140), making struct 32 bytes,
while C++ struct was 16 bytes. Explicit fields ensure consistent layout.

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>CNN v2: Add TODO for flexible feature layout in binary format v3</title>
<updated>2026-02-13T15:54:47Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T15:54:47Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=4c21145ce5e408dd38e8374eed320fcfac97c0c4'/>
<id>urn:sha1:4c21145ce5e408dd38e8374eed320fcfac97c0c4</id>
<content type='text'>
Document future enhancement for arbitrary feature vector layouts.

Proposed feature descriptor in binary format v3:
- Specify feature types, sources, and ordering
- Enable runtime experimentation without shader recompilation
- Examples: [R,G,B,dx,dy,uv_x,bias] or [mip1.r,mip2.g,laplacian,uv_x,sin20_x,bias]

Added TODOs in:
- CNN_V2_BINARY_FORMAT.md: Detailed proposal with struct layout
- CNN_V2.md: Future extensions section
- train_cnn_v2.py: compute_static_features() docstring
- cnn_v2_static.wgsl: Shader header comment
- cnn_v2_effect.cc: Version check comment

Current limitation: Hardcoded [p0,p1,p2,p3,uv_x,uv_y,sin10_x,bias] layout.

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>CNN v2: Add mip-level support to runtime effect</title>
<updated>2026-02-13T15:48:02Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T15:48:02Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=ced248b0a8973db6d11b79e8290e2f5bb17ffcaa'/>
<id>urn:sha1:ced248b0a8973db6d11b79e8290e2f5bb17ffcaa</id>
<content type='text'>
Binary format v2 includes mip_level in header (20 bytes, was 16).
Effect reads mip_level and passes to static features shader via uniform.
Shader samples from correct mip texture based on mip_level.

Changes:
- export_cnn_v2_weights.py: Header v2 with mip_level field
- cnn_v2_effect.h: Add StaticFeatureParams, mip_level member, params buffer
- cnn_v2_effect.cc: Read mip_level from weights, create/bind params buffer, update per-frame
- cnn_v2_static.wgsl: Accept params uniform, sample from selected mip level

Binary format v2:
- Header: 20 bytes (magic, version=2, num_layers, total_weights, mip_level)
- Backward compatible: v1 weights load with mip_level=0

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>CNNv2Effect: Document per-layer kernel sizes support</title>
<updated>2026-02-13T11:43:03Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T11:43:03Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=5a17ed664edc5a66d3b43d3596c389ab58a4ec19'/>
<id>urn:sha1:5a17ed664edc5a66d3b43d3596c389ab58a4ec19</id>
<content type='text'>
Updated comments to clarify that per-layer kernel sizes are supported.
Code already handles this correctly via LayerInfo.kernel_size field.

Changes:
- cnn_v2_effect.h: Add comment about per-layer kernel sizes
- cnn_v2_compute.wgsl: Clarify LayerParams provides per-layer config

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test_demo: Add beat-synchronized CNN post-processing with version selection</title>
<updated>2026-02-12T14:10:17Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-12T14:10:17Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=8b30cadfc19647487986d14dba9ddba7908dd1d0'/>
<id>urn:sha1:8b30cadfc19647487986d14dba9ddba7908dd1d0</id>
<content type='text'>
- Add --cnn-version &lt;1|2&gt; flag to select between CNN v1 and v2
- Implement beat_phase modulation for dynamic blend in both CNN effects
- Fix CNN v2 per-layer uniform buffer sharing (each layer needs own buffer)
- Fix CNN v2 y-axis orientation to match render pass convention
- Add Scene1Effect as base visual layer to test_demo timeline
- Reorganize CNN v2 shaders into cnn_v2/ subdirectory
- Update asset paths and documentation for new shader organization

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
