Skateboard Benchmark: man doing tricks on a pipe

Another LLM drawing benchmark, this time on physics: an animated SVG of a man doing skateboard tricks on a pipe, prompted verbatim (typos included). The "real physics" constraint tests whether the model can encode gravity, momentum and pendulum motion in code. Models: GPT-6 Astra (reasoning medium), GPT-5.6 Luna, GPT-5.6 Terra, GPT-5.6 Sol, Claude Sonnet 5, Gemini 3.8 Flash, DeepSeek V4 Flash, DeepSeek V4.1 Flash, Claude Fable 5.1, Claude Opus 5, Kimi K3, Claude Code. Open the raw SVG to see the animation.

Note on Claude Code (claude-code-minimal / claude-code-constrained): these two were not generated as zero-shot API completions. They were produced by Claude Code — an agentic coding session where the model read the prompts from this page, wrote the SVGs as files, validated the XML and the SMIL keyPoints/keyTimes consistency with scripts, and iterated. Same prompts, verbatim (typos included), different workflow.

Prompt 1: minimal (verbatim)
generate an animated svg of a man doing skatevoard tricks on a pipe. Be mindful of the real phisics
Prompt 2: constrained
Generate a single self-contained animated SVG (SMIL or CSS animations, no JavaScript, no external resources) of a man doing skateboard tricks on a pipe (half-pipe / vert ramp). Be mindful of real physics.

The scene must include:
- A half-pipe / vert ramp with two quarter pipes facing each other
- A skater figure with a recognizable skateboard (deck + 4 trucks/wheels)
- The skater performing at least one aerial trick above the pipe's coping

The animation must respect real physics:
- Pendulum motion: the skater swings back and forth in the transitions
- Speed varies with height (slower at the top of the ramp, faster at the bottom)
- Gravity: airborne tricks follow a parabolic arc and land back on the ramp
- The board rotates during the trick (e.g. kickflip or 360 spin) and aligns again before landing

Constraints:
- Single <svg> code block only, no explanation
- SMIL or CSS animations only, no JavaScript, no external resources
- Loop must be seamless (the skater ends where the loop restarts)
- Include XML comments describing what each group represents

claude-code-minimal

len=2564 · anim=True · tech=SMIL · agentic (Claude Code)

not zero-shot: written by Claude Code as a file, then validated (XML well-formedness, keyPoints/keyTimes cardinality, closed motion path) and iterated in-session. Same verbatim minimal prompt.

Open raw SVG ↗

claude-code-constrained

len=4343 · anim=True · tech=SMIL · agentic (Claude Code)

not zero-shot: written by Claude Code as a file, then validated (XML well-formedness, keyPoints/keyTimes cardinality, closed motion path) and iterated in-session. Same verbatim constrained prompt.

Open raw SVG ↗

gpt-6-astra-medium-minimal

len=10398 · anim=False · tech=SMIL/CSS · 5279 tok · 136.7s · cost=$0.26

Open raw SVG ↗

gpt-6-astra-constrained

len=12912 · anim=True · tech=SMIL/CSS · 11712 tok · 309.3s · cost=$0.58

Open raw SVG ↗

gpt-5-6-luna-minimal

len=6635 · anim=True · tech=SMIL/CSS · 4057 tok · 30.1s · cost=$0.0048

Open raw SVG ↗

gpt-5-6-luna-constrained

len=7078 · anim=True · tech=SMIL/CSS · 4394 tok · 41.1s · cost=$0.0050

Open raw SVG ↗

gpt-5-6-terra-minimal

len=9100 · anim=True · tech=SMIL/CSS · 5926 tok · 87.2s · cost=$0.07

Open raw SVG ↗

gpt-5-6-terra-constrained

len=8028 · anim=True · tech=SMIL/CSS · 5210 tok · 70.5s · cost=$0.06

Open raw SVG ↗

gpt-5-6-sol-minimal

len=7750 · anim=True · tech=SMIL/CSS · 7459 tok · 158.6s · cost=$0.07

Open raw SVG ↗

gpt-5-6-sol-constrained

len=10157 · anim=True · tech=SMIL/CSS · 6786 tok · 80.5s · cost=$0.07

Open raw SVG ↗

claude-sonnet-5-minimal

len=3314 · anim=True · tech=SMIL/CSS · 18364 tok · 186.7s · cost=$0.18

recovered via rerun (first attempt returned no SVG)

Open raw SVG ↗

claude-sonnet-5-constrained

ERROR: no SVG in response (empty) - rerun not attempted (user decision)

deepseek-v4-1-flash-minimal

len=7668 · anim=True · tech=SMIL/CSS · 2823 tok · 8.9s · cost=$0.0034

reasoning disabled (first attempt: 32k tokens all consumed by reasoning, empty content)

Open raw SVG ↗

deepseek-v4-1-flash-minimal-reasoning

len=5146 · anim=True · tech=SMIL/CSS · 46831 tok (45140 reasoning) · 183.1s · cost=$0.056

reasoning enabled, max_tokens=128000 (16x tokens, 20x time vs the no-reasoning run above)

Open raw SVG ↗

deepseek-v4-1-flash-constrained

len=12414 · anim=True · tech=SMIL/CSS · 5029 tok · 15.2s · cost=$0.0058

reasoning disabled (first attempt: 32k tokens all consumed by reasoning, empty content)

Open raw SVG ↗

deepseek-v4-1-flash-constrained-reasoning

len=7280 · anim=True · tech=SMIL/CSS · 73946 tok (70823 reasoning) · 296.5s · cost=$0.088

reasoning enabled, max_tokens=128000 (15x tokens, 20x time vs the no-reasoning run above)

Open raw SVG ↗

gemini-3-8-flash-minimal

len=27992 · anim=True · tech=SMIL/CSS · 17495 tok · 100.7s · cost=$0.07

Open raw SVG ↗

gemini-3-8-flash-constrained

len=21880 · anim=True · tech=SMIL/CSS · 24421 tok · 151.1s · cost=$0.09

Open raw SVG ↗

claude-fable-5-1-minimal

len=8055 · anim=True · tech=SMIL/CSS · 24464 tok · 296.7s · cost=$1.22

Open raw SVG ↗

claude-fable-5-1-constrained

len=9811 · anim=True · tech=SMIL/CSS · 30617 tok · 379.9s · cost=$1.52

Open raw SVG ↗

claude-opus-5-minimal

ERROR: no complete SVG: reasoning consumed 56.6k tokens (retry with 64k cap), content truncated by length limit

claude-opus-5-constrained

len=11398 · anim=True · tech=SMIL/CSS · 51707 tok · 658.1s · cost=$1.28

retry with max_tokens=64000 (32k run: all tokens consumed by reasoning, finish=length)

Open raw SVG ↗

kimi-k3-minimal

ERROR: no SVG in response (empty content, reasoning loop)

kimi-k3-constrained

ERROR: no SVG in response (empty content, reasoning loop)