SpriteX32 / README.md
viknesh100's picture
Add Sprite Flow 32x32 text-to-sprite model
692b006 verified
|
Raw History Blame Contribute Delete
4.32 kB
---
license: other
library_name: pytorch
pipeline_tag: text-to-image
language:
- en
tags:
- text-to-image
- pixel-art
- sprites
- flow-matching
- classifier-free-guidance
- safetensors
datasets:
- tkarr/sprite_caption_dataset
---
# SpriteX32
A small text-to-image model that generates **32×32 pixel-art sprites** from English prompts.
It is a conditional U-Net trained with flow matching, conditioned on CLIP text embeddings,
and sampled with classifier-free guidance. It has 11.4M parameters and runs
comfortably on a CPU or a small GPU.
![Samples](assets/samples.png)
*Seed 0, 50 steps, guidance 3.0, upscaled 4× with nearest-neighbour. Prompts, one per row, top to bottom:*
1. a red sword
2. a green slime monster
3. a blue wizard
4. Once it takes aim at its foe, it makes a headlong charge. It is famous for its violent nature.
## Quick start
```bash
pip install torch transformers safetensors huggingface_hub pillow
```
```python
import sys
from huggingface_hub import snapshot_download
path = snapshot_download("viknesh100/SpriteX32")
sys.path.insert(0, path)
from pipeline import SpriteFlowPipeline, make_grid
pipe = SpriteFlowPipeline.from_pretrained(path) # uses GPU if available
images = pipe("a green slime monster", num_images=8, seed=0, output_size=128)
make_grid(images, cols=4).save("sprites.png")
```
Command line (from a clone of this repo):
```bash
python inference.py --prompt "a blue wizard" --num_images 8 --seed 0 --out wizard.png
```
### Parameters
| Argument | Default | Notes |
|---|---|---|
| `num_images` | 4 | Images per prompt. Multiple prompts can be passed as a list. |
| `num_steps` | 50 | Euler steps. 20–100 is a reasonable range. |
| `guidance_scale` | 3.0 | Higher follows the prompt more strongly but reduces variety. Try 1.5–6. |
| `seed` | None | Set for reproducible output. |
| `output_size` | None | Native size is 32. Set e.g. 128 for a nearest-neighbour upscale. |
**Prompting tip:** the model only saw captions in the style of its training data, so prompts
that resemble short, descriptive sprite captions work best.
## Model details
| | |
|---|---|
| Output | 32×32 RGB image (transparency is not generated) |
| Architecture | U-Net with residual blocks, self-attention at the lowest resolution, time and text conditioning |
| Text encoder | `openai/clip-vit-base-patch32` (frozen, pooled embedding, loaded separately at inference) |
| Objective | Flow matching: linear path from noise to image, velocity prediction |
| Sampler | Euler, with classifier-free guidance |
| Weights | `model.safetensors` (EMA weights) |
## Training
- **Data:** [`tkarr/sprite_caption_dataset`](https://huggingface.co/datasets/tkarr/sprite_caption_dataset), 12,830 image–caption pairs.
- **Preprocessing:** images converted to RGBA, composited on a white background, resized to 32×32, scaled to [-1, 1].
- **Optimisation:** AdamW, learning rate 2e-4 with cosine decay, batch size 128, 15,000 steps, gradient clipping at 1.0.
- **Guidance:** the text condition was dropped for 15% of samples during training.
- **EMA:** decay 0.999, and the EMA weights are the ones released.
- **Hardware:** a single Google Colab GPU.
## Limitations
- **Resolution:** fixed at 32×32. The model cannot produce larger images natively.
- **Prompt understanding:** the text is reduced to a single pooled CLIP vector, so colors and broad object types work much better than detailed or compositional prompts.
- **Training data:** a small dataset, so the model covers a limited range of subjects and styles. Caption quality was not audited.
- **Background:** outputs are RGB on a light background, with no alpha channel.
- **Evaluation:** only qualitative. No quantitative metrics (such as FID) were computed.
## Intended use
Hobby, research, and educational use: prototyping sprite ideas, studying small text-to-image
models, or as a base for further fine-tuning. Review the training-data and license notes
below before any commercial use.
## License and attribution
The weights in this repository are released under: **other**.
Training data came from `tkarr/sprite_caption_dataset`; check that dataset's page for the
terms that apply to its contents. The CLIP text encoder is a separate model from OpenAI,
released under the MIT license and downloaded at inference time.