Track 2 asks for a container that reads /input/tasks.json (a list of video URLs plus the caption styles wanted for each) and writes /output/results.json with a caption per style. The judge scores two things: *factual grounding* (does the caption match the video) and *style adherence* (does it actually sound formal / sarcastic / etc.). Our submission is tuned specifically for both. 1. *Perception — frames, not full downloads.* ffprobe reads the clip's duration over HTTP without downloading it, then 4–8 frames are seeked and pulled via HTTP range requests. Each frame is described by a vision model (verify: Fireworks Kimi vision in v10), and the per-frame descriptions are fused into one dense factual paragraph. This runs in ~5s per clip in parallel, versus 27–353s for the serialized video_url approach we started with. 2. *The hallucination fix that mattered.* All frames come from one continuous shot, so when two frames disagree it's a misreading, never a real change. Telling the model to "omit disagreements" wasn't enough — it narrated the errors as events (a still woman's hair "shifting between a bun and an afro"). Stating the invariant as fact — "the SAME scene and SAME subjects at different moments; any difference in how a subject looks is a misreading, not a change" — removed a whole class of fabricated motion. 3. *Stylization — grounded, few-shot.* The fused description is captioned in four styles by Kimi. Each style is anchored on real few-shot examples baked into the image from docker_data/<style>/valid.jsonl, so the model matches the dataset's own voice and length rather than a made-up spec. Local A/B testing on held-out data drove every prompt choice — we reverted "improvements" (forced word counts, cross-style diversity prompts) that lowered the score. 4. The grader kills the container near the 10-minute mark. main.py pre-fills an empty result for every task, runs tasks in a thread pool, and flushes results.json and hard-exits at an 8-minute deadline.
Category tags: