File size: 2,295 Bytes
ca888b0
7f3234f
 
 
 
ca888b0
 
7f3234f
ca888b0
 
7f3234f
ca888b0
 
7f3234f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
---
title: Gemma Diffusion 3D Asset Builder
emoji: 🧊
colorFrom: indigo
colorTo: purple
sdk: gradio
sdk_version: 6.17.3
python_version: "3.12"
app_file: app.py
pinned: false
short_description: Diffuse an SVG game asset and watch it extrude into live 3D
---

# Gemma Diffusion Β· Text β†’ 3D Asset

A live, side-by-side visualization of **block-diffusion** generation. Describe a game
asset (a sword, potion, treasure chest, spaceship, ...) and the model designs an original
**SVG** illustration by denoising a canvas of random tokens β€” every position updates *at
once* each step. A fixed, hand-written **Three.js** harness then extrudes that SVG into an
interactive, spinning 3D object.

The left pane shows the raw SVG *canvas* diffusing token-by-token (the signature look of
text diffusion); the right pane shows the extruded 3D scene (drag to orbit). Type a
follow-up to **tweak in place**: the previous artwork seeds the diffusion's starting canvas
(via the model's native `canvas_ids` API), so the model edits the existing asset instead of
regenerating from scratch.

## Stack

- **Model**: `google/diffusiongemma-26B-A4B-it` (`DiffusionGemmaForBlockDiffusion`).
- **Backend**: [`gradio.Server`](https://huggingface.co/blog/introducing-gradio-server)
  β€” a FastAPI subclass that provides Gradio's queue + SSE streaming under a custom,
  hand-written HTML/CSS/JS frontend (`index.html`). The single streaming endpoint
  `/generate` yields one JSON frame per denoising step. The model only has to produce the
  SVG art; the frontend owns the (reliable) 3D extrusion, so the scene always renders.
- **Hardware**: ZeroGPU (`xlarge`) β€” the 26B checkpoint needs the full backing card.

A custom `transformers` wheel providing the DiffusionGemma architecture is bundled in
this repo and installed at runtime by `app.py` (Spaces installs `requirements.txt` before
the repo files are copied in, so a local-path wheel can't be referenced there).

## Configuration

- `HF_TOKEN` (secret) β€” read access to the private model repo.
- `GRADIO_SSR_MODE=false` (variable) β€” required so the custom `/` route serves
  `index.html` instead of Gradio's SSR shell.
- `GDIFF_MODEL_PATH` (optional) β€” override the model repo id.
- `GDIFF_GPU_SIZE` (optional) β€” ZeroGPU slice, defaults to `xlarge`.