<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Codex on Nelson Chen's Blog</title><link>https://mindflakes.com/tags/codex/</link><description>Recent content in Codex on Nelson Chen's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Copyright Nelson Chen</copyright><lastBuildDate>Mon, 04 May 2026 08:15:00 -0700</lastBuildDate><atom:link href="https://mindflakes.com/tags/codex/index.xml" rel="self" type="application/rss+xml"/><item><title>Unofficial MakerWorld PMM OpenSCAD Reference</title><link>https://mindflakes.com/posts/2026/05/04/makerworld-pmm-openscad-reference/</link><pubDate>Mon, 04 May 2026 08:15:00 -0700</pubDate><guid>https://mindflakes.com/posts/2026/05/04/makerworld-pmm-openscad-reference/</guid><description>&lt;p&gt;I made an &lt;a href="https://github.com/nelsonjchen/unofficial-makerworld-parametric-model-maker-openscad-docs"&gt;unofficial MakerWorld PMM OpenSCAD reference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The short version is that I wanted &lt;a href="https://openai.com/codex/"&gt;Codex&lt;/a&gt; to help me make MakerWorld-customizable &lt;a href="https://openscad.org/"&gt;OpenSCAD&lt;/a&gt; models, and I did not want it guessing from old forum posts, UI behavior, and whatever I happened to remember at 1 AM.&lt;/p&gt;
&lt;p&gt;This started because I wanted to use agents on my own OpenSCAD projects without re-teaching the same MakerWorld-specific weirdness every time.&lt;/p&gt;
&lt;h2 id="the-documentation-problem"&gt;The documentation problem&lt;/h2&gt;
&lt;p&gt;MakerWorld&amp;rsquo;s &lt;a href="https://forum.bambulab.com/t/parametric-model-maker-v1-1-0-major-ui-refresh/203564"&gt;Parametric Model Maker&lt;/a&gt; is genuinely useful. &lt;a href="https://openscad.org/"&gt;OpenSCAD&lt;/a&gt; plus a web customizer is a great fit for 3D-printable stuff where the interesting part is &amp;ldquo;same idea, slightly different dimensions.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;If you have not run into it before, &lt;a href="https://openscad.org/"&gt;OpenSCAD&lt;/a&gt; is CAD by writing code. You write variables, modules, and geometry operations, and it turns that into a model. That makes it very good for customizable prints, and very annoying when a target platform has extra rules.&lt;/p&gt;
&lt;p&gt;Unfortunately, the OpenSCAD side of PMM is documented in a very internet way. Some of it is in release posts. Some of it is in support replies. Some of it is in the actual web app. Some of it is people trying things and reporting what happened.&lt;/p&gt;
&lt;p&gt;There is a Bambu forum thread literally titled &lt;a href="https://forum.bambulab.com/t/any-documentation-on-parametric-model-maker/230605"&gt;Any Documentation on Parametric Model Maker?&lt;/a&gt;. The first post asks where to find the requirements for making customizable models. That felt familiar.&lt;/p&gt;
&lt;p&gt;For a human, scattered docs are annoying. For a coding agent, they are a great way to get plausible garbage. It might write OpenSCAD that looks fine locally but misses MakerWorld&amp;rsquo;s actual rules. It might invent a PMM feature because it saw something sort of similar somewhere else.&lt;/p&gt;
&lt;p&gt;I do not want an agent inventing &lt;code&gt;// preview[...]&lt;/code&gt; as a PMM feature. I want it to know that &lt;code&gt;// color&lt;/code&gt; is a thing, &lt;code&gt;// font&lt;/code&gt; is a thing, &lt;code&gt;mw_plate_N()&lt;/code&gt; is a thing, and &lt;code&gt;default.svg&lt;/code&gt; is not just some random example filename.&lt;/p&gt;
&lt;p&gt;So I made a reference.&lt;/p&gt;
&lt;h2 id="what-i-collected"&gt;What I collected&lt;/h2&gt;
&lt;p&gt;The repo is basically a practical map of the PMM OpenSCAD surface:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;a href="https://nelsonjchen.github.io/unofficial-makerworld-parametric-model-maker-openscad-docs/pmm-openscad-api/"&gt;PMM OpenSCAD API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;an &lt;a href="https://nelsonjchen.github.io/unofficial-makerworld-parametric-model-maker-openscad-docs/agent-workflow/"&gt;agent workflow&lt;/a&gt; for converting normal OpenSCAD into PMM-ready OpenSCAD&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nelsonjchen.github.io/unofficial-makerworld-parametric-model-maker-openscad-docs/gotchas/"&gt;gotchas&lt;/a&gt; that agents are likely to mess up&lt;/li&gt;
&lt;li&gt;compatibility rules&lt;/li&gt;
&lt;li&gt;public source snapshots&lt;/li&gt;
&lt;li&gt;patterns and checklists&lt;/li&gt;
&lt;li&gt;a generated docs site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The small examples are the important ones:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-scad" data-lang="scad"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;accent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#FF0000&amp;#34;&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// color
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;font_name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Roboto&amp;#34;&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// font
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;module&lt;/span&gt; mw_plate_1() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// printable plate here
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;module&lt;/span&gt; mw_assembly_view() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// preview-only assembly here
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;svg_file &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;default.svg&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;None of that is hard once you know it. The problem is making sure the agent knows it before it starts &amp;ldquo;helping.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I also made a &lt;a href="https://nelsonjchen.github.io/unofficial-makerworld-parametric-model-maker-openscad-docs/font-index/"&gt;PMM font index&lt;/a&gt;. It has 1881 MakerWorld PMM font families and 8267 exact PMM font strings. This got more elaborate than I expected, but fonts are exactly the kind of thing where an agent can confidently choose something that works on your machine and then does not work where the model actually runs.&lt;/p&gt;
&lt;h2 id="why-agent-first"&gt;Why agent-first&lt;/h2&gt;
&lt;p&gt;This is not meant to replace the official PMM UI or be a polished tutorial for someone&amp;rsquo;s first customizable model. It is mostly a pile of receipts and instructions for agents.&lt;/p&gt;
&lt;p&gt;Point &lt;a href="https://openai.com/codex/"&gt;Codex&lt;/a&gt; or another coding agent at the repo, then ask it to adapt a &lt;code&gt;.scad&lt;/code&gt; file for MakerWorld. The repo gives it rules to retrieve before it starts editing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;flatten local includes when PMM probably will not have them&lt;/li&gt;
&lt;li&gt;do not remove bundled PMM libraries like BOSL2 just because arbitrary local includes are risky&lt;/li&gt;
&lt;li&gt;use PMM upload defaults like &lt;code&gt;default.svg&lt;/code&gt; and &lt;code&gt;default.stl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;add &lt;code&gt;// color&lt;/code&gt; and &lt;code&gt;// font&lt;/code&gt; only where those controls are intended&lt;/li&gt;
&lt;li&gt;treat multi-plate output as a publishing decision, not just a module name&lt;/li&gt;
&lt;li&gt;cite whether a claim came from an official app endpoint, official release, employee reply, community report, or inference&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last part matters. I do not want a pile of agent-generated confidence. I want the agent to say why it thinks something is true.&lt;/p&gt;
&lt;h2 id="the-repo"&gt;The repo&lt;/h2&gt;
&lt;p&gt;The project is here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nelsonjchen/unofficial-makerworld-parametric-model-maker-openscad-docs"&gt;https://github.com/nelsonjchen/unofficial-makerworld-parametric-model-maker-openscad-docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The generated docs site is here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nelsonjchen.github.io/unofficial-makerworld-parametric-model-maker-openscad-docs/"&gt;https://nelsonjchen.github.io/unofficial-makerworld-parametric-model-maker-openscad-docs/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is unofficial, not endorsed by Bambu Lab or MakerWorld, and not a license grant for any font, library, model, or web asset. It is practical documentation from public sources and reverse-engineering.&lt;/p&gt;
&lt;p&gt;It is also probably incomplete or wrong in places. PMM keeps changing, and some of this stuff only becomes obvious after someone trips over it.&lt;/p&gt;
&lt;p&gt;Anyway, this mostly exists so my agents stop making the same MakerWorld OpenSCAD mistakes. If it saves someone else from digging through forum threads while trying to publish a customizable model, great.&lt;/p&gt;</description></item></channel></rss>