Skip to content

Releases: Krule/PutPlay

v1.1.3

Choose a tag to compare

@github-actions github-actions released this 15 Oct 11:24
v1.1.3
5372d59

Comic covers now persist for up to 2,000 files across sessions: the cover store moved from the browser's 16 MB localStorage limit to IndexedDB, so bigger libraries stop re-downloading covers on every open. Covers expire after a month as before, and signing out still clears the account's artwork.

Full Changelog: v1.1.2...v1.1.3

v1.1.2

Choose a tag to compare

@github-actions github-actions released this 15 Oct 07:37
v1.1.2
4a21b1b

Corner playback (the music row, the docked video) now behaves the way it should while you read — nine fixes from a week on the TV:

  • The version line in Settings now reads clean on store builds: two things made every pipeline build look modified — tracked helper files under node_modules, and the pipeline's own version update (tag → manifests) being counted as a local change. v1.1.2 is the first release stamped clean.
  • The docked video's size button (make it mini / restore to full) is reachable with the D-pad in both mini and micro now: after a size change the button was recreated in place and the focus scan never saw the new one, so the walk jumped over it.
  • On the comic and picture readers, the music row's "Restore to strip" button is dimmed and skipped by the D-pad: restoring the strip there did nothing (the strip would cover the page), and it quietly changed what the music looks like back in the library.
  • While the corner's focus is on the player (music row or docked video), Left/Right no longer turn the comic page: while focused, the corner owns the arrows (walk its buttons, release at its edge) and the page stays put. Without focus, the page owns the arrows — and the flicker fix from the previous round stays in place.
  • While reading, page-turning no longer makes the corner's focus flicker on and off on every Left/Right/Up press: a press with no focus no longer pulls the corner in (it was the only thing the arrows could land on). The corner is entered on purpose — Down, or the pointer — and Left/Right then hand it back immediately.
  • Pressing Down to switch focus off the corner (music row or docked video) now actually turns it back down on the TV: releasing focus also hands back the DOM focus, which was keeping the corner at full opacity with a focused-looking button even though the spatial focus was gone. Same for the release when you walk off the corner's edge.
  • While reading, the corner (the music row, or a docked video in mini/ micro) no longer holds the arrows: walking off its edge releases the focus, and Down — a dead key at fit size — now switches focus between the page and the corner. That is the deliberate in and out of the corner; the magic remote's pointer works as before.
  • Enter on a focused corner control now does the control's job from the comic reader: the docked video's buttons used to do nothing on Enter, and the music row's zoomed the page instead.
  • The docked video's micro (the icon row) now recedes to 25% opacity over comics and pictures, like the music row, and brightens when you focus it. The mini keeps the video fully visible.

Full Changelog: v1.1.1...v1.1.2

v1.1.1

Choose a tag to compare

@Krule Krule released this 14 Oct 17:37
0669dbe

[1.1.1] - 2026-10-14

Added

  • Docked video player: pressing Back in the full player no longer stops the
    film — it docks to a small window over your library and keeps playing.
    Back (or the restore button) brings it back to full exactly where you were;
    a shrink button folds it to an icon row that plays audio only; and ✕ stops
    it, saving the position so the video reopens where you left off.
  • Videos advance on their own: when one ends, the next video in the same
    folder starts. Turn it off in Settings → Playback ("Play next in folder",
    on by default).
  • The now-playing strip gets the same ladder: a collapse button folds it
    to an icon row in the corner (and back). While you're reading a comic or
    looking at a picture, the music presents as that small corner row on its
    own — it no longer covers the page.

