Case · generation canvas

Carvingen

A node-based canvas for carvers to branch image concepts, carry references forward, generate 3D meshes, and review VR-ready outputs.

Private/local repo Build, lint, unit, and e2e tests pass Fixture demo captured

Problem

Creative iteration for carving concepts often happens in linear chat: prompt, image, revision, another image, then a separate jump into 3D tooling. The lineage gets lost, references are awkward to reuse, and the workflow does not match how a craftsperson compares branches of an idea.

What I Built

Carvingen turns that into a spatial canvas. Image, Prompt, Mesh, and Viewer nodes let a carver drag in references, generate variations, branch from any output, send a chosen image into Meshy/fal image-to-3D, persist assets locally, and inspect the resulting GLB through a model viewer.

Canvas workflow React Flow graph with prompt, image, mesh, and viewer nodes.
Provider boundary fal image models, Meshy image-to-3D, local job records, and persisted assets.
Operator fit Built for branching craft decisions rather than generic image generation.
Carvingen workflow diagram showing image, prompt, mesh, viewer, jobs, assets, SQLite graph state, and public-safe boundaries.
Sanitized workflow diagram grounded in the local source and docs. It shows the product architecture without exposing private generated images, prompts, provider keys, client files, or live outputs.
Carvingen runtime canvas with fake public-demo image, prompt, mesh, and viewer nodes on an isolated temporary database.
Runtime canvas proof captured from an isolated temporary database. The workflow uses fake public-demo text and a placeholder reference image so the screenshot proves the product surface without exposing private generated media or client prompts.
Carvingen static portfolio demo route showing image, prompt, mesh, and viewer nodes with read-only, no-provider, and fake-data badges.
Static /portfolio-demo proof captured from the source app. The route renders typed fixture data, disables generation controls, and makes no project, job, fal, or asset-persistence API requests.

System Architecture

Technical Decisions

  • Use a graph canvas so iteration history becomes visible and branchable.
  • Separate graph state from jobs and assets so reloads do not lose provider work.
  • Make generation explicit-run to avoid quietly spending money on model calls.
  • Persist provider output locally because remote result URLs are not the durable source of truth.

What This Proves

Carvingen is transformation evidence: domain taste, AI media integration, workflow design, local persistence, and practical product engineering for a real creative business process.