Skip to content

Release v1.8.4: smoother playback for heavy sources, and tags for upload tokens - #753

Merged
ShaneIsrael merged 5 commits into
mainfrom
develop
Sep 28, 2026
Merged

ShaneIsrael merged 5 commits into
mainfrom
develop

Conversation

@ShaneIsrael

Copy link
Copy Markdown
Collaborator

Everything on develop since v1.8.3 (PRs #749 and #752). No database migrations.

Playback

  • The player now starts on a transcode when the browser can't decode the source smoothly, so heavy clips (e.g. 3440×1440 AV1 at 60 fps on a machine with no AV1 decoder in hardware) stop freezing on the first frame while the audio plays on (fix: start on a transcode when the source will not play smoothly #749)
  • VideoInfo.json() now includes codec (an RFC 6381 string) and bitrate, built from the stored ffprobe data by the new media_codecs.py
  • The client asks navigator.mediaCapabilities.decodingInfo() about each quality and starts on the best one decoded in hardware, then the best one decoded smoothly, then the source. Every quality stays in the menu
  • Nothing changes when the codec is unknown, the Media Capabilities API is missing (plain-http instances), there is only one source, or the editor opens the original

Upload tokens

  • GET /api/upload/token/options now lists tags, so a tool like Firesync can offer a tag picker for tag_ids (feat: list tags in the upload-token options #752)
  • Tags on nothing yet are visible to every token. Tags used only on private media stay hidden from tokens that can't view private media, the same as /api/tags
  • Documented in docs/UploadTokens.md

Version

  • Bumped to 1.8.4

🤖 Generated with Claude Code

The player always started on the source file. A 3440x1440 AV1 clip at 60 fps
is fine on a GPU with an AV1 decoder, but a browser without one falls back to
software decoding, which cannot keep up: the audio plays on while the picture
freezes, then skips ahead out of sync. Nothing buffers, so the stall-based
downgrade never notices, and the 1080p H.264 transcode sitting next to it
plays perfectly.

The server now reports each video's RFC 6381 codec string and bitrate,
built from the ffprobe data it already stores. Before mounting, the player
asks navigator.mediaCapabilities about each source and starts on the best
one the device decodes in hardware, else the best it decodes smoothly, else
the source as before. Every quality stays in the menu.

Without a codec (older rows the builder cannot describe, VP9) or without the
Media Capabilities API (plain-http instances), nothing changes. The editor
still always opens the uncut original.
fix: start on a transcode when the source will not play smoothly
A tool could send tag_ids on an upload but had no way to find out which
tags exist. /api/tags does not recognise upload tokens, so it answers them
as an anonymous visitor: only tags already on a public video. A tag
created a moment ago is on nothing yet, and it is exactly the one somebody
setting up an upload has come to choose.

/api/upload/token/options now returns tags as {id, name, color}, sorted
by name. It keeps /api/tags' rule about who sees what. A token whose
account can view private media gets every tag. Any other token gets the
tags on something public, plus the tags on nothing at all, since an unused
tag gives away nothing about private media. The only tags left out are
the ones that appear solely on private media, which /api/tags hides from
the same accounts. Images count as well as videos.

Documented in docs/UploadTokens.md, including that tag_ids is still not
checked against the list.
feat: list tags in the upload-token options
@ShaneIsrael
ShaneIsrael merged commit 644d278 into main Sep 28, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant