PrismaCoder

Pushing the Boundaries of Open Multimodal Code Intelligence through Decomposed Rubric Synthesis

Code intelligence now extends beyond source text to what programs render: charts, web pages, diagrams, documents and animations. Prior open efforts have addressed this space one domain at a time. PrismaCoder addresses it with a single primitive, a rubric synthesized per instruction, that curates the training data and then serves as the RL reward.

  • PrismaForge: per-instruction rubrics with separate code-level and visual-level checks, serving as data filter and RL reward
  • PrismaCoder-2M: the broadest and largest open dataset for multimodal code intelligence, from plots and web pages to notation and animation
  • PrismaCoder-9B and 35B: lead open models by a wide margin and match or surpass proprietary systems on charts, front-end pages and semi-structured documents
  • Analysis: rubric filtering beats direct judging, the recipe transfers across backbones, rubric scores align with human judgment
PrismaCoder logo: a glass prism.
Animation Generation
Interactive Artifacts
TikZ Figures
WebUI Generation
svg_lighthouse.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 220" width="1600" height="880">
  <rect width="400" height="220" fill="#F6EEF4"/>
  <rect y="0" width="400" height="140" fill="#F9E6DC"/>
  <circle cx="300" cy="78" r="34" fill="#F2B98A"/>
  <path d="M0 150 Q60 128 120 150 T240 150 T360 150 T480 150 V220 H0 Z" fill="#8FA8C8"/>
  <path d="M0 172 Q60 150 120 172 T240 172 T360 172 T480 172 V220 H0 Z" fill="#6D8ABE"/>
manim_transformer.py
for i, j, w in LINKS:
    a, b = vectors[i].get_top() + UP * 0.1, vectors[j].get_top() + UP * 0.1
    arc = ArcBetweenPoints(a, b, angle=-PI / 2.2)
    arcs.add(arc.set_stroke(YELLOW_D, width=1.5 + 7 * w, opacity=0.25 + 0.7 * w))

attn = RoundedRectangle(width=vectors.width + 0.9, height=0.82, corner_radius=0.2)
attn.set_fill("#1d1d27", 1).set_stroke(GREY_B, 1.6).move_to([vectors.get_x(), 0.95, 0])
3D Visualization
Chart-to-Code
SVG Generation
News
01 Overview

Fine-grained rubrics for visual coding

Public visual-coding data has been curated with either a single per-sample score, which provides little diagnostic information about errors, or a task-specific verifier, which does not generalize across tasks. PrismaForge replaces both with a rubric synthesized for each instruction, a weighted set of binary criteria evaluated separately on the program and on its rendered artifact, that first curates the training data and then serves as the RL reward.

Decomposed rubric synthesis

Reusable domain-level checks combined with instruction-specific requirements, with the number of criteria set by the estimated task difficulty, evaluated on the program and on its render. The same rubric curates the data and rewards the policy.

The broadest open dataset

PrismaCoder-2M spans text-centric and vision-centric tasks, from plots and web pages to notation, documents and animation, each sample executed, rendered and rubric-checked.

Open models that rival proprietary systems

PrismaCoder-9B and 35B lead open models by a wide margin and match or surpass proprietary systems on charts, front-end pages and semi-structured documents.

02 PrismaForge

One rubric, two uses

One sample traced through the pipeline: the map follows the paper's pipeline figure, and the panel shows a Web UI task, its rubric, its scores and the gating decision.

    03 PrismaCoder-2M

    The broadest open visual-coding dataset

    Seeds from four kinds of sources are converted into self-contained tasks; every candidate is executed through a format-specific gatekeeper and gated by its rubric score. The corpus spans text-centric and vision-centric tasks in ten languages, about two million samples in all.

    • Python
    • HTML / CSS
    • JavaScript
    • SVG
    • LaTeX
    • Mermaid
    • Vega-Lite
    • LilyPond
    • Asymptote
    • Chemical structures

    Visualization fundamentals

    Plotting datasets in Python, SVG, Mermaid and Vega-Lite: mapping data to axes and marks, composing legends and layered plots.

    Scientific artifacts

    Plotting code from GitHub repositories and figures from arXiv papers, split into self-contained units by an AST pass.

    Front-end layout and interaction

    Pages from WebCode2M and MCD for layout; interactive demos adapted from JanusCoder or rewritten from WebSight, MMMG and ProImageBench prompts for behavior.

    Symbolic notation

    Molecules seeded from PubChem; LaTeX, Asymptote and LilyPond programs that must compile; Manim scenes from the 3Blue1Brown video code.

    04 Results

    Open models that rival proprietary systems

    One headline metric per benchmark. The filled shapes are PrismaCoder-9B and 35B, the dashed outline is the strongest open baseline on each axis, and the gold outline is one proprietary model, chosen in the legend. The full tables sit below.

    • best open baseline
    • PrismaCoder-9B
    • PrismaCoder-35B

    PrismaCoder exceeds the strongest open baseline on every axis except image-to-SVG, where VinciCoder leads. Relative to Claude Opus 4.6, PrismaCoder-35B is higher on chart reproduction, front-end pages, image-to-SVG and chemical structures; interactive science is the one axis on which the proprietary model retains a wide margin.

    Full table
    Hover a row to light it on the radar.

    Best / second among open models. Lower is better where marked ↓.

    PrismaCoder-9B and PrismaCoder-35B-A3B are post-trained from Qwen3.5-9B and Qwen3.5-35B-A3B. Data synthesis used frontier models: Claude Opus 4.6 for curation, Gemini 3 Pro for rubric generation, Gemini 3 Flash as the judge for gating and RL. Evaluation follows each benchmark's official protocol, with its designated judge where one is specified, and reports deterministic metrics alongside judge scores.

    05 Analysis

    Rubric efficacy

    Three analyses of the primitive itself: as a data filter, as a recipe on other backbones, and in agreement with human judgment.

    Rubric filtering outperforms direct judging

    Qwen3.5-9B is fine-tuned on two equal-sized subsets of the same pool, one selected by a single holistic score per sample and the other by the PrismaForge rubric. The rubric-filtered model scores higher on every benchmark, by 24 points on Vega-Lite. Since the subsets are equal in size, the gap reflects which samples each judge retains.

    • direct judge
    • PrismaForge rubric

    The recipe generalizes across backbones

    The same data and method applied to Gemma-4-31B-it and Qwen3-VL-30B-A3B-Instruct on Python plotting and HTML. On both backbones every metric ends above the base model, and RL adds to SFT on every one; SFT accounts for most of the ChartMimic gain and RL for most of the HTML gains.

    • SFT gain over base
    • RL gain over SFT

    Rubric scores align with human judgment

    On 100 training samples rated by annotators, three proprietary judges agree with the human ratings far more closely under the rubric than under direct scoring, in both absolute level and pairwise ordering.

    06 Examples

    Qualitative examples

    Artifacts that run in the page with the code that produced them, followed by benchmark samples with the gold render beside the base model, the SFT-only model and PrismaCoder.

    Runs in the page
    
                

    Citation
    prismacoder.bib
    @article{sun2026prismacoder,
      title={PrismaCoder: Pushing the Boundaries of Open Multimodal Code Intelligence through Decomposed Rubric Synthesis},
      author={Sun, Qiushi and Gong, Jingyang and Liu, Yang and Chen, Qiaosheng and Yin, Zhangyue and Huang, Zixian and Hu, Hanxu and Xiong, Jing and Xu, Fangzhi and Tan, Haochen and others},
      journal={arXiv preprint arXiv:2610.20538},
      year={2026}
    }