Repository navigation
Releases: Krule/PutPlay
Releases · Krule/PutPlay
Release list
v1.1.3
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
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
[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 theinsetshorthand, 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
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 (webOSscreenSaverPropertiestype 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
v1.0.3
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
v1.0.1
v1.0.0
Full Changelog: https://github.com/Krule/PutPlay/commits/v1.0.0