# How To Quick reference for common tasks. --- ## Building ### Workspace Selection ```bash # Main demo (default) cmake -S . -B build -DDEMO_WORKSPACE=main cmake --build build -j4 ./build/demo64k # Test demo cmake -S . -B build_test -DDEMO_WORKSPACE=test cmake --build build_test -j4 ./build_test/test_demo ``` ### Debug Build ```bash cmake -S . -B build cmake --build build -j4 ./build/demo64k ``` Options: `--fullscreen`, `--resolution WxH`, `--seek TIME`, `--hot-reload` ### Production Builds ```bash # Size-optimized (development) cmake -B build -DDEMO_SIZE_OPT=ON && cmake --build build -j4 # 64k target (full checks, no debug) cmake -B build -DDEMO_STRIP_ALL=ON && cmake --build build -j4 # Final release (no checks, absolute minimum) ./scripts/build_final.sh ``` ### Developer Build ```bash cmake -B build -DDEMO_BUILD_TESTS=ON -DDEMO_BUILD_TOOLS=ON cmake --build build -j4 ``` ### Headless Testing ```bash cmake -B build_headless -DDEMO_HEADLESS=ON && cmake --build build_headless -j4 ./build_headless/demo64k --headless --duration 30 ``` See `doc/HEADLESS_MODE.md`. ### Size Measurement ```bash ./scripts/measure_size.sh ``` Measures demo vs external library size. See `doc/SIZE_MEASUREMENT.md`. --- ## Testing ### Run All Tests ```bash cmake -B build -DDEMO_BUILD_TESTS=ON cmake --build build -j4 cd build && ctest # OR: make run_all_tests ``` ### Run Subsystem Tests ```bash make run_audio_tests # Audio system tests make run_gpu_tests # GPU/shader tests make run_3d_tests # 3D rendering tests make run_assets_tests # Asset system tests make run_util_tests # Utility tests ``` ### Run Specific Test ```bash ./build/test_synth ``` --- ## Training ### Patch-Based (Recommended) Extracts patches at salient points, trains on center pixels only (matches WGSL sliding window): ```bash # Train with 32×32 patches at detected corners/edges ./training/train_cnn.py \ --input training/input/ --target training/output/ \ --patch-size 32 --patches-per-image 64 --detector harris \ --layers 3 --kernel_sizes 3,5,3 --epochs 5000 --batch_size 16 \ --checkpoint-every 1000 ``` **Training behavior:** - Loss computed only on center pixels (excludes conv padding borders) - For 3-layer network: excludes 3px border on each side - Matches GPU shader sliding-window paradigm **Detectors:** `harris` (default), `fast`, `shi-tomasi`, `gradient` ### Full-Image Processes entire image with sliding window (matches WGSL): ```bash ./training/train_cnn.py \ --input training/input/ --target training/output/ \ --layers 3 --kernel_sizes 3,5,3 --epochs 10000 --batch_size 8 \ --checkpoint-every 1000 ``` ### Export & Validation ```bash # Generate shaders from checkpoint ./training/train_cnn.py --export-only checkpoints/checkpoint_epoch_5000.pth # Generate ground truth (sliding window, no tiling) ./training/train_cnn.py --infer input.png \ --export-only checkpoints/checkpoint_epoch_5000.pth \ --output ground_truth.png ``` **Inference:** Processes full image with sliding window (each pixel from NxN neighborhood). No tiling artifacts. **Kernel sizes:** 3×3 (36 weights), 5×5 (100 weights), 7×7 (196 weights) ### CNN v2 Training Enhanced CNN with parametric static features (7D input: RGBD + UV + sin encoding + bias). **Complete Pipeline** (recommended): ```bash # Train → Export → Build → Validate ./scripts/train_cnn_v2_full.sh ``` Config: 100 epochs, 3×3 kernels, 8→4→4 channels, patch-based (harris detector). - Live progress with single-line update - Validates all input images on final epoch - Exports binary weights (storage buffer architecture) **Validation Only** (skip training): ```bash # Use latest checkpoint ./scripts/train_cnn_v2_full.sh --validate # Use specific checkpoint ./scripts/train_cnn_v2_full.sh --validate checkpoints/checkpoint_epoch_50.pth ``` **Manual Training:** ```bash # Default config ./training/train_cnn_v2.py \ --input training/input/ --target training/target_2/ \ --epochs 100 --batch-size 16 --checkpoint-every 5 # Custom architecture ./training/train_cnn_v2.py \ --input training/input/ --target training/target_2/ \ --kernel-sizes 1 3 5 --channels 16 8 4 \ --epochs 5000 --batch-size 16 ``` **Export Binary Weights:** ```bash ./training/export_cnn_v2_weights.py checkpoints/checkpoint_epoch_100.pth \ --output-weights workspaces/main/cnn_v2_weights.bin ``` Generates binary format: header + layer info + f16 weights (~3.2 KB for 3-layer model). Storage buffer architecture allows dynamic layer count. **TODO:** 8-bit quantization for 2× size reduction (~1.6 KB). Requires quantization-aware training (QAT). # Options: # -i DIR Test images directory (default: training/validation) # -o DIR Output directory (default: validation_results) # --skip-build Use existing cnn_test binary # -h Show all options ``` See `scripts/validate_cnn_v2.sh --help` for full usage. See `doc/CNN_V2.md` for design details. --- ## Timeline ### Manual Editing Edit `workspaces/main/timeline.seq`: ```text SEQUENCE 0.0 0 EFFECT + HeptagonEffect 0.0 60.0 0 ``` Rebuild to apply. See `doc/SEQUENCE.md`. ### Visual Editor ```bash open tools/timeline_editor/index.html ``` Features: Drag/drop, beat-based editing, audio playback, waveform visualization, snap-to-beat. See `tools/timeline_editor/README.md`. --- ## Audio ```cpp #include "audio/audio_engine.h" audio_init(); static AudioEngine g_audio_engine; g_audio_engine.init(); g_audio_engine.update(music_time); g_audio_engine.shutdown(); audio_shutdown(); ``` See `doc/TRACKER.md` for music system. --- ## Assets Edit `workspaces/main/assets.txt`, then rebuild: ```bash cmake --build build -j4 ``` See `doc/ASSET_SYSTEM.md` and `doc/WORKSPACE_SYSTEM.md`. --- ## CNN Testing ### Offline Shader Validation **Note:** Tool builds and runs but produces incorrect output. Use CNNEffect visual validation in demo. See `doc/CNN_TEST_TOOL.md`. ```bash # Test trained CNN on PNG input ./build/cnn_test input.png output.png # Adjust blend amount (0.0 = original, 1.0 = full CNN) ./build/cnn_test input.png output.png --blend 0.5 # PPM output format ./build/cnn_test input.png output.ppm --format ppm ``` ### Ground Truth Comparison ```bash # Generate Python ground truth ./training/train_cnn.py --infer input.png \ --export-only checkpoints/checkpoint_epoch_1000.pth \ --output ground_truth.png # Run tool ./build/cnn_test input.png tool_output.png # Compare (Python required) python3 -c " import numpy as np from PIL import Image gt = np.array(Image.open('ground_truth.png').convert('RGB')) out = np.array(Image.open('tool_output.png').convert('RGB')) mse = np.mean((gt.astype(float) - out.astype(float)) ** 2) print(f'MSE: {mse:.4f} (target: < 10.0)') " ``` See `doc/CNN_TEST_TOOL.md` for full documentation. --- ## Modifying Build System - **Add build option:** Edit `cmake/DemoOptions.cmake` - **Add source files:** Edit `cmake/DemoSourceLists.cmake` - **Add test:** Edit `cmake/DemoTests.cmake` - **Add tool:** Edit `cmake/DemoTools.cmake` - **Add library:** Edit `cmake/DemoLibraries.cmake` See `doc/CMAKE_MODULES.md` for full architecture and shared macros. --- ## Additional Documentation - **Build System:** `doc/BUILD.md` - Multi-platform, size optimization - **CMake Modules:** `doc/CMAKE_MODULES.md` - Module architecture, shared macros - **Tools:** `doc/TOOLS_REFERENCE.md` - spectool, coverage, Windows cross-compile - **Shaders:** `doc/SEQUENCE.md` - Timeline format, shader parameters - **3D:** `doc/3D.md` - Hybrid rendering, scene format - **Hot Reload:** `doc/HOT_RELOAD.md` - Debug file watching