video.generate/thumb.generate/youtube.upload_video는 동기 함수로 ffmpeg subprocess(최대 5분)와 google-api-python-client(최대 10분)를 호출함. async run_step에서 직접 호출하면 이벤트 루프가 블로킹돼 후속 요청이 504로 타임아웃되고 텔레그램 폴링도 끊김. asyncio.to_thread로 감싸 스레드 풀에서 실행 — 이벤트 루프 자유.
- orchestrator._run_video: track.file_path 우선 사용 (audio_url 변환 불필요) - _local_path: /media/music/ → /app/data/ (마운트가 /app/data 직접이라 music 서브디렉토리 없음) - video.py/thumb.py: stderr truncation [-800:]/[-500:] — 진짜 에러 보이게