Fixed

  • While reading a comic or image with a video docked: the D-pad no longer
    wanders into the dock's buttons (they showed a focus ring but Enter did
    nothing there). The dock stays clickable with the magic remote — its
    buttons just can't steal the reader's arrows any more, and a mouse click
    on them no longer leaves a stray focus ring behind.
  • Back works again from the reader after you have driven the docked video
    (restore-to-full, close, …): the reader now takes the remote's handlers
    back whenever the video leaves full, instead of being stranded on the
    player's stale ones.
  • The docked video's mini window sits in the bottom-right corner again
    (it was pinned top-left), and micro no longer paints the whole screen
    black — it folds to just the icon row in that same corner.
  • Back works again after restoring the docked player to full (one
    restore→Back cycle used to leave it dead).
  • The player rendered off-screen on the TV (a bottom strip instead of the
    full screen): the build's CSS minifier was folding top/right/bottom/left
    into the inset shorthand, which the TV's Chromium 79 silently ignores.
    The build now targets the TV's Chromium (build/options.mjs) and the test
    suite re-minifies the stylesheet with that target — any shorthand the TV
    can't read fails the build. This was the real cause of the first
    positioning round as well.
  • The music row's controls work from the comic reader now (restore, play,
    next — the reader's D-pad scope includes the corner row, and the library
    stays out of reach), and while reading the row recedes to 25% opacity,
    brightening when you focus it.

Full Changelog: v1.1.0...v1.1.1

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 05:45
6c33f74

