foredogs v2.0.0
Docs

For Home Assistant and reTerminal

Your dog,
drawn every morning.

Every morning a model draws your dog in today's weather and a new art style. An e-paper panel shows it with the forecast and the bins, then sleeps until tomorrow.

The foredogs dashboard on a reTerminal E1002: Wednesday, 14 July, sunny, 19 to 31 °C, a watercolour of a dog splashing through a lake, the bins and a four-day forecast.
Left flushes the panel clean Right turns the page Green repaints, here with the next morning
The picture as the model drew it: a dog splashing through a lake in watercolour. The same picture dithered to the panel's six colours. As drawn On the panel

The weather is
in the picture.

Rain puts rain in the scene and moves the work indoors. Sun sends the dog to the lake. A cold morning puts a coat on. The sky in the picture is the sky outside.

  • Two model calls a day. One writes the scene, the other draws it from photos of your dog.
  • Six colours, two treatments. Dithering for the picture, crisp flat colour for the text.
  • Drag the line to compare the drawing with the panel.

Same dog,
new style.

Every morning picks a style from a pool you write yourself, least recently used first. The weather decides what the dog is doing.

Twelve to start with

The shipped pool names a medium, never a franchise, and each is drawn for six colours. Point at one to see Benny in it.

A calendar that matters

German holidays, Easter and the seasons are built in. Add birthdays and local dates, and each one brings an outfit and a scene.

  • 1 JanNew Year, in a party hat
  • 31 OctHalloween, in a spooky costume
  • 24 DecChristmas Eve, sweater and Santa hat
  • Birthdaysyours, the family's, the dog's

The weather,
up close.

Page two is the day hour by hour and the week ahead. The right button turns to it and back.

  • Blue bars are rain, one per hour, capped at 4 mm/h.
  • Each day's bar is its range. Further right is warmer, wider is a bigger swing.
  • Four labels on the curve: both ends, the warmest and the coldest hour.

Every morning,
in three steps.

The picture costs money and takes minutes. The composite costs nothing and takes three seconds. The microcontroller does neither: it downloads a finished PNG.

04:30

The generator draws

On a Mac or a Linux box: the forecast, a style, the calendar and two model calls. The picture goes to Home Assistant.

The generator
On call

Home Assistant composites

The integration lays out the picture with the weather, the bins, the sun and the battery, and dithers it into one PNG.

The dashboard
05:45

The panel paints

The reTerminal wakes, asks for a render, downloads the PNG, paints it and sleeps for the next 23.9 hours.

The firmware
Per charge
25–33days
Awake
~40s a day
One wake
0.6mAh
A day asleep
80mAh
PanelreTerminal E1002 · 7.3" Spectra 6 · 800×480
BoardESP32-S3 · ESPHome
Battery2000 mAh · USB-C
SensorsSHT40 inside climate · battery ADC

A month
per charge.

The panel wakes once a day for about forty seconds and deep-sleeps the rest.

  • Measured, not estimated. 0.12 to 0.17 % of the battery an hour, on the panel itself.
  • The panel forecasts itself. Once there are two days of history, the days left appear under the battery gauge.
  • No panel? Without one you still get the daily picture and a PNG for any screen.
Power measurements

Build your own.

Home Assistant, a machine for the morning job and a model you can reach. The setup guide checks every stage.

1

The generator

Clone, copy the examples, add four or five photos of your dog, then run --dry-run to read the prompts before spending anything.

Choosing a model
2

Home Assistant

Copy the component in or add the repository to HACS as a custom repository, add foredogs:, and call the render service once by hand.

The integration
3

The panel

Fill in secrets.yaml and flash e1002-kitchen.yaml with ESPHome. The first boot renders, paints and goes to sleep.

The firmware
1 · Generator, in a terminal
git clone https://github.com/nichtlegacy/foredogs.git
cd foredogs/generator
python3 -m pip install -r requirements.txt

ex=../examples/generator
cp $ex/config.example.json config.json
mkdir -p config assets/input_images
cp $ex/dogs.example.json config/dogs.json
cp $ex/art_styles.example.json config/art_styles.json

# photos in assets/input_images/, location in config.json
python3 -m foredogs_generator.main --dry-run
2 · Home Assistant, Developer tools › Actions
action: foredogs.render_dashboard
data:
  weather_entity: weather.forecast_home
  image_dir: dogs
  language: en        # or de

# then /config/www/daily_foredogs/dashboard.png
# is there, 800×480, and the panel can fetch it

Which model draws?

By default the generator drives the codex CLI. Set provider.kind to openai and point it at OpenAI, Google, OpenRouter, LiteLLM, Ollama or a local proxy instead. Providers

What leaves the house?

Reference photos go to whichever model you configure; point it at a local one if that matters to you. Names, photos, birthdays and your style pool stay in files git never tracks.

German or English?

Either, per render call, and the panel above switches with it. Adding a language is one file in custom_components/foredogs/languages/.

What it is not

Not a plug-in app and not a hosted service. It is a complete stack (generator, integration, firmware) that runs every morning on the author's own panel.

Where did it come from?

A fork of forecats by jwardbond, daily cat pictures in Home Assistant. Since February 2026 the generator, the renderer and the firmware have been rebuilt.

How is it built?

With extensive help from AI coding assistants. Both halves have test suites that run without Home Assistant installed, and the demo on this page is drawn by the same renderer.