From f68bcab667d28975cb3398d9840e42b14460fd99 Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 28 Dec 2025 11:08:12 -0600 Subject: [PATCH] fix: include accessible video and re-timed captions in bulk download MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Download All Files" function was missing accessible_video_mp4 and accessible_captions_vtt files that the backend provides. Updated both the bulk download in JobsList and the individual Downloads page to include all available file types. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- frontend/src/routes/Downloads.tsx | 20 +++++++++++++------- frontend/src/routes/jobs/JobsList.tsx | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/frontend/src/routes/Downloads.tsx b/frontend/src/routes/Downloads.tsx index 9b2b275..280b7cc 100644 --- a/frontend/src/routes/Downloads.tsx +++ b/frontend/src/routes/Downloads.tsx @@ -47,12 +47,14 @@ const DownloadCard = ({ const formatFilename = (type: string) => { const sanitizedTitle = jobTitle.replace(/[^a-zA-Z0-9\-_]/g, '_'); - const extensions = { + const extensions: Record = { 'captions_vtt': 'captions.vtt', 'audio_description_vtt': 'audio_descriptions.vtt', - 'audio_description_mp3': 'audio_descriptions.mp3' + 'audio_description_mp3': 'audio_descriptions.mp3', + 'accessible_video_mp4': 'accessible_video.mp4', + 'accessible_captions_vtt': 'accessible_captions.vtt' }; - return `${sanitizedTitle}_${language}_${extensions[type as keyof typeof extensions]}`; + return `${sanitizedTitle}_${language}_${extensions[type] || type}`; }; return ( @@ -61,17 +63,19 @@ const DownloadCard = ({
{Object.entries(files).map(([type, url]) => { - const typeLabels = { + const typeLabels: Record = { 'captions_vtt': 'Captions (VTT)', 'audio_description_vtt': 'Audio Descriptions (VTT)', - 'audio_description_mp3': 'Audio Descriptions (MP3)' + 'audio_description_mp3': 'Audio Descriptions (MP3)', + 'accessible_video_mp4': 'Accessible Video (MP4)', + 'accessible_captions_vtt': 'Re-timed Captions (VTT)' }; - + return (

- {typeLabels[type as keyof typeof typeLabels] || type} + {typeLabels[type] || type}

{formatFilename(type)} @@ -235,6 +239,8 @@ export function Downloads() {

  • • Download links are valid for 24 hours
  • • VTT files can be used with any video player that supports WebVTT
  • • MP3 files contain synchronized audio descriptions for accessibility
  • +
  • • Accessible Video (MP4) contains the source video with pauses inserted for audio descriptions
  • +
  • • Re-timed Captions (VTT) are synced to the accessible video timing
  • • Contact support if you need help integrating these files
  • diff --git a/frontend/src/routes/jobs/JobsList.tsx b/frontend/src/routes/jobs/JobsList.tsx index 0c84f13..90d7dd2 100644 --- a/frontend/src/routes/jobs/JobsList.tsx +++ b/frontend/src/routes/jobs/JobsList.tsx @@ -379,6 +379,20 @@ export function JobsList() { filename: `${safeTitle}_${lang}_audio_description.mp3` }); } + // Accessible video (video with AD pauses inserted) + if (langAssets.accessible_video_mp4) { + allFiles.push({ + url: langAssets.accessible_video_mp4, + filename: `${safeTitle}_${lang}_accessible_video.mp4` + }); + } + // Re-timed captions VTT (captions synced to accessible video) + if (langAssets.accessible_captions_vtt) { + allFiles.push({ + url: langAssets.accessible_captions_vtt, + filename: `${safeTitle}_${lang}_accessible_captions.vtt` + }); + } } } catch (error) { console.error(`Failed to get downloads for job ${job.id}:`, error); @@ -984,6 +998,8 @@ export function JobsList() {
  • - Source video (MP4)
  • - Captions (VTT) for all languages
  • - Audio descriptions (VTT + MP3) for all languages
  • +
  • - Accessible videos (MP4 with AD pauses)
  • +
  • - Re-timed captions (VTT synced to accessible video)
  • )}