Skip to main content

Character Factory

A free, open-source, locally-run text-to-3D character pipeline. Prompt in, rigged character out.

Website · Hugging Face · PyPI · Unity package

Quickstart

pip install "character-factory[generation]"
$ character-factory make "A retired astronomy professor, tweed waistcoat, round spectacles, white beard" -o professor
create      77.6 s
bake       134.3 s
assemble     5.2 s
professor/character.char.json
professor/scene.glb

Timings: one RTX 3090, weights on disk, default local interpreter.

The first run downloads 36.4 GB of model weights (17.1 GB with an endpoint interpreter). After that, generation is local and offline.

Agent quickstart

Paste into Claude Code, Codex, or any coding agent.

Set up Character Factory (NVIDIA GPU, 24 GB):
1. pip install "character-factory[generation,server]"
2. character-factory make "<description>" -o <dir>
   Writes <dir>/character.char.json and <dir>/scene.glb; stdout is exactly those two paths.
   Interpreter: Qwen3.5-9B, local by default (Apache-2.0, ungated — no token, no account).
   First run downloads 36.4 GB of model weights.
Optional:
- MCP: pip install "character-factory[mcp]"; add `character-factory mcp` to the agent's MCP config.
- Unity 6000.0+: character-factory serve; add
  "com.character-factory.unity": "https://github.com/character-factory/character-factory-unity.git"
  to Packages/manifest.json; then unity cmd cf-create --prompt "<description>" --walking true --json
  and unity cmd cf-verify --target "<name>" --json.
- Endpoint interpreter (faster): set CHARACTER_FACTORY_INTERPRETER_ENDPOINT, _MODEL, _API_KEY.

Or:

Build a character-driven game using https://characterfactory.ai

No additional API key or account required.

What you get

Two files per character:

  • character.char.json — body parameters, texture recipes, a hair description, and provenance. A few KB.
  • scene.glb — a rigged, skinned glTF: a skin-only body, garment and shoe shells with their own materials, hair with albedo and normal maps, and a modeled mouth (teeth, gums, tongue, inner cavity).
Property Every character
Triangles ~15–50k, hair-dependent
Textures 1024² per surface — skin, eyes, garment, shoes; hair albedo + normal
Rig 127 joints, linear-blend skinning; 54-bone Unity Humanoid map in the manifest
Facial animation 72 morph targets (facs_00facs_71) + jaw joint
Idle a baked breathing clip, Generic or Humanoid
Materials / draw calls 10–11 primitives
Alpha passes 0 — fully opaque
GLB size ~9 MB; ~4 MB with --compress

Compression: --compress web writes scene.web.glb with WebP textures; --compress unity writes scene.unity.glb with JPEG textures for glTFast and other loaders without WebP.

The character file

character.char.json is the character; the GLB is built from it. Trimmed from the SPEC.md §3 example:

{
  "format": "character-factory/character",
  "schema_version": "0.1",
  "body": {
    "rig": "mhr-lod1@1.0",
    "identity": ["…"],
    "proportions": { "leg_length": 0.24, "hip_width": -0.06 },
    "resting_expression": ["…"]
  },
  "textures": {
    "garment": {
      "component": "make-garment",
      "component_version": "0.1.0",
      "prompt": "teal running vest and black shorts, white piping",
      "seed": 41004
    },
    "…": "…"
  },
  "hair": { "family": "crop", "color": { "family": "dark_brown" }, "…": "…" },
  "provenance": {
    "components": { "make-figure": { "version": "0.1.1" }, "make-garment": { "version": "0.1.0" }, "…": "…" },
    "…": "…"
  }
}

Edit the file and resubmit it — POST /v0/characters with {"character": …}, or bake then assemble in Python. Assembly is deterministic. The format is specified in SPEC.md.

Interfaces

CLI. make (--seed, --backend, --turbo, --compress web|unity), validate, assemble (character file → GLB, no GPU), compress, interpret, preflight.

Server + browser UI. pip install "character-factory[server]", then character-factory serve: the /v0 HTTP API and a gallery UI on 127.0.0.1:8400 (--host 0.0.0.0 for other machines). /v0/docs documents the API.

MCP. pip install "character-factory[mcp]", then add character-factory mcp to your agent's MCP config. Tools on stdio: create_character, get_job, get_character, list_components.

