Pushing the Limits of Audio-Visual Joint Reasoning
OmniQA constructs audio-visual joint reasoning data. OmniReasoningBench evaluates reasoning over video and reasoning beyond video. The released datasets are OmniReasoning-SFT-112K (112,463 samples with synthesized thinking) and OmniReasoning-RL-19K (18,991 questions with evidence annotations),and the OmniReasoningBench has 1,150 questions.
OmniReasoningBench contains 750 reasoning over video questions (375 multiple-choice, 375 open-ended) and 400 reasoning beyond video questions (250 multiple-choice, 150 open-ended; 288 video + figure and 112 video + text inputs). Each has a reference answer and an annotated evidence chain.
OmniReasoningBench accuracy (%). Our model is initialized by Qwen3-Omni-30B-A3B-Thinking.
Music, Sound, and Speech are audio types; duration intervals are in minutes.
| Method | OmniReasoningBench | OmniVideoBench | LVOmniBench | Video‑MME‑v2 | Video‑MMMU |
|---|---|---|---|---|---|
| Qwen3‑Omni‑30B‑A3B‑Thinking | 33.2 | 37.2 | 37.7 | 36.5 | 68.3 |
| + SFT | 36.1 | 47.0 | 40.2 | 40.3 | 73.7 |
| + GRPO | 38.3 | 44.8 | 39.8 | 39.1 | 72.9 |
| + RLSD | 39.2 | 45.4 | 40.1 | 39.8 | 72.0 |
| + MFSD | 42.5 | 50.0 | 44.7 | 44.0 | 74.4 |
Run all commands from the repository root. Requires Python 3.10+ and ffmpeg / ffprobe.
python -m pip install '.[engine]'This installs the omniqa and omnireasoning commands and the data-engine dependencies.
For local scene detection with --plan-segmenter scenedetect, install '.[engine,scenes]' instead.
Install ffmpeg / ffprobe separately; they are not Python dependencies.
| Stage | Service | Configuration |
|---|---|---|
| 1 caption | Gemini generateContent |
GEMINI_API_KEY, GEMINI_API_BASE, GEMINI_AUTH_PREFIX; --gemini-model |
| 2 generate / adapt | OpenAI-compatible chat (+ /images/generations for RBY figures) |
OPENAI_API_KEY, OPENAI_API_BASE; --openai-model, GEN_MODEL, IMAGE_MODEL |
| 3 verify / refine | OpenAI-compatible chat | DASHSCOPE_API_KEY, optional DASHSCOPE_BASE_URL |
| 3 gate | text model + audiovisual model | GATE_TEXT_*, GATE_AV_*, OPENAI_API_KEY |
| 4 think | OpenAI-compatible chat | OPENAI_API_KEY, OPENAI_API_BASE, SYNTH_MODEL |
| Benchmark inference | SGLang / OpenAI-compatible audiovisual server | SGLANG_BASE_URL, SGLANG_API_KEY, SGLANG_MODEL |
| Benchmark judge | OpenAI-compatible chat | JUDGE_API_BASE, JUDGE_API_KEY, JUDGE_MODEL |
Place source videos in data/videos/.
omniqa caption --data-path data/videos --output-dir data/caption/videos \
--gemini-model gemini-3.1-pro-preview \
--skip-upload --max-inline-video-mb 20 --max-events 64Each route writes outputs/run/generation/accepted.jsonl with question, options, answer and a
reasoning_steps dependency chain.
Reasoning over video (ROV): task selection, question/answer/chain generation, structural and grounding checks, a caption-conditioned solver, and a question-only (priors) blind gate.
omniqa generate --caption-raw-dir data/caption/videos/raw \
--output-dir outputs/run/generation \
--openai-api-base "$OPENAI_API_BASE" --openai-model deepseek-v4-flash \
--questions-per-video 1Reasoning beyond video (RBY), including generated question figures:
omniqa adapt --caption-dir data/caption/videos/raw --outdir outputs/run/generation --n 0
omniqa bridge-adaptation --outdir outputs/run/generation \
--output outputs/run/generation/accepted.jsonlDirect video authoring (DYNAMIC): the author watches the video; subtype weights must first be
mined from benchmark result files with omniqa mine-queries (see --help).
omniqa dynamic --caption-raw-dir data/caption/videos/raw --output-dir outputs/run/generation# 1. Verify timestamped clues against the actual clips (DashScope SDK).
omniqa verify --input outputs/run/generation/accepted.jsonl \
--output-dir outputs/run/verification
# 2. Repair or reject questions against the video (DashScope SDK).
omniqa refine --input outputs/run/verification/accepted_verified.jsonl \
--output-dir outputs/run/refinement
# 3. Modality shortcut screening.
omniqa gate --input outputs/run/refinement/refined_accepted.jsonl \
--caption-raw-dir data/caption/videos/raw --video-root data/videos \
--output-dir outputs/run/gateomniqa think --input outputs/run/refinement/refined_accepted.jsonl \
--caption-root data/caption --output-dir outputs/run/thinkingOnly reasoning with a closing conclusion matching the verified answer enters sft.jsonl.
Cached rows are checked again during export; inconsistent rows are retried on resume.
Place the two benchmark files at data/benchmark/over_video.jsonl (750) and
data/benchmark/beyond_video.jsonl (400), with videos and figures under data/media/.
Start an audiovisual SGLang / OpenAI-compatible server and export SGLANG_*.
for s in over_video beyond_video; do
omnireasoning infer --benchmark $s \
--data_json_file data/benchmark/$s.jsonl --video_dir data/media \
--output_file outputs/$s.jsonl --model "$SGLANG_MODEL"
doneDefaults: 2 fps, at most 512 frames, audio kept, --max_tokens 32768 --temperature 0.6 --top_p 0.95 --top_k 20.
Multiple-choice answers are scored by rule-based option-letter matching (no LLM fallback; an
output without a parseable letter is wrong). Open-ended answers are judged by deepseek-v4-flash.
Scoring automatically uses the answer after </think> and never reads option letters from
the thinking block. An unfinished thinking block counts as a missing answer.
Every benchmark question stays in the denominator: missing outputs, service errors and judge
failures count as wrong.
for s in over_video beyond_video; do
omnireasoning score-judge --predictions outputs/$s.jsonl \
--references data/benchmark/$s.jsonl --out_dir outputs/${s}_judge
done
# Table row: over-video MCQ / OE, beyond-video MCQ / OE, Overall (pooled counts).
omnireasoning report-table \
--over_video_pred outputs/over_video_judge/predictions.jsonl --over_video_ref data/benchmark/over_video.jsonl \
--beyond_video_pred outputs/beyond_video_judge/predictions.jsonl --beyond_video_ref data/benchmark/beyond_video.jsonlIf you find OmniReasoning useful, please cite:
@misc{lin2026omnireasoningpushinglimitsaudiovisual,
title={OmniReasoning: Pushing the Limits of Audio-Visual Joint Reasoning},
author={Junming Lin and Yuxuan Wang and Zhenxin Lei and Yuxin Liu and Ruixun Liu and Yinsong Yan and Ling Wang and Minghao Han and Yunfei Chu and Shun Lei and Xueyao Zhang and Qize Yang and Jin Xu and Yiwu Zhong},
year={2026},
eprint={2609.39490},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2609.39490},
}The OmniReasoning data is released for non-commercial research use under CC BY-NC 4.0.




