# 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, preserves natural pixel scale: ```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 ``` **Detectors:** `harris` (default), `fast`, `shi-tomasi`, `gradient` ### Full-Image (Legacy) Resizes to 256×256 (distorts scale): ```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 for comparison ./training/train_cnn.py --infer input.png \ --export-only checkpoints/checkpoint_epoch_5000.pth \ --output ground_truth.png ``` **Kernel sizes:** 3×3 (36 weights), 5×5 (100 weights), 7×7 (196 weights) --- ## Timeline Edit `workspaces/main/timeline.seq`: ```text SEQUENCE 0.0 0 EFFECT + HeptagonEffect 0.0 60.0 0 ``` Rebuild to apply. See `doc/SEQUENCE.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