pipelines/ALTERNATIVES_MATRIX.md
The decision-protocol deliverable for docs/PIPELINE_REVIEW_MISSION.md: for each of the seven
open pipeline slots, the real alternatives (always including the current researched-chain status
quo), pros/cons grounded in the nine tech_research/ briefs, a RECOMMENDATION, the strongest
objection to it, and the evidence that would flip it. Every pro/con traces to a cited brief
finding; the one slot the briefs do not cover (OCR) carries a same-day web spot-verify, sourced
inline.
commercially-unrestricted (MIT-class) components; territory-restricted or non-commercial tools
are never load-bearing in the shipped path — usable at will for internal previz/reference only.
input contract; no freehand generation.
models) is OUT for authoring — tooling only.
photogrammetry-grounded.
1. Terrain — KEEP the DEM→GDAL→UE Landscape backbone; ADD Gaea as the erosion-detail leg; hold
classic Landscape (not 5.8 Mesh Terrain) as the import target; world-model set-pieces stay
previz-only.
2. World-model slot — TIERED: ignore Family-A for authoring, sanction a narrow Marble/HY-World
disposable-previz lane, and design-around-UE6 as the one real forward bet (track the EA).
3. 3D assets — KEEP the ruled split and run the expanded benchmark gate; geometry is clean today,
the commercially-clean TEXTURED-PBR leg is the genuine open risk (renderer-swap or ArmorLab).
4. Editor seam — KEEP NeoStack as the interpretive seam but adopt a THREE-SEAM routing rule
(NeoStack = judgment, native Python/Remote-Control = bulk, Epic MCP = PCG); OSS unreal-mcp is the
named fallback.
5. Runtime layer — HYBRID: adopt NVIDIA ACE as the on-device substrate, keep the bespoke
strategy-token + canon-graph guardrails as the policy/safety layer on top.
6. Voice — TIERED: Kokoro (local, no-clone) for bulk ambient lines, ElevenLabs for hero/named
voices behind the clone-authorization gate.
7. OCR — KEEP ocrmypdf+tesseract as the install-now critical-path baseline; ADD a local VLM-OCR
(PaddleOCR-VL / DeepSeek-OCR) on the 5090 for the hard scan remainder.
---
The authoring BACKBONE is not genuinely in contest: DEM→GDAL→UE Landscape is the only
deterministic, reproducible, license-clean, batchable path, and every world-model brief
independently reinforces that the DEM already IS the geometry (GEODATA_TERRAIN_CHAIN.md §7;
VIDEO_TO_3D_BRIDGES.md §4; WORLD_MODELS_LANDSCAPE.md §7). What is live is (a) whether to add
Gaea's detail-synthesis leg, (b) Landscape vs 5.8 Mesh Terrain as the import target, and (c)
whether generated-3D scenes earn a set-piece lane.
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. DEM→GDAL→UE Landscape, resample only (status-quo core) | Copernicus GLO-30 → GDAL alter/carve → 16-bit heightmap → UE Landscape (C++ import shim + Python weightmaps) → PCG Biome Core | Free, worldwide, commercial-clean; deterministic + diffable + re-runnable; scriptable end-to-end bar the one C++ import shim (GEODATA §2-5, UE_BUILD §2.3) | 30 m source cannot carry playable-scale detail — resample only smooths/terraces, never manufactures detail (GEODATA §3, §6) |
| B. A + Gaea erosion/river synthesis leg (status-quo as recommended) | Route the resampled DEM through Gaea's .tor/CLI erosion graph before UE import | The real value in the middle — physically-plausible erosion/sediment/meandering rivers a 30 m DEM structurally can't hold; file-based determinism (same input+graph = same output); Indie $99 perpetual (GEODATA §6) | Gaea CLI-automation tier-gating UNCONFIRMED (Indie may not include headless CLI; Pro $199 if so); 3.0 shipped-status unconfirmed (GEODATA §6, residual #2/#3) |
| C. Swap import target to UE 5.8 native Mesh Terrain | True XYZ-mesh terrain (overhangs/caves/arches), variable resolution, non-destructive modifier stack, native PCG/Nanite/WP integration | Handles what heightfields can't; Epic frames it as the long-term Landscape replacement (GEODATA §3, UE_BUILD §2.7) | Experimental this exact release — API churn likely, scripting surface undocumented; both briefs say "do not build on it yet" (GEODATA residual #7, UE_BUILD §2.7) |
| D. Marble / HY-World-2.0 generated 3D scenes for select set-pieces | Family-B world models that export real mesh (+ splats): Marble FBX/glTF, HY-World mesh/3DGS | Only world models that hand back importable geometry; fast explorable blockout of a fantastical space (WORLD_MODELS §2.B, VIDEO_TO_3D §1.5) | Marble Pro $35/mo min for commercial rights; HY-World license unread (assume EU/UK/KR-excluded + MAU-gate by sibling pattern) → previz-only under the ruling; neither ingests the region schema (WORLD_MODELS §4-5) |
| E. SANA-WM / Cosmos-3 previz-only | Local camera-controlled video → (separate) Postshot reconstruction → UE splat | SANA-WM is Apache-2.0 + 5090-comfortable (60s/720p in 34s) (COSMOS3 §3) | Video-only; the reconstruction chain is unproven and geometrically risky; Cosmos-3-Nano is a tight 29 GB BF16 fit for a single short clip; strictly weaker than D, which exports mesh directly (COSMOS3 §CAPABILITY BOUNDARY, VIDEO_TO_3D §1.3-1.4) |
RECOMMENDATION — B as the backbone, plus D as a narrow, gated previz lane. Keep the DEM→GDAL→UE
Landscape chain and ADD the Gaea erosion leg (confirm the CLI-automation tier first — the $99→$199
delta is immaterial under the licensing ruling, but headless CI needs the CLI). Hold classic
heightfield Landscape as the import target and TRACK Mesh Terrain for a later re-target. Permit
Marble/HY-World-2.0 only as disposable previz for FANTASTICAL set-pieces (vril-sites), gated behind
the schema-bound + §17.1 disciplines — never for real cultural terrain, never as final geometry. Do
not stand up an E lane beyond a single post-5090 bench-test.
STRONGEST OBJECTION — The "deterministic, no-clicks" backbone has two soft spots exactly where
automation matters: the Landscape import needs bespoke C++ (UE_BUILD §2.3, the single highest-
priority engineering dependency in the chain) AND Gaea's headless CLI tier is unconfirmed. If the
shim slips and the CLI is Pro-gated-and-untested, the terrain pipeline is materially more manual
than the chain advertises.
WHAT FLIPS IT — Mesh Terrain reaching Beta/Production with a documented Python surface inside the
build window flips the import target from Landscape to Mesh Terrain (overhangs + variable-resolution
than UE Landmass + auto-material at the chosen scale-compression drops the Gaea leg. HY-World-2.0's
LICENSE reading genuinely-open (Apache-2.0, no territory bar) upgrades D from optional-previz toward
a standard blockout step.
---
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. Ignore-for-now (status quo) | Treat the whole category as track-for-awareness; rely on region-schema→PCG + hand-authoring | The schema→PCG path already covers scene assembly and needs no vendor (WORLD_MODELS §4.2); Family-A is the wrong paradigm for an authored 79-node RPG and is ruled OUT; Unity/Epic both call world models complementary, not replacements (WORLD_MODELS §0-1) | Forgoes a genuinely fast blockout aid for the fantastical set-pieces where no real-world reference exists |
| B. Local video-previz lane (Cosmos-3-Nano / SANA-WM) | On-device video generation as a reference/mood aid | SANA-WM Apache-2.0, 5090-capable (COSMOS3 §3) | Output is video, not geometry; Cosmos-3-Nano is a 29 GB BF16 squeeze for one short clip; reconstruction-to-mesh is unproven and lossy; redundant with the mesh-exporting Family-B option (COSMOS3 §CAPABILITY BOUNDARY) |
| C. Generated-3D set-piece lane (Marble cloud / HY-World local) | Family-B world models that export mesh + splats | The only paradigm that yields importable geometry; #1 open WorldScore (HY-World); fast explorable blockout (WORLD_MODELS §2.B) | Neither ingests the region schema; Marble Pro $35/mo for commercial rights; HY-World license unread → previz-only under the ruling; AI-generated video of a REAL site "wears photogrammetry's credibility as a costume" — a §17.1 laundering risk, not a mitigation (VIDEO_TO_3D §"risky" item 3) |
| D. Design-around-UE6 | Epic-native prompt scene-population; Claude a first-class MCP integration; furnishes a room then expands to a city, fully editable | Exactly this slot's problem solved natively, on Epic's own tooling; our build timeline overlaps its EA (WORLD_MODELS §6) | EA ~late 2027, full release ~2028/29 — 2+ years out; "track the beta, don't wait for it" |
RECOMMENDATION — A tiered posture, not a single pick. IGNORE Family-A / world-IS-model for
authoring (ruled out + structural paradigm mismatch). Sanction a NARROW, clearly-labeled disposable-
previz lane using Marble (or HY-World once its LICENSE is read) for fantastical set-pieces only —
Family-B exports real geometry and is strictly the better previz than the video-only B. Do NOT stand
up B beyond one bench-test. DESIGN-AROUND-UE6 (D) is the one forward bet worth architecting toward:
keep the region-schema→PCG path as the bridge, and track the UE6 EA as the native closer of the
schema-to-scene gap.
STRONGEST OBJECTION — A previz lane that never yields shippable geometry may not justify ANY
subscription/setup cost or the §17.1 laundering-risk tail, given the schema→PCG path + hand-authoring
already covers scene assembly. The purest read is "ignore entirely" — every world-model lane is a
distraction with a care-risk edge.
WHAT FLIPS IT — UE6 EA landing early with a usable scripting surface flips D from "track" to
"adopt." A shipped World Labs × Autodesk Maya/3ds Max bridge, or HY-World-2.0's LICENSE proving
genuinely open, upgrades the previz lane from optional to standard. A demonstrated SANA-WM→Postshot→
UE chain at Lyra-2.0 quality revives lane B.
---
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. The ruled split (status quo) | TRELLIS.2 geometry (MIT) + benchmark-picked texture leg + Hi3DGen fallback; Hunyuan3D-2.1 for PBR (territory-capped → previz); NPCs MetaHuman; architecture never raw-gen; retopo/LOD/UV = Blender-headless + human QC | Best raw geometry is MIT-clean and 5090-fits with headroom; split-by-task is empirically grounded; 5090 is the first consumer card to run Hunyuan's full 29 GB pipeline (LOCAL_3D_ASSET_GEN §0-1) | The commercially-clean TEXTURED-PBR leg is the open wound: TRELLIS.2's own bake runs through nvdiffrast/nvdiffrec (non-commercial, issue #22 unresolved); Hunyuan is EU/UK/KR-excluded + 1M-MAU; no open AI retopo/LOD/UV solution exists (LOCAL_3D_ASSET_GEN §1.1, §2.1) |
| B. NeoStack Meshy/Tripo cloud passthrough (owned, metered) | NeoStack Studio routes to Meshy + Tripo (closed SaaS) + ElevenLabs | Tripo's universal rig/animation is a real gap-filler — no open local generator produces rigs, and the 132-creature roster needs them; reachable via the owned NeoStack Cloud allowance (Q3 §2.1, §2.3; LOCAL §3.2) | Meshy/Tripo are exactly the closed SaaS the local effort exists to escape; commercial-clean-by-default ruling puts both in the previz/reference tier, not the shipped-asset path (Q3 §2.3) |
| C. Wait on the commercial-PBR gap closing (Pixal3D / CHORD) | Hold for a clean open textured-PBR model to land | Pixal3D near-reconstruction-fidelity; Direct3D-S2 (its MIT geometry base) carries NO nvdiffrast baggage (Q3 §1.2) | The gap is STILL OPEN today: Pixal3D's install chain reruns TRELLIS.2 (inherits nvdiffrast); CHORD ships real weights but Research-Only Copyleft. Waiting yields nothing shippable now (Q3 §1.2, §1.4) |
Per category (LOCAL §3): weapons (72) and vril-sites — best fit, TRELLIS.2/Hi3DGen + hand-finish
each. Creatures (132) — good geometry, rigging is a separate unsolved step (Tripo rig / Rigify /
AccuRIG). NPCs — MetaHuman-first (in-engine UE 5.6+; migrate off the sunsetting web app before Nov
2026). Architecture (real cultural) — never raw-generated, photogrammetry/reference-modeled (§17.1).
Familiars/props inherit creatures/weapons.
RECOMMENDATION — Keep A as the default and RUN the expanded benchmark gate at 5090 landing (LOCAL
§5.2 + Q3 §1.4 additions: Pixal3D, Direct3D-S2). Geometry from TRELLIS.2 / Hi3DGen / Direct3D-S2
(all MIT-clean). The commercially-clean TEXTURE leg is picked empirically — front-runner is a
properly-maintained PyTorch3D-swap of TRELLIS.2's bake (the archived kg-git-dev fork proves it is
mechanically straightforward) with ArmorLab for hand touch-ups; Hunyuan3D-2.1 and Meshy/Tripo stay
previz/reference only, EXCEPT Tripo's rigging as a sanctioned per-asset paid gap-filler for the 132
creatures via the NeoStack Cloud allowance. NPCs MetaHuman; architecture photogrammetry; retopo/LOD/
UV Blender-headless + human QC. Do NOT "wait" (C) — benchmark those entrants, but the actionable
clean route today is geometry-clean + a swapped renderer, not a hoped-for release.
STRONGEST OBJECTION — Every shipped-clean TEXTURED-hero-asset path currently runs through a
non-commercial NVIDIA dependency, a territory-excluded Tencent license, or a Research-Only Copyleft.
The commercial-clean-by-default ruling is satisfiable for GEOMETRY today but NOT for finished
textured PBR without real, currently-unbuilt renderer-swap engineering the benchmark cannot conjure.
That is a genuine ship-path risk, not a benchmark tie-breaker.
WHAT FLIPS IT — Microsoft patching TRELLIS.2's nvdiffrast/nvdiffrec dependency (issue #22), OR
Tencent opening Hunyuan3D-2.5/PolyGen under Apache-2.0, OR a maintained PyTorch3D-swap fork shipping,
OR CHORD relicensing — any one collapses the recommendation to "TRELLIS.2 end-to-end." Conversely, a
benchmark showing Blender-headless + ArmorLab hand-texturing is fast enough at 72-weapon / 132-
creature volume makes the renderer-swap unnecessary.
---
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. NeoStack (owned; status quo) | Betide Studio Agent Integration Kit; Claude-Code-native via ACP or MCP; 27+ tools / 150+ ops | Confirmed Blueprint/Material/Niagara/Sequencer/PCG/DataTable/IK authoring; live edits + undo; Claude is the recommended driving model; ~$110 one-time, commercially unrestricted; owned (NEOSTACK_AI §0, §4) | UE 5.8 UNVERIFIED from every public source (caps at 5.5-5.7; the 5.8 Discord quote names SIK/EIK, not AIK — owner-attested "I think it worked" is the only 5.8 datapoint); no pre-execution approval gate (undo only); World-Partition/Cesium/Gaea/SRTM/MetaHuman NOT confirmed as NeoStack tools (NEOSTACK_AI §5, §9; Q3 §2.5) |
| B. Epic first-party MCP (5.8 native, free) | Engine-bundled Experimental MCP; Scene/Actor/Material/Object toolsets + a dedicated PCG toolset; names Claude | First-party, free, ships in the engine; the PCG toolset (with its mandatory graph-generation skill) is genuinely strong; the sanctioned long-term direction (NEOSTACK_AI §8, UE_BUILD §3.6) | No Blueprint/Niagara/Sequencer/Landscape toolset at launch; Experimental ("use caution when shipping"); localhost-only, no auth; supervised, not autonomous (NEOSTACK_AI §8) |
| C. UE-native Python / Remote Control only | Embedded Python 3.11.8, headless commandlets, RunUAT, Remote Control REST/WS | Deterministic, versionable, re-runnable, no LLM non-determinism, no token spend — the right tool for bulk/structured/already-specified mappings and CI (UE_BUILD §1, NEOSTACK_AI §10) | No judgment — cannot turn canon PROSE into an asset graph; Landscape heightmap import still needs a C++ shim (UE_BUILD §2.3) |
| D. OSS unreal-mcp (chongdashu) fallback | Self-hosted MCP server, Claude-targeted, 2,034 stars, actively maintained, free | Best-corroborated OSS substitute if NeoStack lags on 5.8 (NEOSTACK_AI §7) | Community-maintained; narrower/less-proven than NeoStack's asset-graph coverage |
RECOMMENDATION — Keep NeoStack as the pinned INTERPRETIVE seam, but adopt a THREE-SEAM ROUTING RULE
rather than a single tool (NEOSTACK_AI §10 — the real architectural answer, and it maps onto the
deterministic-first model-tiering doctrine):
from a quest description, a Behavior Tree from a boss's verb-set, a Sequencer cinematic from scene
prose, a Niagara effect matched to a vril signature.
judgment): registry rows → DataTables at volume, batch actor placement, the same op across all 69
regions, CI cook/package/test.
matures past Experimental — the narrow Scene/Actor/Material tier.
Pin chongdashu/unreal-mcp as the named fallback. Two pre-flight gates before the Ch 2-5 slice:
verify NeoStack-on-5.8 by direct install, and impose a human-in-the-loop checkpoint policy in the
orchestrator (NeoStack's only built-in safety is undo). Treat World-Partition/Cesium/Gaea/SRTM/
MetaHuman as NATIVE pipeline legs until docs.neostack.dev says otherwise.
STRONGEST OBJECTION — NeoStack-on-5.8 is unconfirmed by every public source, and NeoStack enforces
no pre-execution approval gate. Pinning the interpretive seam to a single third-party plugin whose
5.8 support rests on one owner-attested "I think it worked" is a single point of failure on the exact
engine target, with no enforced safety boundary for §17/hard-line content — and Epic's MCP has no
Blueprint/Niagara/Sequencer equal to fall back to for the interpretive tier.
WHAT FLIPS IT — A failed NeoStack-on-5.8 install flips the interpretive seam to `chongdashu/
unreal-mcp` (or holds NeoStack-mediated legs on 5.7). Epic's first-party MCP shipping Blueprint/
Niagara/Sequencer toolsets (plausibly UE6-era) flips the interpretive seam to first-party — free,
sanctioned, no version-lag risk. A docs.neostack.dev confirmation that the boundary items ARE
first-class NeoStack tools pulls them back into the NeoStack seam.
---
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. Bespoke RUNTIME_GENERATIVE_LAYER (status quo, unbuilt) | Strategy-token architecture: the LLM emits a schema-constrained, canon-validated read-only token; a deterministic controller executes at 60 Hz; canon-graph guardrails (F1-F10, vocabulary mask, no sim write-path); authored fallback; per-entity cadence ladder | Rigorous canon-safety by construction — §17, do-not-invent, whitelist-per-character; the guardrail spine is more rigorous than any general SDK provides (RUNTIME_GENERATIVE_LAYER.md §0-1; Q3 §3.5) | Entirely UNBUILT — the whole on-device inference / API / UE5-plugin substrate would be written from scratch |
| B. Adopt NVIDIA ACE Game Agent SDK | Shipped v0.5.0 (2026-06-15), Apache-2.0 code + ~3 GB bundled models; Agent/Chat/RAG API split; fully on-device; Qwen3.5-4B / Nemotron-3-Nano-4B / Chatterbox-Turbo TTS / NeMo ASR; ~8 GB VRAM; UE5 Blueprint+C++ plugins | Real, shipped, Apache-2.0; on-device; reference SLMs sit exactly on our 3-4B min-spec tier; validated in shipped/beta titles — Total War Pharaoh's RAG over 1,200+ interlinked tables IS our canon-graph/registries use case proven at scale (Q3 §3.5) | A general-purpose SDK — provides NONE of our canon-safety spine (vocabulary mask, do-not-invent, hard-line filter); verify per-model WEIGHTS licenses (not just the SDK code); early (0.5.0) |
| C. Hybrid — ACE substrate + our guardrails + our strategy-token design | ACE for on-device inference / API split / UE5 plugin / TTS-ASR; the bespoke strategy-token + canon-graph guardrails layered on top | Eliminates the from-scratch substrate build while keeping the bespoke canon-safety layer where it is non-negotiable; the Q3 refresh's own recommended posture (Q3 §3.5) | Requires ACE's Agent tier to be constrainable to read-only-token emission; couples a shipping safety-critical layer to an early third-party API boundary |
RECOMMENDATION — C, the HYBRID. Adopt ACE as the runtime SUBSTRATE (on-device inference, the Agent/
Chat/RAG API split, the UE5 plugin layer, on-device TTS/ASR, the small-SLM tier that already matches
our min-spec) and build the bespoke strategy-token + canon-graph-guardrail design as the POLICY /
SAFETY layer on top. This is the model-tiering doctrine applied to runtime: do not rebuild a shipped,
Apache-2.0, on-device substrate (whose RAG-over-1,200-tables is our exact use case, proven in a
shipped title); spend the bespoke effort only where canon-safety demands it — the F1-F10 guardrails,
the vocabulary mask, the strategy-token-never-writes-to-sim rule, and the §17/do-not-invent whitelist,
none of which a general SDK can supply. Run an explicit ACE evaluation pass BEFORE the runtime build
starts (Q3 §3.5 flags this as a real engineering-time scoping decision, not a research question).
STRONGEST OBJECTION — ACE's Agent/Chat/RAG control model may fight the strategy-token architecture's
hard rule that the LLM emits a read-only latent token, never an action and never a sim write-path
(F10). If ACE's autonomous-agent tier hard-wires direct action/dialogue emission, the token
discipline may run against the SDK's grain — and building a shipping console safety-critical layer on
an early (0.5.0) third-party substrate risks inheriting its API churn under a layer that depends on
its exact boundary.
WHAT FLIPS IT — A direct read of ACE's API showing its Agent tier CAN be constrained to read-only
tokens confirms the hybrid; if instead it hard-wires action emission with no read-only seam, the
recommendation flips to "bespoke, ACE as reference architecture only." Confirming the bundled ~3 GB
WEIGHTS are genuinely redistributable for a shipped game (not just the SDK code Apache-2.0) is the
load-bearing pre-condition — a non-redistribution weights clause drops ACE's value to code-only. ACE
reaching a documented, stable 1.0 API strengthens the hybrid.
---
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. ElevenLabs-only (status quo) | Cloud TTS for all voice, behind the §4.4.1 clone-authorization gate | Right pick for character voice; paid tiers retain full output rights, no volume cap, NPC-scale permitted; strong SFX endpoint; consent-gating is vendor-enforced (Q3 §4.1) | Per-call cost at thousands-of-ambient-lines scale is the cost axis |
| B. Kokoro (bulk) + ElevenLabs (principals) | Kokoro-82M Apache-2.0, no cloning by design, local on the 5090, for bulk ambient/crowd/vendor lines; ElevenLabs for hero/named voices | Cuts per-call spend exactly where quality matters least; Kokoro CANNOT clone → zero incremental consent exposure for the bulk tier; ElevenLabs keeps quality + consent-gating for principals (Q3 §4.2) | Two-engine pipeline doubles integration/QC; risk of an audible timbre discontinuity between crowd and named NPCs in-scene |
| C. NeoStack ElevenLabs passthrough as the metering layer | Reach ElevenLabs via NeoStack Studio, billed against NeoStack Cloud allowance | Same vendor, in-editor convenience (Q3 §2.2) | Not a new vendor or a cost win by itself; whether it is cheaper depends on the Cloud-allowance math |
RECOMMENDATION — B, the tiered split. Kokoro (Apache-2.0, no-clone, local on the 5090) for BULK
ambient/crowd/vendor lines; ElevenLabs for HERO/named-character voice behind the existing clone-
authorization gate. This cuts per-call spend at the exact scale where quality matters least, keeps
ElevenLabs' quality and vendor-enforced consent where it matters most, and Kokoro's cannot-clone-by-
design property means zero incremental consent exposure for the bulk tier. Treat NeoStack's
ElevenLabs passthrough (C) as an optional in-editor convenience for the principal tier, not the
metering backbone — direct API is fine. Note for slot-5 alignment: if the runtime layer adopts ACE,
ACE bundles Chatterbox-Turbo TTS on-device — the natural fit for RUNTIME dynamic dialogue, distinct
from this build-time pre-generation pipeline.
STRONGEST OBJECTION — A two-engine voice pipeline doubles the integration/QC surface and risks an
audible timbre discontinuity between Kokoro ambient lines and ElevenLabs named NPCs in the same
scene. Since ElevenLabs' own terms already permit NPC-scale volume with no cap, "ElevenLabs-only" is
the simpler, single-timbre-family answer, and the per-call savings may not clear the immersion cost.
WHAT FLIPS IT — A cost model showing ElevenLabs' Scale/Business tiers ($299/$990) absorb the
projected ambient-line volume within budget flips to A (simpler). An A/B listening test showing
Kokoro's presets are audibly worse next to ElevenLabs in-scene flips to A. Conversely, a projected
ambient-line count large enough to blow the ElevenLabs budget hardens B.
---
The tech_research/ corpus does not cover OCR; the status quo comes from STACK_FACTS_QUESTIONS.md
Q5 and GAP_MAP.md lane 4 (ocrmypdf+tesseract, NOT installed, the book-processing critical-path
blocker). The alternative — modern local VLM-OCR — is a same-day web spot-verify (sourced below),
which the mission authorizes where a decisive fact is missing.
| Alternative | What it is | Pros (cited) | Cons (cited) |
|---|---|---|---|
| A. ocrmypdf + tesseract (status quo) | Classic OCR; adds a text layer to scanned PDFs, --skip-text passes through already-digital PDFs | Mature, free, permissive-licensed, CPU-runnable on the Ally X Pro today; the install-now unblock for the whole book pipeline; deterministic; handles the text-layer-passthrough + clean-scan majority (STACK_FACTS Q5, GAP_MAP lane 4) | No longer SOTA for complex layouts/tables/degraded scans/non-Latin scripts; CPU-bound ~25 pages/min |
| B. Local VLM-OCR (PaddleOCR-VL / DeepSeek-OCR) on the 5090 | Vision-language OCR emitting structured Markdown directly | PaddleOCR-VL-1.6 is the accuracy leader (96.33% OmniDocBench v1.6) and covers 100+ languages incl. CJK/Arabic/non-Latin — the right default for the Egyptian/Tamil/Sámi/Swahili cultural scans; DeepSeek-OCR's MoE (~570M active) gives high bulk throughput; native table extraction; ~120 pages/min GPU-class; a 5090 runs OCR+LLM on one machine | Heavier lift; needs the 5090; overkill for the mostly-digital OJS journal corpus; VLM hallucination risk on degraded pages needs spot-QC |
RECOMMENDATION — A as the install-now critical-path baseline, B as the escalation for the hard scan
remainder — a baseline+escalation tier that mirrors the standing local-7B/3B triage pattern. Install
ocrmypdf+tesseract NOW (it is the book-processing blocker; runs CPU-only before the 5090 lands, and
--skip-text passthrough covers the 438 OJS digital-text exports + clean scans trivially). Reserve a
local VLM-OCR on the 5090 for the SCAN REMAINDER tesseract handles poorly — complex multi-column
academic layouts, tables, degraded scans, and the non-Latin cultural sources where canon fidelity
matters most: PaddleOCR-VL-1.6 as the accuracy/multilingual default, DeepSeek-OCR where bulk
throughput dominates. Route no-text-layer PDFs through a quick classifier so only the genuine scans
hit the VLM leg.
STRONGEST OBJECTION — The inbox is overwhelmingly digital-text journal PDFs (--skip-text
passthrough); the genuine scan-remainder needing VLM-grade OCR may be small enough that standing up,
tuning, and QC-ing a second GPU-bound OCR engine costs more than it saves versus running tesseract on
the whole set and hand-correcting the few bad pages.
WHAT FLIPS IT — Triage counts showing the no-text-layer scan subset is trivially small collapses the
recommendation to A-only. A batch showing tesseract's output on the non-Latin cultural scans is too
error-prone to cite as canon substrate hardens the case for B on that subset specifically. A newer
PaddleOCR-VL / DeepSeek-OCR release changing the accuracy-vs-throughput frontier re-picks the B model
at benchmark-gate time.
Sources (slot 7 spot-verify): [Spheron — Best Open-Source OCR/Document VLMs to Self-Host
2026](https://www.spheron.network/blog/best-open-source-ocr-vlm-self-host-gpu-cloud-2026/);
CodeSOTA — Best OCR Model 2026 ranked benchmarks; [Modal — 8 Top
Open-Source OCR Models Compared](https://modal.com/blog/8-top-open-source-ocr-models-compared);
imagetotable — Best Open Source OCR Tools 2026.
---
verify (slot 4) and an ACE API-boundary + weights-license read (slot 5). Do both before the Ch 2-5
vertical slice, since each can flip its slot's recommendation.
resolution (slot 3) and the local VLM-OCR model pick (slot 7).
book-pipeline blocker) and the Gaea CLI-tier confirmation (slot 1).
via the region-schema→PCG bridge until the EA lands.