Commit graph

67 commits

Author SHA1 Message Date
michael
44ef3ff741 feat: add bulk download action for approved/completed jobs
Add "Download All Files" option to the bulk actions menu on the All Jobs page.
When selected, downloads all assets (source video, VTTs, MP3s for all languages)
from jobs in approved_english, approved_source, or completed status.

- Shows confirmation modal with eligible/ineligible job counts
- Downloads files sequentially with progress indicator
- Skips jobs not in approved/completed status with warning

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 19:36:25 -06:00
michael
dad7ea09df fix: generate audio descriptions in the video's detected language
Updated Gemini ingestion prompt to explicitly require:
- Detect the spoken language first
- Write ALL outputs (summary, transcript, captions, audio_description) in that language
- Do NOT translate to English - keep everything in the original language

This fixes the issue where German videos would get English audio descriptions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 19:01:14 -06:00
michael
804553e2a3 fix: TTS preview now uses job's detected source language
- QCDetail passes sourceLanguage to VoiceSelector instead of hardcoded 'en'
- VoiceSelector uses first language in selectedLanguages for default voice preview
- Removes hardcoded English assumption in displayLanguages logic

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 15:32:28 -06:00
michael
865fcdc246 feat: add TTS settings panel with model, speed, and style options
- Add model selection (flash vs pro) for quality control
- Add speed slider (0.5x - 2.0x) for pacing adjustment
- Add style presets (neutral, calm, energetic, professional, warm, documentary)
- Add custom style prompt option for advanced customization
- New /tts/options endpoint returns available TTS options
- Voice preview now tests all settings so users hear exact output
- Backward compatible: all new fields have sensible defaults

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 15:22:14 -06:00
michael
a999b23a17 fix: clear cached audio when voice selection changes
The preview button was caching audio but not invalidating the cache
when the user selected a different voice, causing the same audio to
play regardless of which voice was selected.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:58:31 -06:00
michael
093b55c473 fix: add ffmpeg to API container for TTS audio conversion
The Gemini TTS service uses pydub which requires ffmpeg to convert
audio formats. Previously only the Worker container had ffmpeg.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:55:14 -06:00
michael
3804692092 fix: correct import path for get_current_user in routes_tts
The import was using a non-existent module path `..deps` instead of
`...core.dependencies`, causing the API container to fail on startup.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:49:34 -06:00
michael
29643f6683 upgrade TTS to Gemini TTS with voice selection and preview
- Add Gemini TTS service with 30 voices and 24 languages
- Add TTS API endpoints for voice listing and preview
- Add per-language voice selection in job creation form
- Add voice override at QC approval stage
- Add VoiceSelector and VoicePreviewButton components
- Update TTSPreferences model with provider and voice mapping

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:41:57 -06:00
michael
46b6f25fd0 upgrade to Gemini 3 Pro preview model
- Change model from gemini-2.5-pro to gemini-3-pro-preview
- Upgrade google-genai package from ^1.31.0 to ^1.56.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:02:02 -06:00
michael
d732d07ce0 suppress WiredTiger checkpoint progress log spam
Configure WiredTiger directly via storage.wiredTiger.engineConfig.configString
to disable verbose logging including checkpoint progress messages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 13:54:37 -06:00
michael
6f92b25cf6 suppress WiredTiger checkpoint progress log spam
Disable WiredTiger verbose logging via wiredTigerEngineRuntimeConfig
to filter out checkpoint progress messages from INFO level logs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 13:52:25 -06:00
michael
82c26bbc3a add script to mark old migrations as applied
For databases set up before migration tracking existed, this script
marks old migrations as "applied" in migration_history collection
so only new migrations will run.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 13:26:51 -06:00
michael
e6578e0ccf add approved_source and qc_feedback job statuses to MongoDB schema
- Add migration to update jobs collection validator with new statuses
- Update mongodb-init.js for fresh deployments
- Fix deploy.sh to properly run migrations with 'python migrate.py up'

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 13:12:14 -06:00
michael
1ff3290081 fix hardcoded English labels to use detected source language
- Add sourceLanguage prop to VideoWithCaptions component
- Create shared getLanguageLabel utility for language code mapping
- Update QCDetail and JobDetail to pass source language
- Fix status messages to say "source content" instead of "English content"
- Update Downloads page to display proper language names

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:04:31 -06:00
michael
990727b4a5 remove invalid wiredTigerEngineRuntimeConfig parameter
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 11:30:39 -06:00
michael
ada58c3b2e fix invalid recovery component in mongod.conf
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 11:29:42 -06:00
michael
22e1744f25 suppress verbose MongoDB INFO logs in docker
- Add all logging components with verbosity 0 in mongod.conf
- Add WiredTiger verbose=[] to suppress checkpoint messages
- Add --quiet flag to mongod command
- Change healthcheck from mongosh to TCP port check to avoid
  connection metadata spam every 30s
- Increase healthcheck interval from 30s to 60s

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 11:26:44 -06:00
michael
91a2894911 fix radio button state not updating in new job form
The setValueAs transformation wasn't working correctly with radio
buttons in react-hook-form, causing the form value to remain a string
instead of being converted to a boolean. This caused Zod validation
to fail silently since the schema expects a boolean.

Fixed by using controlled radio buttons with explicit onChange handlers
that call setValue() with the proper boolean value.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 11:09:50 -06:00
michael
9c9de7053c fix deploy script to install dev dependencies for build
The npm ci --only=production flag was skipping dev dependencies,
but TypeScript is needed to compile the frontend build.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 11:00:05 -06:00
michael
58a4f1f627 add support for non-English original video uploads
- Upload form now has "English / Different language" radio with optional language hint
- Gemini auto-detects language and saves outputs to outputs.{detected_language}
- QC review dynamically loads/saves VTT for source language
- New APPROVED_SOURCE status for non-English videos (APPROVED_ENGLISH kept for backwards compat)
- Translation pipeline reads from source language and passes source_language to Google Translate
- All existing English jobs continue to work unchanged

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 10:33:58 -06:00
michael
282f95dbc3 removed timeout from upload request and improved error reporting 2025-10-17 11:24:04 -05:00
michael
ef4080439b adjusted mongodb logging again 2025-10-17 10:14:13 -05:00
michael
072fae3dcd reduce verbosity of mongodb logs 2025-10-17 09:59:30 -05:00
michael
df09f30d63 fixed auto update of filtered queries for jobs list 2025-10-16 11:59:17 -05:00
michael
762d7bcb38 fixed websockets live messaging for updates 2025-10-16 11:46:37 -05:00
michael
700f55a96d fixed production users ability to delete and reprocess jobs 2025-10-10 12:39:00 -05:00
michael
9fe193b4af adjusted deploy scripts to NOT make a backup of front end when deploying new one 2025-10-10 12:27:21 -05:00
michael
bc0a2ca43c fixed base URL for websockets connection 2025-10-10 12:22:26 -05:00
michael
eb402e0c68 adjusted login page to emphasize microsoft login, hide local login options behind small link 2025-10-10 11:50:52 -05:00
michael
5e87a6fd94 adjust deploy scripts to include env vars 2025-10-10 11:34:28 -05:00
michael
d25fb921a1 fixed dates on scheme validator migration 2025-10-10 10:59:20 -05:00
michael
92169d047b added scheme validator 2025-10-10 10:55:54 -05:00
michael
d4b3efce3f adjusted deploy script to fix env vars being passed to containers 2025-10-10 10:48:25 -05:00
michael
d4417acd35 env variables for MSAL added to docker compose 2025-10-10 10:32:54 -05:00
michael
f59f5cf93b fixed front end build errors 2025-10-10 10:26:57 -05:00
michael
aefd559e68 added production user role and made it default for new MSAL users - production can access everything EXCEPT user management - that's only for admin 2025-10-10 10:07:30 -05:00
michael
665b49c3f1 added MSAL microsoft authentication 2025-10-10 09:19:39 -05:00
michael
0910ade371 more fixes for refresh token - this time maintaining the username and role properly across refresh 2025-10-08 23:09:29 -05:00
michael
7e45a0c016 another fix for refresh token issue - this time front end only 2025-10-08 23:03:09 -05:00
michael
8bdfaee57d hopefully fixed refresh token issue 2025-10-08 22:59:01 -05:00
michael
6031f9893d added logging to troubleshoot refresh token issue 2025-10-08 22:56:08 -05:00
michael
67ceca2777 fixed auth token refresh again and added --frontend-only mode to full deploy script 2025-10-08 22:43:23 -05:00
michael
34fa64916c adjusted full deploy script 2025-10-08 22:33:46 -05:00
michael
990f6f6fa1 fixed session refresh and added full deploy script - and added documentation including videos 2025-10-08 22:29:08 -05:00
michael
c2ed1429c9 better tts config for worker 2025-10-08 18:47:28 -05:00
michael
2f90da34c9 configured tts key in docker-compose 2025-10-08 18:44:28 -05:00
michael
99b49fbc1e added config for mongodb to reduce log verbosity 2025-10-08 18:34:06 -05:00
michael
7921079446 reduced verbosity of mongodb logs 2025-10-08 18:30:08 -05:00
michael
7ea23b9858 fixed objectID/stringID mismatch 2025-10-08 18:23:05 -05:00
michael
625b1fb8cc fixed middleware silent swallowing of exceptions FINALLY 2025-10-08 18:19:59 -05:00