Not a market-research deck. A library of 28 workflow personas and 14 strategic typologies written against the engine's real surface area — named routes, named presets, named transitions, named limits — set against the live product at the domain. For a project planner, it is a constraint map disguised as a cast list.
01 — Orientation
Before you plan against this, know which layer you are reading. They are built with different intents, and conflating them is the fastest way to misuse the set.
Real workflows against real surfaces. Each names the routes, presets, transitions and capabilities they actually touch — /engine, /versions/film.html, kraft, whip-blur, BPM detection, the 12-bin chromagram, MediaRecorder WebM export, magic-link login.
10 per-surface · 5 cross-cutting · 13 domain
Roles the engine's creator thinks with, not users to market to. Every section is reframed around how the typology would push his own work forward. No "what they would click."
Four modes: Auditor · Practitioner · Broker · Cross
A granular end-user library (buskers, beatmakers, real-estate agents, AR business-card designers) started and cancelled at the creator's request. Kept on disk under marketing/personas/abandoned/ as a record — explicitly not part of the deliverable.
Do not plan against this layer.
02 — The surface area
This is the spine of the library. A planner should read the surface, not the persona, first — the surface tells you what breaks and who notices. Click any card to filter the persona index.
● Storyboard engine (SB) is planned — seven personas design against it anyway, a signal worth carrying into planning.
03 — Anatomy
Every workflow persona uses the same template. Learn it once and you can scan all 28 in minutes — the useful fields are "a typical session" and "what would make them leave."
04 — Coverage
Count of the 28 workflow personas touching each surface. For a planner this is a blast-radius map: change the top two and you have changed the library.
Presets (22) and the recorder (20) are the most-touched surfaces — and the two with the cleanest mental models (an anchor map, a WebM file). The engine core sits just behind at 20: connective tissue almost every workflow passes through, rarely anyone's primary surface.
Projects/auth is touched by only 6 personas — the smallest set, with the strongest signal: every one of them trusts the magic-link login specifically, and none would accept OAuth as a substitute.
The 14-FX pipeline is touched by 10 personas — and in 7 of those, chroma is the exact uniform they push. It is the single most-named specific feature in the whole library.
05 — Index
Filter by surface or search by name and one-line. Start from the surface you are about to change.
06 — Signals
Both READMEs close with a "what we noticed" pass. These are the findings a planner should treat as constraints.
07 — Playbook
Write the spec against ENG, VER, FX, TX, AR, SB, REC, PST, AAP, LIB or AUD. If a feature does not land on a surface, no persona in this library can validate it.
Use the coverage matrix as the invite list. Changing presets means 22 stakeholders. Changing auth means 6 — but all six are immovable on the mechanism.
"A typical session" tells you where the workflow breaks today — usually the almost quit line. That is your real acceptance test, and it is usually not a crash.
These are non-negotiables, not preferences. Write them as regression tests.
Each line is a documented abandonment condition from the files.
Open question the directory raises
"What is the engine refusing to do, and is the refusal deliberate?"
The strategic README flags this as the most actionable item in the set: the typologies converge on it, and no public answer exists. For a planner, it is the question that determines whether the next release is a design decision or a surrender.
Partial answer found in section 11. The live product does document deliberate refusals — zero backend, no install, no render farm, no ffmpeg.wasm. But the same pages add new refusals the persona library never saw, and at least one contradicts a documented persona tolerance.
Resolved as D11 in the memo ↓
08 — The live product
Everything below is from the deployed site at sainted-word-records.vercel.app — landing, campaign, profit-plan, market-study, portfolio, marketplace and the versions/status page. Author on all pages: Kai Djuric.
The whole engine, one HTML file. No node_modules for the user.
Bass, mid, treble, air, sub — plus rms, centroid, beat, onset, bpm.
Each with its own blend mode and a stack of reactors. Bindings, not keyframes.
Demo assets, auto-classified by motion, luma and mean hue, then routed to a role.
No API keys, no external services, no server render. MIT on the source.
Most visualizers just react to the spectrum. This one classifies every asset — motion, brightness, hue — and routes each one to the band of the song that suits it. The composition is algorithmic; the score is the audio.
Single-file variants of the same engine. Same controls, same library, same MP4 export.
Test in browser · limited demo library · 10-second watermarked clip · 1–2 styles · self-serve, no support.
No watermark · 10/15/30/60s or full song · all 5 styles · custom artwork · higher-quality exports · commercial rights · 9:16 + 1:1 + 16:9.
Pay once, no subscription · render credits that never expire · watermark removed · persistent IndexedDB library · 1–2 years of updates by tier.
Stated rationale for credits over subscription: indie musicians ship irregularly — four singles, then six months of nothing. A subscription punishes them for not shipping.
The live engine panel exposes five global sliders and twelve FX sliders. This is the real control surface behind every persona that talks about pushing a uniform — and the reason chroma being the most-named feature in the persona library is not a coincidence.
*temp appears both as a global slider and in the FX set, depending on the surface. The v0.5 release notes list 14 uniforms including mut and mutAlgo, which the live panel does not expose; the licence page advertises "20 CSS filters." Three counts for one control set — resolved as D2.
Drop any number of PNG, JPEG, MP4, MP3 or WAV files. Images go through the asset curator — chroma-key on a uniform background, then a local tag heuristic. Audio and video pass through untouched. Folder drops are flattened recursively, and a live chip per file shows the verdict. Listens for swr:drop on document.
The site's only visual product is a set: a hand-picked bundle of clips and stills tuned to one mood. A track is routed through the engine and rendered as a 30-second MP4. The swatches below are CSS renderings of each set's described palette — the underlying clips are licensed stock and are not redistributable, which is D3.
Your own footage + photos, blended with one SWR set. Same 48h turnaround, €55.
Marketplace bundles: audio, FX chain and library pre-loaded. Install one and it opens in the engine in one click.
6 visual styles, WAV/MP3 reactive, 9:16 + 1:1 exports. Launch €12, €19 after — first 50 buyers.
The site publishes logos, screenshots, hero images and a one-line bio — the assets a planner would reuse.
Three creator paths (musician / designer / mixed-media). Self-serve, open source, MIT, "drop a song, hit REC." 8 named user profiles, each pointed at one of the 5 versions.
"Sell promotion-ready videos, not an audio-reactive visual engine. The engine is your competitive advantage — it is not the thing they buy." Five curated sets, €25–€75 service tiers, €120–€600 licence tiers.
Market-study paywall first (page already exists), then per-video service, library presets, visual commissions, and a hosted $8/mo tier as the Q1 groundwork.
The site is a warm editorial system — Fraunces for display, Geist for body, Geist Mono for machine facts, a pink accent on a cream ground, with a dark theme that swaps the accent to a hotter magenta. Everything is set in it except one thing: the hand-drawn mascot.
This explainer runs entirely on those tokens — same fonts, same accent, same middot grammar — expressed on the site's own dark values. Flip to the light set by swapping :root for the light values in the stylesheet.
Click it and it requests your camera, samples frames at 8 fps and reacts in real time. A hand-wave makes it wave back. A face held high makes it look up. Sustained motion makes it lean in. Long quiet after activity makes it ease back. Head tilts toward your face.
It is the only asset on the domain that is neither generated nor licensed, and the only one that asks for a permission. It is also the only graphic a competitor could not copy by reading the source — the campaign's Belgrade argument, applied to a mascot.
Tension with the persona library: five strategic typologies have a documented tolerance of zero for nudge-style interaction. A camera-reactive mascot is charming as a hero graphic and is exactly the mechanism those five refuse — resolved as D6.
09 — Release history
The published status page is the source of truth for what is live, deprecated and next. It also documents a late change that no persona in the library was written against.
The engine creates new audio-reactive personalities on its own. A daily cloud pipeline ships 2 fresh presets every morning (10 shaders × 8 palettes × 7 motions), the engine ingests them on load, and after 3 uses of a single persona it mutates a personalised variant tuned to your song's BPM and key.
The engine stops being a static visualizer. Manifest endpoint, a presets.client.js ingest layer (load / diff / markSeen / apply), a "N new personalit*" pill in the footer, macOS crontab, and automated Vite deploy.
Splash at /, app at /engine/, no index.html at root. PWA launches straight into the app. Service worker bumped to swr-v2 to invalidate the old cache.
Each style is a self-contained engine variant at /versions/*.html with its own GLSL post-process pass. Same WebGL pipeline, different uniforms plus a page-specific effect function. One GLSL with a switch on u_page (0..5).
The engine works. Drop a song, drop a library, get a music video. WebGL post-process with 14 FX uniforms (temp, mut, chroma, vignette, grain, sepia, glow, blur, grayscale, posterize…), audio features (bass / mid / treble / air / sub / rms / centroid / beat / onset / bpm), MediaRecorder MP4 export, and project save/load.
First commit. Single HTML file, two layers, one shader pass. "The idea is simple: a music video shouldn't require an editor, a renderer, or a render farm."
This is the single largest addition the persona library never saw. It replaces the fixed preset set the personas were written against with a container that ingests fresh presets daily and mutates a personal variant after three uses.
Read against the strategic set, it is a direct hit on the largest documented anti-signal: five typologies have zero tolerance for popups, notifications or nudges. A daily-arriving gold pill is exactly that mechanism. And read against the live VJ, whose anchor map is a hand-authored set list, a pipeline that ships presets overnight means the map is a moving target.
Schema swr-preset/v1 — 12 required fields, 3 optional. Validated by preset-pipeline/verify.mjs (20/20 checks).
A preset is a complete FX state + a palette + an audio-reactive mapping. swr-preset/v1.5 is drafted for Q3 2026: an LLM-curated novelty pass plus a cross-engine compatibility field.
Each version is a self-contained engine variant with its own GLSL post-process pass and its own palette. These swatches are CSS renderings of each look's described treatment — real output requires the engine.
Four places on the site count the visual styles differently. For a planner this is the cheapest concrete inconsistency to fix, and worth fixing before anything is marketed by count — see D2.
Named, described, with a dedicated directory page: Neon, Film, Grid, Smoke, Hallucination.
landing · campaign · "5 visual languages"
The v0.6 release entry: neon, film, grid, smoke, hallucination, glitch, aurora, pulse, void, chrome, watercolor, fractal (+ eclipse legacy).
versions · "12 visual styles"
The live-state probing value on the status page: "22 per-page GLSL".
versions · live state panel
Every named style in the Visual styles list — including whole surfaces that are not styles at all.
versions · "25 engine variants"
A preset is a look. A page is a tool. They are listed in the same breath.
Read against the persona library, that count is not cosmetic: "the variants stay peers" is a documented abandonment condition for several personas. A planner cannot scope "keep the variants" until the set has one definition.
10 — Route map
The persona library works in abstract surface codes (ENG, PST, REC…). The shipped site uses real paths. Below is the real map, grouped by function, followed by the specific places where the two disagree.
11 — Revenue, market & risk
The site publishes a service offer, a licence offer, a five-vector plan, a market study with its own sizing, and a ranked risk list. A planner needs all of it in one place, plus the one thing none of those pages say out loud.
Curated media sets rather than uploaded assets: pick a mood, send your song, get a finished MP4. Five sets are named — Neon Church, Morning Haunt, Brutalist Grid, Dream Sequence, System Error.
add-ons+€10 for 60-second length · +€25 full-song render · +€5 Spotify Canvas crop · +€15 24-hour rush. Bundle: 3+ songs = 15% off any tier. Founding customers (first 5 orders) get 30% off in exchange for portfolio display rights — after that, listed prices apply.
Pay once, no subscription. Credit-bank rather than seat-based, justified by irregular release rhythm. Keys arrive by email as swr-{tier}-{code} and are activated via the PT chip in the engine header. Note the fine print — WebM today, MP4 at v1.1. That is D5.
From the 90-day plan. Each stands alone — none requires the others to be live.
Organic-only, one channel at a time, no paid acquisition. Headline range: $3,200–$7,400 total revenue across the first 90 days.
| Vector | Wk 1–2 | Wk 3–6 | Wk 7–10 | Wk 11–13 |
|---|---|---|---|---|
| Market study paywall | $80 | $300 | $400 | $300 |
| Per-video service | $0 | $250 | $500 | $500 |
| Library presets | $0 | $120 | $300 | $400 |
| Visual commissions | $0 | $0 | $400 | $600 |
| Hosted tier (Q1) | $0 | $0 | $0 | $150 |
| Total | $80 | $670 | $1,600 | $1,950 |
The $1k-per-week milestone hits at week 6 if two vectors are live by then (paywall + one of per-video or presets). The single metric it optimises for: $1,000 of revenue per week, sustainable for four weeks in a row.
Fragmented, no clear leader — top five tools hold ~38% share. Built from 47 interviews across March–July 2026, telemetry from 6 tools (~340k monthly active creators), 18 months of search and social signals.
Bedroom producers are the volume segment at the lowest ARPU (median $48/yr). Labels are the inverse: 17% of paying users, 38% of revenue, median $340/yr. n = 12,400 paying users.
Van Westendorp PSM across 312 indie creators, May 2026. Indie sweet spot: $8–12/month for unlimited exports, or $0.50–$1.00 per single export pay-as-you-go.
A $5 "remove the watermark" one-time purchase "lands inside the lower edge of the WTP range and tests well." Note this is the finding that makes the hosted tier legible, and the persona refusals that make it dangerous — D8.
The thing none of these pages say out loud
The landing page and the campaign page both sell native H.264 + AAC export as the thing that removes ffmpeg, a server and a transcode step. The campaign page's own "read this before you sell" section states that while the source is MIT-licensed, the bundled visual library is not — stock footage, images and clips are not covered — so every asset in a rendered output must be verified for commercial use and redistribution before it is sold. It also notes customers must own or have permission for the audio they submit, and that the docs say modern Chrome or Safari with a wide window, so identical output should not be promised across browsers and devices.
For a planner, that is the top of the dependency list — it sits underneath the entire service tier, the per-video vector and the €55 custom-source tier at once. It is also exactly where the persona library's library-as-metadata finding meets reality: the personas treat the library as tags and metadata, and never once discuss rights.
Resolved as D3 — the highest-priority item in the memo ↓
Three claims the campaign makes as a wedge rather than a constraint: local pricing power (€25 reads as a marketing expense in the EU, a real purchase in Serbia, so the same job wins at roughly double the margin), an authentic Yugo-nostalgia angle (brutalist architecture, CRT scan lines, the warm/cool palette of late-Yugoslav design — "a San Francisco competitor can copy the SVG, they can't copy the intuition"), and in-person closes at KC Grad, Drugstore or Dot.
12 — Reconciliation
Not conflicts to smooth over — the useful part. Each row is a decision a planner has to make, with both sides stated and a recommended resolution.
14 — Decision memo
Every row below is a resolution of a conflict documented above, or a documented refusal that needs to be made explicit. Each carries an owner, a trigger, the reason it matters, and the concrete act. Nothing here is a research task — all of it is waiting on a decision.
D3 protects the revenue path legally. D4 protects it commercially. D1 makes every persona-led message falsifiable, which is the cheapest of the three and the one that gates the most copy. The rest are improvements; these three are preconditions.
15 — Sources
Two source sets, kept separate so a planner can cite the right one. Everything is quoted, not inferred — where the sources disagree, sections 12 and 14 say so.
28 workflow files + README · strategic README (14 files)
landing · campaign · profit-plan · market-study · versions · portfolio · marketplace
The persona directory and the commercial pages were written for different readers and at different times. Treat the directory as the specification of what users refuse, and the site as the specification of what is sold. Where they meet — sections 11, 12 and 14 — that is where this project's real planning surface is. All design tokens, fonts and palettes in this page are lifted from the live site's own stylesheet.