ALTERNATIVES_MATRIX.md

pipelines/ALTERNATIVES_MATRIX.md

Pipeline Alternatives Matrix — the seven live slots [2026-07-15]

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.

Fixed constraints these recommendations are decided under (Josh-ruled, not re-litigated here)

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.

Executive summary — one line per slot

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.

---

Slot 1 — Terrain / world authoring

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.

AlternativeWhat it isPros (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 CoreFree, 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 importThe 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 TerrainTrue XYZ-mesh terrain (overhangs/caves/arches), variable resolution, non-destructive modifier stack, native PCG/Nanite/WP integrationHandles 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-piecesFamily-B world models that export real mesh (+ splats): Marble FBX/glTF, HY-World mesh/3DGSOnly 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-onlyLocal camera-controlled video → (separate) Postshot reconstruction → UE splatSANA-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.

---

Slot 2 — The world-model slot generally

AlternativeWhat it isPros (cited)Cons (cited)
A. Ignore-for-now (status quo)Treat the whole category as track-for-awareness; rely on region-schema→PCG + hand-authoringThe 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 aidSANA-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 + splatsThe 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-UE6Epic-native prompt scene-population; Claude a first-class MCP integration; furnishes a room then expands to a city, fully editableExactly 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.

---

Slot 3 — 3D asset generation (per category)

AlternativeWhat it isPros (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 QCBest 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) + ElevenLabsTripo'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 landPixal3D 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.

---

Slot 4 — The editor-agent seam

AlternativeWhat it isPros (cited)Cons (cited)
A. NeoStack (owned; status quo)Betide Studio Agent Integration Kit; Claude-Code-native via ACP or MCP; 27+ tools / 150+ opsConfirmed 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 ClaudeFirst-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 onlyEmbedded Python 3.11.8, headless commandlets, RunUAT, Remote Control REST/WSDeterministic, 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) fallbackSelf-hosted MCP server, Claude-targeted, 2,034 stars, actively maintained, freeBest-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.

---

Slot 5 — The runtime generative layer

AlternativeWhat it isPros (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 ladderRigorous 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 SDKShipped 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++ pluginsReal, 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 designACE for on-device inference / API split / UE5 plugin / TTS-ASR; the bespoke strategy-token + canon-graph guardrails layered on topEliminates 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.

---

Slot 6 — Voice at NPC scale

AlternativeWhat it isPros (cited)Cons (cited)
A. ElevenLabs-only (status quo)Cloud TTS for all voice, behind the §4.4.1 clone-authorization gateRight 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 voicesCuts 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 layerReach ElevenLabs via NeoStack Studio, billed against NeoStack Cloud allowanceSame 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.

---

Slot 7 — The book-processing OCR leg

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.

AlternativeWhat it isPros (cited)Cons (cited)
A. ocrmypdf + tesseract (status quo)Classic OCR; adds a text layer to scanned PDFs, --skip-text passes through already-digital PDFsMature, 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 5090Vision-language OCR emitting structured Markdown directlyPaddleOCR-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 machineHeavier 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.

---

Cross-slot sequencing (the path)

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.

Generated by harness/site/structure_site.py — the URL path is the repo path. review root