--- license: mit language: - en base_model: - deepseek-ai/DeepSeek-R1-Distill-Qwen-7B base_model_relation: finetune library_name: transformers pipeline_tag: text-generation tags: - svg - text-to-svg - vector-graphics - code-generation - reasoning - qwen2 - safetensors - arxiv:2509.24299 widget: - text: "Generate an SVG icon of a yellow rubber duck facing right on a shallow blue oval of water." - text: "Generate a minimalist calendar icon with a checkmark below it." - text: "Generate a flat vector icon of a delivery truck using bold solid colors." --- # SVGThinker-7B SVGThinker-7B is a text-to-SVG generation model introduced in [SVGThinker: Instruction-Aligned and Reasoning-Driven Text-to-SVG Generation](https://arxiv.org/abs/2509.24299). 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`](https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B) and is released as BF16 sharded safetensors. ## Links - Paper: [arXiv:2509.24299](https://arxiv.org/abs/2509.24299) - Demo Space: [Caffin/SVGThinker-7B](https://huggingface.co/spaces/Caffin/SVGThinker-7B) - License: MIT ## Intended Use This model is intended for: - generating SVG icons from English text prompts - prototyping simple vector graphics - producing editable SVG markup rather than raster images - research on text-to-SVG and structured code generation Generated SVG should be reviewed and sanitized before being rendered in production web pages or downstream applications. ## Quick Start ```bash pip install "transformers>=4.51.0" torch accelerate safetensors ``` ```python 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"", 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 `...` block before rendering. ## Model Notes 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. ## Evaluation Snapshot 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 | ## Limitations - Outputs may be malformed, incomplete, or visually inconsistent with the prompt. - The model is best suited for simple to moderately complex icon-style graphics. - It may struggle with photorealistic scenes, dense layouts, and text-heavy SVGs. - SVG is executable markup in browser contexts; treat generated SVG as untrusted. - The model primarily targets English prompts. ## Citation ```bibtex @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} } ```