Added

  • Music playback: open a music file in the library and it plays under a
    slim now-playing strip — browse folders, open pictures, and read comics
    while it keeps running. Prev/next walk the folder's tracks, a finished
    track advances on its own, and the TV remote's play/pause/stop and
    rewind keys drive it. The TV's own decoder is the judge: a format it
    can't play is said so directly and remembered, so the same file never
    gets retried blindly.
  • Comic reader: open a .cbz from the library and it reads like a book —
    the put.io file is never downloaded, only the pages you look at (range
    reads + in-memory inflate, verified on a 351 MB scan: zero full-file
    traffic). Pages sort like a print run (cover first, 2 before 10), Up
    flips the reading direction (persisted per comic, so a manga stays a
    manga), Back remembers your page and the book opens back where you
    left it. OK steps fit → 2× → 4× relative to the page's own fit — a
    675-px and a 2138-px scan feel identical — and the arrows pan when
    zoomed. CBR stays an honest "can't open"; a single-picture zip still
    goes to the archive viewer.
  • Spread mode: the reader works in SHEETS, not single pages — the cover
    alone, then uniform pages side by side, and any wide page (a real
    spread) on its own. A portrait page on a 16:9 screen used to be a
    sliver in a black sea; now it fills the glass. RTL books render the
    pair right-to-left (the earlier page on the right). A legend in the
    reader always says which direction you're in and how to flip it.
  • Image viewer zoom: pictures get the reader's proven interaction — OK
    steps fit → 2× → 4×, the arrows pan when zoomed, browsing resets to
    fit. The zoom math now lives in one shared module (putio/zoom.ts), so
    a picture and a spread behave exactly the same.
  • Reader page cache: the ten most recently read pages stay cached (LRU,
    blob revocation on eviction) and survive screen switches — back to the
    grid, re-open the book, every read page is instant. The prefetch
    follows the direction you're HEADING: turning back reads behind you,
    so a back-traversal after a forward one costs no network at all.
  • Comic cover thumbs: a .cbz tile shows its cover (page 0 of the reading
    order) instead of a bare glyph. The cover is a down-scaled JPEG saved
    locally — a saved thumb costs zero network on the next launch. Thumbs
    expire after a month, the store is capped, storage that refuses is a
    quiet fallback (the thumb still shows, it just won't persist), and
    sign-out clears the previous account's artwork. A cover that can't be
    fetched falls back to the glyph — never an empty tile.

Changed

  • One engine, one output: starting a video stops the music, and starting
    the music stops the video — the TV has one sound path, and the app
    doesn't fight over it.
  • Sign-in on app launch now completes with a single account check instead
    of two — the app started by validating the saved token and then
    fetching the account info, which is the same put.io endpoint called
    twice. Startup makes one fewer round-trip, which is most noticeable on
    slow connections.
  • Opening an archive is two-stage: a 64 KB probe finds the index
    (central directory) location first, and the index itself is fetched
    exactly — never a flat 256 KB chunk. Small archives open in one
    request; huge ones pay only for their index.
  • OLED screensaver opt-in: the app declares itself a still-image app with
    the 30-minute, key-reset timeout (webOS screenSaverProperties type 2)
    — a page you keep turning stays at full brightness, and the display only
    goes dark after a half hour away. (A TV-level power-off dragged in by a
    connected device — SimpLink/CEC, or an energy-saving timer — is a TV
    setting; no app API can reach it.)

Fixed

  • Reading a big comic stalled between pages. Three measured causes, all on
    the fetch path: the next sheet was only fetched AFTER the current one
    finished (so on 2 MB pages it never finished in time), every page paid
    for TWO round trips (a 30-byte header read, then the data), and a
    direction flip mid-prefetch double-fetched the same page. The next sheet
    now starts downloading the moment a load begins, each page arrives in a
    single range read (one exact fallback read only when a non-conforming
    local header disagrees with the index), and in-flight requests are
    deduplicated. Bench: the slowest turn 3.0 s → 1.5 s, every other turn
    ~20 ms, requests per book halved.
  • Cover thumbs: once the TV's local storage filled up, later covers
    silently stopped persisting — and the app then forgot what it had cached
    too. Persisting now degrades instead: the oldest covers yield until the
    rest fits (freshest-first), and the in-memory map is never trimmed, so
    the session still shows every cover. A cached cover that won't decode is
    re-fetched from the network instead of showing broken pixels.

Fixed

  • Archives with a central directory larger than 256 KB were refused as
    "not a ZIP" (the tail chunk missed the index). The two-stage open
    reads the index wherever it is — verified on an 8000-entry archive.
  • Zoomed pan was inverted on the C1 ("up went down, left went right"): it
    used drag-style movement, but a TV D-pad names where you want to LOOK.
    Up now reveals the top, Left the left — in the comic reader and the
    image viewer.
  • A turn happened before the page's bytes arrived, so pressing Back
    during a slow load lost the turn. The position is persisted when the
    turn happens, not when the load finishes.
  • A superseded image load leaked its blob URL in the image viewer; it is
    revoked now.

Full Changelog: v1.0.4...v1.1.0

v1.0.4

Choose a tag to compare

@github-actions github-actions released this 13 Oct 04:57
2b05484

Full Changelog: v1.0.3...v1.0.4

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 12 Oct 15:15
155fb5e

PutPlay 1.0.3 — bigger subtitles, steadier streams, and a library focus fix.

Added

  • Subtitle size right on the player: Small / Default / Large / XL in the Subtitles panel. It applies to both the on-screen subtitles and the stream's embedded captions, and it is saved like every other setting.
  • A stall advisory: if the original stream keeps stalling on your connection, the player says so (once per file) and points at the smoother put.io MP4 stream.
  • The HLS source now runs a much deeper buffer (60s target, 90s ceiling — was 30s) to ride out network dips.

Fixed

  • Library focus on the TV is now the soft glow only — the harsh blue box that wrapped the focused tile is gone. Navigating to the rightmost tile, or the last item, no longer summons a bottom horizontal scrollbar in the grid.
  • Leaving playback returns you to the folder you were browsing — not the library root.
  • The Video / Audio / Subtitles panels now close as soon as you make a selection.
  • A folder whose id happens to be 0 (and its breadcrumb trail) was treated as the library root: opening it showed the root's contents. It now opens itself.
  • Playback no longer stops when the TV's volume is changed. A pause nobody requested is resumed automatically; a pause you asked for (blue key) still sticks.

Full Changelog: v1.0.2...v1.0.3

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 12 Oct 08:32
c3cccc2

Full Changelog: v1.0.1...v1.0.2

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 22:14
e1bbfc8

Full Changelog: v1.0.0...v1.0.1

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 20:14
9828484