Vision Apple Silicon Benchmarks
How long GroundSlate's vision models take to describe a still and a six-frame video chunk on Apple Silicon, using the prompts the app actually sends.
Still and video chunk speed by model
Wall-clock seconds, timed through the same tool an AI assistant calls.
- Still
- One photograph, resized to 768 px on the long edge, sent with the still prompt GroundSlate uses.
- Video chunk
- Six frames at 768 px in order, asking for the JSON GroundSlate ingests. A real ingest chunk is larger: up to 14 frames at 1568 px.
Apple Silicon Relative Performance Metrics
The same measurements as charts. Each chart has its own scale, and the default model is marked.
- Default
- Still
- Video chunk
Still wall clock
secondsStill prefill and decode
secondsStill decode rate
tok/sTokens on a still
tokensStill against Gemma 4 E4B
timesVideo chunk wall clock
secondsTokens on a video chunk
tokensVideo chunk against Gemma 4 E4B
timesTokens show how much the model wrote, not how fast. Prefill is the muted segment. Below 1.00× is faster than Gemma 4 E4B.
On chunks, Qwen3-VL 4B writes tokens as fast as E4B, about 60 per second, but writes about twice as many, so it takes 1.8 times as long. Speculative decoding and MTP do not run with json_object, so output length decides the time.
Gemma 4 26B-A4B describes a still in 3.13 seconds, a little faster than E4B. The dense 12B is the slowest at 6.45 seconds. On chunks, 26B writes about twice as many tokens as E4B, so it takes longer even though it writes them faster.
Makers
The companies behind these models.
Curated MLX vision models
Every model GroundSlate offers for download, including ones not measured yet.
How vision ingest works on a Mac
GroundSlate keeps one vision model loaded in an mlx_vlm.server process instead of loading a model per clip. Your agent picks the model with list_models and set_vision_model, and that model answers every vision call until you change it.
When GroundSlate indexes a video, it sends chunks of up to 14 timestamped frames sampled at 1568 px, with a long instruction, json_object output and max_tokens 4000. If a chunk fails, it falls back to one call per frame. Short clips are sampled more densely: every 0.5 seconds under 10 seconds, every second under 30. Stills use their own prompt, sampled at 768 px, and ask for a 4 to 6 sentence desc.
The timed chunk on this page is six frames at 768 px, so a real ingest chunk carries more image tokens than the figure here.
The tools that use the vision model are index_video, index_image, process_video, name_video, summarize_video and reindex_clips. Event and person names use set_reasoning_model, which is often the same model.
The numbers are wall-clock medians for the prompts GroundSlate actually sends.
The prompts sent to the vision model
The still prompt is exactly what ingest sends. The chunk prompt is the one timed here. Ingest adds a longer set of rules about merging shots.
You are a still-photo analyst. Look at this single photograph. Reply ONLY with compact JSON: {"desc":"a full paragraph of 4-6 factual sentences about this photograph. Cover, in this order: who is present and what they are doing; where this is and what kind of place it is; the notable objects and any text visible on signs, screens or clothing; the light, weather and time of day if they are apparent; and anything distinctive worth remembering about the moment. Write only what you can SEE. Do not speculate about feelings, relationships or backstory, do not pad with generic phrases, and never begin a sentence with 'The image shows' or 'This photo captures' — state the observation directly","subject":"<what the main subject is>","shot":"wide|medium|close|macro","setting":"indoor|outdoor|unknown","venue_type":"<what KIND of place this is: beach, restaurant, playground, living room, parking lot, forest trail, ... or unknown>","notable_objects":["<up to 5 salient objects>"]}. Answer "unknown" for setting or venue_type whenever you are unsure — abstaining costs you nothing. venue_type is a KIND of place, never a NAME: 'a beach', not 'Bondi Beach'. CRITICAL: never invent or guess the name of any person or business. Do NOT read a name off signage or clothing and attribute it to a person. Describe people generically — 'a woman', 'a child on a swing', 'a man in a red jacket'. Use a person's name ONLY if it is explicitly supplied to you in the context above; otherwise use no name at all. NAME OBJECTS SPECIFICALLY when you can actually identify them: 'a can of Coca-Cola' beats 'a drink', 'a yellow school bus' beats 'a vehicle'. Read product labels and use the brand when it is legible. But do NOT guess a specific dish, product, or place name if you are unsure — describe what you actually see (shape, colour, setting), not a confident wrong label. Trust any provided context over your assumptions.Video chunk prompt
You are watching one continuous segment of a video (t=0.00s to 12.00s), given as 6 frames in chronological order:
Image 1 = t=0.00s
Image 2 = t=2.00s
Image 3 = t=4.00s
Image 4 = t=6.00s
Image 5 = t=8.00s
Image 6 = t=10.00s
No people have been identified in this segment.
Describe this video segment. Reply ONLY with JSON:
{"shots":[{"start":<sec>,"end":<sec>,"desc":"<=20 words","subject":"<s>","shot":"wide|medium|close|macro","motion":"static|slow|fast","center_x":<0..1>,"setting":"indoor|outdoor|unknown","venue_type":"<kind>","notable_objects":["<up to 5>"]}],"best_segment":{"start":<sec>,"end":<sec>,"reason":"<=15 words"},"track":[{"t":<sec>,"x":<0..1>} x6],"summary":"2-4 factual sentences. Each subject AT MOST ONCE.","visual_kind":"footage"}How these numbers were measured
- Machine
- MacBook Pro, Apple M3 Max, 64 GB unified memory
- Engine
- mlx, mlx-vlm 0.6.10
- Sidecar
- mlx_vlm.server on 127.0.0.1:8788
- Batching
- Continuous batching on
- APC
- Off
- Response format
- json_object
- Max tokens
- 4000
- Warmup
- 1 discarded, then 3 stills and 2 chunks
- Speculative decoding
- off
- Default model
- mlx-community/gemma-4-e4b-it-4bit
- Models locked
- Yes
- Chunk note
- The timed chunk used six frames and the same JSON schema as ingest. Ingest also adds a longer set of rules about merging shots and naming people, which the timed prompt leaves out.
Questions
- How fast is Gemma 4 E4B on a Mac?
- On a MacBook Pro, Apple M3 Max, 64 GB unified memory, still takes 3.49s and video chunk takes 7.86s. Timed through the tool an agent calls.
- Is Gemma 4 E2B faster than Gemma 4 E4B?
- On still, yes: 2.88s against 3.49s. The order is not the same on every test, and the suite table has them all.
- Why is Qwen3-VL 4B slower on video chunks if it decodes at the same rate?
- On chunks, Qwen3-VL 4B writes tokens as fast as E4B, about 60 per second, but writes about twice as many, so it takes 1.8 times as long. Speculative decoding and MTP do not run with json_object, so output length decides the time.
- Is a bigger vision model always slower on the reference machine?
- Gemma 4 26B-A4B describes a still in 3.13 seconds, a little faster than E4B. The dense 12B is the slowest at 6.45 seconds. On chunks, 26B writes about twice as many tokens as E4B, so it takes longer even though it writes them faster.
- Which machines are in this dataset?
- MacBook Pro, Apple M3 Max, 64 GB unified memory (Reference Mac).
- Which vision model does GroundSlate use by default?
- mlx-community/gemma-4-e4b-it-4bit. Gemma 4 E4B, 5.2 GB on disk.