- CompressVideoJob: rewrite to exec ffmpeg directly. php-ffmpeg's X264
format class validates the codec name and only accepts libx264, so
every job dispatched with h264_nvenc had been throwing within ~1s and
leaving the source untouched. The job now honours the GPU encoder
settings, and always replaces the source when the codec is HEVC/H.265
so downloads and the MP4 fallback stay playable.
- VideoController + video-player component: point HLS URLs at
playlist.m3u8 (the actual master file GenerateHlsJob writes) instead
of the non-existent master.m3u8, which was 404-ing and forcing the
player back to the raw MP4.
- VideoController@store: on the NAS-success branch, flip status to
'ready' and populate duration/is_shorts before dispatching
GenerateHlsJob, so the job no longer silently no-ops.
- Upload chooser: render as a bottom sheet on mobile, and forward the
picked type to /videos/create?type= so the create page pre-selects it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>