[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-qwen-qwen-mm-plugins-blender":3,"mdc-qffegj-key":37,"related-org-qwen-qwen-mm-plugins-blender":809,"related-repo-qwen-qwen-mm-plugins-blender":994},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"qwen-mm-plugins-blender","build and edit 3D scenes in Blender","Use whenever a task involves building or editing a 3D scene or asset in Blender — modeling, characters\u002Fpeople, architecture\u002Finteriors, terrain\u002Flandscapes, props, materials, lighting, or rendering. Covers discovering installed add-ons, using generators, importing and REFINING ready-made assets, and matching the result to the spec. Requires a running Blender instance with the blender-mcp addon (see Prerequisite).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"qwen","Qwen","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fqwen.png","QwenLM",[13,17,20,23],{"name":14,"slug":15,"type":16},"Creative","creative","tag",{"name":18,"slug":19,"type":16},"3D","3d",{"name":21,"slug":22,"type":16},"Animation","animation",{"name":24,"slug":25,"type":16},"Design","design",54,"https:\u002F\u002Fgithub.com\u002FQwenLM\u002FQwen-MM-Plugins","2026-08-05T05:58:30.425245",null,0,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Make any agent harness multimodal-native.","https:\u002F\u002Fgithub.com\u002FQwenLM\u002FQwen-MM-Plugins\u002Ftree\u002FHEAD\u002Fsrc\u002Fcapabilities\u002Fblender\u002Fskill","---\nname: qwen-mm-plugins-blender\ndescription: Use whenever a task involves building or editing a 3D scene or asset in Blender — modeling, characters\u002Fpeople, architecture\u002Finteriors, terrain\u002Flandscapes, props, materials, lighting, or rendering. Covers discovering installed add-ons, using generators, importing and REFINING ready-made assets, and matching the result to the spec. Requires a running Blender instance with the blender-mcp addon (see Prerequisite).\n---\n\nYou build 3D content in Blender by writing Python (via the `execute_blender_code` tool) against a **running** Blender instance. Quality bar: the result must actually match the request — not a rough pile of primitives, and not a bare unedited import.\n\n## Prerequisite: a live Blender + addon (started for you on first use)\n\nThese tools are a **thin client**: they run Python against a **running** Blender carrying the\nblender-mcp addon (bundled in this plugin), and do **not** launch Blender while serving. Normally you\nstart nothing — just call a tool.\n\n- **Default (plugin install):** `QWEN_MM_AUTOLAUNCH=1` is preset, so the **first tool call** brings\n  Blender up itself: it auto-installs the pinned Blender 4.2.x if missing (Linux-x86_64, rootless,\n  ~300 MB one-time) and starts it with the bundled addon on `$BLENDER_HOST:$BLENDER_PORT` (default\n  `localhost:9876`). Just call a tool such as `get_scene_info`; the **first** call may take a minute\n  or two while it downloads (expected), later calls are instant.\n- **Don't shell out to `qwen-mm-plugins-blender --launch-app` under a plugin install** — that console\n  entry lives inside the uvx environment, not your shell PATH (`command not found`). Use it only from\n  a source checkout, or for a manual \u002F GUI start:\n  ```bash\n  python3 src\u002Fcapabilities\u002Fblender\u002Fqwen_mm_plugins_blender --launch-app        # headless (xvfb)\n  python3 src\u002Fcapabilities\u002Fblender\u002Fqwen_mm_plugins_blender --launch-app --gui  # real display\n  ```\n\nAuto-launch can't cover two things: (1) auto-download is **Linux-x86_64 only** — elsewhere install\nBlender yourself (`apt install blender` | `brew install --cask blender`); (2) a headless box needs a\nvirtual display (`apt install xvfb`, needs root). If a tool reports it can't connect, it's almost\nalways one of these — the error message spells out which; from a checkout, `... --check-system` lists\nevery missing system tool.\n\n## Core workflow: build → REFINE → verify (never skip refine)\n\nGenerating or importing something is only step 1. A bare import, or a loose pile of assets, is NOT an acceptable final result. Always:\n1. **Decompose the request** into concrete objects, real-world sizes, layout, materials, and lighting.\n2. **Get base geometry** — prefer a generator or a ready-made asset *when one genuinely fits*. If nothing fits well, build it from scratch (primitives + modifiers + bmesh \u002F geometry nodes); do NOT force an ill-fitting asset just to avoid modeling.\n3. **Refine deeply to spec** — transforms (scale\u002Fposition\u002Forientation) are the bare minimum, not the goal. A good result usually needs substantial work on top of the base: correct proportions and real-world dimensions; edit\u002Fadd\u002Fremove geometry and fix topology; model the details the request implies; combine\u002Fkitbash parts from several sources; author or tune materials and shading (not the defaults); set up lighting; and make objects relate correctly to one another (contact, alignment, consistent scale). Keep going until the object truly looks like what was asked.\n4. **Verify and iterate** — render (`bpy.ops.render.render`) or capture `get_viewport_screenshot`, compare against the request, and fix the gaps. Repeat until it genuinely matches. Always call `get_scene_info` after a task to confirm the changes landed.\n\n## Discover what's installed (do this before assuming)\n\nAdd-on sets differ per machine — introspect the running Blender instead of guessing:\n```python\nimport bpy\nprint([a.module for a in bpy.context.preferences.addons])           # enabled add-ons\nprint([x for x in dir(bpy.ops.mesh) if not x.startswith(\"__\")])     # available mesh operators\n```\n\n## Using add-ons\n\n- **Operator-based add-ons** (Archimesh, A.N.T. Landscape, Tissue, and most add-ons): call the operator directly — operator names (`bl_idname`) are global and do NOT depend on how the add-on was installed:\n  - Architecture (rooms\u002Fdoors\u002Fwindows\u002Fstairs\u002Fkitchen): `bpy.ops.mesh.archimesh_room()`, `.archimesh_door()`, `.archimesh_window()`, `.archimesh_stairs()`, `.archimesh_kitchen()`\n  - Terrain\u002Flandscape: `bpy.ops.mesh.landscape_add(...)` — if it raises a poll() error, wrap the call in `bpy.context.temp_override(...)` with a VIEW_3D area + WINDOW region; set smoothing via `mesh.polygons[i].use_smooth=True` (not `shade_smooth()`).\n  - Repeating patterns (brick walls, panels, honeycomb): select a base object + a component object, then `bpy.ops.object.tissue_tessellate()`.\n\n- **Python-API add-ons installed as extensions** (Blender 4.2+): the module lives under the `bl_ext.user_default.\u003Cid>` namespace, NOT the bare name. For MPFB (human generator):\n  ```python\n  from bl_ext.user_default.mpfb.services.humanservice import HumanService\n  human = HumanService.create_human()\n  ```\n  Portable form (works whether it's a legacy add-on or an extension):\n  ```python\n  import importlib, bpy\n  mod = next((m for m in bpy.context.preferences.addons.keys()\n              if m.split('.')[-1] == 'mpfb'), 'mpfb')\n  HumanService = importlib.import_module(mod + '.services.humanservice').HumanService\n  human = HumanService.create_human()\n  ```\n  `create_human()` returns the body mesh only. Apply skin\u002Feyes\u002Fteeth (MPFB's MaterialService \u002F the installed system-assets pack) so it isn't a gray mannequin, then adjust proportions\u002Fmorphs toward the target.\n\n## Ready-made assets (download at runtime — then refine)\n\n- Furniture & finished models: `search_sketchfab_models` → `download_sketchfab_model` (check the preview with `get_sketchfab_model_preview` first).\n- Materials \u002F HDRIs \u002F props: `search_polyhaven_assets` → `download_polyhaven_asset`; apply a texture with `set_texture`.\n- Generate a custom single item: `generate_hyper3d_model_via_text` \u002F `..._via_images` → `poll_rodin_job_status` → `import_generated_asset` (or the Hunyuan3D equivalents). Generators are for a single item — don't generate a whole scene or the ground in one shot.\n\nAn imported\u002Fgenerated asset is a starting point, not the deliverable. Normalize scale and placement, then refine it to the request: adjust proportions\u002Fgeometry, fix or replace materials, add missing detail, and combine with other parts. After importing, always check the `world_bounding_box` and adjust location\u002Fscale\u002Frotation so objects sit correctly and don't clip. If the closest asset is still a poor match, discard it and build from scratch.\n\n## Nature without add-ons\n- Scatter (grass\u002Frocks\u002Ftrees): Geometry Nodes \"Distribute Points on Faces\" + \"Instance on Points\".\n- Sky\u002Fsun lighting: a world Sky Texture node with `sky_type='NISHITA'`.\n\n## Reminder\nUse generators and ready-made assets when they genuinely fit — but acquiring one is the start, not the finish, and forcing a poor-fit asset is worse than modeling from scratch. The deliverable is a scene\u002Fasset that truly matches the request, which usually takes real modeling, material, and lighting work well beyond simple transforms.\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,67,74,99,252,296,302,307,382,388,393,427,433,653,659,753,766,772,792,798,803],{"type":43,"tag":44,"props":45,"children":46},"element","p",{},[47,50,57,59,65],{"type":48,"value":49},"text","You build 3D content in Blender by writing Python (via the ",{"type":43,"tag":51,"props":52,"children":54},"code",{"className":53},[],[55],{"type":48,"value":56},"execute_blender_code",{"type":48,"value":58}," tool) against a ",{"type":43,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":48,"value":64},"running",{"type":48,"value":66}," Blender instance. Quality bar: the result must actually match the request — not a rough pile of primitives, and not a bare unedited import.",{"type":43,"tag":68,"props":69,"children":71},"h2",{"id":70},"prerequisite-a-live-blender-addon-started-for-you-on-first-use",[72],{"type":48,"value":73},"Prerequisite: a live Blender + addon (started for you on first use)",{"type":43,"tag":44,"props":75,"children":76},{},[77,79,84,86,90,92,97],{"type":48,"value":78},"These tools are a ",{"type":43,"tag":60,"props":80,"children":81},{},[82],{"type":48,"value":83},"thin client",{"type":48,"value":85},": they run Python against a ",{"type":43,"tag":60,"props":87,"children":88},{},[89],{"type":48,"value":64},{"type":48,"value":91}," Blender carrying the\nblender-mcp addon (bundled in this plugin), and do ",{"type":43,"tag":60,"props":93,"children":94},{},[95],{"type":48,"value":96},"not",{"type":48,"value":98}," launch Blender while serving. Normally you\nstart nothing — just call a tool.",{"type":43,"tag":100,"props":101,"children":102},"ul",{},[103,160],{"type":43,"tag":104,"props":105,"children":106},"li",{},[107,112,114,120,122,127,129,135,137,143,145,151,153,158],{"type":43,"tag":60,"props":108,"children":109},{},[110],{"type":48,"value":111},"Default (plugin install):",{"type":48,"value":113}," ",{"type":43,"tag":51,"props":115,"children":117},{"className":116},[],[118],{"type":48,"value":119},"QWEN_MM_AUTOLAUNCH=1",{"type":48,"value":121}," is preset, so the ",{"type":43,"tag":60,"props":123,"children":124},{},[125],{"type":48,"value":126},"first tool call",{"type":48,"value":128}," brings\nBlender up itself: it auto-installs the pinned Blender 4.2.x if missing (Linux-x86_64, rootless,\n~300 MB one-time) and starts it with the bundled addon on ",{"type":43,"tag":51,"props":130,"children":132},{"className":131},[],[133],{"type":48,"value":134},"$BLENDER_HOST:$BLENDER_PORT",{"type":48,"value":136}," (default\n",{"type":43,"tag":51,"props":138,"children":140},{"className":139},[],[141],{"type":48,"value":142},"localhost:9876",{"type":48,"value":144},"). Just call a tool such as ",{"type":43,"tag":51,"props":146,"children":148},{"className":147},[],[149],{"type":48,"value":150},"get_scene_info",{"type":48,"value":152},"; the ",{"type":43,"tag":60,"props":154,"children":155},{},[156],{"type":48,"value":157},"first",{"type":48,"value":159}," call may take a minute\nor two while it downloads (expected), later calls are instant.",{"type":43,"tag":104,"props":161,"children":162},{},[163,176,178,184,186],{"type":43,"tag":60,"props":164,"children":165},{},[166,168,174],{"type":48,"value":167},"Don't shell out to ",{"type":43,"tag":51,"props":169,"children":171},{"className":170},[],[172],{"type":48,"value":173},"qwen-mm-plugins-blender --launch-app",{"type":48,"value":175}," under a plugin install",{"type":48,"value":177}," — that console\nentry lives inside the uvx environment, not your shell PATH (",{"type":43,"tag":51,"props":179,"children":181},{"className":180},[],[182],{"type":48,"value":183},"command not found",{"type":48,"value":185},"). Use it only from\na source checkout, or for a manual \u002F GUI start:\n",{"type":43,"tag":187,"props":188,"children":193},"pre",{"className":189,"code":190,"language":191,"meta":192,"style":192},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python3 src\u002Fcapabilities\u002Fblender\u002Fqwen_mm_plugins_blender --launch-app        # headless (xvfb)\npython3 src\u002Fcapabilities\u002Fblender\u002Fqwen_mm_plugins_blender --launch-app --gui  # real display\n","bash","",[194],{"type":43,"tag":51,"props":195,"children":196},{"__ignoreMap":192},[197,226],{"type":43,"tag":198,"props":199,"children":202},"span",{"class":200,"line":201},"line",1,[203,209,215,220],{"type":43,"tag":198,"props":204,"children":206},{"style":205},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[207],{"type":48,"value":208},"python3",{"type":43,"tag":198,"props":210,"children":212},{"style":211},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[213],{"type":48,"value":214}," src\u002Fcapabilities\u002Fblender\u002Fqwen_mm_plugins_blender",{"type":43,"tag":198,"props":216,"children":217},{"style":211},[218],{"type":48,"value":219}," --launch-app",{"type":43,"tag":198,"props":221,"children":223},{"style":222},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[224],{"type":48,"value":225},"        # headless (xvfb)\n",{"type":43,"tag":198,"props":227,"children":229},{"class":200,"line":228},2,[230,234,238,242,247],{"type":43,"tag":198,"props":231,"children":232},{"style":205},[233],{"type":48,"value":208},{"type":43,"tag":198,"props":235,"children":236},{"style":211},[237],{"type":48,"value":214},{"type":43,"tag":198,"props":239,"children":240},{"style":211},[241],{"type":48,"value":219},{"type":43,"tag":198,"props":243,"children":244},{"style":211},[245],{"type":48,"value":246}," --gui",{"type":43,"tag":198,"props":248,"children":249},{"style":222},[250],{"type":48,"value":251},"  # real display\n",{"type":43,"tag":44,"props":253,"children":254},{},[255,257,262,264,270,272,278,280,286,288,294],{"type":48,"value":256},"Auto-launch can't cover two things: (1) auto-download is ",{"type":43,"tag":60,"props":258,"children":259},{},[260],{"type":48,"value":261},"Linux-x86_64 only",{"type":48,"value":263}," — elsewhere install\nBlender yourself (",{"type":43,"tag":51,"props":265,"children":267},{"className":266},[],[268],{"type":48,"value":269},"apt install blender",{"type":48,"value":271}," | ",{"type":43,"tag":51,"props":273,"children":275},{"className":274},[],[276],{"type":48,"value":277},"brew install --cask blender",{"type":48,"value":279},"); (2) a headless box needs a\nvirtual display (",{"type":43,"tag":51,"props":281,"children":283},{"className":282},[],[284],{"type":48,"value":285},"apt install xvfb",{"type":48,"value":287},", needs root). If a tool reports it can't connect, it's almost\nalways one of these — the error message spells out which; from a checkout, ",{"type":43,"tag":51,"props":289,"children":291},{"className":290},[],[292],{"type":48,"value":293},"... --check-system",{"type":48,"value":295}," lists\nevery missing system tool.",{"type":43,"tag":68,"props":297,"children":299},{"id":298},"core-workflow-build-refine-verify-never-skip-refine",[300],{"type":48,"value":301},"Core workflow: build → REFINE → verify (never skip refine)",{"type":43,"tag":44,"props":303,"children":304},{},[305],{"type":48,"value":306},"Generating or importing something is only step 1. A bare import, or a loose pile of assets, is NOT an acceptable final result. Always:",{"type":43,"tag":308,"props":309,"children":310},"ol",{},[311,321,339,349],{"type":43,"tag":104,"props":312,"children":313},{},[314,319],{"type":43,"tag":60,"props":315,"children":316},{},[317],{"type":48,"value":318},"Decompose the request",{"type":48,"value":320}," into concrete objects, real-world sizes, layout, materials, and lighting.",{"type":43,"tag":104,"props":322,"children":323},{},[324,329,331,337],{"type":43,"tag":60,"props":325,"children":326},{},[327],{"type":48,"value":328},"Get base geometry",{"type":48,"value":330}," — prefer a generator or a ready-made asset ",{"type":43,"tag":332,"props":333,"children":334},"em",{},[335],{"type":48,"value":336},"when one genuinely fits",{"type":48,"value":338},". If nothing fits well, build it from scratch (primitives + modifiers + bmesh \u002F geometry nodes); do NOT force an ill-fitting asset just to avoid modeling.",{"type":43,"tag":104,"props":340,"children":341},{},[342,347],{"type":43,"tag":60,"props":343,"children":344},{},[345],{"type":48,"value":346},"Refine deeply to spec",{"type":48,"value":348}," — transforms (scale\u002Fposition\u002Forientation) are the bare minimum, not the goal. A good result usually needs substantial work on top of the base: correct proportions and real-world dimensions; edit\u002Fadd\u002Fremove geometry and fix topology; model the details the request implies; combine\u002Fkitbash parts from several sources; author or tune materials and shading (not the defaults); set up lighting; and make objects relate correctly to one another (contact, alignment, consistent scale). Keep going until the object truly looks like what was asked.",{"type":43,"tag":104,"props":350,"children":351},{},[352,357,359,365,367,373,375,380],{"type":43,"tag":60,"props":353,"children":354},{},[355],{"type":48,"value":356},"Verify and iterate",{"type":48,"value":358}," — render (",{"type":43,"tag":51,"props":360,"children":362},{"className":361},[],[363],{"type":48,"value":364},"bpy.ops.render.render",{"type":48,"value":366},") or capture ",{"type":43,"tag":51,"props":368,"children":370},{"className":369},[],[371],{"type":48,"value":372},"get_viewport_screenshot",{"type":48,"value":374},", compare against the request, and fix the gaps. Repeat until it genuinely matches. Always call ",{"type":43,"tag":51,"props":376,"children":378},{"className":377},[],[379],{"type":48,"value":150},{"type":48,"value":381}," after a task to confirm the changes landed.",{"type":43,"tag":68,"props":383,"children":385},{"id":384},"discover-whats-installed-do-this-before-assuming",[386],{"type":48,"value":387},"Discover what's installed (do this before assuming)",{"type":43,"tag":44,"props":389,"children":390},{},[391],{"type":48,"value":392},"Add-on sets differ per machine — introspect the running Blender instead of guessing:",{"type":43,"tag":187,"props":394,"children":398},{"className":395,"code":396,"language":397,"meta":192,"style":192},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import bpy\nprint([a.module for a in bpy.context.preferences.addons])           # enabled add-ons\nprint([x for x in dir(bpy.ops.mesh) if not x.startswith(\"__\")])     # available mesh operators\n","python",[399],{"type":43,"tag":51,"props":400,"children":401},{"__ignoreMap":192},[402,410,418],{"type":43,"tag":198,"props":403,"children":404},{"class":200,"line":201},[405],{"type":43,"tag":198,"props":406,"children":407},{},[408],{"type":48,"value":409},"import bpy\n",{"type":43,"tag":198,"props":411,"children":412},{"class":200,"line":228},[413],{"type":43,"tag":198,"props":414,"children":415},{},[416],{"type":48,"value":417},"print([a.module for a in bpy.context.preferences.addons])           # enabled add-ons\n",{"type":43,"tag":198,"props":419,"children":421},{"class":200,"line":420},3,[422],{"type":43,"tag":198,"props":423,"children":424},{},[425],{"type":48,"value":426},"print([x for x in dir(bpy.ops.mesh) if not x.startswith(\"__\")])     # available mesh operators\n",{"type":43,"tag":68,"props":428,"children":430},{"id":429},"using-add-ons",[431],{"type":48,"value":432},"Using add-ons",{"type":43,"tag":100,"props":434,"children":435},{},[436,547],{"type":43,"tag":104,"props":437,"children":438},{},[439,444,446,452,454],{"type":43,"tag":60,"props":440,"children":441},{},[442],{"type":48,"value":443},"Operator-based add-ons",{"type":48,"value":445}," (Archimesh, A.N.T. Landscape, Tissue, and most add-ons): call the operator directly — operator names (",{"type":43,"tag":51,"props":447,"children":449},{"className":448},[],[450],{"type":48,"value":451},"bl_idname",{"type":48,"value":453},") are global and do NOT depend on how the add-on was installed:",{"type":43,"tag":100,"props":455,"children":456},{},[457,497,534],{"type":43,"tag":104,"props":458,"children":459},{},[460,462,468,470,476,477,483,484,490,491],{"type":48,"value":461},"Architecture (rooms\u002Fdoors\u002Fwindows\u002Fstairs\u002Fkitchen): ",{"type":43,"tag":51,"props":463,"children":465},{"className":464},[],[466],{"type":48,"value":467},"bpy.ops.mesh.archimesh_room()",{"type":48,"value":469},", ",{"type":43,"tag":51,"props":471,"children":473},{"className":472},[],[474],{"type":48,"value":475},".archimesh_door()",{"type":48,"value":469},{"type":43,"tag":51,"props":478,"children":480},{"className":479},[],[481],{"type":48,"value":482},".archimesh_window()",{"type":48,"value":469},{"type":43,"tag":51,"props":485,"children":487},{"className":486},[],[488],{"type":48,"value":489},".archimesh_stairs()",{"type":48,"value":469},{"type":43,"tag":51,"props":492,"children":494},{"className":493},[],[495],{"type":48,"value":496},".archimesh_kitchen()",{"type":43,"tag":104,"props":498,"children":499},{},[500,502,508,510,516,518,524,526,532],{"type":48,"value":501},"Terrain\u002Flandscape: ",{"type":43,"tag":51,"props":503,"children":505},{"className":504},[],[506],{"type":48,"value":507},"bpy.ops.mesh.landscape_add(...)",{"type":48,"value":509}," — if it raises a poll() error, wrap the call in ",{"type":43,"tag":51,"props":511,"children":513},{"className":512},[],[514],{"type":48,"value":515},"bpy.context.temp_override(...)",{"type":48,"value":517}," with a VIEW_3D area + WINDOW region; set smoothing via ",{"type":43,"tag":51,"props":519,"children":521},{"className":520},[],[522],{"type":48,"value":523},"mesh.polygons[i].use_smooth=True",{"type":48,"value":525}," (not ",{"type":43,"tag":51,"props":527,"children":529},{"className":528},[],[530],{"type":48,"value":531},"shade_smooth()",{"type":48,"value":533},").",{"type":43,"tag":104,"props":535,"children":536},{},[537,539,545],{"type":48,"value":538},"Repeating patterns (brick walls, panels, honeycomb): select a base object + a component object, then ",{"type":43,"tag":51,"props":540,"children":542},{"className":541},[],[543],{"type":48,"value":544},"bpy.ops.object.tissue_tessellate()",{"type":48,"value":546},".",{"type":43,"tag":104,"props":548,"children":549},{},[550,555,557,563,565,588,592,594,642,645,651],{"type":43,"tag":60,"props":551,"children":552},{},[553],{"type":48,"value":554},"Python-API add-ons installed as extensions",{"type":48,"value":556}," (Blender 4.2+): the module lives under the ",{"type":43,"tag":51,"props":558,"children":560},{"className":559},[],[561],{"type":48,"value":562},"bl_ext.user_default.\u003Cid>",{"type":48,"value":564}," namespace, NOT the bare name. For MPFB (human generator):",{"type":43,"tag":187,"props":566,"children":568},{"className":395,"code":567,"language":397,"meta":192,"style":192},"from bl_ext.user_default.mpfb.services.humanservice import HumanService\nhuman = HumanService.create_human()\n",[569],{"type":43,"tag":51,"props":570,"children":571},{"__ignoreMap":192},[572,580],{"type":43,"tag":198,"props":573,"children":574},{"class":200,"line":201},[575],{"type":43,"tag":198,"props":576,"children":577},{},[578],{"type":48,"value":579},"from bl_ext.user_default.mpfb.services.humanservice import HumanService\n",{"type":43,"tag":198,"props":581,"children":582},{"class":200,"line":228},[583],{"type":43,"tag":198,"props":584,"children":585},{},[586],{"type":48,"value":587},"human = HumanService.create_human()\n",{"type":43,"tag":589,"props":590,"children":591},"br",{},[],{"type":48,"value":593},"Portable form (works whether it's a legacy add-on or an extension):",{"type":43,"tag":187,"props":595,"children":597},{"className":395,"code":596,"language":397,"meta":192,"style":192},"import importlib, bpy\nmod = next((m for m in bpy.context.preferences.addons.keys()\n            if m.split('.')[-1] == 'mpfb'), 'mpfb')\nHumanService = importlib.import_module(mod + '.services.humanservice').HumanService\nhuman = HumanService.create_human()\n",[598],{"type":43,"tag":51,"props":599,"children":600},{"__ignoreMap":192},[601,609,617,625,634],{"type":43,"tag":198,"props":602,"children":603},{"class":200,"line":201},[604],{"type":43,"tag":198,"props":605,"children":606},{},[607],{"type":48,"value":608},"import importlib, bpy\n",{"type":43,"tag":198,"props":610,"children":611},{"class":200,"line":228},[612],{"type":43,"tag":198,"props":613,"children":614},{},[615],{"type":48,"value":616},"mod = next((m for m in bpy.context.preferences.addons.keys()\n",{"type":43,"tag":198,"props":618,"children":619},{"class":200,"line":420},[620],{"type":43,"tag":198,"props":621,"children":622},{},[623],{"type":48,"value":624},"            if m.split('.')[-1] == 'mpfb'), 'mpfb')\n",{"type":43,"tag":198,"props":626,"children":628},{"class":200,"line":627},4,[629],{"type":43,"tag":198,"props":630,"children":631},{},[632],{"type":48,"value":633},"HumanService = importlib.import_module(mod + '.services.humanservice').HumanService\n",{"type":43,"tag":198,"props":635,"children":637},{"class":200,"line":636},5,[638],{"type":43,"tag":198,"props":639,"children":640},{},[641],{"type":48,"value":587},{"type":43,"tag":589,"props":643,"children":644},{},[],{"type":43,"tag":51,"props":646,"children":648},{"className":647},[],[649],{"type":48,"value":650},"create_human()",{"type":48,"value":652}," returns the body mesh only. Apply skin\u002Feyes\u002Fteeth (MPFB's MaterialService \u002F the installed system-assets pack) so it isn't a gray mannequin, then adjust proportions\u002Fmorphs toward the target.",{"type":43,"tag":68,"props":654,"children":656},{"id":655},"ready-made-assets-download-at-runtime-then-refine",[657],{"type":48,"value":658},"Ready-made assets (download at runtime — then refine)",{"type":43,"tag":100,"props":660,"children":661},{},[662,691,718],{"type":43,"tag":104,"props":663,"children":664},{},[665,667,673,675,681,683,689],{"type":48,"value":666},"Furniture & finished models: ",{"type":43,"tag":51,"props":668,"children":670},{"className":669},[],[671],{"type":48,"value":672},"search_sketchfab_models",{"type":48,"value":674}," → ",{"type":43,"tag":51,"props":676,"children":678},{"className":677},[],[679],{"type":48,"value":680},"download_sketchfab_model",{"type":48,"value":682}," (check the preview with ",{"type":43,"tag":51,"props":684,"children":686},{"className":685},[],[687],{"type":48,"value":688},"get_sketchfab_model_preview",{"type":48,"value":690}," first).",{"type":43,"tag":104,"props":692,"children":693},{},[694,696,702,703,709,711,717],{"type":48,"value":695},"Materials \u002F HDRIs \u002F props: ",{"type":43,"tag":51,"props":697,"children":699},{"className":698},[],[700],{"type":48,"value":701},"search_polyhaven_assets",{"type":48,"value":674},{"type":43,"tag":51,"props":704,"children":706},{"className":705},[],[707],{"type":48,"value":708},"download_polyhaven_asset",{"type":48,"value":710},"; apply a texture with ",{"type":43,"tag":51,"props":712,"children":714},{"className":713},[],[715],{"type":48,"value":716},"set_texture",{"type":48,"value":546},{"type":43,"tag":104,"props":719,"children":720},{},[721,723,729,731,737,738,744,745,751],{"type":48,"value":722},"Generate a custom single item: ",{"type":43,"tag":51,"props":724,"children":726},{"className":725},[],[727],{"type":48,"value":728},"generate_hyper3d_model_via_text",{"type":48,"value":730}," \u002F ",{"type":43,"tag":51,"props":732,"children":734},{"className":733},[],[735],{"type":48,"value":736},"..._via_images",{"type":48,"value":674},{"type":43,"tag":51,"props":739,"children":741},{"className":740},[],[742],{"type":48,"value":743},"poll_rodin_job_status",{"type":48,"value":674},{"type":43,"tag":51,"props":746,"children":748},{"className":747},[],[749],{"type":48,"value":750},"import_generated_asset",{"type":48,"value":752}," (or the Hunyuan3D equivalents). Generators are for a single item — don't generate a whole scene or the ground in one shot.",{"type":43,"tag":44,"props":754,"children":755},{},[756,758,764],{"type":48,"value":757},"An imported\u002Fgenerated asset is a starting point, not the deliverable. Normalize scale and placement, then refine it to the request: adjust proportions\u002Fgeometry, fix or replace materials, add missing detail, and combine with other parts. After importing, always check the ",{"type":43,"tag":51,"props":759,"children":761},{"className":760},[],[762],{"type":48,"value":763},"world_bounding_box",{"type":48,"value":765}," and adjust location\u002Fscale\u002Frotation so objects sit correctly and don't clip. If the closest asset is still a poor match, discard it and build from scratch.",{"type":43,"tag":68,"props":767,"children":769},{"id":768},"nature-without-add-ons",[770],{"type":48,"value":771},"Nature without add-ons",{"type":43,"tag":100,"props":773,"children":774},{},[775,780],{"type":43,"tag":104,"props":776,"children":777},{},[778],{"type":48,"value":779},"Scatter (grass\u002Frocks\u002Ftrees): Geometry Nodes \"Distribute Points on Faces\" + \"Instance on Points\".",{"type":43,"tag":104,"props":781,"children":782},{},[783,785,791],{"type":48,"value":784},"Sky\u002Fsun lighting: a world Sky Texture node with ",{"type":43,"tag":51,"props":786,"children":788},{"className":787},[],[789],{"type":48,"value":790},"sky_type='NISHITA'",{"type":48,"value":546},{"type":43,"tag":68,"props":793,"children":795},{"id":794},"reminder",[796],{"type":48,"value":797},"Reminder",{"type":43,"tag":44,"props":799,"children":800},{},[801],{"type":48,"value":802},"Use generators and ready-made assets when they genuinely fit — but acquiring one is the start, not the finish, and forcing a poor-fit asset is worse than modeling from scratch. The deliverable is a scene\u002Fasset that truly matches the request, which usually takes real modeling, material, and lighting work well beyond simple transforms.",{"type":43,"tag":804,"props":805,"children":806},"style",{},[807],{"type":48,"value":808},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":810,"total":993},[811,826,845,861,877,891,907,921,934,948,960,975],{"slug":812,"name":812,"fn":813,"description":814,"org":815,"tags":816,"stars":823,"repoUrl":824,"updatedAt":825},"batch","execute parallel batch operations on files","Execute batch operations on multiple files in parallel. Automatically discovers files, splits into chunks, and processes with parallel worker agents. Use `\u002Fbatch` followed by operation and file pattern.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[817,820],{"name":818,"slug":819,"type":16},"Automation","automation",{"name":821,"slug":822,"type":16},"Concurrency","concurrency",26008,"https:\u002F\u002Fgithub.com\u002FQwenLM\u002Fqwen-code","2026-07-20T05:58:45.650067",{"slug":827,"name":827,"fn":828,"description":829,"org":830,"tags":831,"stars":823,"repoUrl":824,"updatedAt":844},"cua-driver-rs","drive native GUI applications via MCP","Drive a native GUI app (macOS, Windows, Linux) via the cua-driver CLI (default) or MCP server — snapshot its accessibility tree, click\u002Ftype\u002Fscroll by element_index or pixel coords, verify via re-snapshot, all without bringing the target to the foreground. Use when the user asks you to operate, drive, automate, or perform a GUI task in a real application on the host.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[832,835,838,841],{"name":833,"slug":834,"type":16},"Accessibility","accessibility",{"name":836,"slug":837,"type":16},"Browser Automation","browser-automation",{"name":839,"slug":840,"type":16},"Desktop","desktop",{"name":842,"slug":843,"type":16},"MCP","mcp","2026-07-16T05:59:28.687299",{"slug":846,"name":846,"fn":847,"description":848,"org":849,"tags":850,"stars":823,"repoUrl":824,"updatedAt":860},"dataviz","design and validate data visualizations","Design guidance for charts, graphs, dashboards, maps, and data visualizations, including a local palette validator.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[851,854,857],{"name":852,"slug":853,"type":16},"Charts","charts",{"name":855,"slug":856,"type":16},"Dashboards","dashboards",{"name":858,"slug":859,"type":16},"Data Visualization","data-visualization","2026-07-16T05:59:28.31755",{"slug":862,"name":862,"fn":863,"description":864,"org":865,"tags":866,"stars":823,"repoUrl":824,"updatedAt":876},"extension-creator","create Qwen Code extensions","Create, scaffold, customize, validate, and locally test Qwen Code extensions. Use when the user wants a new Qwen Code extension, needs help choosing an extension template, wants to add QWEN.md context, commands, skills, agents, MCP servers, settings, hooks, channels, or LSP servers, or asks how to link and test an extension locally. Invoke with `\u002Fextension-creator` followed by an extension path and optional template name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[867,870,873],{"name":868,"slug":869,"type":16},"Coding","coding",{"name":871,"slug":872,"type":16},"Documentation","documentation",{"name":874,"slug":875,"type":16},"Plugin Development","plugin-development","2026-07-16T05:59:24.818967",{"slug":878,"name":878,"fn":879,"description":880,"org":881,"tags":882,"stars":823,"repoUrl":824,"updatedAt":890},"loop","run scheduled or self-paced prompt loops","Create a loop that runs a prompt now and follows up either on a fixed schedule or through self-paced wakeups. Usage - \u002Floop check the build, \u002Floop 5m check the build, \u002Floop check the PR every 30m. \u002Floop list to show jobs, \u002Floop clear to cancel all.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[883,884,887],{"name":818,"slug":819,"type":16},{"name":885,"slug":886,"type":16},"Productivity","productivity",{"name":888,"slug":889,"type":16},"Scheduling","scheduling","2026-07-16T05:59:25.50027",{"slug":892,"name":892,"fn":893,"description":894,"org":895,"tags":896,"stars":823,"repoUrl":824,"updatedAt":906},"new-app","build new applications from scratch","Workflow for creating new applications from scratch. Covers requirements gathering, tech stack selection, scaffolding, implementation, and delivery of a functional prototype.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[897,900,903],{"name":898,"slug":899,"type":16},"Engineering","engineering",{"name":901,"slug":902,"type":16},"Prototyping","prototyping",{"name":904,"slug":905,"type":16},"Web Development","web-development","2026-07-16T05:59:25.157573",{"slug":908,"name":908,"fn":909,"description":910,"org":911,"tags":912,"stars":823,"repoUrl":824,"updatedAt":920},"qc-helper","provide Qwen Code usage and configuration support","Answer any question about Qwen Code usage, features, configuration, and troubleshooting by referencing the official user documentation. Also helps users view or modify their settings.json. Invoke with `\u002Fqc-helper` followed by a question, e.g. `\u002Fqc-helper how do I configure MCP servers?` or `\u002Fqc-helper change approval mode to yolo`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[913,916,917],{"name":914,"slug":915,"type":16},"Configuration","configuration",{"name":871,"slug":872,"type":16},{"name":918,"slug":919,"type":16},"Reference","reference","2026-07-16T05:59:29.118413",{"slug":922,"name":922,"fn":923,"description":924,"org":925,"tags":926,"stars":823,"repoUrl":824,"updatedAt":933},"review","review code for quality and security","Review changed code for correctness, security, code quality, and performance. Use when the user asks to review code changes, a PR, or specific files. Invoke with `\u002Freview`, `\u002Freview \u003Cpr-number>`, `\u002Freview \u003Cfile-path>`, `\u002Freview \u003Cpr-number> --comment` to post inline comments on the PR, or `\u002Freview --fix` to apply the findings to your working tree. Add `--effort low|medium|high` to trade depth for speed (defaults to high for PRs, medium for local changes).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[927,930],{"name":928,"slug":929,"type":16},"Code Review","code-review",{"name":931,"slug":932,"type":16},"Security","security","2026-08-05T05:37:32.013531",{"slug":935,"name":935,"fn":936,"description":937,"org":938,"tags":939,"stars":823,"repoUrl":824,"updatedAt":947},"simplify","clean up and simplify code changes","Review recent code changes for reuse, code quality, and efficiency, then directly apply straightforward cleanup improvements. Use when the user wants a post-implementation cleanup pass, pre-PR polish, or asks to simplify\u002Frefine recent changes. Invoke with `\u002Fsimplify` or `\u002Fsimplify \u003Cfocus>`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[940,943,944],{"name":941,"slug":942,"type":16},"Code Analysis","code-analysis",{"name":898,"slug":899,"type":16},{"name":945,"slug":946,"type":16},"Performance","performance","2026-07-20T05:58:46.653811",{"slug":949,"name":949,"fn":950,"description":951,"org":952,"tags":953,"stars":823,"repoUrl":824,"updatedAt":959},"stuck","diagnose and debug stuck Qwen Code sessions","Diagnose frozen, stuck, or slow Qwen Code sessions on this machine. Scans for problematic processes, high CPU\u002Fmemory usage, hung subprocesses, and debug logs. Use \u002Fstuck or \u002Fstuck \u003CPID> to focus on a specific process.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[954,957,958],{"name":955,"slug":956,"type":16},"Debugging","debugging",{"name":898,"slug":899,"type":16},{"name":945,"slug":946,"type":16},"2026-07-16T05:59:25.838629",{"slug":961,"name":961,"fn":962,"description":963,"org":964,"tags":965,"stars":972,"repoUrl":973,"updatedAt":974},"open-computer-use","configure Open Computer Use MCP server","Platform-neutral guidance for using Open Computer Use, the open-source Computer Use MCP server and CLI for macOS, Linux, and Windows. Use when an agent needs to install, verify, troubleshoot, configure, or operate Open Computer Use through its native CLI, stdio MCP server, or direct Computer Use tool calls.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[966,967,970,971],{"name":818,"slug":819,"type":16},{"name":968,"slug":969,"type":16},"CLI","cli",{"name":839,"slug":840,"type":16},{"name":842,"slug":843,"type":16},176,"https:\u002F\u002Fgithub.com\u002FQwenLM\u002Fopen-computer-use","2026-07-16T05:59:22.010839",{"slug":976,"name":976,"fn":977,"description":978,"org":979,"tags":980,"stars":990,"repoUrl":991,"updatedAt":992},"auto-pr","automate pull request submission and review","Automated PR submission assistant, including code review, documentation generation, and PR creation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[981,982,983,984,987],{"name":818,"slug":819,"type":16},{"name":928,"slug":929,"type":16},{"name":871,"slug":872,"type":16},{"name":985,"slug":986,"type":16},"GitHub","github",{"name":988,"slug":989,"type":16},"Pull Requests","pull-requests",136,"https:\u002F\u002Fgithub.com\u002FQwenLM\u002Fqwen-code-examples","2026-07-16T06:00:01.890524",26,{"items":995,"total":636},[996,1003,1020,1039,1052],{"slug":4,"name":4,"fn":5,"description":6,"org":997,"tags":998,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[999,1000,1001,1002],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"slug":1004,"name":1004,"fn":1005,"description":1006,"org":1007,"tags":1008,"stars":26,"repoUrl":27,"updatedAt":1019},"qwen-mm-plugins-core","analyze and visualize multimodal files","Vision-Language MCP tools for reading\u002Fvisualizing any file (images, videos, documents, code, data, 3D models, etc.) and calling VL APIs (caption, ASR, search, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1009,1012,1015,1016],{"name":1010,"slug":1011,"type":16},"Data Analysis","data-analysis",{"name":1013,"slug":1014,"type":16},"LLM","llm",{"name":842,"slug":843,"type":16},{"name":1017,"slug":1018,"type":16},"Multimodal","multimodal","2026-08-05T05:58:39.78188",{"slug":1021,"name":1021,"fn":1022,"description":1023,"org":1024,"tags":1025,"stars":26,"repoUrl":27,"updatedAt":1038},"qwen-mm-plugins-edu-agent","generate math problem solving tutorial videos","Generate step-by-step math problem-solving tutorial videos in Chinese (Mandarin).\nUse when: (1) a user provides a math problem and wants an explanation video,\n(2) someone says \"make a math tutorial\", \"explain this equation\", \"create a\nteaching video for this problem\", \"讲解这道题\", \"生成解题视频\",\n(3) the user wants a Chinese-language math lesson covering formulas, equations,\nor geometric figures, (4) the user shares a math problem in text or LaTeX and\nasks for a video walkthrough, (5) the input is an image_assets\u002F folder\ncontaining problem images — the skill will extract the problem via visual\nrecognition, solve it, and generate a tutorial video. Teaching components are\nrendered as realistic objects (solid opaque panels, 3D cards, SVG figures) with a\nmodern aurora mesh aesthetic.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1026,1029,1032,1035],{"name":1027,"slug":1028,"type":16},"Content Creation","content-creation",{"name":1030,"slug":1031,"type":16},"Education","education",{"name":1033,"slug":1034,"type":16},"Mathematics","mathematics",{"name":1036,"slug":1037,"type":16},"Video","video","2026-08-05T05:58:40.128581",{"slug":1040,"name":1040,"fn":1041,"description":1042,"org":1043,"tags":1044,"stars":26,"repoUrl":27,"updatedAt":1051},"qwen-mm-plugins-freecad","model parts and assemblies in FreeCAD","Use whenever a task involves parametric CAD in FreeCAD — modeling parts and assemblies, editing object properties, technical drawings, importing\u002Fexporting STEP\u002FSTL\u002FOBJ\u002FDXF, PDF\u002FExcel reports from a model, or finite-element (FEM\u002FCalculiX) analysis. Requires a running FreeCAD instance with the FreeCADMCP addon (see Prerequisite).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1045,1046,1049,1050],{"name":18,"slug":19,"type":16},{"name":1047,"slug":1048,"type":16},"CAD","cad",{"name":24,"slug":25,"type":16},{"name":898,"slug":899,"type":16},"2026-08-05T05:58:40.567406",{"slug":1053,"name":1053,"fn":1054,"description":1055,"org":1056,"tags":1057,"stars":26,"repoUrl":27,"updatedAt":1063},"qwen-mm-plugins-video-memory","analyze long form video content","Triggered for long videos (30+ minutes), whether a single file or a directory of multiple videos. Vision-language MCP tools designed for efficient reading and semantic analysis of long videos (30+ minutes), supporting memory construction and semantic search.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1058,1061,1062],{"name":1059,"slug":1060,"type":16},"Analysis","analysis",{"name":1017,"slug":1018,"type":16},{"name":1036,"slug":1037,"type":16},"2026-08-05T05:58:28.007509"]