Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

78 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

F1 E-Ink Calendar

Free F1 race calendar for your E-Ink display! Use the public instance at f1.inkycloud.click β€” no setup required.

Public Demo Self-Host CodSpeed


Quick Start β€” Use It Now!

The easiest way to display the F1 calendar on your E-Ink device is to use our free public instance:

For zivyobraz.eu Users

  1. Register at zivyobraz.eu and add your ePaper device
  2. In device settings, select "URL" as content source
  3. Enter the calendar URL:
    https://f1.inkycloud.click/calendar.bmp?lang=cs
    
  4. Done! Your E-Ink display will show the next F1 race 🏁

URL Parameters

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

Preview

F1 E-Ink Calendar Preview

LaskaKit 7.5" E-Ink display showing F1 race calendar in Czech

SVERIO B/W/R/Y

SVERIO PaperBoard 7.5" GDEM075F52 four-color 800Γ—480 ePaper (black/white/yellow/red)


Features

  • 800x480 BMP output β€” 1bit monochrome, bwr B/W/R, bwry B/W/R/Y, and spectra6 6-color mode for both calendar and teams screens
  • Teams & Drivers screen β€” Dedicated teams.bmp render 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, and zh-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, and spectra6 now prefer per-display source artwork before falling back to generic circuit assets
  • Interactive configure flow β€” Localized /configure/calendar and /configure/teams pages 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 localized sitemap.xml without synthetic daily lastmod churn
  • Session Schedule β€” FP1, FP2, FP3, Qualifying, Sprint, Race times

Roadmap

Planned features for future releases:

Display colors

  • 1-BIT monochrome β€” Initial calendar output introduced in v1.0.0
  • Spectra 6 β€” display=spectra6 added in v1.2.0
  • B/W/R β€” display=bwr added in v1.2.9
  • B/W/R/Y β€” display=bwry added in v1.2.13 for the calendar screen and extended to the teams screen in v1.2.15

Screens and layouts

  • 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")

Content and localization

  • 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

ESP32 Integration

Using zivyobraz.eu (Recommended)

Compatible with zivyobraz.eu β€” a service for managing ePaper displays with ESP32. See documentation.

Direct ESP32 Code

#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.


Public Routes and API Endpoints

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.


Self-Hosting

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.

Quick Docker Start

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 Guides


License

See LICENSE file for details.

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

Credits

About

F1 E-Ink Calendar - Generate BMP images for E-Ink displays

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Sponsor this project

Used by

Contributors

Languages