Downloads · 30 days
57
28% of all-time downloads
Caffin/SVGThinker-7B
SVGThinker-7B is a text generation model from Caffin. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as mit.
SVGThinker-7B is a text-to-SVG generation model introduced in SVGThinker: Instruction-Aligned and Reasoning-Driven Text-to-SVG Generation. It generates editable SVG code from natural-language descriptions, with a focu…
Downloads · 30 days
57
28% of all-time downloads
All-time downloads
204
Public
Parameters
7.6B
15.2 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors15.2 GB · 100%
From the Hugging Face model README
SVGThinker-7B is a text-to-SVG generation model introduced in SVGThinker: Instruction-Aligned and Reasoning-Driven Text-to-SVG Generation. It generates editable SVG code from natural-language descriptions, with a focus on compact icon-style vector graphics.
The model is fine-tuned from
deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
and is released as BF16 sharded safetensors.
This model is intended for:
Generated SVG should be reviewed and sanitized before being rendered in production web pages or downstream applications.
pip install "transformers>=4.51.0" torch accelerate safetensors
import re
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "Caffin/SVGThinker-7B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
use_safetensors=True,
)
description = "A minimalist calendar icon with two black tabs and a bold checkmark below it."
prompt = "Review the given information below and generate a svg according to it.\n" + description
messages = [{"role": "user", "content": prompt}]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
output = model.generate(
inputs,
max_new_tokens=4096,
do_sample=True,
temperature=0.8,
top_p=0.6,
repetition_penalty=1.05,
)
text = tokenizer.decode(output[0], skip_special_tokens=False)
match = re.search(r"<svg.*?</svg>", text, flags=re.DOTALL)
print(match.group(0) if match else text)
The model may emit reasoning text before the final SVG. For most applications,
extract the <svg>...</svg> block before rendering.
SVGThinker is trained directly in SVG code space. The paper describes a sequential annotation pipeline that aligns natural-language descriptions with the step-by-step construction of SVG primitives, helping the model generate more editable SVG code.
For full training data, annotation, and evaluation details, see the paper.
On the paper's 1,000 held-out text-to-SVG prompts, SVGThinker reports:
| Model | FID lower is better | CLIP higher is better | FID-CLIP lower is better | Primitive support |
|---|---|---|---|---|
| SVGThinker-7B | 34.06 | 0.2765 | 21.08 | all |
@inproceedings{chen2025svgthinker,
title = {SVGThinker: Instruction-Aligned and Reasoning-Driven Text-to-SVG Generation},
author = {Chen, Hanqi and Zhao, Zhongyin and Chen, Ye and Liang, Zhujin and Ni, Bingbing},
booktitle = {Proceedings of the 33rd ACM International Conference on Multimedia},
year = {2025},
publisher = {ACM},
doi = {10.1145/3746027.3755392},
url = {https://arxiv.org/abs/2509.24299}
}