When Surya Narreddi posted a video of watercolours painted by a language model writing JavaScript, it pulled over 1.5 million views in days. The loose, imperfect brushwork stood out against the polished output of image models. Now the engineering recipe behind that result has been reproduced in the open, complete with training scripts, a hand-rated reference pool, and three trained reward mixes.

The pipeline runs end to end on Hugging Face. Training happens on Jobs, the RL environment and scorer model live as Spaces, the pairwise judge goes through Inference Providers, and every artifact sits in one Hub collection. Once the Spaces are running, the entire recipe is a single command. The base model is Qwen3.5-35B-A3B with LoRA, trained for 110 steps with 240 episodes per step and eight generations each.

The model writes roughly 150 lines of JavaScript using p5.brush, a library that adds natural drawing tools to p5.js. The style constraint is severe: only ten of the library’s methods are allowed. That restriction is what produces the handmade look. You can read the code, edit it, and run it again, and every brushstroke decision is visible in the output.

The reward signal is aesthetic preference, not verifiable correctness. HPSv3, an open 7B preference model, scores how much a person would like a given image paired with a text description. That makes this closer to RLHF than to the RL-on-verifiable-rewards work that dominates current language model training. Whether RL can meaningfully optimize over taste is the open question the project tests.

Narreddi came at this from the art and design side, not engineering. His thesis traces the path from prompting text-to-image models, where the prompt is the only lever, to training the model itself. The project also echoes Anna Ridler’s tulip work: curating a set of images by hand, then training against them. A full technical report is still coming, but the open implementation means anyone can run the recipe and see what the model produces.