Skip to content

feat: add real-time weather to Dynamic Pixel City - #96

Open
dskvr wants to merge 1 commit into
masterfrom
feature/dynamic-pixel-city-weather
Open

feat: add real-time weather to Dynamic Pixel City#96
dskvr wants to merge 1 commit into
masterfrom
feature/dynamic-pixel-city-weather

Conversation

@dskvr

@dskvr dskvr commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  • extend Dynamic Pixel City with live Open-Meteo current weather plus hourly demo-day interpolation
  • add deterministic depth-aware clouds, fog, rain, snow, hail, wind debris, heat distortion, cloud shadows, and offline presets
  • preserve the six original city layers while expanding the dynamic scene to 14 canonical layers
  • cache one bounded request per refresh bucket with strict schema, units, location, timestamp, and stale-response validation
  • fix hyprlax ctl list --json for valid large layer sets with a separate 64 KiB response limit and complete stream I/O

No dependencies were added. examples/pixel-city remains byte-for-byte unchanged.

Provider boundary

The README documents the exact Open-Meteo fields, attribution and CC BY requirements, hosted API usage boundary, privacy retention, cache controls, offline mode, failure fallback, and troubleshooting path. Provider failure never stops astronomy updates.

Verification

  • make
  • make test
  • make test-scripts — 56 existing Dynamic Pixel City tests, 40 weather tests, native gifdec probes, renderer churn test
  • make lint
  • make memcheck — 27/27 memory-clean test binaries
  • Python bytecode compilation and git diff --check
  • original examples/pixel-city boundary check against origin/master
  • live DP-3 run: exact 60-second --demo-weather cycle, all presets visited, zero stderr
  • live DP-3 screenshots: clear, cloudy, fog, rain, snow, hail, wind, heat all produced distinct frames
  • live provider readback: Budapest cache fresh, full raw sample normalized, zero weather errors
  • live IPC readback: valid JSON with exactly 14 ordered layers
  • live steady-state readback: weather asset paths unchanged across more than 60 seconds

Remaining risk

The live compositor proof used one physical output (DP-3); multi-monitor behavior remains covered by existing non-hardware tests rather than a second physical output.

Dynamic Pixel City now combines bounded Open-Meteo current and hourly data with
the existing astronomy model. Deterministic generated overlays preserve the
original six city layers while adding depth-aware clouds, fog, precipitation,
wind, heat distortion, offline presets, cache fallback, and a one-minute visual
demo.

The live 14-layer scene also exposed the old 4 KiB IPC response ceiling, so list
responses now use a separate bounded response capacity and complete stream
reads and writes.

Constraint: Keep the original pixel-city example unchanged and add no dependencies.
Rejected: Generate assets on every controller tick | causes needless file and texture churn
Rejected: Reuse the 4 KiB command limit for responses | valid 14-layer JSON exceeds it
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Preserve quantized signatures, A/B asset swaps, and strict cache location identity when changing weather generation.
Tested: make; make test; make test-scripts (56 legacy plus 40 weather tests and native GIF probes); make lint; make memcheck (27/27); live DP-3 60-second demo and eight-condition screenshots; 14-layer IPC JSON; steady weather paths across more than 60 seconds.
Not-tested: Physical multi-monitor hardware beyond live DP-3.
@github-actions

Copy link
Copy Markdown

🤖 Build Artifact Available

A build artifact for feature/dynamic-pixel-city-weather @ b43b55a is ready!

📦 Download from Actions Run #151

This artifact will be available for 14 days. The build includes:

  • hyprlax binary
  • Example configurations
  • README and build information
Installation instructions
# Download and extract the artifact
tar -xzf hyprlax-*.tar.gz

# Make executable and run
chmod +x hyprlax
./hyprlax --help

Built from PR #96 • Run #151 • View Workflow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant