PrismaCoder: Pushing the Boundaries of Open Multimodal Code Intelligence through Decomposed Rubric Synthesis
Organizations: The University of Hong Kong · Nanjing University · Fudan University · University of Zurich ·
Abstract
Multimodal code intelligence connects the symbolic world of programs with the visual world their execution creates. Interest in this capability is burgeoning, as models are increasingly asked to produce charts, webpages, animations, and semi-structured documents. Recently, proprietary models have pushed far ahead, producing interactive artifacts even from a text description or a screenshot alone. Yet their data and training remain closed, and open progress is held back by the quantity and quality of available data and by the pipelines and methods for producing it. Quality is the harder of the two, since a sample must be correct as a program, well built, and above all visually right once rendered. No existing signal covers all three. Execution often returns just a pass or fail, code similarity does not map to the visual output, and task-specific verifiers do not generalize. To push open progress further, we start from the data side with PrismaForge, a hierarchical data pipeline centered on a synthesized rubric that decomposes these factors into checkable criteria. The same rubric serves as both filter and reward: it curates the supervised corpus, then drives reinforcement learning on visual-coding tasks. Leveraging PrismaForge for data synthesis and filtering, we build PrismaCoder-2M, the most diverse open dataset for multimodal code intelligence and the largest to date. On the model side, we train PrismaCoder-9B and PrismaCoder-35B on this data and release both. They lead the open state of the art by a wide margin and rival leading proprietary systems. Our analyses further show that the proposed rubric-based pipeline improves multimodal coding performance across model backbones. We release our code and data at https://qiushisun.github.io/PrismaCoder-Home/.
Figures & tables
| ChartMimic | WebCode2M | DesignBench | Design2Code | Inter- actSci. | UniSVG | ChemDraw | |||||||
| Model | Low-Level | High-Level | LLM Score | Visual | CLIP | Gen. | Edit. | LLM Score | Visual | VQT | ISVGen | Validity | Tani. Sim. |
| Open models | |||||||||||||
| Qwen3-VL-8B-Instruct | 65.92 | 62.81 | 53.67 | 73.55 | 79.16 | 55.12 | 8.38 | 57.47 | 82.81 | 34.06 | 66.27 | 78.91% | 54.79 |
| Qwen3-VL-30B-A3B-Instruct | 71.04 | 67.30 | 54.80 | 77.40 | 79.42 | 51.58 | 8.07 | 57.94 | 85.11 | 37.67 | 74.30 | 82.03% | 54.55 |
| Qwen3.5-9B | 58.35 | 55.55 | 51.74 | 81.60 | 79.93 | 50.73 | 8.19 | 53.12 | 85.60 | 27.28 | 63.09 | 88.28% | 66.79 |
| Qwen3.5-35B-A3B | 70.22 | 63.90 | 65.32 | 88.64 | 85.94 | 64.70 | 8.66 | 67.49 | 90.98 | 29.33 | 62.91 | 92.97% | 79.86 |
| Artifacts Bench | PandasPlotBench | Inter- actSci. | UniSVG | VisPlotBench | |||||
| Model | Incorr. Code | Visual | Task | PFT | TSVGen | ExecPass | Mean | Good 75 | |
| Open models | |||||||||
| Qwen3-VL-8B-Instruct | 34.71 | 16.00% | 60.01 | 73.67 | 15.47% | 68.13 | 56.52% | 40.25 | 33.62 |
| Qwen3-VL-30B-A3B-Instruct | 41.70 | 11.43% | 60.05 | 80.58 | 24.40% | 69.33 | 64.38% | 49.28 | 42.88 |
| Qwen3.5-9B | 41.24 | 24.57% | 52.98 | 65.47 | 22.40% | 69.28 | 52.22% | 41.18 | 36.71 |
| Qwen3.5-35B-A3B | 44.98 | 15.43% | 60.16 | 75.17 | 26.67% | 72.15 | 63.01% | 51.45 | 48.51 |
Appendix figures & tables30 assets
Supplementary material from the paper’s appendix.
Appendix
| Data Source | # Seed Samples | # Regenerated Samples | # Synthesized Samples |
| MCD dataset | 598,000 | 307,184 | 273,199 |
| GitHub repositories | 417,000 | 297,942 | 188,630 |
| WebCode2M (Generate) | 243,100 | 182,300 | 215,663 |
| WebCode2M (Edit) | 264,541 | 167,810 | 190,882 |
| JanusCoder-800K | 109,826 | 80,000 | 29,000 |
| WebSight | 1,922,671 | 40,000 | 12,000 |
| PrismaCoder -2M | JanusCoder | VisCodex | VisCoder2 | VinciCoder | |
| Visual code data types | |||||
| Python plotting (text to plot) | ✓ | ✓ | – | ✓ | ✗ |
| Web UI (screenshot or text to page) | ✓ | ✓ | ✓ | ✗ | ✓ |
| Chart-to-code (image to code) | ✓ | ✓ | ✓ | ✗ | ✓ |
| SVG | ✓ | ✓ | ✗ | ✓ | ✓ |
| LaTeX / TikZ | ✓ | ✗ | ✗ | ✓ | ✓ |
| Rubric | Weight | Pass | Judgment evidence |
| Code rubrics (all pass; weighted score ) | |||
| The three Product blocks use a teal-like background. | 0.8 | ✓ | The buttons explicitly use background-color: #008080 . |
| The three Product items are stacked vertically. | 0.8 | ✓ | The shared button class uses display: block . |
| The “Technology Company” heading is horizontally centered. | 0.8 | ✓ | The header uses text-align: center . |
| The footer containing the copyright text has a dark background. | 0.7 | ✓ | The footer explicitly uses background-color: #333 . |
| The footer contains the required copyright statement. | 0.9 | ✓ | The exact statement is present, with © encoding the copyright symbol. |
| Task family | Spec. output | Reward Type | Weights Assignment |
| Chart generation | text Python | Rubrics | |
| Chart reproduction | image Python | Rubrics | |
| Webpage generation | text HTML | Rubrics | |
| HTML demonstration | plan HTML | Rubrics | |
| + reference snapshots | plan + images HTML | Rubrics | |
| SVG generation | text SVG | Rubrics |
| Direct | ||||||||
| Model | Exec. Rate | Text | Layout | Type | Color | Avg. (L) | GPT (H) | Overall |
| Open models | ||||||||
| JanusCoder-7B | 89.16 | 77.61 | 85.49 | 70.06 | 67.34 | 75.12 | 68.97 | 72.05 |
| JanusCoder-8B | 80.91 | 73.10 | 81.19 | 65.00 | 69.03 | 76.54 | 69.23 | 72.89 |
| VinciCoder-7B | 90.88 | 79.91 | 87.99 | 73.72 | 71.59 | 78.30 | 66.09 | 72.20 |
| VinciCoder-8B | 90.72 | 79.78 | 86.62 | 73.03 | 70.95 | 77.59 | 66.44 | 72.01 |
| Incorr. Code | Mean | Good 75 | |||
| Model | Vis. | Task | Vis. | Task | |
| Qwen3-VL-8B-Instruct | 16.00% | 60.01 | 73.67 | 0.506 | 0.701 |
| Qwen3-VL-30B-A3B-Instruct | 11.43% | 60.05 | 80.58 | 0.555 | 0.806 |
| Qwen3.5-9B | 24.57% | 52.98 | 65.47 | 0.417 | 0.640 |
| Qwen3.5-35B-A3B | 15.43% | 60.36 | 75.17 | 0.509 | 0.743 |
| JanusCoderV-7B | 23.43% | 53.05 | 65.77 | 0.440 | 0.640 |
| Model | Avg. Incorr. | Python | Vega- Lite | LilyPond | Mermaid | SVG | L a T e X | Asym- ptote | HTML |
| Open models | |||||||||
| VinciCoder-7B | 35.90% | 10.20% | 66.67% | 100.00% | 7.63% | 1.54% | 56.25% | 21.74% | 23.15% |
| VinciCoder-8B | 36.08% | 2.55% | 57.36% | 100.00% | 4.58% | 7.69% | 58.93% | 19.57% | 37.96% |
| VisCoder2 | 33.26% | 43.37% | 16.28% | 41.82% | 25.95% | 12.31% | 61.61% | 43.48% | 21.30% |
| PrismaCoder -9B | 34.70% | 29.59% | 13.18% | 85.45% | 12.21% | 1.54% | 66.96% | 65.22% | 19.44% |
| PrismaCoder -35B | 28.86% | 11.22% | 3.88% | 89.09% | 9.92% | 0.00% | 70.54% | 51.09% | 11.11% |
| Model | Valid. | Exact Match | Tani. (mean) | Tani. | Tani. |
| Open models | |||||
| Qwen3-VL-8B-Instruct | 78.91% | 25.00% | 54.79 | 25.00% | 25.00% |
| Qwen3-VL-30B-A3B-Instruct | 82.03% | 26.56% | 54.55 | 27.34% | 28.12% |
| Qwen3.5-9B | 88.28% | 33.59% | 66.79 | 37.50% | 39.84% |
| Qwen3.5-35B-A3B | 92.97% | 53.12% | 79.86 | 57.81% | 60.16% |
| PrismaCoder -9B | 96.88% | 83.59% | 95.94 | 87.50% | 89.06% |
| Short | Mid | Long | Average | |||||||||||||
| Model | LLM | Visual | CLIP | Tree- BLEU | LLM | Visual | CLIP | Tree- BLEU | LLM | Visual | CLIP | Tree- BLEU | LLM | Visual | CLIP | Tree- BLEU |
| Open models | ||||||||||||||||
| JanusCoderV-7B | 40.10 | 72.39 | 76.11 | 29.64 | 43.06 | 74.08 | 76.77 | 37.43 | 39.61 | 72.24 | 75.11 | 39.37 | 40.92 | 72.90 | 76.00 | 35.48 |
| JanusCoderV-8B | 34.60 | 65.74 | 73.14 | 30.37 | 36.17 | 65.41 | 73.46 | 29.88 | 34.74 | 66.71 | 72.53 | 27.66 | 35.17 | 65.95 | 73.04 | 29.30 |
| VinciCoder-7B | 46.01 | 76.76 | 80.43 | 30.00 | 44.34 | 73.57 | 79.38 | 38.11 | 38.99 | 66.92 | 75.97 | 29.74 | 43.11 | 72.42 | 78.59 | 32.62 |
| VinciCoder-8B | 48.35 | 80.43 | 82.03 | 31.39 | 48.08 | 79.53 | 81.70 | 39.48 | 42.05 | 74.83 | 78.63 | 32.57 | 46.16 | 78.26 | 80.79 | 34.48 |
| Generation | Editing | |||||||
| Model | Judge | CLIP | MAE | SSIM | Judge | CMS | MAE | SSIM |
| Open models | ||||||||
| JanusCoderV-7B | 40.37 | 71.34 | 77.05 | 0.5910 | 7.44 | 0.2234 | 30.11 | 0.8399 |
| JanusCoderV-8B | 34.30 | 68.38 | 83.64 | 0.5822 | 7.26 | 0.2346 | 28.57 | 0.8446 |
| VinciCoder-7B | 43.24 | 72.81 | 68.05 | 0.6137 | 1.40 | 0.1686 | 45.33 | 0.8119 |
| VinciCoder-8B | 48.09 | 76.79 | 61.86 | 0.6330 | 1.71 | 0.1514 | 41.83 | 0.8199 |
| Model | Block | Text | Pos. | Color | CLIP | Avg | LLM Score |
| Open models | |||||||
| JanusCoderV-7B | 63.88 | 85.40 | 62.74 | 59.11 | 82.94 | 70.81 | 36.49 |
| JanusCoderV-8B | 59.11 | 81.72 | 61.45 | 57.63 | 83.13 | 68.61 | 34.53 |
| VinciCoder-7B | 71.01 | 87.30 | 68.04 | 71.28 | 85.58 | 76.64 | 42.30 |
| VinciCoder-8B | 79.41 | 91.79 | 73.90 | 77.00 | 87.37 | 81.89 | 45.72 |
| PrismaCoder -9B | 90.09 | 95.95 | 89.30 | 90.00 | 92.37 | 91.54 | 70.51 |
| Model | Overall | Game Dev. | SVG Gen. | Web Apps | Simu- lation | Mgmt. Sys. |
| Open models | ||||||
| JanusCoderV-7B | 31.16 | 27.95 | 28.97 | 33.32 | 34.04 | 33.64 |
| VinciCoder-7B | 11.35 | 10.51 | 12.04 | 12.48 | 11.48 | 11.29 |
| VinciCoder-8B | 11.97 | 11.06 | 14.94 | 12.34 | 11.27 | 12.10 |
| VisCoder2 | 17.51 | 16.49 | 20.43 | 18.46 | 18.13 | 15.98 |
| PrismaCoder -9B | 45.28 | 44.49 | 50.95 | 46.22 | 48.23 | 42.27 |
| PFT | VQT | |||
| Model | Overall | Avg. | Perfect | VLM |
| JanusCoderV-7B | 17.73% | 16.91% | 4.20% | 27.67 |
| JanusCoderV-8B | 17.60% | 17.30% | 4.20% | 33.32 |
| VinciCoder-7B | 0.40% | 0.00% | 0.00% | 0.00 |
| VinciCoder-8B | 0.40% | 0.42% | 0.00% | 2.33 |
| PrismaCoder -9B | 24.80% | 22.47% | 7.69% | 51.87 |
| Judge: GPT-4.1 | Judge: GPT-5.5 | ||||||
| Split | Model | Err% | Vis | Task | Err% | Vis | Task |
| HTML | Gemma-4 (base) | 5.6 | 46.6 | 78.8 | 5.6 | 45.4 | 64.2 |
| + SFT | 4.6 | 55.6 | 76.2 | 4.6 | 53.0 | 77.8 | |
| + SFT + RL | 4.6 | 64.5 | 84.0 | 4.6 | 64.6 | 75.4 | |
| Python | Gemma-4 (base) | 6.1 | 69.4 | 87.2 | 6.1 | 66.8 | 85.0 |
| + SFT | 7.1 | 73.3 | 89.5 | 7.1 | 71.0 | 87.2 | |
| Judge | Scoring | Krippendorff’s | Kendall’s |
| Claude Sonnet 5 | Direct | 0.386 | 0.292 |
| Rubric-based | 0.889 | 0.670 | |
| Gemini 3.5 Flash | Direct | 0.303 | 0.282 |
| Rubric-based | 0.861 | 0.643 | |
| GPT-5.5 | Direct | 0.514 | 0.442 |
| Rubric-based | 0.918 | 0.657 |
Multimodal Large Language Models
Multimodal large language models combine language models with image, video, audio, and other inputs for grounded understanding and generation.
See all 1,084 papers