Skip to content
Automation
Skill

/anima-lora-trainer

Train a custom anime LoRA on the ANIMA base model with Citron's local Gradio trainer (kohya sd-scripts), <6GB VRAM, character/style LoRAs; covers setup, dataset prep, training params, and using the result in the anima-base workflow

From plugin
comfyui-mcp
74242 skills4 agents11 commands1 MCP
Install
$ npx -y skills add artokun/comfyui-mcp --skill anima-lora-trainer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/anima-lora-trainer

Context preview

The summary Claude sees to decide when to auto-load this skill.

Train a custom anime LoRA on the ANIMA base model with Citron's local Gradio trainer (kohya sd-scripts), <6GB VRAM, character/style LoRAs; covers setup, dataset prep, training params, and using the result in the anima-base workflow

SKILL.md

anima-lora-trainer.SKILL.md
name: anima-lora-trainer
description: Train a custom anime LoRA on the ANIMA base model with Citron's local Gradio trainer (kohya sd-scripts), <6GB VRAM, character/style LoRAs; covers setup, dataset prep, training params, and using the result in the anima-base workflow
globs:
  - "**/*.py"
  - "**/*.toml"
  - "**/*.json"

Citron Anima LoRA Trainer

Overview

Citron's Anima LoRA Trainer (`app.py`, titled "Citron's Anima LoRA Trainer" in the UI) is a local Gradio UI for training LoRA adapters on the Anima diffusion model using kohya-ss/sd-scripts. It trains on ~6GB VRAM with the default settings, the same low-VRAM profile as Anima generation.

  • Created by Citron Legacy; UI repo: `https://github.com/citronlegacy/citron-anima-lora-trainer-ui`. The Aitrepreneur adaptive installers clone the fork `https://github.com/aitrepreneur/citron-anima-lora-trainer-ui`.
  • Training backend: `kohya-ss/sd-scripts` (`https://github.com/kohya-ss/sd-scripts`), launched via `accelerate launch`.
  • Trains LoRAs for Anima DiT (Cosmos-2B). Uses Anima's own components: DiT weights + Qwen3-0.6B text encoder + Qwen-Image VAE.
  • Output: a standard `.safetensors` LoRA usable directly in the anima-base ComfyUI workflow.

> The network module is `networks.lora_anima` and the training script is `sd-scripts/anima_train_network.py` (an Anima-specific kohya script the installer expects). Confirm these exist after the installer's `git clone` of sd-scripts. `app.py` references them, but they are pulled from the upstream repo at install time.

Setup

Windows

Run `CITRON_ANIMA_LORA_TRAINER-V2.bat`. It: 1. Ensures Git and Python 3.10 are present (via winget if missing). 2. Detects the NVIDIA GPU/driver and picks a matching PyTorch CUDA wheel automatically:

  • Blackwell (RTX 50xx) → cu128, bf16
  • Modern (RTX 20/30/40, etc.) → cu128/cu126/cu118 by driver, bf16 (fp16 on Turing)
  • Pascal/Maxwell (GTX 10/9xx) → cu126/cu118, fp16
  • Kepler/older → unsupported

3. Clones the UI repo, patches `app.py` defaults (`base_model` → `anima-preview3-base`, `mixed_precision` → detected value), writes `app_configs/accelerate_gpu.yaml`. 4. Creates `.venv`, installs PyTorch, clones and installs `sd-scripts`, installs app `requirements.txt`. 5. Downloads models into `models/anima/{dit,text_encoder,vae}/` from `https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/...`:

  • `dit/anima-base-v1.0.safetensors` (~4GB)
  • `text_encoder/qwen_3_06b_base.safetensors` (~1.19GB)
  • `vae/qwen_image_vae.safetensors` (~254MB)

6. Writes and launches `run_anima_base_windows.bat`.

RunPod / Linux

