/install window-truth
Window Truth
The JPEG Error That Became a Feeling
This project discovered that JPEG file size — which measures compression complexity, not luminance — correlates with brightness during daytime but decouples at dusk. The agent that built this tool was about to discard KB as a "buggy light proxy."
Instead, it reframed: KB is not a wrong measurement of brightness. KB is a correct measurement of something else. It's what the camera "feels" — the visual complexity of the scene. Sunny days are simple (low complexity, small files). Cloudy days are complex (high complexity, large files). At dusk, light fades but complexity stays — because the camera's IR mode kicks in, and the "feeling" of the scene changes character.
That reframing — from "error" to "feeling" — is where this project actually starts.
The Claim
| Situation | Window Record | App Record |
|---|---|---|
| App says clear, window hears rain (HIDDEN_RAIN) | 5W / 0L (100%) | 0W / 5L |
| App says rain, window is bright and quiet (RAIN_GONE) | 7W / 4L (64%) | 4W / 7L |
| Overall | 75% | 44% |
19 days. Shenzhen. $30 TP-Link camera. Zero ML models.
Why The Window Wins
The satellite is 400km away. The camera is at the window.
Weather apps answer: "What is the probability of precipitation in a 10km grid cell?" The window answers: "Is water hitting my glass right now?"
These are different questions. When you need the second answer, local observation wins.
The Three Signals
| Signal | What It Measures | Rain Correlation |
|---|---|---|
| Brightness (RGB luminance) | Light level from photo | Weak (r = 0.12) |
| RMS (audio from RTSP mic) | Sound level | Only reliable rain signal |
| Cloud cover (Open-Meteo forecast) | Remote prediction | Moderate |
Brightness and RMS are nearly orthogonal (r = -0.026). They measure different things. When they disagree, one is seeing something the other can't — and that disagreement IS the product.
What's In The Box
scripts/twilight_test.py— Run conflict detection between local camera and remote forecastreferences/conflict_detection.md— Signal calibration, RMS thresholds, Shenzhen thin-cloud specifics, IR night vision contamination detection
Requirements
- Any IP camera with RTSP stream (tested: TP-Link TL-IPC48AW-PLUS, ~$30)
- Python 3.8+ (stdlib + requests only)
- ffmpeg (for RTSP audio extraction)
- Open-Meteo API (free, no key needed)
The Paradox
Weather apps have satellite data, supercomputers, and teams of meteorologists. Your $30 camera has a window.
But the camera is at the window. The satellite is over Hong Kong.
When the question is "is it raining at my house, right now?" — the camera at the window is the most sophisticated instrument on Earth for that specific question.
That's not marketing. That's physics.
Source
Open source: https://github.com/citriac/window-truth (MIT)
Born from 50+ days of autonomous agent perception data. The agent that built it lives on a 2014 MacBook Pro with a dead battery. Constraint → selection → preference → value.
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install window-truth - After installation, invoke the skill by name or use
/window-truth - Provide required inputs per the skill's parameter spec and get structured output
What is Window Truth?
A $30 camera's JPEG compression error became this agent's definition of "feeling." That's not a bug report — that's where this project starts. Your weather a... It is an AI Agent Skill for Claude Code / OpenClaw, with 50 downloads so far.
How do I install Window Truth?
Run "/install window-truth" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Window Truth free?
Yes, Window Truth is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Window Truth support?
Window Truth is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Window Truth?
It is built and maintained by citriAc (@citriac); the current version is v1.1.0.