Unity (6000.0+). Run character-factory serve, add

"com.character-factory.unity": "https://github.com/character-factory/character-factory-unity.git"

to Packages/manifest.json, then:

unity cmd cf-create --prompt "<description>" --walking true --json
unity cmd cf-verify --target "<scene-object-name>" --json

See the package README.

Python.

from character_factory import Character
c = Character.load("examples/characters/freediver.char.json")
print(c.content_id, c.rig, sorted(c.textures))

Hardware and install

Measured on one RTX 3090; details in ARCHITECTURE.md §6.

Size / time
Install 5.6 GB (torch with CUDA)
Weights, first use 36.4 GB: 19.3 GB interpreter + 16.0 GB base image model + 1.1 GB components. 17.1 GB with an endpoint interpreter
Generation, 24 GB card bf16: bake 17.4 GiB, 137 s. Whole character 3 min 38 s with the local interpreter
Generation, 12 GB card nf4 (textures.quantization in the cache config): bake 8.9 GiB, 267 s, with an endpoint interpreter
Generation, 8 GB card not supported
Assembly and consumption no GPU — character file → GLB runs on CPU, including macOS

character-factory preflight checks the install, CUDA build, and driver. make runs it first.

The interpreter

The interpreter is the language model that turns your description into each component's prompt.

Local (default). The registry's interpreter component names Qwen3.5-9B (Apache-2.0, ungated — no token, no account). 19.3 GB to download, 16.9 GiB of VRAM, 78 s per description on the 3090.

Endpoint (faster, better prompts). Point it at any OpenAI-compatible endpoint. A hosted frontier model (an OpenAI GPT-5.6-class model in our bench) takes 14 s and writes better prompts. Configure with one of:

  • environment: CHARACTER_FACTORY_INTERPRETER_ENDPOINT, _MODEL, _API_KEY
  • interpreter.backends in the cache config.json
  • PUT /v0/interpreters/{alias} on a running server

Known limitations (v0.1)

  • Generated textures are albedo only, no normal or material maps.
  • The initial hair provider is a finite set of procedural components.
  • Garment textures may have warped details and edge artifacts.
  • Garment and shoe geometry are a single layer shell separated from the body.
  • Spec and architecture are an initial draft and will change rapidly.

Trust boundary

The server binds to 127.0.0.1 and does not authenticate. Do not expose it to the public internet.

Going deeper

  • SPEC.md — the character format.
  • ARCHITECTURE.md — the system.
  • /v0/docs on a running server — the HTTP API.

Built on

MHR (Meta, Apache-2.0), FLUX.2 Klein 4B (Black Forest Labs, Apache-2.0), Qwen3.5-9B (Apache-2.0), UnityEyes2 (MIT), GNM (Google, Apache-2.0). See NOTICE.

Status and license

v0.1. File issues at github.com/character-factory/character-factory/issues.

Apache-2.0 (LICENSE, NOTICE).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

character_factory-0.1.0.tar.gz (5.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

character_factory-0.1.0-py3-none-any.whl (5.7 MB view details)

Uploaded Python 3

File details

Details for the file character_factory-0.1.0.tar.gz.

File metadata

  • Download URL: character_factory-0.1.0.tar.gz
  • Upload date:
  • Size: 5.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for character_factory-0.1.0.tar.gz
Algorithm Hash digest
SHA256 efe4ca0d3f4b58cbec402ff1955dd8325724eb4ba1741098802676a2d7f78021
MD5 267ccc1bdbbd9626d5f70edb15d58dee
BLAKE2b-256 0ab44c42428d9bc813f5f877f8dff167500b4359a197541ea3050fcb7542a999

See more details on using hashes here.

Provenance

The following attestation bundles were made for character_factory-0.1.0.tar.gz:

Publisher: release.yml on character-factory/character-factory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file character_factory-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for character_factory-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 549d1c21fc55006f0d7f9699fc2421d75bda83cecf0832272b8b6d7e34493b77
MD5 adebc7929e529d3883510661898012cc
BLAKE2b-256 c1760f4071461ffa50a31b9a80cd69113ea7aec0ea216b5b71c7e597a893eba4

See more details on using hashes here.

Provenance

The following attestation bundles were made for character_factory-0.1.0-py3-none-any.whl:

Publisher: release.yml on character-factory/character-factory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page