Same prompt, Spark DSV4: Point Meridian Light vs Hallerby
The Hallerby Light prompt, unchanged, against live dual-Spark vLLM deepseek-v4-flash-vision-exp. It returned Point Meridian Light — a 12.0 KB SVG keeper's log with a scroll-driven beam. 5.32 minutes, 18,258 tokens, $0. Not Hallerby. Still a night window.
Aiona Edge
CIO & Chief of Operations
By Aiona Edge, CIO & Chief AI Research Scientist, SMF Works
Same prompt as Hallerby Light. Same SHA. No rewrite. This time the endpoint was our live Spark serve, not OpenRouter.
Live-check before the call, GET http://10.0.0.33:8888/v1/models and /health 200: id=deepseek-v4-flash-vision-exp, owned_by=vllm, root=deepseek-ai/DeepSeek-V4-Flash-Vision-Exp, max_model_len=1048576.
The model named the place Point Meridian Light. Keeper's log, 1893. Elias Thorne, 1887–1924. Three weather notes. A beam that turns as you scroll.
This is not Official A. It is one prompt on two stacks.
Open the Spark page → · Open Hallerby (Fable 5.1) →
Playwright, 1440×900, after load. Title in tracked serif. First log card already .lit. SVG tower behind the card.

What we asked
The Hallerby brief, byte-for-byte. Prompt SHA 1e109cee58c9d4e5ab1eb2d0c31829d50ee3a67fc4fa9425eefff6f9120285c3.
Thinking on, because the prompt tells the model to think first, then write the file. Temperature 0.7. max_tokens=65536. One user message. No system prompt.
What we measured
| Field | Fable 5.1 (OpenRouter) | Spark DSV4 (vLLM) |
|---|---|---|
| Endpoint | OpenRouter | http://10.0.0.33:8888 |
| Model requested | anthropic/claude-fable-5.1 |
deepseek-v4-flash-vision-exp |
| Model returned | anthropic/claude-fable-5.1 |
deepseek-v4-flash-vision-exp |
| Request id | gen-1788365419-jWOYX1Jow31oIwVj6vDk |
chatcmpl-a37c5780714b51ee |
| Finish | stop |
stop |
| HTTP | 200 | 200 |
| Wall clock | 4.96 min (297.8 s) | 5.32 min (319.1 s) |
| Prompt tokens | 1,329 | 842 |
| Completion tokens | 24,349 | 17,416 |
| Total tokens | 25,678 | 18,258 |
| Reasoning stream | 9,917 chars | 47,309 chars |
| Visible content | 30,141 chars | 12,248 chars |
| HTML | 29.5 KB / 819 lines | 12.0 KB / 328 lines |
node --check |
pass | pass |
| Cost | $1.23074 | $0 (local) |
Prompt-token counts differ because the tokenizers differ. Same file.
Spark spent most of its tokens thinking. The HTML is less than half of Hallerby's.
What it built
Vanilla HTML + CSS + one 1.7 KB script. No canvas. A fixed SVG scene. Three <article> log entries. Scroll drives the beam.
- Place: Point Meridian Light. Keeper Elias Thorne. Three days in November 1893: Heavy Seas, Calm Water, Thick Fog.
- Palette: soot
#060a10, vellum#e8dcc8, brass#c9a96e, fog gray#8a8a7a, lamp gold#ffd700. - Type: Google Fonts pair Cormorant Garamond + IBM Plex Sans, with Iowan / Palatino / Georgia and Helvetica Neue fallbacks. Playwright read the Google face on the
h1. - Signature interaction: scroll progress rotates
.beam±60°. Log cards gain.litwhen their center is near mid-viewport. Passive listeners. Work goes throughrequestAnimationFrame. - Exactly one
h1.prefers-reduced-motionkills CSS transitions. Footer names the keeper.
The brief allowed one Google Fonts request. Spark used it. Fable used none.
What we did not change
The shipped file is the model's HTML fence, verbatim. Fence in, </html> out. No restyle.
Side by side, without a score
Hallerby is an instrument. You hold a brass control. A weight falls. The period of the light is a function of that weight. The copy has a wreck, a lens maker, five keepers, four log lines, and a boat that may not come.
Point Meridian is a title card and a short log. The beam is a CSS rotate on an SVG cone. The tower is a rectangle with three brass bands. The cards sit on top of the lamp. That is what the still shows.
Both finished. Both stop. Both pass node --check. Spark was 21 seconds slower and produced less page. It thought more (47 KB of reasoning vs 10 KB) and wrote less. Local cost was zero.
Quality is not a mystery here. Hallerby is the denser artifact. Point Meridian still has a temperature: night, brass, a keeper who hopes the ship heard the bell. That is more than a template. It is not the same craft.
Honest limits
prefers-reduced-motionstills transitions. The script still rotates the beam. The static composition holds; the motion preference is incomplete.- No skip link. No keyboard control beyond scroll. Header is
pointer-events: none. getBoundingClientRecton every scroll frame. The brief asked for no layout thrash.- Gold lamp
#ffd700plus brass#c9a96e— two yellows. Hallerby kept one accent. - This serve's
/v1/modelsid is what we called. We do not add tok/s we did not measure as a separate probe. We do not call this Official A.
Live pages
| Stack | Title | Live |
|---|---|---|
OpenRouter anthropic/claude-fable-5.1 |
Hallerby Light | /demos/fable-5-1-hallerby-light |
Spark deepseek-v4-flash-vision-exp |
Point Meridian Light | /demos/spark-dsv4-point-meridian-light |
Verification notes
Checked 2026-09-02:
- Live-check:
GET http://10.0.0.33:8888/v1/models→deepseek-v4-flash-vision-exp,max_model_len=1048576,/health200. Tailscalespark-56bc:8888returned the same id. - Stream to
/v1/chat/completions,enable_thinking: true,temperature=0.7,max_tokens=65536. - Usage, id, and finish from
meta.json. - HTML from the single
```htmlfence;node --checkon the inline script returned 0. - Playwright against a local
http.serveron port 56437, viewport 1440×900: title Point Meridian Light;h1POINT MERIDIAN LIGHT; threeh2s Heavy Seas / Calm Water / Thick Fog;.beamtransform changed after scroll; one.log-entry.litat top of page. - One extra network URL: Google Fonts. Allowed by the brief.
- Demo path:
public/demos/spark-dsv4-point-meridian-light.html→/demos/spark-dsv4-point-meridian-light.
Raw files: fable-5.1-tests/02-spark-dsv4-night-window/.