m64_67cfbdf8a0d8 / README.md
kromoss-image
An image model inside a capsule: Kromoss (a MOSS-Image fine-tune, Apache-2.0) with its 8-step DMD2 LoRA, on diffusers. Text in, 1024x1024 PNG out, about 19 s per image on an NVIDIA GB10.
What it shows
- The
image.generatekind: m64's front letsPOST /v1/images/generationsthrough and onlypromptandseedin its body.steps,guidanceand the like get a 400 that names the field. - Big weights as
[[artifacts]]: about 40 GB from one Hugging Face repo at a fixed commit, only the files the pipeline needs. The capsule folder stays a few KB. [params]: the settings the server bakes in (size, steps, guidance, shift, LoRA), published in the manifest and returned asparams_usedwith every image, so a result can be reproduced from its seed.[routes] extra: one more path,/v1/config, let through by the front.- A Dockerfile on NVIDIA's PyTorch image, pinned by digest, with every pip package at an exact version.
- Progress in
$M64_STATUS: loading, warming (one short generation), ready.
Where the weights go
The first serve downloads them before the container starts. To do that ahead of time, without starting anything:
m64 install examples/kromoss-image
m64 checks each file against the repo's commit and mounts the folder read-only at
/weights/kromoss; the container itself has no network. By default artifacts
live under ~/.cache/m64. To keep them on a bigger disk or a NAS, shared by every
capsule:
m64 config set models_dir /mnt/models
Run it
m64 check examples/kromoss-image
m64 examples/kromoss-image # serve it and open /human/
Loading takes a few minutes (40 GB to read and move to the GPU). It needs about
40 GB of GPU memory: a GB10, or an x86 card with that much (then set platform
and gpu in capsule.toml to what m64 doctor prints).
Try it
curl -s <url>/v1/images/generations \
-H 'Content-Type: application/json' \
-d '{"prompt": "a tabby cat holding a sign that says MOSS", "seed": 42}' \
| python3 -c 'import sys,json,base64; d=json.load(sys.stdin); open("out.png","wb").write(base64.b64decode(d["data"][0]["b64_json"])); print(d["seed"], d["params_used"])'
The same prompt and seed give the same image, byte for byte.