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.1.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.1-py3-none-any.whl (5.7 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: character_factory-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 4fce5242977be8ac7b4503039cf82c53ac563ff3b2c0b11f418df3317ead227a
MD5 dd0a778099259a351528c4a9a6208761
BLAKE2b-256 36fbf28a0b1a4b8d36adba379e4b7a1636582bab7e5cc395a1aad07e358796e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for character_factory-0.1.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for character_factory-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aec95c24f7343e1e3fe7febf822c74f6daf89c22fb5a0e900b401d564d3975fa
MD5 997b06ce40d439257fd34c156b72bbde
BLAKE2b-256 674d290c89948c55e8a8ca12834dd37ba0023e342d38eaadbd2f88c55a7595cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for character_factory-0.1.1-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

This release

0.1.1 This release

2 files

0.1.0

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