--- library_name: karume pipeline_tag: text-to-image base_model: circlestone-labs/Anima-Base-v1.0-Diffusers base_model_relation: quantized license: other license_name: circlestone-labs-non-commercial-license license_link: https://huggingface.co/circlestone-labs/Anima/blob/main/LICENSE.md tags: - text-to-image - webgpu --- # Anima Turbo — Karume ## What is this A distribution that bakes **Anima Turbo LoRA v0.2** into [circlestone-labs/Anima-Base-v1.0-Diffusers](https://huggingface.co/circlestone-labs/Anima-Base-v1.0-Diffusers) and converts it into the WebGPU inference runtime **Karume**'s container format (a single safetensors file = weights + a graph JSON embedded in `__metadata__`). Runs as-is in the browser and in Deno. - A few-step distillation (from the LoRA) tuned for **8 steps / guidance 1**. - Not readable by diffusers (it's a different container with an embedded graph); the reader is a pipeline that implements `anima/1`. - Exporter used for the conversion: `karume/0.1.0`. The distribution manifest is `karume.json` (`karume/1`). ## Baked-in LoRA Folded into the weights — not distributed as a separate file. - **Name**: Anima Turbo LoRA v0.2 - **Author**: circlestone_labs (same author as the base model) - **Source**: https://civitai.com/models/2560840?modelVersionId=2979642 - **File**: `anima-turbo-lora-v0.2.safetensors` - **sha256**: `1b55e40bdb1d0e5a78cb498f245fccfdaae97823265db957d2aabdcf4cd3caf1` Permissions listed on the source page (as of retrieval): - `allowNoCredit`: true - `allowCommercialUse`: Image / RentCivit / Rent - `allowDerivatives`: true - `allowDifferentLicense`: true ## Files | Key | Variant | Path | Size | sha256 | | ---- | ------- | ---- | ------ | ------ | | `text_encoder` | — | `text_encoder/model.safetensors` | 1.11 GiB (1,194,225,572 B) | `79dc23f2d45c8f3e…` | | `text_conditioner` | — | `text_conditioner/model.safetensors` | 257.34 MiB (269,838,156 B) | `a704ba27c865cd4e…` | | `transformer` | f16 | `transformer/model.f16.safetensors` | 3.64 GiB (3,913,665,620 B) | `57c8a08be56c6fea…` | | `transformer` | i8 | `transformer/model.i8.safetensors` | 1.83 GiB (1,962,558,660 B) | `df3cc9b539f30670…` | | `transformer.rope_base` | f16 / i8 | `transformer/rope_base.safetensors` | 64.42 KiB (65,968 B) | `42db9a3fc796c45f…` | | `vae_decoder` | — | `vae_decoder/model.safetensors` | 48.37 MiB (50,720,688 B) | `b50b65a028a8d108…` | | `tokenizer` | — | `tokenizer/qwen2-tokenizer.json` | 3.35 MiB (3,514,619 B) | `0a7d6057ac8a2fe4…` | | `tokenizer_2` | — | `tokenizer_2/t5-tokenizer.json` | 1.04 MiB (1,093,419 B) | `f86dfe21b12a175a…` | Only the first 16 hex digits of the sha256 are shown (the full value and `size` live in `karume.json` — verify against that at the fetch layer). Variant labels use the runtime's **storage dtype vocabulary** (`f16` / `i8`), not the `fp16` spelling common elsewhere in the ecosystem. ## Presets | Preset | Weights | Compute | | ------ | ---- | ---- | | `f16` | `transformer` = `f16` | — | | `i8` | `transformer` = `i8` | — | | `w8a8` | `transformer` = `i8` | `linearCompute` = `i8a8` | | `w8a8-a8` | `transformer` = `i8` | `linearCompute` = `i8a8` / `attentionCompute` = `i8a8` | | `w8a8-s16` (default) | `transformer` = `i8` | `linearCompute` = `i8a8` / `attentionCompute` = `i8a8` / `attentionScoreStorage` = `f16` | | `f16-c16` | `transformer` = `f16` | `linearCompute` = `f16` / `attentionCompute` = `f16` / requires `shaderF16` | If no preset is given, it runs as `w8a8-s16` (the distribution's recommended default). ## Usage ```ts import { AnimaPipeline, encodePng } from "jsr:@karume/models"; // The preset defaults to w8a8-s16. using pipeline = await AnimaPipeline.fromPretrained("hdae/anima-turbo"); const image = await pipeline.generate({ prompt: "1girl, solo, long hair, blue eyes, school uniform, masterpiece", seed: 42, }); const png = await encodePng(image.data, image.width, image.height); await Deno.writeFile("anima.png", png); ``` Weights are fetched once and cached (verified against `karume.json`'s `size` / `sha256`). You can also load from a local directory (`AnimaPipeline.fromAssets`). ## Defaults Any knob not passed to `generate()` is filled in from the manifest's defaults. - **steps**: 8 - **guidanceScale**: 1 - **resolution**: 1024 × 1024 - **negativePrompt**: `low quality, worst quality, blurry, bad anatomy, jpeg artifacts` At guidance 1, the second CFG branch is skipped, so **the negative prompt is not used** (it only takes effect once guidance is raised).