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
- Agent quickstart
- What you get
- The character file
- Interfaces
- Hardware and install
- The interpreter
- Known limitations
- Going deeper
Quickstart
Requires Python 3.11+.
pip install "character-factory[generation]"
$ character-factory make "A retired astronomy professor, tweed waistcoat, round spectacles, white beard" -o professor
professor/character.char.json
professor/scene.glb
The first run downloads the model weights (36.4 GB; 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, 12 GB of memory recommended):
Requires Python 3.11+.
On Windows, install torch from https://download.pytorch.org/whl/<cuXXX> before step 1.
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.
The interpreter runs locally by default; 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: 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_00–facs_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
| GPU | NVIDIA, 12 GB of memory recommended |
| Install | 5.6 GB (torch with CUDA) |
| Windows | pip install installs CPU torch; install torch from https://download.pytorch.org/whl/<cuXXX> first |
| 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 |
| 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 reads your description and writes the prompt each component generates from.
Local (default). Runs in-process on your GPU. The weights download on first use; no token, no account.
Endpoint. Point it at any OpenAI-compatible endpoint instead. Configure with one of:
- environment:
CHARACTER_FACTORY_INTERPRETER_ENDPOINT,_MODEL,_API_KEY interpreter.backendsin the cacheconfig.jsonPUT /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.
- No facial hair.
- Clothing is one layer; outer garments are not represented.
- 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/docson 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.
Metadata
Release files for character-factory 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| character_factory-0.1.2.tar.gz | 5.7 MB | With provenance | Details for character_factory-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| character_factory-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for character_factory-0.1.2-py3-none-any.whl |
Total release size: 11.5 MB
Release files / character_factory-0.1.2.tar.gz
| Download URL | character_factory-0.1.2.tar.gz |
|---|---|
| Size | 5.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e288b7fdaeee4852c13fa8e45e216045e66c4b0346eaf59fcb8a6e2a54f9f5e0
|
|
BLAKE2b-256 checksum How to use checksums |
4928c47656ad339cc3dcbca635781148b5b4b9668390a905022cd212435820c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / character_factory-0.1.2-py3-none-any.whl
| Download URL | character_factory-0.1.2-py3-none-any.whl |
|---|---|
| Size | 5.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
51d571ed45451966c338369cd1ca2c653ee003ecd3654bf650229ede98a77740
|
|
BLAKE2b-256 checksum How to use checksums |
93ee61cfdf3407ebf86dcfd09aea11de07cce443f129a1fe0f073e1b674c75d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logSecurity for character-factory 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for character_factory-0.1.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.