diff --git a/services/imajin-video/service/src/api/routes/transcode.py b/services/imajin-video/service/src/api/routes/transcode.py new file mode 100644 index 00000000..b14d0f4a --- /dev/null +++ b/services/imajin-video/service/src/api/routes/transcode.py @@ -0,0 +1,37 @@ +"""Video transcoding route — resolution downscale. + +POST /transcode — enqueue a new transcode job (HTTP 202) +GET /jobs/{job_id} — reuse the existing job status route from process.py +""" + +from __future__ import annotations + +import uuid + +from fastapi import APIRouter, BackgroundTasks, Request + +from jobs.job_store import JobStore +from models.types import TranscodeRequest, TranscodeResponse +from pipeline.transcode_processor import TranscodeProcessor + +router = APIRouter() + + +@router.post("/transcode", response_model=TranscodeResponse, status_code=202) +async def transcode_video( + body: TranscodeRequest, + background_tasks: BackgroundTasks, + request: Request, +) -> TranscodeResponse: + """Enqueue a video transcoding job. + + Downscales to the requested height (default 480p) preserving aspect ratio. + Poll ``GET /jobs/{job_id}`` for completion; ``output_path`` is populated on done. + """ + job_store: JobStore = request.state.job_store + transcode_processor: TranscodeProcessor = request.state.transcode_processor + + job_id = str(uuid.uuid4()) + await job_store.create(job_id) + background_tasks.add_task(transcode_processor.process, job_id, body) + return TranscodeResponse(job_id=job_id)