Free F1 race calendar for your E-Ink display! Use the public instance at f1.inkycloud.click β no setup required.
The easiest way to display the F1 calendar on your E-Ink device is to use our free public instance:
For zivyobraz.eu Users
- Register at zivyobraz.eu and add your ePaper device
- In device settings, select "URL" as content source
- Enter the calendar URL:
https://f1.inkycloud.click/calendar.bmp?lang=cs - Done! Your E-Ink display will show the next F1 race π
| Parameter | Options | Example |
|---|---|---|
lang |
cs, de, en, es, fr, it, ja, nl, pl, pt-BR, sk, tr, zh-CN |
?lang=sk |
tz |
Any IANA timezone | ?tz=America/New_York |
year |
Season year | ?year=2026 |
round |
Race round number | ?year=2026&round=5 |
race_key |
Specific race key from /api/races/{year} (requires year) |
?year=2026&race_key=2026-round-5-monaco-2026-05-24 |
display |
1bit, bwr, bwry, spectra6 |
?display=bwry |
weather |
true, false |
?weather=false |
weather_type |
race_day, race, current, off |
?weather=true&weather_type=current |
Examples:
https://f1.inkycloud.click/calendar.bmp?lang=cs
https://f1.inkycloud.click/calendar.bmp?lang=en&tz=America/New_York
https://f1.inkycloud.click/calendar.bmp?lang=en&year=2026&round=5
https://f1.inkycloud.click/calendar.bmp?lang=en&year=2026&race_key=2026-round-5-monaco-2026-05-24
https://f1.inkycloud.click/calendar.bmp?lang=en&display=bwr
https://f1.inkycloud.click/calendar.bmp?lang=en&display=bwry
https://f1.inkycloud.click/calendar.bmp?lang=en&display=spectra6
https://f1.inkycloud.click/calendar.bmp?lang=en&weather=true&weather_type=current
https://f1.inkycloud.click/teams.bmp?lang=ja&display=spectra6
https://f1.inkycloud.click/sk/configure/calendar
LaskaKit 7.5" E-Ink display showing F1 race calendar in Czech
SVERIO PaperBoard 7.5" GDEM075F52 four-color 800Γ480 ePaper (black/white/yellow/red)
- 800x480 BMP output β
1bitmonochrome,bwrB/W/R,bwryB/W/R/Y, andspectra66-color mode for both calendar and teams screens - Teams & Drivers screen β Dedicated
teams.bmprender for the default or selected season with constructor lineup, driver photos, and championship points - Localized UI and assets β Routing, configure pages, previews, docs, and pregenerated BMPs support
cs,de,en,es,fr,it,ja,nl,pl,pt-BR,sk,tr, andzh-CN - Hourly regeneration + startup warmup β Calendar and teams assets are regenerated on startup and every hour, with version metadata refreshed hourly and teams render assets warmed on boot
- Any Timezone β Convert race times to your local timezone
- Race Status States β Upcoming countdown,
IN PROGRESS/PROBΓHΓ,COMPLETED/DOKONΔEN, and cancelled race handling - Optional Weather Overlay β Current, race-day forecast, and historical race-time weather on the calendar screen
- Historical Results β Previous year's podium for each circuit
- Track Info β Circuit map, length, laps, and first GP year
- Display-Specific Track Art β
1bit,bwr,bwry, andspectra6now prefer per-display source artwork before falling back to generic circuit assets - Interactive configure flow β Localized
/configure/calendarand/configure/teamspages with pregenerated previews, direct BMP URLs, weather/display switching, and season leaders sidebar - SEO-friendly public pages β Canonical URLs, hreflang alternates,
robots.txt, and a localizedsitemap.xmlwithout synthetic dailylastmodchurn - Session Schedule β FP1, FP2, FP3, Qualifying, Sprint, Race times
Planned features for future releases:
- 1-BIT monochrome β Initial calendar output introduced in
v1.0.0 - Spectra 6 β
display=spectra6added inv1.2.0 - B/W/R β
display=bwradded inv1.2.9 - B/W/R/Y β
display=bwryadded inv1.2.13for the calendar screen and extended to the teams screen inv1.2.15
- Championship standings β Driver and constructor standings view
- Teams & Drivers screen β Full team grid with driver photos and points
- Custom layouts β Multiple layout options to choose from
- Additional display sizes β Beyond 800x480 (e.g. 4.2", 5.83", 12.48")
- More languages β Additional community/localized translations beyond the current 13 supported locales
- Extended weather integration β Richer race weekend weather and extra weekend details
- Dark mode variant β Inverted colors for different display preferences
Compatible with zivyobraz.eu β a service for managing ePaper displays with ESP32. See documentation.
#include <HTTPClient.h>
HTTPClient http;
http.begin("https://f1.inkycloud.click/calendar.bmp?lang=cs");
const char* responseHeaders[] = {"ETag"};
http.collectHeaders(responseHeaders, 1);
String etag = loadEtagFromPreferences(); // Persist across deep-sleep cycles.
if (!etag.isEmpty()) {
http.addHeader("If-None-Match", etag);
}
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
saveEtagToPreferences(http.header("ETag"));
display.drawBitmap(http.getStream());
} else if (httpCode == HTTP_CODE_NOT_MODIFIED) {
// The BMP is unchanged: skip both the download and disruptive panel redraw.
}Calendar and teams responses use a strong SHA-256 ETag. Send it back in If-None-Match; an
unchanged image returns 304 Not Modified with an empty body. Persist the ETag in NVS/Preferences,
because an ESP32 commonly sleeps between polls. A changed race, weather view, language, timezone,
or renderer output returns 200 with a new ETag. Teams deliberately use Cache-Control: no-cache,
which permits conditional revalidation without accepting a stale response.
The public instance at f1.inkycloud.click provides these endpoints:
| Endpoint | Description |
|---|---|
GET /calendar.bmp |
Calendar BMP with lang, year, round, race_key, display, weather, and tz params |
GET /teams.bmp |
Teams & drivers grid as BMP image (lang, year, display) |
GET / |
Landing page with screen type selection |
GET /configure/{screen} |
Interactive localized preview/config page (calendar/teams) |
GET /stats |
Public usage statistics dashboard |
GET /privacy |
Privacy policy page |
GET /changelog |
Public changelog page |
GET /preview/{screen}.png |
Pre-generated localized homepage preview PNG |
GET /preview/configure/{screen}.png |
Pre-generated localized configure preview PNG |
GET /api |
JSON API documentation |
GET /api/docs |
Alias for /api |
GET /api/docs/html |
Interactive HTML API docs |
GET /api/races/{year} |
All races for a season (JSON) |
GET /api/race/{year}/{round} |
Specific race details (JSON) |
GET /api/teams/{year} |
Teams and drivers for a season (JSON) |
GET /api/standings/leader |
Current championship leader (JSON) |
GET /api/standings/leader/{year} |
Championship leader for a specific season (JSON) |
GET /api/stats |
Request statistics, including 200/304 status totals |
GET /api/stats/history |
Historical hourly request statistics |
POST /api/perf-metrics |
Store frontend performance metrics (Core Web Vitals) |
GET /api/perf-metrics |
Read aggregated frontend performance metrics |
GET /robots.txt |
Crawler policy with canonical sitemap reference |
GET /sitemap.xml |
Localized sitemap with canonical URLs and hreflang alternates |
GET /sw.js |
Service worker script |
GET /health |
Process liveness |
GET /health/ready |
SQLite, storage, and core-generation readiness/degradation |
When ADMIN_API_TOKEN is configured, read-only operational endpoints (/api/stats, /api/stats/history, and GET /api/perf-metrics) require either X-Admin-Token or Authorization: Bearer <token>. Public image endpoints and POST /api/perf-metrics remain available, with rate limits applied.
Production, CI, and local development use Python 3.14. Released containers are published to GHCR with immutable version and commit tags, an SBOM, and provenance.
git clone https://github.com/Rhiz3K/InkyCloud-F1.git
cd InkyCloud-F1
cp .env.example .env
F1_IMAGE=ghcr.io/rhiz3k/inkycloud-f1:vX.Y.Z docker compose pull
F1_IMAGE=ghcr.io/rhiz3k/inkycloud-f1:vX.Y.Z docker compose up -d --no-build- DEPLOYMENT.md β choose the correct deployment path
- SELF-HOSTING.md β Docker, operations, backups, and development
- COOLIFY.md β image-based Coolify deployment and rollback
- .env.example β canonical environment-variable reference
- scripts/README.md β maintenance and unified asset CLI
- BMP_PROCESSING.md β source-art and runtime BMP pipeline
See LICENSE file for details.
Contributions are welcome! See CONTRIBUTING.md for guidelines.
- Inspiration: FoxeeLab's original F1 E-Ink project
- Race data: Jolpica-F1 API
- Weather: Open-Meteo
- Icons: Weather Icons by Erik Flowers (SIL OFL 1.1)
- Flags: Flagcdn
- Platform: Ε½ivΓ½obraz.eu
- Devices: LaskaKit and SVERIO
- Hosting: Coolify + Hetzner
- Analytics: Umami
- Errors: GlitchTip

