| | --- |
| | license: mit |
| | library_name: diffusers |
| | pipeline_tag: text-to-image |
| | tags: |
| | - gcode |
| | - cnc |
| | - plotter |
| | - polargraph |
| | - stable-diffusion |
| | - text-to-gcode |
| | - diffusion |
| | base_model: runwayml/stable-diffusion-v1-5 |
| | datasets: |
| | - twarner/dcode-imagenet-sketch |
| | --- |
| | |
| | # dcode: Text-to-Gcode Diffusion Model |
| |
|
| | An end-to-end diffusion model that converts **text prompts directly into G-code** for CNC machines, plotters, and polargraph drawing robots. |
| |
|
| | ## Overview |
| |
|
| | dcode is a fine-tuned Stable Diffusion model with a custom G-code decoder head. It takes a text description (e.g., "a sketch of a horse") and outputs machine-executable G-code. |
| |
|
| | | Component | Description | |
| | |-----------|-------------| |
| | | Base Model | [Stable Diffusion v1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) | |
| | | Decoder | 200M param transformer (12 layers, 1024 hidden, 16 heads) | |
| | | Tokenizer | Custom BPE tokenizer for G-code | |
| | | Training Data | [dcode-imagenet-sketch](https://huggingface.co/datasets/twarner/dcode-imagenet-sketch) | |
| |
|
| | ## Architecture |
| |
|
| | ``` |
| | Text Prompt |
| | β |
| | [CLIP Text Encoder] β frozen |
| | β |
| | [UNet Diffusion] β frozen |
| | β |
| | Latent (4Γ64Γ64) |
| | β |
| | [CNN Projector] β trained |
| | β |
| | [Transformer Decoder] β trained |
| | β |
| | G-code Tokens |
| | β |
| | G-code Text |
| | ``` |
| |
|
| | ## Usage |
| |
|
| | ### With Diffusers |
| |
|
| | ```python |
| | import torch |
| | from diffusers import StableDiffusionPipeline |
| | from huggingface_hub import hf_hub_download |
| | from transformers import PreTrainedTokenizerFast |
| | |
| | # Load components |
| | pipe = StableDiffusionPipeline.from_pretrained( |
| | "runwayml/stable-diffusion-v1-5", |
| | torch_dtype=torch.float16 |
| | ).to("cuda") |
| | |
| | # Download decoder weights |
| | weights = hf_hub_download("twarner/dcode-sd-gcode-v3", "pytorch_model.bin") |
| | tokenizer_path = hf_hub_download("twarner/dcode-sd-gcode-v3", "gcode_tokenizer/tokenizer.json") |
| | |
| | # Load custom gcode tokenizer |
| | gcode_tokenizer = PreTrainedTokenizerFast(tokenizer_file=tokenizer_path) |
| | |
| | # Generate latent from text |
| | with torch.no_grad(): |
| | latent = pipe("a sketch of a horse", output_type="latent").images |
| | |
| | # ... decode with GcodeDecoderV3 (see repo for full inference code) |
| | ``` |
| |
|
| | ### Interactive Demo |
| |
|
| | Try the model live: **[huggingface.co/spaces/twarner/dcode](https://huggingface.co/spaces/twarner/dcode)** |
| |
|
| | ## Training |
| |
|
| | - **Dataset**: 50,000 ImageNet-Sketch images β 200,000 G-code files |
| | - **Hardware**: 8Γ NVIDIA H100 80GB |
| | - **Epochs**: 50 |
| | - **Batch Size**: 256 effective (32 Γ 8 GPUs) |
| | - **Learning Rate**: 1e-4 with cosine schedule |
| | - **Regularization**: Label smoothing (0.1), weight decay (0.05) |
| |
|
| | ## G-code Output |
| |
|
| | The model generates G-code compatible with: |
| | - Polargraph/drawbot machines |
| | - Pen plotters |
| | - Any G-code compatible CNC |
| |
|
| | Example output: |
| | ```gcode |
| | G21 ; mm |
| | G90 ; absolute |
| | M280 P0 S90 ; pen up |
| | G28 ; home |
| | |
| | G0 X-200.00 Y100.00 F1000 |
| | M280 P0 S40 ; pen down |
| | G1 X-180.00 Y120.00 F500 |
| | G1 X-160.00 Y115.00 F500 |
| | ... |
| | ``` |
| |
|
| | ## Machine Specs |
| |
|
| | Default work area (configurable): |
| | - Width: 841mm |
| | - Height: 1189mm (A0 paper) |
| | - Pen servo: 40Β° down, 90Β° up |
| |
|
| | ## Project |
| |
|
| | Full project documentation, hardware build guide, and source code: |
| |
|
| | **π [teddywarner.org/Projects/Polargraph/#dcode](https://teddywarner.org/Projects/Polargraph/#dcode)** |
| |
|
| | **GitHub**: [github.com/Twarner491/dcode](https://github.com/Twarner491/dcode) |
| |
|
| | ## Citation |
| |
|
| | ```bibtex |
| | @misc{dcode2024, |
| | author = {Teddy Warner}, |
| | title = {dcode: Text-to-Gcode Diffusion Model}, |
| | year = {2026}, |
| | url = {https://teddywarner.org/Projects/Polargraph/#dcode} |
| | } |
| | ``` |
| |
|
| | ## License |
| |
|
| | MIT License |
| |
|