Commit ·
0fbcb31
1
Parent(s): 956b349
Show ws90 photo + mention gateway/sensor split in subtitle and caption
Browse filesThe hardware is two pieces: an Ecowitt GW3000 gateway (the indoor base
station that uploads to the cloud) and an outdoor WS90 7-in-1 sensor
(the thing in the photo — temperature, humidity, pressure, wind, rain,
UV, solar, all in one piezo-rainfall unit). Renamed the asset to
ws90.jpeg accordingly and updated the page subtitle + photo caption.
The image itself was uploaded to the Space via huggingface_hub
(Xet-backed) in a prior commit (956b349) because HF Spaces' pre-receive
hook rejects raw binary files in git pushes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
app.py
CHANGED
|
@@ -437,9 +437,9 @@ HOOK = (
|
|
| 437 |
"What if you could predict the future with the same technology?**"
|
| 438 |
)
|
| 439 |
SUBTITLE = (
|
| 440 |
-
"Live readings from my Ecowitt
|
| 441 |
-
"[Datadog's Toto 2.0 (22M)](https://huggingface.co/Datadog/Toto-2.0-22m), "
|
| 442 |
-
"
|
| 443 |
"The scoreboard tracks who's been more accurate over the past 48 hours."
|
| 444 |
)
|
| 445 |
|
|
@@ -514,6 +514,23 @@ with gr.Blocks(
|
|
| 514 |
residual_plot = gr.Plot(label="Forecast residual")
|
| 515 |
|
| 516 |
gr.Markdown("## 🔧 How it's made")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 517 |
with gr.Accordion("How the scoreboard is calculated", open=False):
|
| 518 |
gr.Markdown(
|
| 519 |
"We score each model on **how close its prediction was to the actual Ecowitt reading** "
|
|
|
|
| 437 |
"What if you could predict the future with the same technology?**"
|
| 438 |
)
|
| 439 |
SUBTITLE = (
|
| 440 |
+
"Live readings from my Ecowitt GW3000 gateway + WS90 7-in-1 sensor, plus a probabilistic forecast "
|
| 441 |
+
"from [Datadog's Toto 2.0 (22M)](https://huggingface.co/Datadog/Toto-2.0-22m), compared against "
|
| 442 |
+
"the [NWS hourly forecast](https://www.weather.gov/documentation/services-web-api). "
|
| 443 |
"The scoreboard tracks who's been more accurate over the past 48 hours."
|
| 444 |
)
|
| 445 |
|
|
|
|
| 514 |
residual_plot = gr.Plot(label="Forecast residual")
|
| 515 |
|
| 516 |
gr.Markdown("## 🔧 How it's made")
|
| 517 |
+
gr.Image(
|
| 518 |
+
"assets/ws90.jpeg",
|
| 519 |
+
show_label=False,
|
| 520 |
+
container=False,
|
| 521 |
+
interactive=False,
|
| 522 |
+
height=380,
|
| 523 |
+
show_download_button=False,
|
| 524 |
+
show_share_button=False,
|
| 525 |
+
show_fullscreen_button=False,
|
| 526 |
+
)
|
| 527 |
+
gr.Markdown(
|
| 528 |
+
"<div style='text-align:center;opacity:0.6;font-size:0.9em;"
|
| 529 |
+
"margin-top:-0.3em;margin-bottom:0.8em;'>"
|
| 530 |
+
"my ecowitt weather station — Ecowitt GW3000 gateway + WS90 7-in-1 sensor"
|
| 531 |
+
"</div>"
|
| 532 |
+
)
|
| 533 |
+
|
| 534 |
with gr.Accordion("How the scoreboard is calculated", open=False):
|
| 535 |
gr.Markdown(
|
| 536 |
"We score each model on **how close its prediction was to the actual Ecowitt reading** "
|