# DECISIONS.md — AI Hell Decision Log Project-specific decisions. For global/cross-cutting decisions, see `~/bin/DECISIONS.md`. Format: `YYYY-MM-DD: ` ## Architecture 2026-04-10: Hybrid architecture (server brain + client rendering) — server generates assets + controls escalation, frontend composites at 60fps via WebGL. Best of both: smooth visuals, server-controlled pacing, GPU gen hidden behind asset pool 2026-04-10: No avatar/3D model — pure environmental horror. Dropped Three.js 3D scene, GLB models, morph targets from claude-avatar 2026-04-10: WebGL 2D shader compositor, not Three.js 3D scene — no 3D environment needed, shader effects on AI images is cheaper and more dynamic 2026-04-10: Based on claude-avatar infra — reuse FastAPI skeleton, WebSocket, SDXL/XTTS loading, config pattern, systemd/Caddy patterns ## Implementation 2026-04-10: Logarithmic escalation curve (rate=0.05) with randomized delivery timing — predictable timing kills horror, stochastic expression prevents habituation 2026-04-10: Three-layer audio (ambient drone + whisper pool + direct address) — builds dread foundation, mid-layer unease, and genuine scare moments 2026-04-10: XTTS fed non-voice audio samples as cloning source — emergent creepiness from the model trying to "speak" as machinery, animals, static. The AI is creepy without being told to be 2026-04-10: Pre-generated asset pool with continuous background generation — bridges GPU latency gap (SDXL 1-2s per image), no dead air in the horror experience 2026-04-10: Liminal imagery (coherent <-> abstract) — things emerge from and dissolve back into chaos, more unsettling than purely recognizable or purely abstract ## Deferred / Rejected 2026-04-10: Deferred webcam integration — detect viewer's face, use it in horror. V2 feature 2026-04-10: Deferred viewer voice cloning — mic input -> XTTS clones them back at them. V2 feature 2026-04-10: Rejected interactive elements — passive viewing is scarier, you can't control it 2026-04-10: Rejected server-streamed frames — GPU-bound 1-2fps too slow, client-side compositing at 60fps is better