Anima JP-extended

Anima's T5-side tokenizer has no ids for Japanese: a Japanese string in the prompt becomes <unk>, so the model cannot be asked to draw it. This checkpoint is base Anima (anima-base-v1.0) with 1,573 trained text-embedding rows added (163 kana, 1,410 kanji), so a Japanese string in the prompt is drawn as that string. The kanji with a row cover 96.7 % of kanji occurrences in Manga109-s dialogue.

The DiT weights are base Anima's, unchanged. English prompts tokenize exactly as before.

Want the rows alone (another Anima derivative, your own loader, diffusers)? They are the anima_cjk_vocab_pack_jp_v1 pack in sorryhyun/anima-vocab-pack-cjk. This file is that pack merged into the base DiT.

ComfyUI

  1. Install ComfyUI-Anima_lora-Adapter โ‰ฅ 3.15.0, from ComfyUI-Manager or git clone https://github.com/sorryhyun/ComfyUI-Anima_lora-Adapter into ComfyUI/custom_nodes/.
  2. Put anima_jp_extended.safetensors in ComfyUI/models/diffusion_models/. The text encoder and VAE are Anima's stock files: qwen_3_06b_base.safetensors in models/text_encoders/ and qwen_image_vae.safetensors in models/vae/.
  3. Load it with Anima Merged Loader (CJK) (AnimaMergedLoader) in place of the UNet and CLIP loaders. It takes the stock Qwen3 text encoder and returns a MODEL and a CLIP that route Japanese to the rows. Wire both outputs onward.
  4. Type Japanese directly in the prompt.

A minimal workflow: workflows/anima_jp_extended.json (drag it into ComfyUI).

example output with its workflow embedded

Or drag this image into ComfyUI: it carries its workflow (AnimaMergedLoader โ†’ KSampler, stock settings). Its VAE node is VAELoaderKJ from KJNodes; swap it for the stock Load VAE if you don't have KJNodes.


  • A stock UNet loader also loads this file, as plain Anima (no Japanese). It logs one unet unexpected line for the extra rows.
  • Any Anima LoRA stacks on it as is: the rows touch no LoRA-adapted weight.

How to write the prompt

Japanese in a prompt is text to draw in the image. Put the string in double quotes inside an English clause and keep the rest of the prompt in English tags. This is the caption grammar the rows were trained under:

1girl, solo, speech bubble. Text reads as "ไฝ•่จ€ใฃใฆใ‚‹ใฎ?".
1girl, solo, speech bubble, japanese text. She is saying "ใŠใฏใ‚ˆใ†!".

The japanese text tag is optional. Japanese written as tags (็Œซ่€ณ, ้Š€้ซช) is not the intended use: write those in English (cat ears, silver hair).

anima_lora

anima_lora does not read this file: it uses the pack with the stock base DiT. make download-models (or make download-model vocab_pack) fetches anima_cjk_vocab_pack_jp_v1, and configs/base.toml's vocab_pack points at it, so inference, text-encoder caching and LoRA training all use it.

Upgrading from preview51: run make preprocess-te ARGS=--overwrite for datasets with Japanese captions. Text-encoder caches are keyed on caption mtime and do not notice a pack change.

Base vs JP-extended

Same prompt, same seeds (1โ€“3 of a 0โ€“3 run; seed 0 left out for space), same sampler; the only change is whether the jp_v1 rows are loaded. The prompt is a 2-girl bar scene ending in a text clause.

Japanese in the prompt โ€” โ€ฆ Japanese text reads as "ๆถ™ใŒๅ‡บใ‚‹". Base Anima sees <unk> for the string and draws Japanese-looking text unrelated to it. With the rows it draws ๆถ™ใŒๅ‡บใ‚‹: not always letter-perfect (ๆถ™ is the weakest glyph here), but the string the prompt asked for.

Japanese prompt: base vs JP-extended

No Japanese in the prompt โ€” the same caption with English text reads as "namida ga deru". An English prompt touches no row, so the two rows are the same picture. The small pixel differences come from the ร—2 upscaler, whose noise seed differed between runs; at the base resolution they agree within 3/255.

English prompt: base vs JP-extended

Rendered in ComfyUI with base Anima + the anima_cjk_vocab_pack_jp_v1 pack (AnimaVocabPackLoader), which gives Japanese prompts the same encoding as this merged file. Sampler: the author's Spectrum sampler node (er_sde_cns, 30 steps, CFG 4), then a ResShift ร—2 upscale. The LoRA and turbo grids below use the same node.

LoRAs trained with the rows

anima_lora encodes training captions through the pack, so a LoRA can be trained on data whose captions quote Japanese text, and the rows are what the LoRA learns against. A LoRA itself carries no rows: load it on this file (or on base Anima + the pack) and Japanese in the prompt still routes to them.

Below: a style LoRA trained in anima_lora with jp_v1 loaded, on base Anima + the pack. This prompt has no Japanese string (seeds 5โ€“7); it shows the LoRA and the rows load together.

style LoRA trained with jp_v1

Other Anima derivatives

The rows live in the T5-side embedding table (llm_adapter.embed), not in the DiT blocks. A derivative that keeps base Anima's embedding table can probably take them โ€” load the pack onto its UNet with AnimaVocabPackLoader (this file is the pack merged into base Anima, so it is not the way to get the rows onto another checkpoint). It is not guaranteed: a derivative that fine-tuned the adapter may read the rows differently.

One that works: circlestone-labs' official anima-turbo-v1.1 (split_files/diffusion_models/anima-turbo-v1.1.safetensors). Its embedding table is base Anima's, bit for bit; its adapter blocks are fine-tuned. With the jp_v1 pack loaded, 8 steps, CFG 1, it draws the string in each seed, loosely (on seed 1 only as a label on the box).

anima-turbo-v1.1 with the jp_v1 pack

Limitations

  • Long lines are rarely exact. Lines of 10+ glyphs seldom come out letter for letter. Results depend on the seed.
  • Horizontal text is unmeasured. It is 6.8 % of the training items, and no read covers it.
  • Kanji without a row draw as noise. 3.3 % of kanji occurrences in Manga109-s dialogue have no row.
  • Text is drawn about a third smaller than with the previous pack (preview51).
  • It cannot exceed the base model. The rows give prompts a way to reach glyphs Anima already knows; they cannot draw text more accurately or more cleanly than Anima itself.
  • Korean and Chinese map to tag rows; rendering them is not trained.
  • Trained and measured on anima-base-v1.0. On other derivatives it is eyeballed only (anima-turbo-v1.1, above).

License and credits

Base model: circlestone-labs/Anima, under its non-commercial license. This file is a derivative of it and carries the same terms.

Dialogue lines for training: Manga109-s.

How the rows were found and trained: Waking Anima up to read Japanese.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for sorryhyun/anima-jp-extended

Finetuned
(111)
this model