| --- |
| title: Anima V1 CPU Demo |
| emoji: 🎨 |
| colorFrom: blue |
| colorTo: purple |
| sdk: gradio |
| sdk_version: 5.44.1 |
| app_file: app.py |
| pinned: false |
| license: other |
| models: |
| - circlestone-labs/Anima |
| tags: |
| - text-to-image |
| - anima |
| - zerogpu |
| - gradio |
| - anime |
| --- |
| |
| # Anima V1 CPU Demo |
|
|
| A Hugging Face Gradio Space demo for the **Anima V1 base release**. |
|
|
| This demo intentionally **does not** load an old Preview Diffusers repo. It uses the current V1 split files from `circlestone-labs/Anima`: |
|
|
| - `split_files/diffusion_models/anima-base-v1.0.safetensors` |
| - `split_files/text_encoders/qwen_3_06b_base.safetensors` |
| - `split_files/vae/qwen_image_vae.safetensors` |
|
|
| It uses `DiffSynth-Studio` for the actual Anima single-file loader because the upstream Anima repo is published in ComfyUI / Diffusion Single File format rather than as a native Diffusers `model_index.json` pipeline. |
|
|
| ## Deploy |
|
|
| 1. Create a new Hugging Face Space. |
| 2. Choose **Gradio** as the SDK. |
| 3. Upload these files. |
| 4. In **Settings → Hardware**, select **CPU**. |
| 5. Optional but recommended: enable persistent storage so the model download is cached between restarts. |
|
|
| ## Startup behavior |
|
|
| The app downloads the required model/tokenizer files from **Hugging Face Hub** during application startup with `huggingface_hub`: |
|
|
| - Anima diffusion model, text encoder, and VAE from `circlestone-labs/Anima` |
| - Qwen tokenizer files from `Qwen/Qwen3-0.6B` |
| - T5 tokenizer files from the public `google/t5-v1_1-xxl` repo |
|
|
| The app then tries to load the Anima pipeline at module startup. This matches Hugging Face ZeroGPU guidance: GPU functions are decorated with `@spaces.GPU`, but large models should still be placed on `cuda` at the root module level rather than lazy-loaded inside the generation function. After a successful startup load, **Generate** reuses the same in-memory pipeline for that running Space process. If the startup load fails, **Generate** retries as a fallback and then reuses the loaded pipeline after a successful load. |
|
|
| ## Why it should not download from ModelScope |
|
|
| DiffSynth-Studio defaults to ModelScope for remote model resolution. This demo sets `DIFFSYNTH_DOWNLOAD_SOURCE=huggingface`, pre-downloads assets with `huggingface_hub`, validates the local tokenizer directories, and passes local file paths to `ModelConfig(path=...)`, so generation should not trigger ModelScope downloads. |
|
|
| The T5 tokenizer no longer depends on the gated `stabilityai/stable-diffusion-3.5-large` repo or any SD3.5 mirror. If you override `ANIMA_T5_TOKENIZER_ID` to a mirror that does not contain usable tokenizer files, the app falls back to `google/t5-v1_1-xxl`. |
|
|
| The app stores files under `/data/models/anima-v1` when persistent storage is writable, otherwise `/tmp/models/anima-v1`. |
|
|
| ## Configuration |
|
|
| Environment variables: |
|
|
| | Variable | Default | |
| |---|---| |
| | `ANIMA_MODEL_ID` | `circlestone-labs/Anima` | |
| | `ANIMA_DIFFUSION_FILE` | `split_files/diffusion_models/anima-base-v1.0.safetensors` | |
| | `ANIMA_TEXT_ENCODER_FILE` | `split_files/text_encoders/qwen_3_06b_base.safetensors` | |
| | `ANIMA_VAE_FILE` | `split_files/vae/qwen_image_vae.safetensors` | |
| | `ANIMA_QWEN_TOKENIZER_ID` | `Qwen/Qwen3-0.6B` | |
| | `ANIMA_T5_TOKENIZER_ID` | `google/t5-v1_1-xxl` | |
| | `ANIMA_T5_TOKENIZER_SUBFOLDER` | unset / empty | |
| | `ANIMA_T5_TOKENIZER_FALLBACK_ID` | `google/t5-v1_1-xxl` | |
| | `ANIMA_LOCAL_MODEL_DIR` | `/data/models/anima-v1`, fallback `/tmp/models/anima-v1` | |
| | `ANIMA_LOAD_AT_STARTUP` | `1` | |
| | `ANIMA_VRAM_LIMIT_GB` | unset | |
|
|
| ## Why not `DiffusionPipeline.from_pretrained(...)`? |
| |
| The upstream V1 repo provides single-file ComfyUI-style weights, not a native Diffusers folder with `model_index.json`, split component configs, and already-converted component state dicts. A pure Diffusers Space becomes straightforward once a V1 Diffusers conversion exists. Until then, this Space avoids stale preview repos and loads the V1 files directly. |
|
|
| ## License |
|
|
| The Anima model is under the CircleStone Labs Non-Commercial License and is also subject to NVIDIA's Open Model License Agreement insofar as it applies to derivative models. Review the upstream model card before deploying or sharing outputs. |