---
type: "post"
id: "training-ai-to-paint-with-code-8043dc"
slug: "training-ai-to-paint-with-code-8043dc"
title: "Training AI to Paint with Code"
description: "Surya Narreddi published a research write-up on training Qwen 3.5 35B to generate watercolour paintings by writing p5.brush JavaScript."
retrieval_nugget: "Surya Narreddi published a research write-up on training Qwen 3.5 35B to generate watercolour paintings by writing p5.brush JavaScript."
published_at: "2026-10-23"
updated_at: "2026-10-23"
record_date: "2026-10-23"
date_kind: "published_at"
topics: ["generative-media","multimodal"]
entities: ["Surya Narreddi","Qwen 3.5 35B","p5.brush","Puppeteer","HPSv3","GRPO"]
related_patterns: ["generative-media-becomes-application-infrastructure","model-answers-become-task-interfaces"]
novelty_label: "same_event"
what_changed: "Same event as Training a coding model to paint watercolours with TRL and OpenEnv"
prior_refs: ["memory:9a861022-238a-8691-a26f-3e4e20e3e61c"]
source_url: "https://surya.website/rling-qwen-to-paint-with-code"
source_urls: ["https://surya.website/rling-qwen-to-paint-with-code"]
schema_version: "newruntime-agent-readable-v0.2"
stable_id: "post:training-ai-to-paint-with-code-8043dc"
status: "published"
visuals: []
editor: {"role":"editor","name":"Andrey Reshetnikov","profile":"https://newruntime.com/owner-profile.md","profile_json":"https://newruntime.com/owner-profile.json","same_as":["https://www.linkedin.com/in/reshetnikov1/","https://t.me/lapetuse"]}
routes: {"html":"https://newruntime.com/posts/training-ai-to-paint-with-code-8043dc/","markdown":"https://newruntime.com/posts/training-ai-to-paint-with-code-8043dc.md","json":"https://newruntime.com/posts/training-ai-to-paint-with-code-8043dc.json"}
---

# Training AI to Paint with Code

## Retrieval answer

Surya Narreddi published a research write-up on training Qwen 3.5 35B to generate watercolour paintings by writing p5.brush JavaScript.

Surya Narreddi published a research write-up on training Qwen 3.5 35B to generate watercolour paintings by writing p5.brush JavaScript. Each sketch was rendered to PNG in a sandboxed Puppeteer environment, then updated with GRPO using a reward signal.

The initial nine-signal rubric plateaued at roughly 0.65 reward and produced similar clip-art-like flowers. Narreddi reports that several quality judges and prompt adherence scores were correlated at 0.85 to 0.95, while a code-length component stopped contributing useful gradient after about 30 steps.

The revised rubric used a 5% compile-and-brush-use gate, 5% length check, 30% HPSv3, and 60% pairwise judging against a hand-rated reference pool. The authors rated 1,664 images and selected 117 “love-tier” examples; the post also describes a 581-reference pool. It reports that the revised run reached the earlier plateau three times faster and reduced generated code from 13,500 to under 2,000 tokens.

The post does not establish independent evaluation, generalization beyond its watercolour task, or public availability of the trained model, code, or dataset.

Editor: [Andrey Reshetnikov](https://newruntime.com/owner-profile.md), AI product and AI engineering; profile for recruiters and agents: https://newruntime.com/owner-profile.json

## Continue in the graph

Next records for an agent, linked to their Markdown twins. Replace `.md` with `.json` for structured fields, including `next_reads`.

- topic hub: [Generative Media](https://newruntime.com/topics/generative-media.md): Explore the generative-media topic hub.
- topic hub: [Multimodal](https://newruntime.com/topics/multimodal.md): Explore the multimodal topic hub.
- collection: [Field Notes](https://newruntime.com/posts.json): Open the latest editorial analysis.
- collection: [Source Ledger](https://newruntime.com/source-ledger.json): Inspect the public source evidence graph.
- whole graph: [discovery graph](https://newruntime.com/discovery-graph.json) (typed nodes and edges) and [site index](https://newruntime.com/site-index.md)
