[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEG80R5GY7F0GG9YY5S4QJ":3,"skill-same:01M6EEG80R5GY7F0GG9YY5S4QJ":53},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M6EEG80R5GY7F0GG9YY5S4QJ","blender-compositing",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fblender-compositing\u002FSKILL.md",[],[18,19],"blender","blender compositing","2026-11-10 10:12:30",false,"# Blender Compositing\n\n## Overview\n\nBuild node-based compositing pipelines in Blender using Python. Set up render passes, add post-processing effects (blur, glare, color correction), combine layers, key green screens, and output final composited images — all scriptable from the terminal.\n\n## Instructions\n\n### 1. Enable compositing and set up the node tree\n\n```python\nimport bpy\n\nscene = bpy.context.scene\nscene.use_nodes = True\ntree = scene.node_tree\nnodes = tree.nodes\nlinks = tree.links\nnodes.clear()\n\n# Minimum setup: Render Layers → Composite\nrl_node = nodes.new('CompositorNodeRLayers')\nrl_node.location = (0, 0)\ncomp_node = nodes.new('CompositorNodeComposite')\ncomp_node.location = (600, 0)\nlinks.new(rl_node.outputs['Image'], comp_node.inputs['Image'])\n\n# Optional viewer for preview\nviewer = nodes.new('CompositorNodeViewer')\nviewer.location = (600, -200)\nlinks.new(rl_node.outputs['Image'], viewer.inputs['Image'])\n```\n\n### 2. Color correction nodes\n\n```python\n# Brightness\u002FContrast\nbc = nodes.new('CompositorNodeBrightContrast')\nbc.inputs['Bright'].default_value = 10\nbc.inputs['Contrast'].default_value = 20\n\n# Hue\u002FSaturation\u002FValue\nhsv = nodes.new('CompositorNodeHueSat')\nhsv.inputs['Hue'].default_value = 0.5       # 0.5 = no change\nhsv.inputs['Saturation'].default_value = 1.2\n\n# Color Balance (Lift\u002FGamma\u002FGain)\ncb = nodes.new('CompositorNodeColorBalance')\ncb.correction_method = 'LIFT_GAMMA_GAIN'\ncb.lift = (0.95, 0.95, 1.0)    # cool shadows\ncb.gain = (1.1, 1.05, 1.0)     # warm highlights\n\n# Gamma\ngamma = nodes.new('CompositorNodeGamma')\ngamma.inputs['Gamma'].default_value = 1.2\n```\n\n### 3. Filter and effect nodes\n\n```python\n# Blur\nblur = nodes.new('CompositorNodeBlur')\nblur.filter_type = 'GAUSS'\nblur.size_x = 10\nblur.size_y = 10\n\n# Glare (bloom, streaks, fog glow)\nglare = nodes.new('CompositorNodeGlare')\nglare.glare_type = 'BLOOM'  # BLOOM, STREAKS, FOG_GLOW, SIMPLE_STAR, GHOSTS\nglare.threshold = 0.8\nglare.size = 6\nglare.quality = 'HIGH'\n\n# Denoise (best placed right after Render Layers)\ndenoise = nodes.new('CompositorNodeDenoise')\n\n# Sharpen\nsharpen = nodes.new('CompositorNodeFilter')\nsharpen.filter_type = 'SHARPEN'\n```\n\n### 4. Combine render passes\n\n```python\n# Enable render passes on the view layer\nview_layer = bpy.context.view_layer\nview_layer.use_pass_diffuse_color = True\nview_layer.use_pass_glossy_direct = True\nview_layer.use_pass_ambient_occlusion = True\nview_layer.use_pass_z = True\n\n# Mix passes: Diffuse * AO\nrl = nodes.new('CompositorNodeRLayers')\nmix = nodes.new('CompositorNodeMixRGB')\nmix.blend_type = 'MULTIPLY'\nmix.inputs['Fac'].default_value = 0.5\nlinks.new(rl.outputs['DiffCol'], mix.inputs[1])\nlinks.new(rl.outputs['AO'], mix.inputs[2])\n```\n\n### 5. Alpha compositing and keying\n\n```python\n# Alpha Over — composite foreground over background\nalpha_over = nodes.new('CompositorNodeAlphaOver')\nalpha_over.inputs['Fac'].default_value = 1.0\n# Connect: background → input 1, foreground (with alpha) → input 2\n\n# Keying node — green screen removal\nkeying = nodes.new('CompositorNodeKeying')\nkeying.inputs['Key Color'].default_value = (0, 1, 0, 1)\nkeying.clip_black = 0.1\nkeying.clip_white = 0.9\n\n# Color Spill — remove green fringing after keying\nspill = nodes.new('CompositorNodeColorSpill')\nspill.channel = 'G'\nspill.limit_method = 'AVERAGE'\n```\n\n### 6. File output for multi-layer EXR\n\n```python\nfile_out = nodes.new('CompositorNodeOutputFile')\nfile_out.base_path = \"\u002Ftmp\u002Fcomp_output\u002F\"\nfile_out.format.file_format = 'OPEN_EXR_MULTILAYER'\nfile_out.file_slots.new(\"Diffuse\")\nfile_out.file_slots.new(\"AO\")\n\nrl = nodes.get('Render Layers')\nlinks.new(rl.outputs['DiffCol'], file_out.inputs['Diffuse'])\nlinks.new(rl.outputs['AO'], file_out.inputs['AO'])\n```\n\n## Examples\n\n### Example 1: Cinematic color grade pipeline\n\n**User request:** \"Add a cinematic look — warm highlights, cool shadows, bloom, and vignette\"\n\n```python\nimport bpy\n\nscene = bpy.context.scene\nscene.use_nodes = True\ntree = scene.node_tree\nnodes = tree.nodes\nlinks = tree.links\nnodes.clear()\n\nrl = nodes.new('CompositorNodeRLayers')\nrl.location = (0, 0)\n\n# Color Balance\ncb = nodes.new('CompositorNodeColorBalance')\ncb.location = (250, 0)\ncb.correction_method = 'LIFT_GAMMA_GAIN'\ncb.lift = (0.92, 0.93, 1.0)\ncb.gain = (1.15, 1.08, 0.95)\nlinks.new(rl.outputs['Image'], cb.inputs['Image'])\n\n# Bloom\nglare = nodes.new('CompositorNodeGlare')\nglare.location = (500, 0)\nglare.glare_type = 'BLOOM'\nglare.threshold = 0.7\nglare.size = 7\nlinks.new(cb.outputs['Image'], glare.inputs['Image'])\n\n# Vignette (Ellipse Mask → Blur → Multiply)\nellipse = nodes.new('CompositorNodeEllipseMask')\nellipse.location = (300, -400)\nellipse.width = 0.85\nellipse.height = 0.85\nblur_mask = nodes.new('CompositorNodeBlur')\nblur_mask.location = (500, -400)\nblur_mask.filter_type = 'GAUSS'\nblur_mask.size_x = 200\nblur_mask.size_y = 200\nlinks.new(ellipse.outputs['Mask'], blur_mask.inputs['Image'])\n\nmix_vig = nodes.new('CompositorNodeMixRGB')\nmix_vig.location = (750, 0)\nmix_vig.blend_type = 'MULTIPLY'\nmix_vig.inputs['Fac'].default_value = 0.6\nlinks.new(glare.outputs['Image'], mix_vig.inputs[1])\nlinks.new(blur_mask.outputs['Image'], mix_vig.inputs[2])\n\ncomp = nodes.new('CompositorNodeComposite')\ncomp.location = (1000, 0)\nlinks.new(mix_vig.outputs['Image'], comp.inputs['Image'])\n```\n\n### Example 2: Green screen composite\n\n**User request:** \"Composite my 3D character over a photo background\"\n\n```python\nimport bpy\n\nscene = bpy.context.scene\nscene.use_nodes = True\nscene.render.film_transparent = True  # Use alpha instead of keying\ntree = scene.node_tree\nnodes = tree.nodes\nlinks = tree.links\nnodes.clear()\n\nrl = nodes.new('CompositorNodeRLayers')\nrl.location = (0, 0)\nbg_image = nodes.new('CompositorNodeImage')\nbg_image.location = (0, -400)\nbg_image.image = bpy.data.images.load(\"\u002Fpath\u002Fto\u002Fbackground.jpg\")\n\nalpha_over = nodes.new('CompositorNodeAlphaOver')\nalpha_over.location = (400, -100)\nlinks.new(bg_image.outputs['Image'], alpha_over.inputs[1])\nlinks.new(rl.outputs['Image'], alpha_over.inputs[2])\n\ncomp = nodes.new('CompositorNodeComposite')\ncomp.location = (650, -100)\nlinks.new(alpha_over.outputs['Image'], comp.inputs['Image'])\n```\n\n## Guidelines\n\n- Always set `scene.use_nodes = True` before accessing the compositor node tree.\n- Connect Render Layers → Composite at minimum. Without a Composite node, nothing renders.\n- Enable render passes on the View Layer before they appear as outputs on the Render Layers node.\n- For green screen work, prefer `film_transparent = True` with Alpha Over instead of Keying when you control the 3D scene.\n- Chain color corrections: exposure\u002Flevels first, then color balance, then creative grading.\n- The Denoise node works best placed right after Render Layers, before color adjustments.\n- Use `OPEN_EXR_MULTILAYER` on File Output to save all passes in one file.\n- Node positions (`node.location`) are for visual layout only — they don't affect functionality.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fblender-compositing",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill blender-compositing",{"tool":39,"command":40},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill blender-compositing",{"tool":42,"command":43},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill blender-compositing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fblender-compositing\u002FSKILL.md",true,[47],{"path":48,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":51,"sourceHtmlUrl":52},"customize.toml","OTHER","其他",2716,"https:\u002F\u002Fgithub.com\u002Fjsacko\u002FOpenDFIR\u002Fblob\u002Fmain\u002F.continue\u002Fskills\u002Fbmad-agent-architect\u002Fcustomize.toml",[54,68,78,87,93,100],{"skillNo":55,"name":56,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":64,"publishedAt":20},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[59],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[65,66,67],"model","model hierarchy","model hierarchy skill",{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":74,"publishedAt":20},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[73],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},[75,76,77],"MCP","zoom","zoom mcp",{"skillNo":79,"name":80,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":20},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[84,85,86,76],"sdk","zoom apps sdk","apps",{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":20},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[89],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":99,"publishedAt":20},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[98],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},[95],{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":20},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[102]]