github dmellok/tesserae v0.466.1

3 hours ago

Fixed

  • Settings › Generative AI keeps a key you Check. The Account card's Check button asked fal.ai about a freshly typed key and then threw it away, and the only Save button sat at the bottom of the Spending card, so a key typed and checked read as "no key" on the next visit and every widget that paints stayed waiting. Check now saves a new key that fal.ai accepts (the note says "Saved."), a refused key is not kept, and the Account card has its own Save button.

Added

  • Background paintings in the status pop-up. A send waiting for a page's pictures and a page run ahead of its scheduled send each show a card in the job tray while they run: whose page, how many pictures are still painting and when they look again.

[0.466.0], 2026-10-18

Added

  • Battery tile words a power_plugged heartbeat field as "plugged in" or "on battery", for a UPS on a mains device such as a PiSugar on a Pi. The Pi clients gained a [battery] config table that reads a PiSugar 3 over I²C or via pisugar-server.

[0.465.0], 2026-10-18

Added

  • app.commons: free pictures from Wikimedia Commons for every widget that
    paints. A file by title, a category's files, the best portrait of a
    subject in a category (ranked by name: an identifier first, then the
    subject's name, never a plaque, a cabin or a visit), the picture's bytes
    for the painter, and one wording for the credit with the author and
    licence read off the file. One cache under <data root>/commons/, one
    User-Agent with the contact set under Settings › Generative AI, requests
    one at a time with a small gap as Commons asks. Underway, Orbit and
    Overhead carried a copy each; they use the host's when it is there.
  • Settings › Generative AI has the contact field and shows the size of the
    Commons cache.
  • The artwork page says when a picture is an impression, painted from a
    description rather than a picture (meta["impression"]).

Fixed

  • Setup text now gives the server's own address (#344). The access-token
    pop-up for the Bloomin8 Canvas and TRMNL kinds built its URL from the
    browser's address, which through Home Assistant ingress is HA's host and
    port 8123, so a Canvas set up from it called Home Assistant instead of
    Tesserae. It now uses the detected LAN address and bind port the frame
    URLs already use. The Canvas pop-up and quickstart also carry a Windows
    PowerShell form of the pull-settings command; the previous one only ran in
    a Unix shell.
  • Add device lists kinds alphabetically by their display name (#344).
  • Docker: the data directory's owner bits are restored on start (#372).
    A NAS that keeps share permissions in its own ACL layer (Ugreen OS,
    Synology) can leave the bind mount's real mode at 000, which its own tools
    show as rwx; the container then failed at start with a permission error on
    data/plugins even though the listing looked right. The entrypoint now
    adds the owner's read, write and search bits after the chown.

[0.464.1], 2026-10-18

Fixed

  • The cell id hash is marked as not for security, which the CI security scan
    flagged on 0.463.0 and 0.464.0 (bandit B324); nothing else changes.

[0.464.0], 2026-10-18

Added

  • Settings › Generative AI: the fal.ai key every painting widget shares (a
    widget's own key still comes first), a Check that asks fal.ai about the
    key without painting anything, and two spending ceilings, US dollars a
    day and a month, over every widget together; a widget's own budget
    applies inside them. The page shows to-day and the month, a strip of the
    last thirty days, who is painting with a link to each widget's pictures,
    and the month by widget and model, from a ledger every charge is written
    to (<data root>/artwork/ledger.jsonl).
  • A send waits for the page's paintings: a push of a page with a widget
    that asks to be run ahead first runs the page and, while it still asks
    for a refresh, runs it again after that wait, up to five minutes, so the
    panel paints the finished page once. Manual sends wait too; follow-ups
    and warms do not. History says how long a send waited.

Fixed

  • The host version the tesserae_min gate compares against is the
    checkout's pyproject.toml when there is one, not the installed package's
    metadata, which goes stale on a source install run after a bump and
    turned current widgets away as too new.

Don't miss a new tesserae release

NewReleases is sending notifications on new releases.