Our Art Studio flow has no direct text→3D path — every modeling method is image_to_3d, so text always routes through a concept image first (text → concept-image (SDXL text_to_image) → modeling (image_to_3d)). Eric's ArtPipe exposes shap_e and hunyuan3dtext_to_3d for a prompt-straight-to-mesh route; we don't.
Evidence (current master)
ArtStudioStageMethodOptions.CreateDefault() — modeling methods are triposg (TripoSG), trellis (TripoSG / TrellisMac on Apple Silicon), triposr (TripoSR) — all Action = "image_to_3d". Distinct actions across the whole catalog: image_to_3d, text_to_image, texture_mesh, rig_mesh, animate_rig, export_glb, enrich — no text_to_3d.
ArtPipeStageOrchestrator input-mapping (~L780/L800) feeds a stage the previous stage's image as image_path and mesh as mesh_path — it never routes the asset prompt into modeling. So even if a text_to_3d model were selected, it'd receive no prompt.
ShapE model is installed in dev art_pipe (models/ShapE/artpipe.json present) and also a TextTo3D dir — so this is testable locally once wired; it's a wiring gap, not a missing model in dev.
What it takes (implementation shape)
Method option — add a modeling entry with Action = "text_to_3d" (ShapE; optionally Hunyuan3Dtext_to_3d) to ArtStudioStageMethodOptions + its validation/tests (mirror the triposr entry).
Orchestrator prompt routing — when the resolved Action == "text_to_3d", inject the asset's prompt as the prompt job param and do not require a prior-stage image (image_path). This is the core plumbing change in ArtPipeStageOrchestrator.
Pipeline semantics / UX decision⚠️ — selecting a text_to_3d modeling method makes the concept stage redundant. Decide: (a) auto-skip concept when a text_to_3d modeling method is chosen, or (b) surface a distinct "text→3D" source path in the composer. The git-rail already supports per-stage skip, so (a) is low-friction. Needs Joey's call.
Prod provisioning — ShapE (and any offered text_to_3d model) must be vendored on the prod GPU host at /opt/art_pipe/models/ShapE/, same gap as #455 (TripoSG). Text→3D will fail on prod until then.
Notes
Quality tradeoff worth flagging: Shap-E meshes are lower-fidelity than the image→3D route (TripoSG/Hunyuan). Text→3D is a nice fast/direct option, but the image-first path likely stays the default for quality.
Bounded first step buildable + testable in dev now: (1)+(2) with ShapE and concept auto-skip, gated behind the method option so it's opt-in. Say the word and I'll open the PR once the UX call in (3) is made.
## Gap
Our Art Studio flow has **no direct text→3D path** — every modeling method is `image_to_3d`, so text always routes through a concept image first (text → concept-image (SDXL `text_to_image`) → modeling (`image_to_3d`)). Eric's ArtPipe exposes `shap_e` and `hunyuan3d` `text_to_3d` for a prompt-straight-to-mesh route; we don't.
## Evidence (current master)
- `ArtStudioStageMethodOptions.CreateDefault()` — modeling methods are `triposg` (TripoSG), `trellis` (TripoSG / TrellisMac on Apple Silicon), `triposr` (TripoSR) — **all `Action = "image_to_3d"`**. Distinct actions across the whole catalog: `image_to_3d`, `text_to_image`, `texture_mesh`, `rig_mesh`, `animate_rig`, `export_glb`, `enrich` — **no `text_to_3d`**.
- `ArtPipeStageOrchestrator` input-mapping (~L780/L800) feeds a stage the previous stage's **image** as `image_path` and mesh as `mesh_path` — it never routes the asset **prompt** into modeling. So even if a `text_to_3d` model were selected, it'd receive no prompt.
- `ShapE` model **is installed in dev art_pipe** (`models/ShapE/artpipe.json` present) and also a `TextTo3D` dir — so this is testable locally once wired; it's a wiring gap, not a missing model in dev.
## What it takes (implementation shape)
1. **Method option** — add a modeling entry with `Action = "text_to_3d"` (`ShapE`; optionally `Hunyuan3D` `text_to_3d`) to `ArtStudioStageMethodOptions` + its validation/tests (mirror the `triposr` entry).
2. **Orchestrator prompt routing** — when the resolved `Action == "text_to_3d"`, inject the asset's **prompt** as the `prompt` job param and **do not require** a prior-stage image (`image_path`). This is the core plumbing change in `ArtPipeStageOrchestrator`.
3. **Pipeline semantics / UX decision** ⚠️ — selecting a `text_to_3d` modeling method makes the concept stage redundant. Decide: (a) auto-skip concept when a `text_to_3d` modeling method is chosen, or (b) surface a distinct "text→3D" source path in the composer. The git-rail already supports per-stage `skip`, so (a) is low-friction. **Needs Joey's call.**
3. **Prod provisioning** — `ShapE` (and any offered `text_to_3d` model) must be vendored on the prod GPU host at `/opt/art_pipe/models/ShapE/`, same gap as #455 (TripoSG). Text→3D will fail on prod until then.
## Notes
- Quality tradeoff worth flagging: Shap-E meshes are lower-fidelity than the image→3D route (TripoSG/Hunyuan). Text→3D is a nice fast/direct option, but the image-first path likely stays the default for quality.
- Bounded first step buildable + testable in dev now: (1)+(2) with ShapE and concept auto-skip, gated behind the method option so it's opt-in. Say the word and I'll open the PR once the UX call in (3) is made.
Refs #378 (capability parity), #446 (ArtPipe UI/UX), #455 (prod model provisioning).
Product decision (Joey): text→3D is a distinct path in the composer, not an implicit concept-skip side-effect.
Backend (done): spikersoft-backend PR #181 (merged to master) adds the shap_e modeling method (ShapE / text_to_3d) to the method catalog. While scoping it I confirmed no orchestrator change is needed — ArtPipeStageOrchestrator.BuildJobParamsAsync already injects asset.Prompt into every stage's job params, and a skipped concept simply leaves modeling with no image_path (which text_to_3d doesn't need). So the pipeline already supports text→3D; Shap-E is now selectable/resolvable.
Remaining (frontend, next slice): a distinct "Text → 3D" mode in the Art Studio Generate composer that, on submit, sets concept = skip + modeling method = shap_e. Both concept-skip and per-stage method selection are existing composer machinery, so no further backend work is required for the happy path.
Still gated:
Prod won't actually run it until ShapE is vendored on the SERVER art_pipe mount — same host-provisioning gap as #455 (present in dev art_pipe already).
Hunyuan3D-shape text→3D is out of scope until that model is vendored in our art_pipe fork (only Hunyuan3DPaint is present today).
Progress — backend enablement landed; frontend slice remaining.
**Product decision (Joey):** text→3D is a **distinct path** in the composer, not an implicit concept-skip side-effect.
**Backend (done):** spikersoft-backend PR #181 (merged to `master`) adds the `shap_e` modeling method (`ShapE` / `text_to_3d`) to the method catalog. While scoping it I confirmed **no orchestrator change is needed** — `ArtPipeStageOrchestrator.BuildJobParamsAsync` already injects `asset.Prompt` into every stage's job params, and a skipped concept simply leaves modeling with no `image_path` (which `text_to_3d` doesn't need). So the pipeline already supports text→3D; Shap-E is now selectable/resolvable.
**Remaining (frontend, next slice):** a distinct "Text → 3D" mode in the Art Studio Generate composer that, on submit, sets `concept` = skip + modeling method = `shap_e`. Both concept-skip and per-stage method selection are existing composer machinery, so no further backend work is required for the happy path.
**Still gated:**
- Prod won't actually *run* it until `ShapE` is vendored on the SERVER art_pipe mount — same host-provisioning gap as #455 (present in dev art_pipe already).
- Hunyuan3D-*shape* text→3D is out of scope until that model is vendored in our art_pipe fork (only `Hunyuan3DPaint` is present today).
Text → 3D capability is now code-complete on master (both halves merged):
Backend — spikersoft-backend PR #181: shap_e modeling method (ShapE / text_to_3d). No orchestrator change needed (the prompt was already routed to every stage).
Frontend — spikersoft-angular PR #152 (merged, master 2e628a3): a distinct "Text → 3D" Source option in the Generate composer that skips Concept and pins Modeling to Shap-E, riding the existing skippedStages (#397) + stageMethodSelections (#378) submit fields.
Per Joey's call, it's a distinct path (not an implicit concept-skip), staff-gated, and self-hides until the backend serves shap_e.
Not closing yet — two residuals:
Runtime gating: won't actually produce meshes in prod until ShapE is vendored on the SERVER art_pipe mount (same host-provisioning gap as #455; present in dev art_pipe already, so it works locally).
Hunyuan3D-shape text→3D (from this ticket's title) is still out of scope — our art_pipe fork only vendors Hunyuan3DPaint (texturing), not a Hunyuan3D shape/text→3D backend.
Suggested disposition: if Shap-E satisfies "text→3D capability," this can close once #455-class vendoring lands (or now, tracking the prod-vendoring under #455). If Hunyuan3D text→3D is in-scope, keep open for that model to be vendored. Your call.
**Text → 3D capability is now code-complete on `master`** (both halves merged):
- **Backend** — spikersoft-backend PR #181: `shap_e` modeling method (`ShapE` / `text_to_3d`). No orchestrator change needed (the prompt was already routed to every stage).
- **Frontend** — spikersoft-angular PR #152 (merged, master `2e628a3`): a distinct **"Text → 3D"** Source option in the Generate composer that skips Concept and pins Modeling to Shap-E, riding the existing `skippedStages` (#397) + `stageMethodSelections` (#378) submit fields.
Per Joey's call, it's a **distinct path** (not an implicit concept-skip), staff-gated, and self-hides until the backend serves `shap_e`.
**Not closing yet — two residuals:**
1. **Runtime gating:** won't actually produce meshes in prod until `ShapE` is vendored on the SERVER art_pipe mount (same host-provisioning gap as #455; present in dev art_pipe already, so it works locally).
2. **Hunyuan3D-*shape* text→3D** (from this ticket's title) is still out of scope — our art_pipe fork only vendors `Hunyuan3DPaint` (texturing), not a Hunyuan3D shape/text→3D backend.
**Suggested disposition:** if Shap-E satisfies "text→3D capability," this can close once #455-class vendoring lands (or now, tracking the prod-vendoring under #455). If Hunyuan3D text→3D is in-scope, keep open for that model to be vendored. Your call.
Closing as code-complete — both halves are merged to master (backend PR #181: shap_e modeling method; angular PR #152: distinct staff-gated "Text → 3D" Source option that skips Concept and pins Modeling to Shap-E).
Residuals dispositioned per the previous comment:
Prod vendoring (ShapE on the SERVER art_pipe mount) is host provisioning, not code — now tracked in #455 alongside TripoSG, with the bootstrap steps in the #368 cutover runbook (spikersoft-infrastructure PR #13). The UI self-hides until the backend serves shap_e, so nothing user-visible breaks in the meantime.
Hunyuan3D-shape text→3D stays out of scope — our art_pipe fork only vendors Hunyuan3DPaint (texturing). If a second, higher-fidelity text→3D backend is wanted later, that's a fresh ticket (vendor the model in spikersoft-artpipe + one ArtStudioStageMethodOptions entry; the pipeline plumbing shipped here is backend-agnostic).
Closing as **code-complete** — both halves are merged to master (backend PR #181: `shap_e` modeling method; angular PR #152: distinct staff-gated "Text → 3D" Source option that skips Concept and pins Modeling to Shap-E).
Residuals dispositioned per the previous comment:
1. **Prod vendoring** (ShapE on the SERVER art_pipe mount) is host provisioning, not code — now tracked in **#455** alongside TripoSG, with the bootstrap steps in the #368 cutover runbook (spikersoft-infrastructure PR #13). The UI self-hides until the backend serves `shap_e`, so nothing user-visible breaks in the meantime.
2. **Hunyuan3D-shape text→3D** stays out of scope — our art_pipe fork only vendors `Hunyuan3DPaint` (texturing). If a second, higher-fidelity text→3D backend is wanted later, that's a fresh ticket (vendor the model in spikersoft-artpipe + one `ArtStudioStageMethodOptions` entry; the pipeline plumbing shipped here is backend-agnostic).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Gap
Our Art Studio flow has no direct text→3D path — every modeling method is
image_to_3d, so text always routes through a concept image first (text → concept-image (SDXLtext_to_image) → modeling (image_to_3d)). Eric's ArtPipe exposesshap_eandhunyuan3dtext_to_3dfor a prompt-straight-to-mesh route; we don't.Evidence (current master)
ArtStudioStageMethodOptions.CreateDefault()— modeling methods aretriposg(TripoSG),trellis(TripoSG / TrellisMac on Apple Silicon),triposr(TripoSR) — allAction = "image_to_3d". Distinct actions across the whole catalog:image_to_3d,text_to_image,texture_mesh,rig_mesh,animate_rig,export_glb,enrich— notext_to_3d.ArtPipeStageOrchestratorinput-mapping (~L780/L800) feeds a stage the previous stage's image asimage_pathand mesh asmesh_path— it never routes the asset prompt into modeling. So even if atext_to_3dmodel were selected, it'd receive no prompt.ShapEmodel is installed in dev art_pipe (models/ShapE/artpipe.jsonpresent) and also aTextTo3Ddir — so this is testable locally once wired; it's a wiring gap, not a missing model in dev.What it takes (implementation shape)
Action = "text_to_3d"(ShapE; optionallyHunyuan3Dtext_to_3d) toArtStudioStageMethodOptions+ its validation/tests (mirror thetriposrentry).Action == "text_to_3d", inject the asset's prompt as thepromptjob param and do not require a prior-stage image (image_path). This is the core plumbing change inArtPipeStageOrchestrator.text_to_3dmodeling method makes the concept stage redundant. Decide: (a) auto-skip concept when atext_to_3dmodeling method is chosen, or (b) surface a distinct "text→3D" source path in the composer. The git-rail already supports per-stageskip, so (a) is low-friction. Needs Joey's call.ShapE(and any offeredtext_to_3dmodel) must be vendored on the prod GPU host at/opt/art_pipe/models/ShapE/, same gap as #455 (TripoSG). Text→3D will fail on prod until then.Notes
Refs #378 (capability parity), #446 (ArtPipe UI/UX), #455 (prod model provisioning).
Progress — backend enablement landed; frontend slice remaining.
Product decision (Joey): text→3D is a distinct path in the composer, not an implicit concept-skip side-effect.
Backend (done): spikersoft-backend PR #181 (merged to
master) adds theshap_emodeling method (ShapE/text_to_3d) to the method catalog. While scoping it I confirmed no orchestrator change is needed —ArtPipeStageOrchestrator.BuildJobParamsAsyncalready injectsasset.Promptinto every stage's job params, and a skipped concept simply leaves modeling with noimage_path(whichtext_to_3ddoesn't need). So the pipeline already supports text→3D; Shap-E is now selectable/resolvable.Remaining (frontend, next slice): a distinct "Text → 3D" mode in the Art Studio Generate composer that, on submit, sets
concept= skip + modeling method =shap_e. Both concept-skip and per-stage method selection are existing composer machinery, so no further backend work is required for the happy path.Still gated:
ShapEis vendored on the SERVER art_pipe mount — same host-provisioning gap as #455 (present in dev art_pipe already).Hunyuan3DPaintis present today).Text → 3D capability is now code-complete on
master(both halves merged):shap_emodeling method (ShapE/text_to_3d). No orchestrator change needed (the prompt was already routed to every stage).2e628a3): a distinct "Text → 3D" Source option in the Generate composer that skips Concept and pins Modeling to Shap-E, riding the existingskippedStages(#397) +stageMethodSelections(#378) submit fields.Per Joey's call, it's a distinct path (not an implicit concept-skip), staff-gated, and self-hides until the backend serves
shap_e.Not closing yet — two residuals:
ShapEis vendored on the SERVER art_pipe mount (same host-provisioning gap as #455; present in dev art_pipe already, so it works locally).Hunyuan3DPaint(texturing), not a Hunyuan3D shape/text→3D backend.Suggested disposition: if Shap-E satisfies "text→3D capability," this can close once #455-class vendoring lands (or now, tracking the prod-vendoring under #455). If Hunyuan3D text→3D is in-scope, keep open for that model to be vendored. Your call.
Closing as code-complete — both halves are merged to master (backend PR #181:
shap_emodeling method; angular PR #152: distinct staff-gated "Text → 3D" Source option that skips Concept and pins Modeling to Shap-E).Residuals dispositioned per the previous comment:
shap_e, so nothing user-visible breaks in the meantime.Hunyuan3DPaint(texturing). If a second, higher-fidelity text→3D backend is wanted later, that's a fresh ticket (vendor the model in spikersoft-artpipe + oneArtStudioStageMethodOptionsentry; the pipeline plumbing shipped here is backend-agnostic).