Skip to main content
A vision-language model whose multimodal projector carries a conformer audio encoder can take audio alongside text and images. GenieX feeds the clip through llama.cpp’s mtmd (multimodal) path — the same mechanism that handles images — so a single turn can mix text, image, and audio.
Audio is the llama_cpp path only. QAIRT bundles report audio: false and a QAIRT model given audio fails with GenieXError(-201201): Multimodal generation failed. Audio runs on --compute npu / gpu / cpu; the NPU is the default and fast path on Snapdragon.

Step 1: Pull an audio-capable model

Audio support is not a metadata flag — it means the mmproj GGUF actually contains an audio encoder. google/gemma-4-E2B-it-qat-q4_0-gguf ships one: the Q4_0 weights (≈3.1 GiB) and the conformer mmproj (≈0.9 GiB) are pulled together, ~4.0 GiB total.
Grab a sample clip and photo to use in the examples below:

Step 2: Run it with geniex infer

Drop an absolute .wav / .mp3 path into the prompt (or drag the file into your terminal). Audio and image paths are auto-detected, and one prompt can carry both:
Output (verified on --compute npu, Snapdragon X Elite):

Record from the microphone with /mic

In an interactive session (launch geniex infer <model> with no -p), the /mic command records a clip and feeds it straight in — handy when you don’t have a file on disk. It only appears when the loaded model supports audio.
Ctrl-C stops the recording; GenieX saves it to a temp .wav and transcribes it.
/mic needs SoX on your PATH. Without it, GenieX prints SoX is not installed, some features may not work at startup. Install it:

Step 3: Use it on the local server

Start the server and send an OpenAI-compatible input_audio content part. input_audio.data takes the same three formats as an image URL — a local path, an HTTP/HTTPS URL, or a base64 data URL. A single message can mix image_url and input_audio:
Running in Docker? Local paths are resolved inside the container. The install command mounts $PWD/data to /data — drop your files there and pass /data/jfk.wav, or use an HTTP URL / base64 data URL to skip the filesystem entirely.
See Local server for the full request shape and the Python openai-client equivalent.

Step 4: Use it from the Python SDK

Load with AutoModelForVision2Seq and pass paths to generate(images=[...], audios=[...]) — a single call can carry both. capabilities() confirms the mmproj handles audio before you send anything:

Supported formats and preprocessing

Channel/sample-rate/duration handling lives in the bundled llama.cpp mtmd audio path (third-party), not in GenieX — behavior may shift with the pinned llama.cpp version.

Failure modes

Next steps