Files
backspace/packages/server/drizzle/meta/_journal.json
T
Jannis Braun 209aef7e9d fix(uploads): graceful fallback for browser-unplayable video (HEVC .mov)
macOS screen recordings are HEVC inside a .mov container, which Chromium,
Firefox and stock Electron can't decode. The file uploaded fine and a
server-side ffmpeg poster was generated, but inline <video> playback failed
silently — stuck at 0:00 with no error, since AttachmentRenderer had no error
handling. Root cause: the system had no concept of web-playability.

Server detects, client degrades:
- mediaPlayable.ts: classifyVideoPlayable(mimetype, codec) — tri-state
  (false = known-undecodable e.g. HEVC/ProRes, true = web codec in web
  container, null = unknown/optimistic). Never widens `false` beyond codecs
  that fail everywhere, so ffmpeg-less instances keep prior behaviour.
- probeMediaMeta now captures the video codec_name; the upload finish hook
  stores the verdict in the new attachments.playable column (migration 0007).
- Flag propagated through every serializer: space messages, DMs, WS, and
  federation relay (outbound + inbound) — federation-compatible.
- VideoAttachment component: playable===false renders a download card (poster
  + "Can't play here — download" + name/duration/size) with no dead-player
  flash; otherwise plays inline with an onError fallback to the same card.

Specs updated: uploads.md, database.md, federation.md.
2026-06-30 17:38:11 +02:00

62 lines
1.2 KiB
JSON

{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1777065939127,
"tag": "0000_lethal_wildside",
"breakpoints": true
},
{
"idx": 1,
"version": "6",
"when": 1777144927946,
"tag": "0001_complex_screwball",
"breakpoints": true
},
{
"idx": 2,
"version": "6",
"when": 1777196627239,
"tag": "0002_peer_approval_token",
"breakpoints": true
},
{
"idx": 3,
"version": "6",
"when": 1777229997210,
"tag": "0003_brave_inhumans",
"breakpoints": true
},
{
"idx": 4,
"version": "6",
"when": 1777395066272,
"tag": "0004_slim_mentallo",
"breakpoints": true
},
{
"idx": 5,
"version": "6",
"when": 1778428627458,
"tag": "0005_group_dm_metadata",
"breakpoints": true
},
{
"idx": 6,
"version": "6",
"when": 1782474063349,
"tag": "0006_spicy_scourge",
"breakpoints": true
},
{
"idx": 7,
"version": "6",
"when": 1782832912087,
"tag": "0007_nervous_orphan",
"breakpoints": true
}
]
}