Alibaba Cloud Model Studio released Qwen3.8-Omni-Flash on 2026-09-18, a native omni-modal model from the Qwen team. It ingests text, images, audio, and video in a single unified architecture, carries a native 1M-token context window, and can swallow a full hour of audio or video in one call. More importantly, it pushes multimodal models from "understand the content" toward "plan the task, call the tools, and deliver the result." This hands-on SOP gets you from a fresh DashScope API key to three working workflows: turning a one-hour meeting into structured minutes, compressing hours of video into timestamped notes, and asking controllable, grain-specific captions on demand. Every endpoint, model ID, and parameter name below comes from official documentation; anything not verified is flagged as a skeleton to confirm against the docs.
A no-API web playground lives at qianwenai.com/models/qwen3.8-omni-flash, handy for a quick trial or for sanity-checking a result. But anything batch, workflow-driven, or tool-connected should run through the API. For the launch story and capability boundaries, start with the Qwen3.8-Omni-Flash launch hotspot. To wire the model into an agent framework with video editing and long-video memory, see the Qwen-MM-Plugins multimodal resource. For pricing comparison and cost framing, see the audio-video model cost review.
Get your DashScope API key
The first step is never the code; it is the account, the billing, and the key. Qwen3.8-Omni-Flash is served by Alibaba Cloud Model Studio (Bailian), and it is called through the DashScope-compatible interface, so you need a Bailian account, a workspace with model billing enabled, and an API key.
Open bailian.console.aliyun.com and sign in with the primary or a sub account. Go to the model marketplace, search for qwen3.8-omni-flash, and confirm the model is available in your chosen region. Supported regions include North China 2 (Beijing), Singapore, Hong Kong, Tokyo, Frankfurt, and US Virginia. Keys are region-specific and do not interoperate, so pick the region closest to your users with billing attached. If the model is not listed, your region has not been rolled out yet; switch regions or wait.
Next, enable billing. The omni-modal model is billed per token, and you must confirm the workspace has the model's billing switch on before the first call, or the request fails with a not-enabled error. Bailian uses post-paid (pay-as-you-go) or resource packages, configurable in the cost center. For production, create a dedicated sub account with only DashScope invocation permission, so a leaked key cannot compromise the whole estate.
Finally, create the key in the API key management page, copy it, and store it only in an environment variable, never in source or a repo. The snippet below injects it into the current shell; the Python process reads it through os.environ.
export DASHSCOPE_API_KEY="sk-your-key"
export DASHSCOPE_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"If a key leaks, revoke the old one in the console and issue a new one, then audit which services used it. Treat the key like a password, not like a config value you paste around.
Environment setup: the OpenAI-compatible client
Qwen3.8-Omni-Flash is compatible with both the OpenAI Chat Completions and Responses APIs, so there is no new SDK to learn; just install the openai package. The official minimum is openai 1.52.0 for Python and 4.68.0 for Node.js. Older versions lack the multimodal fields.
python3 -m pip install --upgrade openaiClient initialization does one thing: point base_url at the Bailian-compatible endpoint and read the key from the environment. The snippet below is the foundation for every scenario that follows. Run it standalone first to confirm you get text back, then layer audio and video on top.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url=os.environ["DASHSCOPE_BASE_URL"],
)
resp = client.chat.completions.create(
model="qwen3.8-omni-flash",
messages=[{"role": "user", "content": "Introduce yourself in one sentence."}],
)
print(resp.choices[0].message.content)A few interface facts are worth fixing in memory. First, audio and video may appear only inside the user message's content array, never in system or assistant messages. Second, pass media as a publicly reachable URL with the input_audio or input_video field carrying url and format; base64 works too, but a URL is cleaner and more stable for long files. Third, the model supports deep thinking, enabled by default, tunable through reasoning_effort at xhigh, medium, and low, with preserve_thinking on by default; use xhigh for hard tasks and low for speed and cost. Fourth, it supports Function Calling and web search; enable search in Chat Completions through extra_body with enable_search, or use the built-in web_search tool under Responses.
If you already use another OpenAI-compatible gateway, swap the base_url and reuse the same code. Exact field names and rate-limit numbers follow the Bailian console and the official rate-limit docs; every code block here is a skeleton to confirm before production.
Scenario 1: one-hour meeting to structured minutes
This is the most office-relevant workflow. Native one-hour audio and video ingestion means you do not pre-slice; hand the whole recording to the model and it performs end-to-end speaker segmentation, transcription, identity alignment, and minute generation, then can continue invoking tools for the action items. The skeleton below uses an accessible WAV or MP3 link.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url=os.environ["DASHSCOPE_BASE_URL"],
)
audio_url = os.environ["MEETING_URL"]
prompt = """You are a meeting minutes and execution assistant. From this meeting audio or video, produce structured output:
1. Overview: time, participants (separate by voice, label as Speaker A, Speaker B), core agenda.
2. Per-topic minutes: discussion points, conclusions reached, disagreements.
3. Action items: each with task, owner (speaker label or name), deadline, priority.
4. Risks and blockers: open issues and external dependencies.
Segment speakers accurately and cite times to the minute. If a voice cannot be identified, use a speaker label instead of a name."""
resp = client.chat.completions.create(
model="qwen3.8-omni-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{"type": "input_audio", "input_audio": {"data": audio_url, "format": "wav"}},
],
}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in resp:
if not chunk.choices:
if chunk.usage:
print("\nUsage:", chunk.usage)
continue
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="")You get minutes with speaker labels and timestamps. If a meeting exceeds the documented 60-minute single-segment recommendation, split the audio or video by chapter or into 40-minute pieces, call per segment, then merge with a light follow-up request that deduplicates and unifies the action list. Feed each segment's conclusions back as context and ask the model to reconcile duplicates.
To go further, write action items back to a docs site, send email, or create tasks. That pairs with the meeting recording summary workflow SOP and the workflow meeting notes automation methods: this model handles "understand and produce," external tools handle "execute."
Scenario 2: Video2Note, long video to timestamped notes
Video2Note compresses hours of video into illustrated, timestamped notes. Through the API we get structured text with second-level timestamps, then pair it with frame extraction to assemble a reviewable PDF. Official guidance recommends keeping a single analyzed video under 60 minutes for most tasks; split longer material first.
The skeleton below stresses "timestamped" and "frame-locatable." It asks the model to attach start and end times to every point so you can later extract the matching frame.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url=os.environ["DASHSCOPE_BASE_URL"],
)
video_url = os.environ["VIDEO_URL"]
prompt = """Turn this video into timestamped illustrated notes in Markdown:
1. Segment summary: each with start - end time and a one-line abstract.
2. Key points: each with timestamp, title, bullet points, and the corresponding visual description.
3. Terms and people: technical terms, names, organizations, and first-seen time.
4. Quotes or conclusions: verbatim excerpts with timestamps.
State times to the second so frames can be extracted by timestamp later."""
resp = client.chat.completions.create(
model="qwen3.8-omni-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{"type": "input_video", "video_url": {"url": video_url}},
],
}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in resp:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")After getting text, the pipeline is three steps. First, use regex to pull every "start - end" timestamp from the model output. Second, extract one frame at each timestamp with ffmpeg: ffmpeg -ss start_sec -i video -frames:v 1 out.png. Third, assemble timestamps, text, and screenshots into an HTML or Markdown file, then convert to PDF. Linear video becomes a searchable, reviewable asset. For videos over 60 minutes, split by chapter, generate per segment, then merge with a request that reorders by timeline and removes duplicates.
A quality-versus-cost lever is max_pixels: fast review uses lower pixels (around 230400), content extraction uses mid-to-high (around 921600 to 2073600), and fine-grained multi-speaker scenes use the top tier. Lower pixels save tokens but lose visual detail; choose by purpose.
Scenario 3: controllable caption on demand
Controllable caption is the most underrated capability here: instead of demanding one full description, you specify the subject, time range, information grain, and output format, and the model answers only the slice you care about. A typical ask is "only the 10:00 to 15:00 window, in five-minute steps, give speaker actions and lines."
The skeleton shows how the three ingredients, time window, grain, and format, fit into one prompt.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url=os.environ["DASHSCOPE_BASE_URL"],
)
video_url = os.environ["VIDEO_URL"]
prompt = """Analyze only the 00:10:00 to 00:15:00 segment; ignore the rest.
Split into five-minute steps and for each output:
- Time range
- People, their actions, camera and lighting changes
- Verbatim lines spoken in that step
Output a table. Do not expand background knowledge."""
resp = client.chat.completions.create(
model="qwen3.8-omni-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{"type": "input_video", "video_url": {"url": video_url}},
],
}],
)
print(resp.choices[0].message.content)The value of controllability is cost and focus. Rather than having the model describe the whole video from start to finish, coarse-scan to locate candidate segments, then zoom in on the key ranges. In official experiments this coarse-to-fine evidence-gathering approach cut token use by about 45.7 percent while raising accuracy from 63.4 to 67.8. Wrap it as a reusable function that takes the video link, time window, grain, and format, and returns structured results, and it serves subtitle proofing, shot lists, and teaching clips alike.
Cost control
Start with the official discount framing to avoid misreading. Compared with the previous Qwen3.5-Omni series, Qwen3.8-Omni-Flash cuts audio input price by over 98 percent and combined audio-video input by over 93 percent. More important is "single price across modalities": text, image, audio, and video input are billed identically, with no extra charge for audio or video. China-mainland reference pricing is 0.8 yuan per million input tokens, 0.1 yuan for cached-input hits, and 2.7 yuan per million output tokens; confirm against the Bailian console for the live rate.
Three saving strategies. First, use context caching: identical prefixes of media and system prompts hit the cache, so asking different questions about the same video drops cost sharply. Second, prefer agentic evidence gathering over full scans: coarse-locate then fine-check cuts tokens by about 45.7 percent officially. Third, segment and ask on demand: split long meetings and videos into 40 to 60 minute pieces and question only the ranges you care about, avoiding payment for irrelevant content.
At the parameter level, reasoning_effort maps directly to cost: xhigh is most accurate but priciest, medium balances, low is fastest and cheapest; do not default to xhigh where low already works. Constrain output length too; a prompt that demands "concise" and "bullet only" trims output tokens. For batch work, keep a stable cached prefix, put the video URL and fixed instructions at the front of the message, and vary only the question at the end.
Troubleshooting quick reference
The high-frequency issues, listed once so you stop re-debugging from scratch.
| Issue | Symptom | Fix |
|---|---|---|
| Media URL unreachable | 4xx or timeout, resource fetch failed | Use a public URL (OSS or authorized CDN); upload local files first, then pass the link |
| Single segment too long | Long meeting or video truncated or errors | Official guidance recommends under 60 minutes per segment; split then merge |
| Audio format not recognized | format mismatch error | Pass format explicitly (wav, mp3); for multichannel spatial audio add use_multichannel |
| Deep thinking too slow or costly | Slow first token, high tokens | Set reasoning_effort=low for easy tasks; drop unneeded preserve_thinking |
| Request timeout | Video analysis exceeds gateway timeout | Reduce max_pixels, shorten the time window, call in segments |
| Region key mismatch | Auth fails after region switch | Use the key issued for that region; switch base_url with the region |
| Rate limited | 429 or concurrency exceeded | Lower concurrency, add backoff retry; rate numbers follow official docs |
Two more notes. Audio input covers 113 languages and dialects, including 39 Chinese dialects; multichannel spatial audio (stereo, four-channel) turns on through use_multichannel, defaulting to single-channel. Exact file-size caps, bitrate limits, and precise rate-limit numbers are not given as a single public figure in the docs; always confirm against the Bailian console and the official rate-limit page. Every numeric parameter in this article is a skeleton; verify in the console before going live.
FAQ
question 1: What exact model ID string do I write?
A1: Use qwen3.8-omni-flash. This is the ID from the official docs and the model card. The precise available ID per region and workspace follows the Bailian console model list; confirm there once before calling rather than hardcoding from memory.
question 2: How do I pass audio and video to the interface?
A2: Only inside the user message content array, as a publicly reachable URL, with the input_audio field (data plus format) or input_video field (url). Base64 works too, but a URL is cleaner for long files. Media never appears in system or assistant messages.
question 3: Can a one-hour meeting really be ingested in one call?
A3: The model natively supports one hour of audio or video input, and the 1M context holds hours of material. But official guidance recommends under 60 minutes per segment for most analysis and transcription; beyond that, split by chapter or into 40-minute pieces, call per segment, then merge. Stable and controllable.
question 4: Does it support web search and function calling?
A4: Both. Web search turns on in Chat Completions through extra_body with enable_search, and under Responses through the built-in web_search tool. Function Calling is standard, letting the model, after understanding the media, continue calling your tools to send mail, create tasks, or write documents.
question 5: Audio input is so cheap, are all modalities priced the same?
A5: Yes. Qwen3.8-Omni-Flash uses a single price across modalities: text, image, audio, and video input are billed identically, with no separate surcharge for audio or video. Relative to the prior generation, audio input dropped over 98 percent and combined audio-video over 93 percent, which is what makes daily-cost long meeting and video analysis feasible.
References
- Alibaba Cloud Bailian official docs: Qwen3.8-Omni-Flash model card and Qwen-Omni calling guide (help.aliyun.com / alibabacloud.com/help)
- Qwen official launch blog and model card: qwen.ai/blog?id=qwen3.8-omni-flash
- Bailian console for rate limits and pricing: bailian.console.aliyun.com (live numbers follow the console)
- Multimodal plugins and agent workflows: Qwen-MM-Plugins (github.com/QwenLM/Qwen-MM-Plugins)