peter
5561d9a379
feat(downloads): every ready file is phone-safe — uploads and clips too
...
A share link is opened on whatever the friend holds. Measured on an iPhone and an iPad: AV1,
Matroska, HEVC tagged hev1 and MP3 inside an .mp4 fail there; Chrome and Firefox add HEVC and
10-bit / 4:4:4 H.264. The old check judged the codec NAME only and ran on downloads only, so a
10-bit H.264 passed, an upload went out exactly as it came (an iPhone's HEVC .mov, a webm, an mkv)
and a fast trim kept its source's codecs.
One rule now, `downloads/playable.py`: video is H.264 8-bit 4:2:0 + AAC in .mp4, audio-only is
.mp3 or AAC .m4a; `plan` says what must change, `build_cmd` re-encodes only the failing stream (or
remuxes). The worker applies it to a download, an editor clip and — new — an upload: media that
fails the rule is queued (asset pending, job queued) and the worker converts it, keeping only the
converted file (owner's choice). Until then the original sits at rel_path, so Retry starts from it
and a delete removes it; an upload that lost its last holder mid-conversion is reaped by the GC.
Every libx264 run (edit, concat, conversion) now pins `-pix_fmt yuv420p` — without it a 10-bit
source came out High 10. The download cache signature moves to v5 so a cached 10-bit asset
re-derives. The upload toast says when the file is still converting (HU/EN).
Tests: the plan for every measured class; real ffmpeg turning a 10-bit Matroska + Opus and an
mp3-in-mp4 into files the rule accepts (red without the pixel-format pin); the queued upload's
delete, cancel-then-GC, failed conversion and real worker conversion (the cleanup tests red
without their rules); the toast (red without the branch). Live on localdev: 9 fixture uploads
converted, every served file probed H.264 High yuv420p + AAC, or mp3 / m4a.
2026-10-05 03:16:27 +02:00
..
2026-10-05 03:16:27 +02:00
2026-10-04 20:09:58 +02:00
2026-10-05 00:19:39 +02:00
2026-09-19 07:34:17 +02:00
2026-09-15 02:53:22 +02:00
2026-10-05 00:19:38 +02:00
2026-09-13 19:18:04 +02:00
2026-09-13 19:18:04 +02:00
2026-10-02 00:49:46 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-26 20:48:53 +02:00
2026-10-03 16:34:20 +02:00
2026-09-14 23:58:30 +02:00
2026-09-14 23:58:30 +02:00
2026-10-05 00:19:50 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-10 20:56:16 +02:00
2026-08-15 07:11:50 +02:00
2026-09-11 01:38:31 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 23:22:52 +02:00
2026-08-23 23:22:52 +02:00
2026-10-03 16:34:20 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:38 +02:00
2026-10-05 00:19:39 +02:00
2026-09-29 22:39:57 +02:00
2026-09-27 04:15:08 +02:00
2026-08-29 05:43:41 +02:00
2026-10-05 00:19:39 +02:00
2026-08-25 02:55:12 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-01 21:17:20 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-14 00:50:05 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-17 01:44:29 +02:00
2026-10-05 00:19:39 +02:00
2026-09-29 22:39:57 +02:00
2026-09-29 22:39:57 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:50 +02:00
2026-10-05 01:13:06 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:50 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-15 02:25:00 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:22:53 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-19 05:03:31 +02:00
2026-09-19 05:03:31 +02:00
2026-08-23 01:39:29 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-25 13:55:26 +02:00
2026-10-05 03:16:13 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-24 23:41:49 +02:00
2026-10-05 00:19:39 +02:00
2026-09-14 22:29:33 +02:00
2026-09-14 22:29:33 +02:00
2026-07-21 03:13:26 +02:00
2026-07-21 04:11:19 +02:00
2026-10-05 00:19:50 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-25 13:55:26 +02:00
2026-09-29 22:39:57 +02:00
2026-10-05 00:19:39 +02:00
2026-09-17 01:44:29 +02:00
2026-10-05 00:19:39 +02:00
2026-09-17 02:42:12 +02:00
2026-10-05 00:19:39 +02:00
2026-09-19 01:54:48 +02:00
2026-09-19 01:54:48 +02:00
2026-10-05 00:19:39 +02:00
2026-08-20 00:47:09 +02:00
2026-10-05 00:19:38 +02:00
2026-09-26 18:14:28 +02:00
2026-09-26 18:14:28 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-04 06:20:58 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:38 +02:00
2026-09-13 04:16:20 +02:00
2026-10-05 00:19:38 +02:00
2026-07-27 22:45:30 +02:00
2026-09-15 01:35:25 +02:00
2026-09-15 01:35:25 +02:00
2026-08-20 05:40:59 +02:00
2026-08-20 05:40:59 +02:00
2026-10-05 03:16:13 +02:00
2026-10-05 00:19:39 +02:00
2026-10-03 16:34:20 +02:00
2026-10-05 00:19:39 +02:00
2026-09-13 02:14:07 +02:00
2026-09-10 22:34:12 +02:00
2026-09-10 22:34:12 +02:00
2026-10-05 00:19:39 +02:00
2026-08-13 03:43:02 +02:00
2026-10-05 00:19:38 +02:00
2026-07-20 23:30:49 +02:00
2026-10-05 00:19:39 +02:00
2026-09-29 22:39:57 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-12 16:21:51 +02:00
2026-10-05 00:19:39 +02:00
2026-10-02 21:27:13 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-03 16:34:20 +02:00
2026-10-05 00:19:39 +02:00
2026-09-25 14:48:45 +02:00
2026-08-24 22:09:52 +02:00
2026-08-24 22:09:52 +02:00
2026-08-17 20:41:13 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-29 22:39:57 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-30 04:45:11 +02:00
2026-10-05 00:19:39 +02:00
2026-09-27 14:02:15 +02:00
2026-09-11 01:19:14 +02:00
2026-10-05 00:19:39 +02:00
2026-10-04 06:20:58 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:38 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-27 14:02:15 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:50 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-04 00:05:37 +02:00
2026-10-05 00:19:39 +02:00
2026-10-01 10:43:59 +02:00
2026-10-04 00:05:37 +02:00
2026-09-25 13:55:26 +02:00
2026-09-13 02:14:07 +02:00
2026-09-19 04:51:31 +02:00
2026-09-19 04:51:31 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:50:36 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-27 14:22:37 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-02 01:28:45 +02:00
2026-10-05 00:19:38 +02:00
2026-10-04 02:29:03 +02:00
2026-10-05 00:19:39 +02:00
2026-09-26 17:34:47 +02:00
2026-10-03 03:29:54 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-03 16:34:20 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-26 00:39:01 +02:00
2026-09-14 22:29:33 +02:00
2026-09-14 22:29:33 +02:00
2026-10-05 00:19:39 +02:00
2026-09-21 00:07:12 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-15 05:50:11 +02:00
2026-09-17 03:53:40 +02:00
2026-10-04 02:29:03 +02:00
2026-10-04 02:29:03 +02:00
2026-10-04 02:29:03 +02:00
2026-10-03 16:34:20 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-21 06:16:15 +02:00
2026-08-21 06:16:15 +02:00
2026-09-14 22:29:33 +02:00
2026-09-14 22:29:33 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-04 04:16:52 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-03 23:18:26 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-06-26 03:30:19 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-02 02:02:31 +02:00
2026-09-13 01:45:28 +02:00