Downloads · 30 days
66
24% of all-time downloads
kelnei/slugvision-2.2b
slugvision-2.2b is a image-text-to-text model from kelnei. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. The card lists the license as gemma.
A 2.2B-parameter vision-language model that turns an uploaded image (plus an optional article title) into a 3–5 word kebab-case permalink slug. It is the quality-leader sibling of slugvision-500m: on untitled photos t…
Downloads · 30 days
66
24% of all-time downloads
All-time downloads
272
Public
Parameters
2.2B
8.4 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors4.5 GB · 53%
From the Hugging Face model README
A 2.2B-parameter vision-language model that turns an uploaded image (plus an optional article title) into a 3–5 word kebab-case permalink slug. It is the quality-leader sibling of slugvision-500m: on untitled photos the blind LLM-judge gap to the 26B-class teacher drops from ~1.1 (500M) to 0.63, at ~10x the CPU latency (~16s vs 1.6s cold per image on 6 desktop threads).
LoRA fine-tune (r16, merged) of SmolVLM2-2.2B-Instruct, distilled from a Gemma teacher on ~31k image→slug pairs spanning five slices of an editorial-image distribution: everyday photos, conceptual editorial illustrations, product shots, clinical stock imagery, and web screenshots. Training data: kelnei/slugvision.
Pick this model if untitled-photo slug quality matters more than latency; pick the 500M if you serve on CPU and most uploads come with an article title (titled modes are near teacher parity at both sizes). The full pipeline (corpus generation, training, eval, export) is at github.com/kelnei/slugvision.
Trained on exactly two prompt templates — use them verbatim.
Without a title (slug describes visible content):
Create a URL slug for this image: 3 to 5 lowercase words joined by hyphens. Reply with the slug only.
With an article title (slug reflects the article topic; image steers emphasis):
This image appears in an article titled: "{title}"
Create a URL slug for the image in this article's context: 3 to 5 lowercase words joined by hyphens. Reply with the slug only.
Images were preprocessed with size={"longest_edge": 1024} during training;
match it at inference (the bundled GGUF mmproj embeds this cap).
llama-mtmd-cli -m slugvision-2.2b-q8_0.gguf --mmproj mmproj-f16.gguf \
--image photo.jpg -n 32 --temp 0 \
-p 'Create a URL slug for this image: 3 to 5 lowercase words joined by hyphens. Reply with the slug only.'
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
processor = AutoProcessor.from_pretrained("kelnei/slugvision-2.2b", size={"longest_edge": 1024})
model = AutoModelForImageTextToText.from_pretrained(
"kelnei/slugvision-2.2b", torch_dtype=torch.bfloat16, device_map="auto"
)
messages = [{"role": "user", "content": [
{"type": "image", "url": "photo.jpg"},
{"type": "text", "text": "Create a URL slug for this image: 3 to 5 lowercase words joined by hyphens. Reply with the slug only."},
]}]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)
out = model.generate(**inputs, max_new_tokens=32, do_sample=False)
print(processor.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
| File | Purpose |
|---|---|
model.safetensors + configs | Merged bf16 checkpoint (LoRA already folded in) |
slugvision-2.2b-q8_0.gguf | llama.cpp language model, Q8_0 (recommended) |
slugvision-2.2b-q4_k_m.gguf | llama.cpp language model, Q4_K_M |
mmproj-f16.gguf | llama.cpp vision projector, f16, 1024px cap |
Blind pairwise LLM-judge against the teacher on a frozen 1,000-image holdout (rubric 1–5 per slug; the judge never knows which is which). Token-F1 is overlap with the teacher's slug.
| Slice | Judge (student vs teacher) | Token-F1 |
|---|---|---|
| photo (untitled) | 3.87 vs 4.50 (wins/ties 45%) | 0.62 |
| illustration (titled) | 3.44 vs 3.65 | 0.71 |
| product (untitled) | 3.86 vs 4.55 | 0.66 |
| clinical (mixed) | 4.04 vs 4.68 | 0.66 |
| screenshot (titled) | 3.90 vs 4.12 | 0.72 |
Format validity ~99–100% across slices. In the 500M/2.2B capacity ladder, model size was the only lever that moved untitled-photo quality — 4x photo data, extra slices, and LoRA r64 all left the 500M's gap at ~1.0; this model cut it to 0.63 in one step.
CPU latency (llama.cpp, 6 threads, full cold start per image): ~16s at Q8_0 or Q4_K_M — image encode dominates (the 2.2B vision tower cuts ~9 crops per image at the 1024px cap). On any modest GPU it is sub-second.
LoRA r16 on all linear layers, 1 epoch over 30,739 pairs, batch 8 with grad-accum 2, bf16, images capped at 1024px longest edge. Labels authored by a Gemma-family teacher (26B-class, locally hosted); titled-mode labels were generated with the source article headline in context.
gemma license tag.