Run `CITRON_ANIMA_LORA_TRAINER-RUNPOD-V2.sh`. Same flow into `/workspace/citron-anima-lora-trainer-ui`; it patches `server_name` to `0.0.0.0`. Expose HTTP port 7860 and open `Connect → HTTP Service 7860` (or `https://${RUNPOD_POD_ID}-7860.proxy.runpod.net`).

Launch

`app.py` runs Gradio on `0.0.0.0:7860`, so open http://127.0.0.1:7860. Re-launch later with `run_anima_base_windows.bat` (Win) or `./run_anima_base_runpod.sh` (RunPod). The DiT base model auto-downloads on the first "Start Training" if not already present (uses `wget`).

Dataset preparation

A flat folder of images, each with a matching `.txt` caption of the same basename (image-side captioning, kohya style):

my_dataset/
  001.png      001.txt
  002.jpg      002.txt
  ...
  • Accepted images: `.jpg .jpeg .png .webp .bmp .gif`.
  • Captions are Danbooru-style tags / natural language (same prompt style as Anima generation). The trainer warns about any image missing a `.txt`.
  • `caption_extension = .txt`; `shuffle_caption = false`; `caption_dropout_rate` default `0.1` (set per dataset).

The UI tab "Training" takes Image Directory (the flat folder above) and Output Directory (where the LoRA is saved). "Configure Training" validates the dataset, prints a step estimate (`steps_per_epoch = ceil(images × repeats / (batch × grad_accum))`, `total = spe × epochs`), then writes two TOMLs into `configs/`.

Key training parameters (defaults from `app.py`)

Basic

| Param | Default | Notes | |-------|---------|-------| | project_name | `my_lora` | also the `output_name` of the LoRA | | base_model | `anima-base-v1.0` | dropdown: `anima-preview`, `anima-preview2`, `anima-preview3-base`, `anima-base-v1.0` (installer patches default to `anima-preview3-base`) | | network_dim | `32` | LoRA rank | | network_alpha | `32` | | | learning_rate | `1e-4` | | | max_train_epochs | `10` | | | resolution | `768` | px; dataset bucketing 256–4096, step 64 | | repeats | `10` | per-image repeats | | caption_dropout | `0.1` | |

Advanced

| Param | Default | Notes | |-------|---------|-------| | optimizer_type | `AdamW8bit` | choices: AdamW8bit, AdamW, Lion, SGD, Prodigy; `optimizer_args = ["weight_decay=0.1", "betas=[0.9, 0.99]"]` | | lr_scheduler | `cosine_with_restarts` | + cosine, linear, constant, constant_with_warmup, polynomial | | lr_scheduler_num_cycles | `1` | | | lr_warmup_steps | `100` | | | train_batch_size | `1` | | | gradient_accumulation_steps | `1` | | | max_grad_norm | `1.0` | | | save_every_n_epochs | `1` | | | save_last_n_epochs | `4` | keep last N checkpoints | | mixed_precision | `bf16` | installer overrides to fp16 on older GPUs | | gradient_checkpointing | `true` | memory saver | | seed | `42` | | | noise_offset | `0.03` | | | multires_noise_discount | `0.3` | | | timestep_sampling | `sigmoid` | + uniform, logit_normal | | discrete_flow_shift | `1.0` | flow-matching shift | | cache_latents | `true` | | | cache_text_encoder_outputs | `true` | | | vae_chunk_size | `64` | | | vae_disable_cache | `true` | | | num_cpu_threads_per_process | `1` | |

Fixed in the generated training TOML (not exposed): `network_module = networks.lora_anima`, `network_train_unet_only = true`, `qwen3_max_token_length = 512`, `t5_max_token_length = 512`, `save_model_as = safetensors`, `save_precision = bf16` (fp16 on older GPUs).

Generated config files

`configs/<project>_tr

Read more
Ships withcomfyui-mcp

This project is no longer maintained. ComfyUI now ships official agent and MCP tooling — Comfy Agent and Comfy MCP — built and supported by the Comfy-Org team with deeper integration than a community project can match.

Get the whole plugin

Other skills on comfyui-mcp.