From 0f26db33450af43952e94d51609e5a43b1faba80 Mon Sep 17 00:00:00 2001 From: Nathan Date: Thu, 16 Jul 2026 12:41:53 -0600 Subject: [PATCH] disable (currently unused) addons, update --- config/bookmarks.txt | 4 +- config/recent-files.txt | 2 +- config/recent-searches.txt | Bin 28683 -> 28711 bytes config/userpref.blend | 4 +- .../blender_org/.blender_ext/index.json | 2 +- extensions/blender_org/looptools/__init__.py | 5244 ----------------- .../looptools/blender_manifest.toml | 12 - .../rainys_extensions/.blender_ext/index.json | 12 +- .../rainclouds_bulk_scene_tools/__init__.py | 6 - .../blender_manifest.toml | 4 +- .../rainclouds_bulk_scene_tools/changelog.md | 6 + .../ops/delete_single_keyframe_actions.py | 2 +- .../ops/ghost_buster.py | 688 --- .../panels/bulk_data_remap.py | 253 +- .../panels/bulk_viewport_display.py | 2 +- .../rainclouds_bulk_scene_tools/readme.md | 2 +- .../utils/compat.py | 2 +- .../utils/version.py | 43 +- .../.blender_ext/index.json | 2 +- .../Animation_Layers_updater_status.json | 2 +- scripts/addons/Animtoolbox/TempCtrls.py | 252 +- scripts/addons/Animtoolbox/Tools.py | 56 +- scripts/addons/Animtoolbox/__init__.py | 15 +- .../addons/Animtoolbox/addon_updater_ops.py | 3 +- .../Animtoolbox_updater_status.json | 9 - scripts/addons/Animtoolbox/emp.py | 24 +- scripts/addons/SimpleBake/__init__.py | 126 + scripts/addons/SimpleBake/aov.py | 166 + scripts/addons/SimpleBake/auto_cage.py | 287 + scripts/addons/SimpleBake/auto_update.py | 200 + .../SimpleBake/background_and_progress.py | 514 ++ .../SimpleBake/bake_operators/__init__.py | 32 + .../bake_operators/auto_match_operators.py | 460 ++ .../bake_operators/common_bake_support.py | 1487 +++++ .../bake_operators/cycles_bake_operators.py | 588 ++ .../cyclesbake_support_operators.py | 59 + .../bake_operators/decal_operators.py | 424 ++ .../bake_operators/image_sequence.py | 135 + .../bake_operators/pbr_bake_operators.py | 705 +++ .../pbr_bake_support_operators.py | 1437 +++++ .../bake_operators/specials_bake_operators.py | 656 +++ scripts/addons/SimpleBake/channel_packing.py | 455 ++ scripts/addons/SimpleBake/cleanup.py | 225 + scripts/addons/SimpleBake/copy_and_apply.py | 821 +++ scripts/addons/SimpleBake/external_save.py | 494 ++ scripts/addons/SimpleBake/image_management.py | 399 ++ .../addons/SimpleBake/material_management.py | 148 + scripts/addons/SimpleBake/messages.py | 154 + .../addons/SimpleBake/object_preperation.py | 657 +++ scripts/addons/SimpleBake/presets.py | 514 ++ scripts/addons/SimpleBake/presets_local.py | 305 + .../addons/SimpleBake/preview_operators.py | 134 + scripts/addons/SimpleBake/property_group.py | 1130 ++++ .../resources/Old/copy_and_apply_mats.blend | 3 + scripts/addons/SimpleBake/resources/aa.blend | 3 + .../resources/channel_packing.blend | 3 + .../resources/copy_and_apply_mats.blend | 3 + .../addons/SimpleBake/resources/denoise.blend | 3 + .../SimpleBake/resources/multiply.blend | 3 + .../SimpleBake/resources/specials.blend | 3 + scripts/addons/SimpleBake/sketchfab_upload.py | 153 + scripts/addons/SimpleBake/sketchfabapi.py | 111 + scripts/addons/SimpleBake/starting_checks.py | 820 +++ scripts/addons/SimpleBake/ui/__init__.py | 34 + .../SimpleBake/ui/channel_packing_list.py | 154 + .../addons/SimpleBake/ui/node_bake_panel.py | 410 ++ .../addons/SimpleBake/ui/object_uvs_list.py | 130 + scripts/addons/SimpleBake/ui/objects_list.py | 582 ++ scripts/addons/SimpleBake/ui/panel.py | 1822 ++++++ scripts/addons/SimpleBake/ui/panel_helpers.py | 144 + .../addons/SimpleBake/ui/panel_operators.py | 326 + scripts/addons/SimpleBake/ui/preferences.py | 768 +++ scripts/addons/SimpleBake/ui/presets_list.py | 107 + .../SimpleBake/ui/presets_list_local.py | 115 + scripts/addons/SimpleBake/utils.py | 748 +++ scripts/addons/SimpleBake/uv_management.py | 285 + 76 files changed, 19896 insertions(+), 6197 deletions(-) delete mode 100644 extensions/blender_org/looptools/__init__.py delete mode 100644 extensions/blender_org/looptools/blender_manifest.toml delete mode 100644 extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/ghost_buster.py delete mode 100644 scripts/addons/Animtoolbox/animtoolbox_updater/Animtoolbox_updater_status.json create mode 100644 scripts/addons/SimpleBake/__init__.py create mode 100644 scripts/addons/SimpleBake/aov.py create mode 100644 scripts/addons/SimpleBake/auto_cage.py create mode 100644 scripts/addons/SimpleBake/auto_update.py create mode 100644 scripts/addons/SimpleBake/background_and_progress.py create mode 100644 scripts/addons/SimpleBake/bake_operators/__init__.py create mode 100644 scripts/addons/SimpleBake/bake_operators/auto_match_operators.py create mode 100644 scripts/addons/SimpleBake/bake_operators/common_bake_support.py create mode 100644 scripts/addons/SimpleBake/bake_operators/cycles_bake_operators.py create mode 100644 scripts/addons/SimpleBake/bake_operators/cyclesbake_support_operators.py create mode 100644 scripts/addons/SimpleBake/bake_operators/decal_operators.py create mode 100644 scripts/addons/SimpleBake/bake_operators/image_sequence.py create mode 100644 scripts/addons/SimpleBake/bake_operators/pbr_bake_operators.py create mode 100644 scripts/addons/SimpleBake/bake_operators/pbr_bake_support_operators.py create mode 100644 scripts/addons/SimpleBake/bake_operators/specials_bake_operators.py create mode 100644 scripts/addons/SimpleBake/channel_packing.py create mode 100644 scripts/addons/SimpleBake/cleanup.py create mode 100644 scripts/addons/SimpleBake/copy_and_apply.py create mode 100644 scripts/addons/SimpleBake/external_save.py create mode 100644 scripts/addons/SimpleBake/image_management.py create mode 100644 scripts/addons/SimpleBake/material_management.py create mode 100644 scripts/addons/SimpleBake/messages.py create mode 100644 scripts/addons/SimpleBake/object_preperation.py create mode 100644 scripts/addons/SimpleBake/presets.py create mode 100644 scripts/addons/SimpleBake/presets_local.py create mode 100644 scripts/addons/SimpleBake/preview_operators.py create mode 100644 scripts/addons/SimpleBake/property_group.py create mode 100644 scripts/addons/SimpleBake/resources/Old/copy_and_apply_mats.blend create mode 100644 scripts/addons/SimpleBake/resources/aa.blend create mode 100644 scripts/addons/SimpleBake/resources/channel_packing.blend create mode 100644 scripts/addons/SimpleBake/resources/copy_and_apply_mats.blend create mode 100644 scripts/addons/SimpleBake/resources/denoise.blend create mode 100644 scripts/addons/SimpleBake/resources/multiply.blend create mode 100644 scripts/addons/SimpleBake/resources/specials.blend create mode 100644 scripts/addons/SimpleBake/sketchfab_upload.py create mode 100644 scripts/addons/SimpleBake/sketchfabapi.py create mode 100644 scripts/addons/SimpleBake/starting_checks.py create mode 100644 scripts/addons/SimpleBake/ui/__init__.py create mode 100644 scripts/addons/SimpleBake/ui/channel_packing_list.py create mode 100644 scripts/addons/SimpleBake/ui/node_bake_panel.py create mode 100644 scripts/addons/SimpleBake/ui/object_uvs_list.py create mode 100644 scripts/addons/SimpleBake/ui/objects_list.py create mode 100644 scripts/addons/SimpleBake/ui/panel.py create mode 100644 scripts/addons/SimpleBake/ui/panel_helpers.py create mode 100644 scripts/addons/SimpleBake/ui/panel_operators.py create mode 100644 scripts/addons/SimpleBake/ui/preferences.py create mode 100644 scripts/addons/SimpleBake/ui/presets_list.py create mode 100644 scripts/addons/SimpleBake/ui/presets_list_local.py create mode 100644 scripts/addons/SimpleBake/utils.py create mode 100644 scripts/addons/SimpleBake/uv_management.py diff --git a/config/bookmarks.txt b/config/bookmarks.txt index e7d841c..63be964 100644 --- a/config/bookmarks.txt +++ b/config/bookmarks.txt @@ -10,6 +10,8 @@ D:\Work\9 iClone\Amazon\ D:\Amazon\00_external-files\ N:\1. CHARACTERS\remapping\ [Recent] +A:\1 Amazon_Active_Projects\260617_Dual_Induct\Blends\animations\ +T:\Amazon\active\1 BlenderAssets\ F:\renders\ C:\Users\Nathan\Downloads\ A:\1 Amazon_Active_Projects\260706_Leader_Turbotote\Deliverable\Stills\ @@ -18,5 +20,3 @@ A:\1 Amazon_Active_Projects\260127_Pick-and-Stage_2026_edits\Deliverable\Scan Aw A:\1 Amazon_Active_Projects\260127_Pick-and-Stage_2026_edits\Blends\stills\Scan Aware\ A:\1 Amazon_Active_Projects\1 BlenderAssets\ A:\1 Amazon_Active_Projects\260127_Pick-and-Stage_2026_edits\Blends\stills\BD2\ -A:\1 Amazon_Active_Projects\260127_Pick-and-Stage_2026_edits\Blends\stills\2026_new\ -A:\1 Amazon_Active_Projects\260512_Agile_Gemba\Blends\animations\ diff --git a/config/recent-files.txt b/config/recent-files.txt index af329b3..4d03f64 100644 --- a/config/recent-files.txt +++ b/config/recent-files.txt @@ -1,3 +1,4 @@ +A:\1 Amazon_Active_Projects\260617_Dual_Induct\Blends\animations\Dual-induct_animation 1_horizontal.blend C:\Users\Nathan\Downloads\test.blend A:\1 Amazon_Active_Projects\260709_Optimal_ADTA_stow\Blends\animations\OptimalStow_animation 2.blend F:\jobs\OptimalStow_animation 2-1bxe\_outside_project\A\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Char\Cartoon1\Hailey_v4.4.blend @@ -197,4 +198,3 @@ G:\Amazon\2024\240402_Amazon_Coaching&Upstream\Upstream\blends\mod 2\animation 1 A:\1 Amazon_Active_Projects\260422_Upstream_edits_2026\Blends\stills\iUP_M5_6.blend A:\1 Amazon_Active_Projects\260422_Upstream_edits_2026\Blends\stills\iUP_M2_5.blend A:\1 Amazon_Active_Projects\260422_Upstream_edits_2026\Blends\stills\iUP_M5_13.blend -P:\250827_FestivalTurf\Blends\animations\06 Infill And Powerbrooming\comp_RR\Visual 2B_SPA_comp_RR.blend diff --git a/config/recent-searches.txt b/config/recent-searches.txt index a978e8266306e9b7007a747eb715d68a429e0789..781b84d16b8230885ba147e9dfb55395b92fbfd1 100644 GIT binary patch delta 38 ucmeBvz_|PY;|A^m8TZt@)S|>3g-6qND7dHQ=cbkvRVw)9r=%A1asdE0a}MSJ delta 9 QcmZ4ffU)}l;|A^m02eC+AOHXW diff --git a/config/userpref.blend b/config/userpref.blend index a272992..b719e02 100644 --- a/config/userpref.blend +++ b/config/userpref.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bfd52b3ce7c61528840229918e8bf3cea73593efc56848bcac6c6a6d213bc5a -size 289063 +oid sha256:c52c4b86cbfb74020d6a19fded4ae035e8f180453790ddfc1ec1d5cb404eb985 +size 281014 diff --git a/extensions/blender_org/.blender_ext/index.json b/extensions/blender_org/.blender_ext/index.json index d799bee..38920c5 100644 --- a/extensions/blender_org/.blender_ext/index.json +++ b/extensions/blender_org/.blender_ext/index.json @@ -1 +1 @@ -{"blocklist":[],"data":[{"id":"yl_vertexcolforge","schema_version":"1.0.0","name":"YL VertexColForge","version":"1.2.0","tagline":"Vertex Color editing, previewing, and packing tools","archive_hash":"sha256:81ef94b163341e328a5a066656a3ae9affd9a0234da0b06dd88d99e77dd2187b","archive_size":309660,"archive_url":"https://extensions.blender.org/download/sha256:81ef94b163341e328a5a066656a3ae9affd9a0234da0b06dd88d99e77dd2187b/add-on-yl-vertexcolforge-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/yl-vertexcolforge/","maintainer":"YLIANG","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Paint"]},{"id":"texture_pipeline_studio","schema_version":"1.0.0","name":"Texture Pipeline Studio","version":"8.10.1","tagline":"Assign PBR textures from resolution folders and swap LODs","archive_hash":"sha256:c7abbaca62008937992ff078943973450173e9137651a5662933d68a1f6c4471","archive_size":9087,"archive_url":"https://extensions.blender.org/download/sha256:c7abbaca62008937992ff078943973450173e9137651a5662933d68a1f6c4471/add-on-texture-pipeline-studio-v8.10.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/texture-pipeline-studio/","maintainer":"Gihan-Maddumage","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read PBR texture images from user-selected folders on disk"},"tags":["Material","Pipeline","Node"]},{"id":"clothdrop_reborn","schema_version":"1.0.0","name":"ClothDrop Reborn","version":"2.0.3","tagline":"Single-click cloth simulation tool","archive_hash":"sha256:d14ee9a0178b6f644d1d3a4fc205e9502979f32707c8e656cf41d3b629c793ee","archive_size":9034,"archive_url":"https://extensions.blender.org/download/sha256:d14ee9a0178b6f644d1d3a4fc205e9502979f32707c8e656cf41d3b629c793ee/add-on-clothdrop-reborn-v2.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clothdrop-reborn/","maintainer":"Hartface","license":["SPDX:GPL-3.0-or-later"],"tags":["Physics"]},{"id":"nodemap","schema_version":"1.0.0","name":"Nodemap","version":"1.3.2","tagline":"Minimap overlay for the Node Editor","archive_hash":"sha256:bc6a53c36023401166b067ae988cf122aeb53705475f0427023288be76aab741","archive_size":38052,"archive_url":"https://extensions.blender.org/download/sha256:bc6a53c36023401166b067ae988cf122aeb53705475f0427023288be76aab741/add-on-nodemap-v1.3.2.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/nodemap/","maintainer":"n4dirp","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"rolllux","schema_version":"1.0.0","name":"RollLux","version":"5.5.5","tagline":"Perceptive Full-Auto Metering Lighting","archive_hash":"sha256:e191e2481666f740ce99354b3753e350a7e823f301db3416c5b9ba359ea8fb5d","archive_size":1503359,"archive_url":"https://extensions.blender.org/download/sha256:e191e2481666f740ce99354b3753e350a7e823f301db3416c5b9ba359ea8fb5d/add-on-rolllux-v5.5.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/rolllux/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later","SPDX:CC0-1.0"],"permissions":{"files":"Load reference lighting images from disk via the file picker"},"tags":["Lighting","Render"]},{"id":"stepper_reborn","schema_version":"1.0.0","name":"STEPper Reborn","version":"2.3.0","tagline":"CAD importer","archive_hash":"sha256:0cb79faecb04d45fdd06df6ac4b68695f84d8e917f188914d9c70670290bb1cc","archive_size":46347755,"archive_url":"https://extensions.blender.org/download/sha256:0cb79faecb04d45fdd06df6ac4b68695f84d8e917f188914d9c70670290bb1cc/add-on-stepper-reborn-v2.3.0-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/stepper-reborn/","maintainer":"RomainGuimbal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import STEP files"},"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"br3f","schema_version":"1.0.0","name":"R3F JSX/TSX Exporter","version":"0.1.1","tagline":"Export GLB + React Three Fiber JSX/TSX component in one click","archive_hash":"sha256:48480e1bb3c2417f53092e391ede6bb0d208a51b09f4993996826042eeaf8e19","archive_size":19149,"archive_url":"https://extensions.blender.org/download/sha256:48480e1bb3c2417f53092e391ede6bb0d208a51b09f4993996826042eeaf8e19/add-on-br3f-v0.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/br3f/","maintainer":"Tom-Heeley","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write the .glb and generated component to your project folders"},"tags":["Import-Export","Pipeline"]},{"id":"bas_relief","schema_version":"1.0.0","name":"Bas Relief","version":"1.1.0","tagline":"Create Bas Relief from images in Blender","archive_hash":"sha256:014fbc08414647cda8c79861d14a09a84359bee1f66e66c1e2121dfdc96698ee","archive_size":535796,"archive_url":"https://extensions.blender.org/download/sha256:014fbc08414647cda8c79861d14a09a84359bee1f66e66c1e2121dfdc96698ee/add-on-bas-relief-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bas-relief/","maintainer":"guillaume_bissieres","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Material"]},{"id":"step_importer","schema_version":"1.0.0","name":"STEP Importer","version":"1.1.0","tagline":"Import STEP files directly into Blender, no 3rd party needed","archive_hash":"sha256:2ef66db84806053bfae615cf71c163227cfd94e2e77532a36de44be48deb2b9e","archive_size":16226019,"archive_url":"https://extensions.blender.org/download/sha256:2ef66db84806053bfae615cf71c163227cfd94e2e77532a36de44be48deb2b9e/add-on-step-importer-v1.1.0-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/step-importer/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"Coffee_Theme","schema_version":"1.0.0","name":"Coffee_Theme","version":"1.0.0","tagline":"No fish inside I swear","archive_hash":"sha256:51bd918707723228bae23922611137998221f76e5467b85d7f0b091f5be7a0de","archive_size":6515,"archive_url":"https://extensions.blender.org/download/sha256:51bd918707723228bae23922611137998221f76e5467b85d7f0b091f5be7a0de/theme-coffee-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/coffee-theme/","maintainer":"Leo-Mb","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"sculpt_stroke_replay","schema_version":"1.0.0","name":"Sculpt Stroke Replay","version":"0.1.6","tagline":"Replay the last sculpt stroke with adjustable strength","archive_hash":"sha256:1957be55fa391269b98bc583a6271e4f17fbc1836f484b50e62fea2319b90b0b","archive_size":3308,"archive_url":"https://extensions.blender.org/download/sha256:1957be55fa391269b98bc583a6271e4f17fbc1836f484b50e62fea2319b90b0b/add-on-sculpt-stroke-replay-v0.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpt-stroke-replay/","maintainer":"a.a.andrusenko","license":["SPDX:GPL-3.0-or-later"]},{"id":"easy_arrangement","schema_version":"1.0.0","name":"Easy Arrangement","version":"0.2.2","tagline":"Arrange objects linearly, stair-like or in circular patterns","archive_hash":"sha256:e576a758a39b09dbc2e613d2494dd58058b0325b20f5e3cbf76e21772cdc80b8","archive_size":8687,"archive_url":"https://extensions.blender.org/download/sha256:e576a758a39b09dbc2e613d2494dd58058b0325b20f5e3cbf76e21772cdc80b8/add-on-easy-arrangement-v0.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easy-arrangement/","maintainer":"mlico","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"image_editor_tools","schema_version":"1.0.0","name":"Image Editor Master [图像超级工具]","version":"0.3.8","tagline":"Super Image Toolbox (color, filters, texture optimization)","archive_hash":"sha256:8bd34ced888ecad71e1f764b3cdc491fed085bcadec8fb8d1a1887ee302d5de6","archive_size":167013,"archive_url":"https://extensions.blender.org/download/sha256:8bd34ced888ecad71e1f764b3cdc491fed085bcadec8fb8d1a1887ee302d5de6/add-on-image-editor-tools-v0.3.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/image-editor-tools/","maintainer":"RARA","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read image from disk","clipboard":"Copy image from clipboard"},"tags":["Paint","Compositing"]},{"id":"BAM_Decalit","schema_version":"1.0.0","name":"[BAM] Decalit","version":"1.1.1","tagline":"Fast mesh decal placement with normal snapping and Custom UI/UX","archive_hash":"sha256:6ac0c559ec251b4d859ff1769251732314b28479e1c0a16671c821a603b8bda1","archive_size":2952171,"archive_url":"https://extensions.blender.org/download/sha256:6ac0c559ec251b4d859ff1769251732314b28479e1c0a16671c821a603b8bda1/add-on-bam-decalit-v1.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bam-decalit/","maintainer":"AlexeyHRDesign","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load decal presets and generated preview images"},"tags":["Material"]},{"id":"fill_mesh","schema_version":"1.0.0","name":"Fill Mesh","version":"1.0.8","tagline":"An add-on to fix and fill holes on your meshes","archive_hash":"sha256:c5c630878528a38f6870459e7cb9b630105e14636e4137bed328d53ca16f729c","archive_size":7544,"archive_url":"https://extensions.blender.org/download/sha256:c5c630878528a38f6870459e7cb9b630105e14636e4137bed328d53ca16f729c/add-on-fill-mesh-v1.0.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fill-mesh/","maintainer":"guillaume_bissieres","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"editmode_dimensions","schema_version":"1.0.0","name":"Dimensions in Edit Mode","version":"1.0.1","tagline":"Live display and editing of selected geometry' dimensions","archive_hash":"sha256:acac5c3fbca92c18a8718a499f881814b3d13b73c0d815e63196b8d21f7265dd","archive_size":1776,"archive_url":"https://extensions.blender.org/download/sha256:acac5c3fbca92c18a8718a499f881814b3d13b73c0d815e63196b8d21f7265dd/add-on-editmode-dimensions-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/editmode-dimensions/","maintainer":"Matikos","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"camera_grid","schema_version":"1.0.0","name":"Camera Grid","version":"1.2.0","tagline":"Viewport camera grid overlay for quick camera switching","archive_hash":"sha256:f401ec200d3619d82c0445d00ded2da17c5cf0ee24404002605d89dadc0d865b","archive_size":23571,"archive_url":"https://extensions.blender.org/download/sha256:f401ec200d3619d82c0445d00ded2da17c5cf0ee24404002605d89dadc0d865b/add-on-camera-grid-v1.2.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/camera-grid/","maintainer":"n4dirp","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","User Interface"]},{"id":"object_lay_flat","schema_version":"1.0.0","name":"Lay Flat","version":"1.0.0","tagline":"Lays an object flat on the XY plane based on the selected face","archive_hash":"sha256:21c85c39e657827bcaf64637e8637cbd541ee8fabf27e8a85f6f2a29a014b43e","archive_size":3106,"archive_url":"https://extensions.blender.org/download/sha256:21c85c39e657827bcaf64637e8637cbd541ee8fabf27e8a85f6f2a29a014b43e/add-on-object-lay-flat-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/object-lay-flat/","maintainer":"Pavel-Karoukin","license":["SPDX:GPL-3.0-or-later"]},{"id":"yl_meshcheckhud","schema_version":"1.0.0","name":"YL MeshCheckHUD","version":"1.2.0","tagline":"Mesh check, heatmap, and live HUD tools for Blender","archive_hash":"sha256:b88f4a9621e1537f5fefa97835121405fdb4df8040a35c2bf752486d4ee63342","archive_size":139058,"archive_url":"https://extensions.blender.org/download/sha256:b88f4a9621e1537f5fefa97835121405fdb4df8040a35c2bf752486d4ee63342/add-on-yl-meshcheckhud-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/yl-meshcheckhud/","maintainer":"YLIANG","license":["SPDX:GPL-3.0-or-later"]},{"id":"cream_soda","schema_version":"1.0.0","name":"Cream Soda","version":"1.0.0","tagline":"A cream soda from Lawson","archive_hash":"sha256:989edfb1c8f02e525cdf673e8a3707e5ad9d65a86e9d879e11dca32b56bfea5c","archive_size":5011,"archive_url":"https://extensions.blender.org/download/sha256:989edfb1c8f02e525cdf673e8a3707e5ad9d65a86e9d879e11dca32b56bfea5c/theme-cream-soda-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cream-soda/","maintainer":"spoiledmilk","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"wiggle_bones","schema_version":"1.0.0","name":"Wiggle Bones","version":"1.1.1","tagline":"Refactor of Wiggle 2, fully fixed for Blender 5.0","archive_hash":"sha256:4e2393b90e12aa8e4690a3de92a705ccbec6ec8cee543da00d3c880bc54f7e3a","archive_size":27611,"archive_url":"https://extensions.blender.org/download/sha256:4e2393b90e12aa8e4690a3de92a705ccbec6ec8cee543da00d3c880bc54f7e3a/add-on-wiggle-bones-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/wiggle-bones/","maintainer":"Hans_Xwh","license":["SPDX:GPL-3.0-or-later"],"tags":["Physics"]},{"id":"import_psd_as_mesh_planes","schema_version":"1.0.0","name":"Import .PSD as Mesh Planes","version":"1.1.0","tagline":"Allows importing of .PSD files into mesh planes","archive_hash":"sha256:9b4c903e03a2e7064d1dbc78fed25c05dc0ef713e1e1ccb1c6acdbad1706bee0","archive_size":5255,"archive_url":"https://extensions.blender.org/download/sha256:9b4c903e03a2e7064d1dbc78fed25c05dc0ef713e1e1ccb1c6acdbad1706bee0/add-on-import-psd-as-mesh-planes-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-psd-as-mesh-planes/","maintainer":"byebyeLAN","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Mesh"]},{"id":"AdvancedAlignView","schema_version":"1.0.0","name":"Advanced Align View","version":"0.1.3","tagline":"Align 3D View to selected geometries for precise modeling","archive_hash":"sha256:cf28e02b52faace5d50f5303440c2671d4659f62fba33c1fa7d6feb729c9643d","archive_size":37803,"archive_url":"https://extensions.blender.org/download/sha256:cf28e02b52faace5d50f5303440c2671d4659f62fba33c1fa7d6feb729c9643d/add-on-advancedalignview-v0.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/advancedalignview/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View"]},{"id":"Flash_Light","schema_version":"1.0.0","name":"Flash Light","version":"1.0.1","tagline":"Light theme inspired by Macromedia Flash 8","archive_hash":"sha256:ead726b325361b49c1a379986f251cc8ee68ecd740f8eca65fcca4ef201af3b2","archive_size":5683,"archive_url":"https://extensions.blender.org/download/sha256:ead726b325361b49c1a379986f251cc8ee68ecd740f8eca65fcca4ef201af3b2/theme-flash-light-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/flash-light/","maintainer":"Spikysaurus","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"Retro3DSMAX","schema_version":"1.0.0","name":"3DSMAX 1996","version":"1.0.0","tagline":"Classic theme inspired by 3D Studio Max 2.5","archive_hash":"sha256:cba1539ab749888c06a6dd7bef361958cdce7ed9e6486b6e3d217ca276bb5247","archive_size":4832,"archive_url":"https://extensions.blender.org/download/sha256:cba1539ab749888c06a6dd7bef361958cdce7ed9e6486b6e3d217ca276bb5247/theme-retro3dsmax-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/retro3dsmax/","maintainer":"Philautia","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Light"]},{"id":"quicksnap","schema_version":"1.0.0","name":"QuickSnap","version":"1.5.1","tagline":"Quickly snap objects/vertices/curve points","archive_hash":"sha256:8fe5d7c52ccc682be2b67cd44caf38a655fa2d98edee341ae415a37083b22f25","archive_size":80845,"archive_url":"https://extensions.blender.org/download/sha256:8fe5d7c52ccc682be2b67cd44caf38a655fa2d98edee341ae415a37083b22f25/add-on-quicksnap-v1.5.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/quicksnap/","maintainer":"julienh","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Object"]},{"id":"struct_topo_opt","schema_version":"1.0.0","name":"Structural Topology Optimization","version":"0.4.3","tagline":"SIMP+OC structural topology optimization in the viewport","archive_hash":"sha256:0258ae4ac60e1a851ad1ec5339ae3b2e4a194ce76da6b8b696b02bd2ba7ef33b","archive_size":80648578,"archive_url":"https://extensions.blender.org/download/sha256:0258ae4ac60e1a851ad1ec5339ae3b2e4a194ce76da6b8b696b02bd2ba7ef33b/add-on-struct-topo-opt-v0.4.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/struct-topo-opt/","maintainer":"Emrgn.arch","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh","Physics"]},{"id":"quick_sidebar_switcher","schema_version":"1.0.0","name":"Quick Sidebar Switcher","version":"1.4.0","tagline":"Quickly switch between Side Panel tabs with a popup menu","archive_hash":"sha256:570682c3063e0bdaa71c08d59d0560f7d2dcd9131d7122cf07eada14d0e0ec2b","archive_size":9941,"archive_url":"https://extensions.blender.org/download/sha256:570682c3063e0bdaa71c08d59d0560f7d2dcd9131d7122cf07eada14d0e0ec2b/add-on-quick-sidebar-switcher-v1.4.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/quick-sidebar-switcher/","maintainer":"hyeffect55","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"timeline_audio_visualizer","schema_version":"1.0.0","name":"Timeline Audio Visualizer","version":"0.2.5","tagline":"Visualize audio waveforms inside Blender animation timelines","archive_hash":"sha256:758269dcc0bdd2fb0ada3ffbb32cfda7603e8592c77269a83aaab1c1998c4380","archive_size":22383,"archive_url":"https://extensions.blender.org/download/sha256:758269dcc0bdd2fb0ada3ffbb32cfda7603e8592c77269a83aaab1c1998c4380/add-on-timeline-audio-visualizer-v0.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/timeline-audio-visualizer/","maintainer":"qsOwOsp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read audio files for waveform generation"},"tags":["Animation","Sequencer"]},{"id":"mmgpy","schema_version":"1.0.0","name":"MMGpy - Mesh Remeshing","version":"0.16.2","tagline":"Adaptive surface remeshing via the MMG library","archive_hash":"sha256:da18b422985da4ddc2086ec9bd695d8ad8150edf5222f3c9bbae3a11a79cda66","archive_size":9515641,"archive_url":"https://extensions.blender.org/download/sha256:da18b422985da4ddc2086ec9bd695d8ad8150edf5222f3c9bbae3a11a79cda66/add-on-mmgpy-v0.16.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mmgpy/","maintainer":"kmarchais","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh","Modeling"]},{"id":"Multi_Files_Bookmark","schema_version":"1.0.0","name":"Multi Files Bookmark","version":"0.7.1","tagline":"Manage your projects as bookmarks in one Blender window","archive_hash":"sha256:1b9ef9c49159de40e897bd0907d8dfd95d09f1ad422dc926611e02ad37d86deb","archive_size":49098,"archive_url":"https://extensions.blender.org/download/sha256:1b9ef9c49159de40e897bd0907d8dfd95d09f1ad422dc926611e02ad37d86deb/add-on-multi-files-bookmark-v0.7.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/multi-files-bookmark/","maintainer":"61+","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"Star_Citizen","schema_version":"1.0.0","name":"STAR CITIZEN","version":"1.0.0","tagline":"A Star Citizen theme for Blender","archive_hash":"sha256:730b5dff1e0da25b0442e8eca33e50bdeb610e673c9fc66047312b1e67de3773","archive_size":5820,"archive_url":"https://extensions.blender.org/download/sha256:730b5dff1e0da25b0442e8eca33e50bdeb610e673c9fc66047312b1e67de3773/theme-star-citizen-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/star-citizen/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"dynamic_parent","schema_version":"1.0.0","name":"Dynamic Parent","version":"2.1.0","tagline":"Allows to create and disable an animated ChildOf constraint","archive_hash":"sha256:20d9580c52af76bb5449eb01c6a6f91bd6a406a34c2c7a54c9b967267aaa1d9a","archive_size":5922,"archive_url":"https://extensions.blender.org/download/sha256:20d9580c52af76bb5449eb01c6a6f91bd6a406a34c2c7a54c9b967267aaa1d9a/add-on-dynamic-parent-v2.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/dynamic-parent/","maintainer":"RomanVolodin","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"plague_inc_theme","schema_version":"1.0.0","name":"Plague Inc. Theme","version":"1.0.0","tagline":"Very red theme","archive_hash":"sha256:0772cf9646fb30d361e26a907a5321ab0d672b7944ce1f44a033d4b6ef43af35","archive_size":5933,"archive_url":"https://extensions.blender.org/download/sha256:0772cf9646fb30d361e26a907a5321ab0d672b7944ce1f44a033d4b6ef43af35/theme-plague-inc-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/plague-inc-theme/","maintainer":"Bebo","license":["SPDX:GPL-3.0-or-later"]},{"id":"quickpath_rknz","schema_version":"1.0.0","name":"QuickPath RKNZ","version":"2.2.0","tagline":"Quick motion path visualization for bones and objects","archive_hash":"sha256:abc7264e245313dbea1ecb6164d9bdf359c88bce798df5bc875dc92176fdf421","archive_size":44466,"archive_url":"https://extensions.blender.org/download/sha256:abc7264e245313dbea1ecb6164d9bdf359c88bce798df5bc875dc92176fdf421/add-on-quickpath-rknz-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quickpath-rknz/","maintainer":"Rikokenz","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"photo360_lab","schema_version":"1.0.0","name":"360 PhotoLab","version":"0.37.0","tagline":"Reframe equirectangular 360 photos with RET CIL and CLV previews","archive_hash":"sha256:eafa1747533049218ccbb291caed3ba4df5d39c8dcbccc039cee104647d65952","archive_size":19055,"archive_url":"https://extensions.blender.org/download/sha256:eafa1747533049218ccbb291caed3ba4df5d39c8dcbccc039cee104647d65952/add-on-photo360-lab-v0.37.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/photo360-lab/","maintainer":"Mattia-Fiorini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load local 360 images and LUT files and export images"},"tags":["Camera","Import-Export"]},{"id":"snapline","schema_version":"1.0.0","name":"Snapline","version":"2.0.0","tagline":"Snap and align your object faster than before","archive_hash":"sha256:2ffa56a35d0015ce5e78e4bc999740748095e9900fa10a48cb91d67248c03f1e","archive_size":16569,"archive_url":"https://extensions.blender.org/download/sha256:2ffa56a35d0015ce5e78e4bc999740748095e9900fa10a48cb91d67248c03f1e/add-on-snapline-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/snapline/","maintainer":"Berun","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object"]},{"id":"color_helper","schema_version":"1.0.0","name":"Color Helper","version":"0.8.0","tagline":"Palette and color workflow tools","archive_hash":"sha256:f1cae8296649f897b99a1dd916f045b71cd182988d1ae24f0836d38724268eb2","archive_size":64595,"archive_url":"https://extensions.blender.org/download/sha256:f1cae8296649f897b99a1dd916f045b71cd182988d1ae24f0836d38724268eb2/add-on-color-helper-v0.8.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/color-helper/","maintainer":"atticuslv","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export palette images and assets","clipboard":"Read image and color values from the clipboard"},"tags":["Material","Node","Paint"]},{"id":"wiggle_2","schema_version":"1.0.0","name":"Wiggle 2: RTX Edition","version":"2.2.7","tagline":" Instant Procedural Bone Physics for Any Rig","archive_hash":"sha256:e7d9cfb5b616da92c940f287829855ecfac590e30dd87ef0db240a24a8aa3a3c","archive_size":73896,"archive_url":"https://extensions.blender.org/download/sha256:e7d9cfb5b616da92c940f287829855ecfac590e30dd87ef0db240a24a8aa3a3c/add-on-wiggle-2-v2.2.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wiggle-2/","maintainer":"Chamiseul","license":["SPDX:GPL-3.0-or-later"]},{"id":"loopkut","schema_version":"1.0.0","name":"Loopkut","version":"1.3.3","tagline":"Preview inserted loop cuts at mouse position","archive_hash":"sha256:c2f64f526a9785ace0e9a565dae156f01b78e3c1d89241b36b6da0c361eb0606","archive_size":104576,"archive_url":"https://extensions.blender.org/download/sha256:c2f64f526a9785ace0e9a565dae156f01b78e3c1d89241b36b6da0c361eb0606/add-on-loopkut-v1.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/loopkut/","maintainer":"KewlSheet","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"symtrz","schema_version":"1.0.0","name":"SymTrz","version":"2.2.4","tagline":"Mirror And Symmetrize tools for 3D View","archive_hash":"sha256:565cac6a2300773bf7221881c913ea85e0fe3a8f3bc8483d34d75bb08f81074e","archive_size":14031,"archive_url":"https://extensions.blender.org/download/sha256:565cac6a2300773bf7221881c913ea85e0fe3a8f3bc8483d34d75bb08f81074e/add-on-symtrz-v2.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/symtrz/","maintainer":"Berun","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object"]},{"id":"batch_import_images_to_brushes","schema_version":"1.0.0","name":"Batch Import Images to Brushes","version":"1.0.1","tagline":"Import images as texture paint and sculpt brushes","archive_hash":"sha256:4be87504869ed8883f990ee8d2f58e31c99440ecfb293bb6df5b32d6799d2ec5","archive_size":4117,"archive_url":"https://extensions.blender.org/download/sha256:4be87504869ed8883f990ee8d2f58e31c99440ecfb293bb6df5b32d6799d2ec5/add-on-batch-import-images-to-brushes-v1.0.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/batch-import-images-to-brushes/","maintainer":"Raja-Muda","license":["SPDX:GPL-3.0-or-later"]},{"id":"fst_forgepolish","schema_version":"1.0.0","name":"FST ForgePolish","version":"1.2.0","tagline":"Hard surface polishing with optional volume preservation","archive_hash":"sha256:6df63aee40c379f3cb77f4590e2bbb37a378e8d41ea62db45d8457e8e67ed18b","archive_size":68597,"archive_url":"https://extensions.blender.org/download/sha256:6df63aee40c379f3cb77f4590e2bbb37a378e8d41ea62db45d8457e8e67ed18b/add-on-fst-forgepolish-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fst-forgepolish/","maintainer":"YLIANG","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"io_directx_x","schema_version":"1.0.0","name":"DirectX X Format (.x)","version":"1.3.1","tagline":"Import/Export DirectX .x","archive_hash":"sha256:e8e2d450c9c807c6ee104c5442ae0ef50bb88a8ee23f05acca4acd095a93c256","archive_size":116022,"archive_url":"https://extensions.blender.org/download/sha256:e8e2d450c9c807c6ee104c5442ae0ef50bb88a8ee23f05acca4acd095a93c256/add-on-io-directx-x-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-directx-x/","maintainer":"SaintBaron","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"omni_outset","schema_version":"1.0.0","name":"OmniOutset","version":"1.1.1","tagline":"Smart Face and Equidistant Edge Extrude","archive_hash":"sha256:1fde945aa66c913d9be4fecc614fb702e5c6856b4a87e629ca1d3a0f35d152e3","archive_size":9761,"archive_url":"https://extensions.blender.org/download/sha256:1fde945aa66c913d9be4fecc614fb702e5c6856b4a87e629ca1d3a0f35d152e3/add-on-omni-outset-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/omni-outset/","maintainer":"Alx_11","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"damped_track_chain","schema_version":"1.0.0","name":"Damped Track Chain","version":"1.0.2","tagline":"为骨骼链一键生成阻尼追踪约束/One-click bone chain constraints","archive_hash":"sha256:70af09ebe58cca42406322bec092d5f9dfa857436b0518ad5e071a43a7155aa0","archive_size":6101,"archive_url":"https://extensions.blender.org/download/sha256:70af09ebe58cca42406322bec092d5f9dfa857436b0518ad5e071a43a7155aa0/add-on-damped-track-chain-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/damped-track-chain/","maintainer":"shengmingu","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"blender_speed_curve","schema_version":"1.0.0","name":"Motion Style","version":"1.0.2","tagline":"AE-style easing sliders and F-Curve speed visualization","archive_hash":"sha256:4ae9d54a4e0f98159c979fba471646406574baa2b0809eef4db3e45d799d8d61","archive_size":6406,"archive_url":"https://extensions.blender.org/download/sha256:4ae9d54a4e0f98159c979fba471646406574baa2b0809eef4db3e45d799d8d61/add-on-blender-speed-curve-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-speed-curve/","maintainer":"Willy_Work","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"keymap_visualizer","schema_version":"1.0.0","name":"Keymap Visualizer","version":"1.0.1","tagline":"Visual keyboard-based keymap editor","archive_hash":"sha256:9276b55426937631b387d7bd2851d38eca184bbe68cdefb97ca08ccb4779c047","archive_size":202498,"archive_url":"https://extensions.blender.org/download/sha256:9276b55426937631b387d7bd2851d38eca184bbe68cdefb97ca08ccb4779c047/add-on-keymap-visualizer-v1.0.1.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/keymap-visualizer/","maintainer":"devanshutak25","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export keymap configurations and save/load presets to disk","clipboard":"Copy and paste keymap presets as JSON via the system clipboard"},"tags":["User Interface","System"]},{"id":"Evergreen_Theme","schema_version":"1.0.0","name":"Evergreen_Theme","version":"1.0.6","tagline":"Nature Verdure","archive_hash":"sha256:983a011e057339f40c8236faa5b0fa86d5b350c23921bc7fc7ee75da1a4725ba","archive_size":5918,"archive_url":"https://extensions.blender.org/download/sha256:983a011e057339f40c8236faa5b0fa86d5b350c23921bc7fc7ee75da1a4725ba/theme-evergreen-theme-v1.0.6.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/evergreen-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"eye_animation","schema_version":"1.0.0","name":"Eye Animation","version":"2.0.0","tagline":"Eye position and blinking tool with keyframe controls","archive_hash":"sha256:1b9dc1648e32ac9b7890904c7df6fdb6a029bbb1250bf79eaccda310b5d3d53e","archive_size":5308,"archive_url":"https://extensions.blender.org/download/sha256:1b9dc1648e32ac9b7890904c7df6fdb6a029bbb1250bf79eaccda310b5d3d53e/add-on-eye-animation-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/eye-animation/","maintainer":"Affe_mit_Waffe","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"pataz_auto_hide_overlays","schema_version":"1.0.0","name":"Pataz Auto Hide Overlays","version":"5.2.4","tagline":"Hides overlays during transform or playback","archive_hash":"sha256:08259ebf900d77725d07cadffa57f0191fca637043e2196ac57d97292c7e1032","archive_size":5410,"archive_url":"https://extensions.blender.org/download/sha256:08259ebf900d77725d07cadffa57f0191fca637043e2196ac57d97292c7e1032/add-on-pataz-auto-hide-overlays-v5.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pataz-auto-hide-overlays/","maintainer":"zanqdo","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"chunk_render","schema_version":"1.0.0","name":"Chunk Render","version":"1.1.6","tagline":"Tile-based rendering for render regions","archive_hash":"sha256:4f26cec46d8ac35687cee4d53a47db19a627d0134a962b2a20a879d32168d7c8","archive_size":40484,"archive_url":"https://extensions.blender.org/download/sha256:4f26cec46d8ac35687cee4d53a47db19a627d0134a962b2a20a879d32168d7c8/add-on-chunk-render-v1.1.6.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/chunk-render/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write tile images and temp files for tile merging"},"tags":["Render"]},{"id":"maze_generator_pro","schema_version":"1.0.0","name":"Maze Generator Pro","version":"1.0.9","tagline":"3D maze generator with presets, themes and physics","archive_hash":"sha256:5c793ce964b312ccbeb3f87f8adba62c31367b95756240b47ee95ddf848a020c","archive_size":34426,"archive_url":"https://extensions.blender.org/download/sha256:5c793ce964b312ccbeb3f87f8adba62c31367b95756240b47ee95ddf848a020c/add-on-maze-generator-pro-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/maze-generator-pro/","maintainer":"BasharatLeoGill","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"armature_to_mesh","schema_version":"1.0.0","name":"Armature to Mesh","version":"1.0.2","tagline":"Convert armature bones to a mesh","archive_hash":"sha256:1c3b0eefddab10ac0c3a5d2a5069193eb6d7ba45f8d2c99254335d1cd6dc57f7","archive_size":4719,"archive_url":"https://extensions.blender.org/download/sha256:1c3b0eefddab10ac0c3a5d2a5069193eb6d7ba45f8d2c99254335d1cd6dc57f7/add-on-armature-to-mesh-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/armature-to-mesh/","maintainer":"SamRog94","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Rigging"]},{"id":"bezier_curve_editor","schema_version":"1.0.0","name":"Bezier Curve Editor","version":"1.0.9","tagline":"An editor for editing and applying easing curves","archive_hash":"sha256:ab137f8214bff91a68c9f81521bf7ac231803a3c1278591ccdccc23aee6583fb","archive_size":37823,"archive_url":"https://extensions.blender.org/download/sha256:ab137f8214bff91a68c9f81521bf7ac231803a3c1278591ccdccc23aee6583fb/add-on-bezier-curve-editor-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bezier-curve-editor/","maintainer":"IcedDog","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","User Interface"]},{"id":"simple_camera_match","schema_version":"1.0.0","name":"Simple Camera Match","version":"1.1.2","tagline":"Simple Camera Match - Blender插件","archive_hash":"sha256:21f39981ac34e28c3bcb7e878658255172e9c3abead818f86d022398708507ec","archive_size":38860,"archive_url":"https://extensions.blender.org/download/sha256:21f39981ac34e28c3bcb7e878658255172e9c3abead818f86d022398708507ec/add-on-simple-camera-match-v1.1.2-windows-arm64-windows-x64-macos-arm64-macos-x64-linux-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-camera-match/","maintainer":"MingWitty","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-arm64","windows-x64","macos-arm64","macos-x64","linux-x64"],"tags":["Object","3D View","Scene"]},{"id":"cut_sym","schema_version":"1.0.0","name":"Cut Sym","version":"0.0.3","tagline":"Symmetrically cut mesh objects into two halves","archive_hash":"sha256:e7d6c45ec0e1b64bc1befa7bd9cc9ec57d3e9c6e9113f1b15760fd897d63b593","archive_size":5150,"archive_url":"https://extensions.blender.org/download/sha256:e7d6c45ec0e1b64bc1befa7bd9cc9ec57d3e9c6e9113f1b15760fd897d63b593/add-on-cut-sym-v0.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cut-sym/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"org_eridanus_emotion","schema_version":"1.0.0","name":"E Motion","version":"0.4.0","tagline":"Motion editing and curve manipulation","archive_hash":"sha256:4abfd5552386521577d9ee8905c57fc8ad427621c9853119b06c639032e636a8","archive_size":134027,"archive_url":"https://extensions.blender.org/download/sha256:4abfd5552386521577d9ee8905c57fc8ad427621c9853119b06c639032e636a8/add-on-org-eridanus-emotion-v0.4.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/org-eridanus-emotion/","maintainer":"Eridanus-Epsilon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write bezier presets, cache and trajectory data on disk"},"tags":["Animation","Rigging"]},{"id":"pin_solver","schema_version":"1.0.0","name":"PinSolver","version":"1.1.3","tagline":"Interactive camera alignment","archive_hash":"sha256:60c1c30085bad1dd877ab0fc96b2a5245b680782b8b6cb867952402c8f8c2160","archive_size":40111495,"archive_url":"https://extensions.blender.org/download/sha256:60c1c30085bad1dd877ab0fc96b2a5245b680782b8b6cb867952402c8f8c2160/add-on-pin-solver-v1.1.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pin-solver/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Tracking","Camera","3D View"]},{"id":"max","schema_version":"1.0.0","name":"Max","version":"2.1.0","tagline":"Theme inspired by Max","archive_hash":"sha256:8622e798a6f585258773580b255ef10e325da07c341460f55ebafe90aab5e15b","archive_size":5373,"archive_url":"https://extensions.blender.org/download/sha256:8622e798a6f585258773580b255ef10e325da07c341460f55ebafe90aab5e15b/theme-max-v2.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/max/","maintainer":"Dabidzhi","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"o_oo_math_controller","schema_version":"1.0.0","name":"Math Controller","version":"0.4.8","tagline":"Add math group node that acts according to written formulas","archive_hash":"sha256:f5f60ca30c53c4794c251b8eca14c48f6cfd8e9f12de81be63663c16cb761c4a","archive_size":31880,"archive_url":"https://extensions.blender.org/download/sha256:f5f60ca30c53c4794c251b8eca14c48f6cfd8e9f12de81be63663c16cb761c4a/add-on-o-oo-math-controller-v0.4.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/o-oo-math-controller/","maintainer":"o_oo_gote510","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"transform_tools_core_yiws","schema_version":"1.0.0","name":"Transform Tools Core","version":"0.9.7","tagline":"Advanced gizmo control & precision transformations for Blender","archive_hash":"sha256:b3df6889d59994f6562bc421f5be6b263fb3d9d2f6057cbd4aa92457a9b12a58","archive_size":23454,"archive_url":"https://extensions.blender.org/download/sha256:b3df6889d59994f6562bc421f5be6b263fb3d9d2f6057cbd4aa92457a9b12a58/add-on-transform-tools-core-yiws-v0.9.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/transform-tools-core-yiws/","maintainer":"yasser-idris","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"show_curve_length","schema_version":"1.0.0","name":"Show Curve Length","version":"1.0.0","tagline":"Shows the length of Curve Splines","archive_hash":"sha256:2c47eb86236963878ade7320ddeed43a7ba2939a77b4676f960b0752956ebe45","archive_size":8644,"archive_url":"https://extensions.blender.org/download/sha256:2c47eb86236963878ade7320ddeed43a7ba2939a77b4676f960b0752956ebe45/add-on-show-curve-length-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/show-curve-length/","maintainer":"Giambattista-Caltabiano","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"Decentraland_Theme","schema_version":"1.0.0","name":"Decentraland Theme","version":"1.0.0","tagline":"Deep black theme with Decentraland brand colors","archive_hash":"sha256:3e1165a4850e986bcafbaf888ac43e17b441a1a176ddf1f9406ff8443f6d9e64","archive_size":5681,"archive_url":"https://extensions.blender.org/download/sha256:3e1165a4850e986bcafbaf888ac43e17b441a1a176ddf1f9406ff8443f6d9e64/theme-decentraland-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/decentraland-theme/","maintainer":"Decentraland-Foundation","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"texture_manager","schema_version":"1.0.0","name":"Texture File Path Editor","version":"2.1.0","tagline":"Manage, relink, gather and inspect all texture paths","archive_hash":"sha256:6ebbfb82a808e721775ad42f9fb79005988083a0e9ed32b89c170c1a61abf567","archive_size":14000,"archive_url":"https://extensions.blender.org/download/sha256:6ebbfb82a808e721775ad42f9fb79005988083a0e9ed32b89c170c1a61abf567/add-on-texture-manager-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/texture-manager/","maintainer":"BHiMAX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads and writes texture files from disk"}},{"id":"xbox_controller_camera","schema_version":"1.0.0","name":"Xbox Controller Camera","version":"1.0.0","tagline":"Control the 3D viewport camera with an Xbox controller","archive_hash":"sha256:aedc77bf7fab0aeedfdd1fa5f89371b5a116e41d8e8f31b50cadce389f43a458","archive_size":7872,"archive_url":"https://extensions.blender.org/download/sha256:aedc77bf7fab0aeedfdd1fa5f89371b5a116e41d8e8f31b50cadce389f43a458/add-on-xbox-controller-camera-v1.0.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/xbox-controller-camera/","maintainer":"marie.marthenorman","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["3D View","Camera"]},{"id":"latex_text_generator","schema_version":"1.0.0","name":"LaTeX Text Generator","version":"1.1.0","tagline":"Generate customizable 3D text from LaTeX notation","archive_hash":"sha256:29b57fc18ffb92c2761f2cd697edbd20c2ac1fac2db0d2ac8fa20c5c9f6ff651","archive_size":862848,"archive_url":"https://extensions.blender.org/download/sha256:29b57fc18ffb92c2761f2cd697edbd20c2ac1fac2db0d2ac8fa20c5c9f6ff651/add-on-latex-text-generator-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/latex-text-generator/","maintainer":"katterkie","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import custom font files from disk"},"tags":["Add Curve"]},{"id":"arkit_blendshape_tools","schema_version":"1.0.0","name":"ARKit Blendshape Helper","version":"0.7.5","tagline":"Facilitate the process of working with ARKit blendshapes","archive_hash":"sha256:22564818659cfcbf43e77aaf7628d57c51c090ffcef98b9d44bd18b9e601ee1e","archive_size":6171,"archive_url":"https://extensions.blender.org/download/sha256:22564818659cfcbf43e77aaf7628d57c51c090ffcef98b9d44bd18b9e601ee1e/add-on-arkit-blendshape-tools-v0.7.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/arkit-blendshape-tools/","maintainer":"SummonAngelus","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"sculpt_mask_facesets_tools","schema_version":"1.0.0","name":"Sculpt Mask FaceSets Tools","version":"1.0.0","tagline":"This is a Blender sculpting support tools","archive_hash":"sha256:5846b16d90b6dcda0833a576e725ab8e8b3bbd4bd4d23adf51d4cde7eab409c1","archive_size":11172,"archive_url":"https://extensions.blender.org/download/sha256:5846b16d90b6dcda0833a576e725ab8e8b3bbd4bd4d23adf51d4cde7eab409c1/add-on-sculpt-mask-facesets-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/sculpt-mask-facesets-tools/","maintainer":"Seaway","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt"]},{"id":"decentraland_tools","schema_version":"1.0.0","name":"Decentraland Tools","version":"1.9.0","tagline":"Scenes, Wearables, and Emotes directly in Blender","archive_hash":"sha256:5f1b326cb0909b1041f1d397e6c2fc008088dc07cffda0ce21740273159d271f","archive_size":2320459,"archive_url":"https://extensions.blender.org/download/sha256:5f1b326cb0909b1041f1d397e6c2fc008088dc07cffda0ce21740273159d271f/add-on-decentraland-tools-v1.9.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/decentraland-tools/","maintainer":"Decentraland-Foundation","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export glTF files and Decentraland assets","network":"Open Decentraland documentation URLs in browser"},"tags":["Object","Import-Export"]},{"id":"dynamic_rig_ui","schema_version":"1.0.0","name":"Dynamic Rig UI","version":"1.0.1","tagline":"Dynamic Rig UI driven by bone collections and custom properties","archive_hash":"sha256:688fae94a0b2cfb8c55da4f0208f0aaa8c2d1d926e437c5334b0ef8df3dc39f7","archive_size":33793,"archive_url":"https://extensions.blender.org/download/sha256:688fae94a0b2cfb8c55da4f0208f0aaa8c2d1d926e437c5334b0ef8df3dc39f7/add-on-dynamic-rig-ui-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/dynamic-rig-ui/","maintainer":"Samy_Rodriguez","license":["SPDX:GPL-3.0-or-later"]},{"id":"two_point_ex","schema_version":"1.0.0","name":"Two Point Ex","version":"1.0.0","tagline":"A retro theme inspired by Blender 2.2x and before","archive_hash":"sha256:862589b1ae300cc5d200cdf9f952068e7532641704b058b3e1b6daf20cd55ba4","archive_size":5902,"archive_url":"https://extensions.blender.org/download/sha256:862589b1ae300cc5d200cdf9f952068e7532641704b058b3e1b6daf20cd55ba4/theme-two-point-ex-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/two-point-ex/","maintainer":"eyecandy","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Inspired By"]},{"id":"render_profiler","schema_version":"1.0.0","name":"Render Profiler","version":"0.9.4","tagline":"Profile and analyze Blender render/viewport performance","archive_hash":"sha256:b8c9f95f6d2bd70e6f93ecda2f391b6a39293b3dc06262706f54cbe4e610bbb8","archive_size":38861,"archive_url":"https://extensions.blender.org/download/sha256:b8c9f95f6d2bd70e6f93ecda2f391b6a39293b3dc06262706f54cbe4e610bbb8/add-on-render-profiler-v0.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-profiler/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","System"]},{"id":"gruvbox_green_theme","schema_version":"1.0.0","name":"Gruvbox Green Theme","version":"1.0.1","tagline":"A gruvbox theme that is using aqua / green as the primary color","archive_hash":"sha256:f557ec7c47635202c1a700091f1c35cb931aff8f7c5791200d988f9f3a30e85e","archive_size":6478,"archive_url":"https://extensions.blender.org/download/sha256:f557ec7c47635202c1a700091f1c35cb931aff8f7c5791200d988f9f3a30e85e/theme-gruvbox-green-theme-v1.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/gruvbox-green-theme/","maintainer":"Edin-Spiegel","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"storytools","schema_version":"1.0.0","name":"Storytools - Storyboard Tools","version":"3.3.2","tagline":"Set of tools for Storyboarding and 2D animation","archive_hash":"sha256:39e117d36abdcfe8580294db16bb9198ad1a81f49873c0a38e5752343e2e444b","archive_size":303524,"archive_url":"https://extensions.blender.org/download/sha256:39e117d36abdcfe8580294db16bb9198ad1a81f49873c0a38e5752343e2e444b/add-on-storytools-v3.3.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/storytools/","maintainer":"SamuelBernou","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Grease Pencil","3D View"]},{"id":"batch_texture_converter","schema_version":"1.0.0","name":"Batch Texture Converter","version":"1.1.1","tagline":"Bulk texture conversion with color space and alpha splitting","archive_hash":"sha256:20fc830262828a9fa0fc5225a0bc6b254153b1cd5ec2cd40137a20952d1d9917","archive_size":4410,"archive_url":"https://extensions.blender.org/download/sha256:20fc830262828a9fa0fc5225a0bc6b254153b1cd5ec2cd40137a20952d1d9917/add-on-batch-texture-converter-v1.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/batch-texture-converter/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write local files"},"tags":["Import-Export"]},{"id":"pseudo_rendering_farm","schema_version":"1.0.0","name":"Pseudo Rendering Farm","version":"1.1.1","tagline":"Spawns multiple background processes to render the current file","archive_hash":"sha256:27d5a2528514192c942d9f12f00ee9421df5d33f9ba4c17f4ad9287bbf8ab23f","archive_size":5695,"archive_url":"https://extensions.blender.org/download/sha256:27d5a2528514192c942d9f12f00ee9421df5d33f9ba4c17f4ad9287bbf8ab23f/add-on-pseudo-rendering-farm-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pseudo-rendering-farm/","maintainer":"mklimenko","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to manage output files and temporary benchmark data"},"tags":["Render"]},{"id":"home_builder_5","schema_version":"1.0.0","name":"Home Builder 5","version":"5.1.0","tagline":"Design interior spaces with parametric cabinets","archive_hash":"sha256:cac7209d15f87230ea980632dddf4f9deb885ff7cbc2711cf345bd660391c035","archive_size":24089015,"archive_url":"https://extensions.blender.org/download/sha256:cac7209d15f87230ea980632dddf4f9deb885ff7cbc2711cf345bd660391c035/add-on-home-builder-5-v5.1.0-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/home-builder-5/","maintainer":"AndrewPeel","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/load project files, export PDFs and layouts"},"platforms":["windows-x64"],"tags":["Add Mesh","Scene"]},{"id":"softviz_pro","schema_version":"1.0.0","name":"SoftViz Pro","version":"1.2.0","tagline":"GPU-accelerated heatmap visualizer for Proportional Editing","archive_hash":"sha256:3f84cef289f013863d16b9a80df390e0c24b5b9deb9c094e6f1749bbc9d946f9","archive_size":5456,"archive_url":"https://extensions.blender.org/download/sha256:3f84cef289f013863d16b9a80df390e0c24b5b9deb9c094e6f1749bbc9d946f9/add-on-softviz-pro-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/softviz-pro/","maintainer":"Niels-Couvreur","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","3D View"]},{"id":"theme_property_finder","schema_version":"1.0.0","name":"Theme Property Finder","version":"1.0.0","tagline":"Find and sync theme properties across all editors instantly","archive_hash":"sha256:7fd51c82c5dc21aca4e525cdbae5394c4415e7b44d036639ed33495fac94ef2d","archive_size":4442,"archive_url":"https://extensions.blender.org/download/sha256:7fd51c82c5dc21aca4e525cdbae5394c4415e7b44d036639ed33495fac94ef2d/add-on-theme-property-finder-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/theme-property-finder/","maintainer":"Nanomanpro","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"script_launcher","schema_version":"1.0.0","name":"Script Launcher","version":"1.2.2","tagline":"Manage and run Python scripts from multiple root folders","archive_hash":"sha256:581f512031bd2eced56563ecaaee2216ff54f9a37eb06552cb99086ec02191a2","archive_size":20482,"archive_url":"https://extensions.blender.org/download/sha256:581f512031bd2eced56563ecaaee2216ff54f9a37eb06552cb99086ec02191a2/add-on-script-launcher-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/script-launcher/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Development","Pipeline"]},{"id":"gp_select","schema_version":"1.0.0","name":"Gp Select","version":"1.8.0","tagline":"Grease Pencil,Cutout,Weight,rig,lattice,and Automation toolkit","archive_hash":"sha256:80756bd8e85836cab24a854e788d307cd0f14e2780cfe030567e5824bf80f158","archive_size":70610,"archive_url":"https://extensions.blender.org/download/sha256:80756bd8e85836cab24a854e788d307cd0f14e2780cfe030567e5824bf80f158/add-on-gp-select-v1.8.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/gp-select/","maintainer":"HissatsuClaw","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil","Rigging"]},{"id":"alias_repowered","schema_version":"1.0.0","name":"Alias Repowered","version":"1.0.0","tagline":"Classic theme inspired by Alias Poweranimator","archive_hash":"sha256:b2d913d82657c2b4f5e91eb61d5fe3ed131b2601234714a2b6aefc7adc91a525","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:b2d913d82657c2b4f5e91eb61d5fe3ed131b2601234714a2b6aefc7adc91a525/theme-alias-repowered-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/alias-repowered/","maintainer":"Tetrabunz","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Light"]},{"id":"shapekey_axis_control","schema_version":"1.0.0","name":"ShapeKey Axis Control","version":"4.0.44","tagline":"Control shape keys using a 2D Axis HUD Joystick","archive_hash":"sha256:f5fe28bb6402aa003e2fd238520d80d0ea850c34bb657b3761ef11e019838f3d","archive_size":27009,"archive_url":"https://extensions.blender.org/download/sha256:f5fe28bb6402aa003e2fd238520d80d0ea850c34bb657b3761ef11e019838f3d/add-on-shapekey-axis-control-v4.0.44.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapekey-axis-control/","maintainer":"Axnise","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"e_topology_smooth","schema_version":"1.0.0","name":"E Topology Smooth","version":"2.7.8","tagline":"Mesh topology smoothing with G0-G4 continuity analysis","archive_hash":"sha256:cd781bedfd0c453a40d1a3393b8a0a4ad5f7bb631de60dab2b9312974dedbd2d","archive_size":35864648,"archive_url":"https://extensions.blender.org/download/sha256:cd781bedfd0c453a40d1a3393b8a0a4ad5f7bb631de60dab2b9312974dedbd2d/add-on-e-topology-smooth-v2.7.8-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/e-topology-smooth/","maintainer":"Eridanus-Epsilon","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh","Modeling"]},{"id":"grease_mesh","schema_version":"1.0.0","name":"Grease Mesh","version":"1.0.8","tagline":"Easy toolbox for creating meshes from Grease Pencil","archive_hash":"sha256:3ef23bcfcd2cf46f1c9857c95875d6b2630668d694cc5910e4dea2aeacd1e2fd","archive_size":44826,"archive_url":"https://extensions.blender.org/download/sha256:3ef23bcfcd2cf46f1c9857c95875d6b2630668d694cc5910e4dea2aeacd1e2fd/add-on-grease-mesh-v1.0.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grease-mesh/","maintainer":"Tonis","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Grease Pencil","Modeling"]},{"id":"palette","schema_version":"1.0.0","name":"Palette","version":"1.1.5","tagline":"Load 600+ terminal palettes as complete Blender UI themes","archive_hash":"sha256:bf9563590e4eb6603e3d33bc4dd54bcc272dc3ed28bcd9bffb751e1ec337230c","archive_size":53305,"archive_url":"https://extensions.blender.org/download/sha256:bf9563590e4eb6603e3d33bc4dd54bcc272dc3ed28bcd9bffb751e1ec337230c/add-on-palette-v1.1.5.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/palette/","maintainer":"NXSTYNATE","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Caches themes locally","network":"Downloads color schemes from GitHub repositories"},"tags":["User Interface"]},{"id":"b_onion_skin","schema_version":"1.0.0","name":"B Onion Skin","version":"1.0.0","tagline":"Onion skinning for 3D animation","archive_hash":"sha256:6e976d6e74649431a61224918b7d505da2b5620419e3def201841386c1277fc9","archive_size":10458,"archive_url":"https://extensions.blender.org/download/sha256:6e976d6e74649431a61224918b7d505da2b5620419e3def201841386c1277fc9/add-on-b-onion-skin-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b-onion-skin/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"import_paint_brush","schema_version":"1.0.0","name":"Import Paint Brushes","version":"0.4.0","tagline":"Parsing several brush formats of painting software","archive_hash":"sha256:8757073919c0d49df138f4ebe5c4c126e4a68acdeb4622188637bfc1ca37abdf","archive_size":29373,"archive_url":"https://extensions.blender.org/download/sha256:8757073919c0d49df138f4ebe5c4c126e4a68acdeb4622188637bfc1ca37abdf/add-on-import-paint-brush-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-paint-brush/","maintainer":"chsh2","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import brush files from disk"},"tags":["Import-Export","Paint","Sculpt","Grease Pencil"]},{"id":"EyeZen","schema_version":"1.0.0","name":"Eye Zen","version":"1.0.5","tagline":"A Relaxing Theme","archive_hash":"sha256:3bf968a9f69ab54ab2e98366b8a5aa2e5e597730125885001422eb8a6718f888","archive_size":5732,"archive_url":"https://extensions.blender.org/download/sha256:3bf968a9f69ab54ab2e98366b8a5aa2e5e597730125885001422eb8a6718f888/theme-eyezen-v1.0.5.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/eyezen/","maintainer":"Sekuora","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Print"]},{"id":"sculpt_navigation","schema_version":"1.0.0","name":"Sculpt Navigation","version":"1.0.2","tagline":"ZBrush/3D-Coat style viewport navigation","archive_hash":"sha256:b9c5607fb3e7bf4d199efe55b4025172ec47e5c8e55997ae99ec4de5f11f3c36","archive_size":40766,"archive_url":"https://extensions.blender.org/download/sha256:b9c5607fb3e7bf4d199efe55b4025172ec47e5c8e55997ae99ec4de5f11f3c36/add-on-sculpt-navigation-v1.0.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/sculpt-navigation/","maintainer":"Cuzmic","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Sculpt"]},{"id":"texture_mixer","schema_version":"1.0.0","name":"Texture Mixer","version":"0.1.1","tagline":"Layer-based PBR mixing and texture management","archive_hash":"sha256:b32909cebb5fe5369de8344f38d6ee6f7aca7d8e75305ad168e0002fb2a5971b","archive_size":287099,"archive_url":"https://extensions.blender.org/download/sha256:b32909cebb5fe5369de8344f38d6ee6f7aca7d8e75305ad168e0002fb2a5971b/add-on-texture-mixer-v0.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/texture-mixer/","maintainer":"MoonRaider","license":["SPDX:GPL-3.0-or-later"]},{"id":"poly_copy_paste","schema_version":"1.0.0","name":"Poly Copy Paste","version":"1.1.1","tagline":"Copy / Cut / Paste polygons with Ctrl+C / Ctrl+X / Ctrl+V","archive_hash":"sha256:e6fd3da37dc17ea459a533dc81685044544a2d9dff27f32a8ce8b2aea64d3ad4","archive_size":3499,"archive_url":"https://extensions.blender.org/download/sha256:e6fd3da37dc17ea459a533dc81685044544a2d9dff27f32a8ce8b2aea64d3ad4/add-on-poly-copy-paste-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/poly-copy-paste/","maintainer":"Fisch_Tu","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"blender_source_theme","schema_version":"1.0.0","name":"Source","version":"1.0.0","tagline":"This is a Source Engine Based theme for Blender","archive_hash":"sha256:5a6aaaf773d46c437c98caef00c0dfede6a26d4b2ffdd0853fa099fdfe95ac49","archive_size":6684,"archive_url":"https://extensions.blender.org/download/sha256:5a6aaaf773d46c437c98caef00c0dfede6a26d4b2ffdd0853fa099fdfe95ac49/theme-blender-source-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blender-source-theme/","maintainer":"AeroBuoyancy.source","license":["SPDX:GPL-3.0-or-later"]},{"id":"delete_empty_nla_tracks","schema_version":"1.0.0","name":"NLA Empty Track Cleanup RKNZ","version":"1.2.1","tagline":"Quickly remove all empty NLA tracks","archive_hash":"sha256:7c6a978f237665af5d5e4e102cc2127b6fbfbe5caba16ba7f49f5623e29fd2cd","archive_size":14568,"archive_url":"https://extensions.blender.org/download/sha256:7c6a978f237665af5d5e4e102cc2127b6fbfbe5caba16ba7f49f5623e29fd2cd/add-on-delete-empty-nla-tracks-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/delete-empty-nla-tracks/","maintainer":"Rikokenz","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Cyberpunk_2077_UI","schema_version":"1.0.0","name":"Cyberpunk_2077_UI","version":"3.0.5","tagline":"Dark Crimson Futuristic Dystopian","archive_hash":"sha256:7fb2834a45fc41fd9f7f220be8be913e7af8cd4b0a9e71afdf1d5a31ea0fc851","archive_size":5652,"archive_url":"https://extensions.blender.org/download/sha256:7fb2834a45fc41fd9f7f220be8be913e7af8cd4b0a9e71afdf1d5a31ea0fc851/theme-cyberpunk-2077-ui-v3.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cyberpunk-2077-ui/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"smart_selection_propagation","schema_version":"1.0.0","name":"Smart Selection Propagation","version":"1.0.0","tagline":"Advanced topology-based selection of similar mesh elements","archive_hash":"sha256:e297789ec5d939ad212de504908c143b963108c3bc4c2b28f23a87fccab6da13","archive_size":6632,"archive_url":"https://extensions.blender.org/download/sha256:e297789ec5d939ad212de504908c143b963108c3bc4c2b28f23a87fccab6da13/add-on-smart-selection-propagation-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-selection-propagation/","maintainer":"atrxi","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling","3D View"]},{"id":"ROSE2_theme","schema_version":"1.0.0","name":"theme ROSE","version":"1.0.0","tagline":"Soft pink theme, dark","archive_hash":"sha256:22a391c485c6efc8c7d4dfe060ff17d177d47fcf205abaa0763fc474e609b640","archive_size":6432,"archive_url":"https://extensions.blender.org/download/sha256:22a391c485c6efc8c7d4dfe060ff17d177d47fcf205abaa0763fc474e609b640/theme-rose2-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/rose2-theme/","maintainer":"5Lunes","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"arknights_endfield_theme","schema_version":"1.0.0","name":"Arknights: Endfield","version":"1.0.1","tagline":"Theme inspired by Arknights: Endfield game UI","archive_hash":"sha256:8c151906dba63d9240bb2fa29b0024df03bfd516d5bc665d260d19b7e2de7d52","archive_size":5545,"archive_url":"https://extensions.blender.org/download/sha256:8c151906dba63d9240bb2fa29b0024df03bfd516d5bc665d260d19b7e2de7d52/theme-arknights-endfield-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/arknights-endfield-theme/","maintainer":"RAZUMNO","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"motion_sounds","schema_version":"1.0.0","name":"Motion Sounds","version":"0.9.0","tagline":"Add sounds to your animation based on motion events","archive_hash":"sha256:62f25e1acafc6b4af5389f1b9d4e685ef0cb44062b74bff00ff70e08109d90e0","archive_size":187022,"archive_url":"https://extensions.blender.org/download/sha256:62f25e1acafc6b4af5389f1b9d4e685ef0cb44062b74bff00ff70e08109d90e0/add-on-motion-sounds-v0.9.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/motion-sounds/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"fk_ik_snapping_tools","schema_version":"1.0.0","name":"FK/IK Snapping Tools","version":"1.0.0","tagline":"Seamlessly snap FK controls to IK and vice versa","archive_hash":"sha256:002108bd615d7e54428eac30c42e80215c917e61d904ddbd33da0eb3c84118f2","archive_size":3458,"archive_url":"https://extensions.blender.org/download/sha256:002108bd615d7e54428eac30c42e80215c917e61d904ddbd33da0eb3c84118f2/add-on-fk-ik-snapping-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fk-ik-snapping-tools/","maintainer":"atrxi","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"ThreeMF_io","schema_version":"1.0.0","name":"3MF Import/Export","version":"2.7.4","tagline":"Import and export 3D Manufacturing Format (3MF) files","archive_hash":"sha256:c7ae28365c5080ffc3969b6fe09ab5e91404a334d0a69e097f5aae446326c499","archive_size":348357,"archive_url":"https://extensions.blender.org/download/sha256:c7ae28365c5080ffc3969b6fe09ab5e91404a334d0a69e097f5aae446326c499/add-on-threemf-io-v2.7.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/threemf-io/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"For import and export of 3MF files"},"tags":["Import-Export"]},{"id":"modifier_manager","schema_version":"1.0.0","name":"Modifier Manager","version":"1.0.2","tagline":"Manage your modifiers from right click menu","archive_hash":"sha256:0e03355dba011e705ff220940779f32169080136f625866173e8a79077f87f29","archive_size":11707,"archive_url":"https://extensions.blender.org/download/sha256:0e03355dba011e705ff220940779f32169080136f625866173e8a79077f87f29/add-on-modifier-manager-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/modifier-manager/","maintainer":"KewlSheet","license":["SPDX:GPL-3.0-or-later"]},{"id":"SilhouetteToole","schema_version":"1.0.0","name":"SilhouetteToole","version":"1.9.3","tagline":"One-click viewport silhouette mode","archive_hash":"sha256:3d21f4e70cbc54a5ad89ce8169dcec502cad3d4d5a96c3cbd899ddee1ec82bc9","archive_size":2042,"archive_url":"https://extensions.blender.org/download/sha256:3d21f4e70cbc54a5ad89ce8169dcec502cad3d4d5a96c3cbd899ddee1ec82bc9/add-on-silhouettetoole-v1.9.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/silhouettetoole/","maintainer":"Quinzy","license":["SPDX:GPL-3.0-or-later"]},{"id":"tetrominode","schema_version":"1.0.0","name":"Tetrominode","version":"0.4.6","tagline":"Play Tetris in Blender using Geometry Nodes","archive_hash":"sha256:c0f2fdedf0d3999ac0734992540b50bda5a982a38503097fd9b6521186bced0a","archive_size":254981,"archive_url":"https://extensions.blender.org/download/sha256:c0f2fdedf0d3999ac0734992540b50bda5a982a38503097fd9b6521186bced0a/add-on-tetrominode-v0.4.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tetrominode/","maintainer":"darkstarrd","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Animation"]},{"id":"modular_tree","schema_version":"1.0.0","name":"Modular Tree","version":"5.5.2","tagline":"Procedural node based 3D tree generation","archive_hash":"sha256:3d7f199ef0d6ecb45286ebd89d2f606e64aa22a7f7c66c6fb051ad14fc41cf01","archive_size":3635450,"archive_url":"https://extensions.blender.org/download/sha256:3d7f199ef0d6ecb45286ebd89d2f606e64aa22a7f7c66c6fb051ad14fc41cf01/add-on-modular-tree-v5.5.2-windows-x64.zip","type":"add-on","blender_version_min":"4.3.1","website":"https://extensions.blender.org/add-ons/modular-tree/","maintainer":"Brandyn-Britton","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export pivot painter textures"},"platforms":["windows-x64"],"tags":["Mesh","Add Curve"]},{"id":"Expecto_Patronum_Theme","schema_version":"1.0.0","name":"Expecto_Patronum_Theme","version":"1.1.1","tagline":"Airy Guardian Spirit","archive_hash":"sha256:a9d20299f83a859cdb6c883f31d49b085808f8e24e11e675a7c47260243a7896","archive_size":5763,"archive_url":"https://extensions.blender.org/download/sha256:a9d20299f83a859cdb6c883f31d49b085808f8e24e11e675a7c47260243a7896/theme-expecto-patronum-theme-v1.1.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/expecto-patronum-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"oebs_icon_viewer","schema_version":"1.0.0","name":"OEBS Icon Viewer","version":"1.4.0","tagline":"Browse and Search Blender Icons","archive_hash":"sha256:4e795ee297e73aaec5f6e3c8409241de1854dc6e4b287b474b306f0e043a3042","archive_size":11719,"archive_url":"https://extensions.blender.org/download/sha256:4e795ee297e73aaec5f6e3c8409241de1854dc6e4b287b474b306f0e043a3042/add-on-oebs-icon-viewer-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/oebs-icon-viewer/","maintainer":"Eric-Mwangi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"To copy icon names to the clipboard"},"tags":["Development","System"]},{"id":"easeit","schema_version":"1.0.0","name":"Easeit","version":"1.0.1","tagline":"Quickly apply easing presets to animation keyframes","archive_hash":"sha256:beea61edf4d85ca09c8e7653f893bd9bef25e7aecb7324931522fa2312400c3f","archive_size":60285,"archive_url":"https://extensions.blender.org/download/sha256:beea61edf4d85ca09c8e7653f893bd9bef25e7aecb7324931522fa2312400c3f/add-on-easeit-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easeit/","maintainer":"AndyCuccaro","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"siemen_lens_blender_autotrack","schema_version":"1.0.0","name":"AutoTrack","version":"4.2.0","tagline":"Automatic 3D Tracking and Solving","archive_hash":"sha256:ef38ea45cd918ef704a8f0358c2013a13cc625eaa27e7f0b33d4382e531d1dfb","archive_size":70799,"archive_url":"https://extensions.blender.org/download/sha256:ef38ea45cd918ef704a8f0358c2013a13cc625eaa27e7f0b33d4382e531d1dfb/add-on-siemen-lens-blender-autotrack-v4.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/siemen-lens-blender-autotrack/","maintainer":"Siemen-Lens","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Animation","Compositing","3D View"]},{"id":"node_note","schema_version":"1.0.0","name":"Node Note/节点随记","version":"1.3.0","tagline":"Powerful node notes with text and images/强大的节点图文笔记工具","archive_hash":"sha256:10862308477beaf193562f2ccc6668133d26d9540c4937d59cb66ab22fe9e29d","archive_size":34076,"archive_url":"https://extensions.blender.org/download/sha256:10862308477beaf193562f2ccc6668133d26d9540c4937d59cb66ab22fe9e29d/add-on-node-note-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-note/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import image or use font from disk","clipboard":"Paste text/image from the clipboard and copy text to clipboard"},"tags":["Node"]},{"id":"local_view_collection","schema_version":"1.0.0","name":"Local View by collection","version":"1.0.2","tagline":"Quickly isolate into local view the objects of a collection","archive_hash":"sha256:6f3a2f1d0357b8a236ce46b7adc4e4676655eb65ce451b6bdbc5b2d0d2984de8","archive_size":6670,"archive_url":"https://extensions.blender.org/download/sha256:6f3a2f1d0357b8a236ce46b7adc4e4676655eb65ce451b6bdbc5b2d0d2984de8/add-on-local-view-collection-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/local-view-collection/","maintainer":"D3W3","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object","User Interface"]},{"id":"SimpleMIDI","schema_version":"1.0.0","name":"SimpleMIDI","version":"0.1.14","tagline":"Control object parameters through MIDI Input","archive_hash":"sha256:fb008d8f8788230800b85335d34f2c4e9d1ca4a6e1259b409bd54814690ee688","archive_size":537846,"archive_url":"https://extensions.blender.org/download/sha256:fb008d8f8788230800b85335d34f2c4e9d1ca4a6e1259b409bd54814690ee688/add-on-simplemidi-v0.1.14-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simplemidi/","maintainer":"yadu","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Imports and exports JSON for target maps"},"platforms":["windows-x64"],"tags":["User Interface","Animation"]},{"id":"theme_mockup","schema_version":"1.0.0","name":"Mockup","version":"1.0.0","tagline":"Mockups to use with the (low-fi) Design System components","archive_hash":"sha256:e3588ff217ac36cfab5f0046a6f305b6cd21005a3b6039564169ab070569674e","archive_size":5395,"archive_url":"https://extensions.blender.org/download/sha256:e3588ff217ac36cfab5f0046a6f305b6cd21005a3b6039564169ab070569674e/theme-theme-mockup-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-mockup/","maintainer":"Blender","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","High Contrast"]},{"id":"topology_doctor","schema_version":"1.0.0","name":"Topology Doctor","version":"1.0.0","tagline":"One-click topology analysis and repair assistant","archive_hash":"sha256:79c03ca9c72968c3badfb6ecd2e4aba1fbc6fd8818681c453ddc95ad1f4ad3dd","archive_size":16947,"archive_url":"https://extensions.blender.org/download/sha256:79c03ca9c72968c3badfb6ecd2e4aba1fbc6fd8818681c453ddc95ad1f4ad3dd/add-on-topology-doctor-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/topology-doctor/","maintainer":"Arman-Jangmiri","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Required to copy the topology analysis report text to clipboard"}},{"id":"mio3_flex","schema_version":"1.0.0","name":"Mio3 Flex","version":"1.0.4","tagline":"Reshape meshes into smooth freeform curves using paths","archive_hash":"sha256:bf945d9b3e16c43a7c073367785f0ec7e1fb274283ab31398dd8cd6b66334f05","archive_size":30030,"archive_url":"https://extensions.blender.org/download/sha256:bf945d9b3e16c43a7c073367785f0ec7e1fb274283ab31398dd8cd6b66334f05/add-on-mio3-flex-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mio3-flex/","maintainer":"mio","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"chordsong","schema_version":"1.0.0","name":"Chord Song","version":"1.2.3","tagline":"Vim-like key implementation for Blender","archive_hash":"sha256:910a7f1b8e040677339fa819303465c64045d4529896cc61aa4a0598ce2e539e","archive_size":194852,"archive_url":"https://extensions.blender.org/download/sha256:910a7f1b8e040677339fa819303465c64045d4529896cc61aa4a0598ce2e539e/add-on-chordsong-v1.2.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/chordsong/","maintainer":"Cyrill-Vitkovskiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Development"]},{"id":"hdri_lightbrush","schema_version":"1.0.0","name":"HDRI LightBrush","version":"1.0.1","tagline":"Paint HDRIs on 3D sphere for precise studio lighting control","archive_hash":"sha256:2dd62f9b14e0adbeb049c31a26e9b4c36230e6d57140b494c62d2f4d2ed8f5dc","archive_size":144003,"archive_url":"https://extensions.blender.org/download/sha256:2dd62f9b14e0adbeb049c31a26e9b4c36230e6d57140b494c62d2f4d2ed8f5dc/add-on-hdri-lightbrush-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hdri-lightbrush/","maintainer":"CadTamas","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export HDRI files (.exr, .hdr, .jpg, .png)"},"tags":["Lighting","Paint"]},{"id":"ghostview","schema_version":"1.0.0","name":"GhostView","version":"1.0.2","tagline":"Adjust Window Opacity","archive_hash":"sha256:5cdb7039cbed497381072c413152cc571e9a6d37e92364fd2331d864785c7cc2","archive_size":1997,"archive_url":"https://extensions.blender.org/download/sha256:5cdb7039cbed497381072c413152cc571e9a6d37e92364fd2331d864785c7cc2/add-on-ghostview-v1.0.2-windows-x64-windows-arm64-macos-x64-macos-arm64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ghostview/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","windows-arm64","macos-x64","macos-arm64"],"tags":["User Interface","System"]},{"id":"gamepadcontrol","schema_version":"1.0.0","name":"Gamepad Control","version":"0.1.2","tagline":"Use gamepads as input device to control Blender","archive_hash":"sha256:91cd1c62ff1c6f009b15f2058627ca927f91ccc237ad1cfd5b59af71bd04cc62","archive_size":4828055,"archive_url":"https://extensions.blender.org/download/sha256:91cd1c62ff1c6f009b15f2058627ca927f91ccc237ad1cfd5b59af71bd04cc62/add-on-gamepadcontrol-v0.1.2-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/gamepadcontrol/","maintainer":"Frank-Moelendoerp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export settings and controller modes"},"platforms":["windows-x64"],"tags":["System","User Interface"]},{"id":"LightNCreamy","schema_version":"1.0.0","name":"Light N Creamy","version":"1.0.0","tagline":"Modern light and creamy theme","archive_hash":"sha256:928d02674d7730a994fef538991896f42a3581c8ffe7d8cb5dfa60a1023a61f7","archive_size":3828,"archive_url":"https://extensions.blender.org/download/sha256:928d02674d7730a994fef538991896f42a3581c8ffe7d8cb5dfa60a1023a61f7/theme-lightncreamy-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/lightncreamy/","maintainer":"nova3D","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"majik_blender_edu_teacher","schema_version":"1.0.0","name":"Majik Blender Edu","version":"1.1.4","tagline":"Submission integrity tool for educators to verify students' work","archive_hash":"sha256:fc1007990be6653f524611f8c7f1daf8b043dcb0bc55d7fb103d26612786446f","archive_size":3743388,"archive_url":"https://extensions.blender.org/download/sha256:fc1007990be6653f524611f8c7f1daf8b043dcb0bc55d7fb103d26612786446f/add-on-majik-blender-edu-teacher-v1.1.4-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/majik-blender-edu-teacher/","maintainer":"Zelijah","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write keys and logs as JSON for integrity verification","network":"Access required for JSON file analysis"},"platforms":["windows-x64"],"tags":["Pipeline"]},{"id":"PivotTools","schema_version":"1.0.0","name":"Pivot Tools","version":"1.48.13","tagline":"Fast pivot placement with Auto Pick, BBox targets, Saved Pivots","archive_hash":"sha256:c4457381883495799f87d72226140492d101fecadb9f3021309503feb74438f8","archive_size":8530,"archive_url":"https://extensions.blender.org/download/sha256:c4457381883495799f87d72226140492d101fecadb9f3021309503feb74438f8/add-on-pivottools-v1.48.13.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/pivottools/","maintainer":"Quinzy","license":["SPDX:GPL-3.0-or-later"]},{"id":"geo_nodes_guide","schema_version":"1.0.0","name":"Geo Nodes Guide","version":"0.1.0","tagline":"Live documentation and examples for Geometry Nodes","archive_hash":"sha256:4b6c3a38e41845e4af3c48ac96f991023802ec6fb472fb27f1b70252141ed792","archive_size":93537,"archive_url":"https://extensions.blender.org/download/sha256:4b6c3a38e41845e4af3c48ac96f991023802ec6fb472fb27f1b70252141ed792/add-on-geo-nodes-guide-v0.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/geo-nodes-guide/","maintainer":"Addonyte","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface","Geometry Nodes"]},{"id":"linkforge","schema_version":"1.0.0","name":"LinkForge","version":"1.4.4","tagline":"Visual Designer to build and export URDF/XACRO robot models","archive_hash":"sha256:61312b73ce4cabd84e59244a404eaa838ea0818f00c4c94e7ec03d2dc93974c9","archive_size":600768,"archive_url":"https://extensions.blender.org/download/sha256:61312b73ce4cabd84e59244a404eaa838ea0818f00c4c94e7ec03d2dc93974c9/add-on-linkforge-v1.4.4-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/linkforge/","maintainer":"Arouna-Patouossa-Mounchili","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export URDF/XACRO files"},"platforms":["windows-x64"],"tags":["Import-Export","Rigging","Physics","Pipeline"]},{"id":"asset_shelf_shortcut_display","schema_version":"1.0.0","name":"Asset Shelf Shortcut Display","version":"1.0.0","tagline":"Adds a line with hotkey/shortcut of the asset in the shelf","archive_hash":"sha256:8eeb7d53d48732f8fe36fcb22dd4685718d47021f0fec383a35f1f3360a571ad","archive_size":2816,"archive_url":"https://extensions.blender.org/download/sha256:8eeb7d53d48732f8fe36fcb22dd4685718d47021f0fec383a35f1f3360a571ad/add-on-asset-shelf-shortcut-display-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/asset-shelf-shortcut-display/","maintainer":"The-Loose-Spirit","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"retarget","schema_version":"1.0.0","name":"Retarget","version":"5.1.1","tagline":"Retargeting, convert to Rigify, Action Manager, Animation tools","archive_hash":"sha256:1a4e6f379e6a9631b3c34a17d02cf9da9f2cd4b505067460932443a6aa950ed5","archive_size":228598,"archive_url":"https://extensions.blender.org/download/sha256:1a4e6f379e6a9631b3c34a17d02cf9da9f2cd4b505067460932443a6aa950ed5/add-on-retarget-v5.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/retarget/","maintainer":"KBS-DEV","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import FBX file from disk"},"tags":["Animation","Rigging"]},{"id":"lodify_optimizer","schema_version":"1.0.0","name":"LODify","version":"2.9.0","tagline":"Full-Scenario Perf Opt: Textures, Decimation & Viewport Mgmt","archive_hash":"sha256:55fbe2789e591ec0517cb12bcd437c75ec7a245b32356c714941ba2a997a4e62","archive_size":14089942,"archive_url":"https://extensions.blender.org/download/sha256:55fbe2789e591ec0517cb12bcd437c75ec7a245b32356c714941ba2a997a4e62/add-on-lodify-optimizer-v2.9.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lodify-optimizer/","maintainer":"小T_sune","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to read and write texture files for resizing"},"platforms":["windows-x64"],"tags":["Object"]},{"id":"red_velvet_theme","schema_version":"1.0.0","name":"Red Velvet Theme","version":"1.0.0","tagline":"A cosmic red cyberpunk-inspired theme","archive_hash":"sha256:befa1a1df17476ad63283489e5f0ec497a548aacde2889e337b4b390444f0ab7","archive_size":5449,"archive_url":"https://extensions.blender.org/download/sha256:befa1a1df17476ad63283489e5f0ec497a548aacde2889e337b4b390444f0ab7/theme-red-velvet-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/red-velvet-theme/","maintainer":"Thunder-Artist","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful","Inspired By"]},{"id":"Areas_by_Materials","schema_version":"1.0.0","name":"Areas by Materials","version":"1.6.0","tagline":"Displays information about areas of materials in selection","archive_hash":"sha256:55b3fb12411af2e76d28b97b666ec38f77cbad30ccc4d2830b075ec1224aa6c9","archive_size":3609,"archive_url":"https://extensions.blender.org/download/sha256:55b3fb12411af2e76d28b97b666ec38f77cbad30ccc4d2830b075ec1224aa6c9/add-on-areas-by-materials-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/areas-by-materials/","maintainer":"Justinas-Dudenas","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object","User Interface"]},{"id":"outliner_preview","schema_version":"1.0.0","name":"Outliner Model Preview","version":"1.1.7","tagline":"Preview selected model in the Outliner","archive_hash":"sha256:e1b1bff9fb17cd7823635cfa10829adf2debd1d1e8c23d900bcf94092bc9d43f","archive_size":40651,"archive_url":"https://extensions.blender.org/download/sha256:e1b1bff9fb17cd7823635cfa10829adf2debd1d1e8c23d900bcf94092bc9d43f/add-on-outliner-preview-v1.1.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/outliner-preview/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"ftw3dforge_image_projector","schema_version":"1.0.0","name":"FTW3DForge Image Projector","version":"2.1.0","tagline":"Project images onto 3D meshes with real-time preview and baking","archive_hash":"sha256:617174fdbacd5d088f727e257df211836bb8e56a8e133baf2e39ffa937ac8eaf","archive_size":16305,"archive_url":"https://extensions.blender.org/download/sha256:617174fdbacd5d088f727e257df211836bb8e56a8e133baf2e39ffa937ac8eaf/add-on-ftw3dforge-image-projector-v2.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/ftw3dforge-image-projector/","maintainer":"FTW3DForge","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images from disk"},"tags":["UV","Mesh","Import-Export","Material"]},{"id":"smart_box_select","schema_version":"1.0.0","name":"Smart Box Select","version":"1.0.2","tagline":"Box/Lasso select with object activation","archive_hash":"sha256:3256c8631f9fd181e54271f3779eccfa601f014ce7b69154bb283584049172aa","archive_size":3800,"archive_url":"https://extensions.blender.org/download/sha256:3256c8631f9fd181e54271f3779eccfa601f014ce7b69154bb283584049172aa/add-on-smart-box-select-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-box-select/","maintainer":"R4V3N","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View"]},{"id":"splashsurf_studio","schema_version":"1.0.0","name":"Splashsurf Studio","version":"1.0.1","tagline":"Surface reconstruction for particle-based fluid simulations","archive_hash":"sha256:86779180fe173ea75d43d3ff7cd72633b36444ed56b7412f5131f20f22696d9c","archive_size":2732095,"archive_url":"https://extensions.blender.org/download/sha256:86779180fe173ea75d43d3ff7cd72633b36444ed56b7412f5131f20f22696d9c/add-on-splashsurf-studio-v1.0.1-windows-x64.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/splashsurf-studio/","maintainer":"Fabian-Löschner","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Add Mesh","Mesh","Object"]},{"id":"global_copy_nodes","schema_version":"1.0.0","name":"Global Copy Nodes","version":"1.0.5","tagline":"Copy nodes across .blend projects","archive_hash":"sha256:64e8888b98b672b768e5a278c44a50912e2ed228472202306bfcf6fc37c7915e","archive_size":21986,"archive_url":"https://extensions.blender.org/download/sha256:64e8888b98b672b768e5a278c44a50912e2ed228472202306bfcf6fc37c7915e/add-on-global-copy-nodes-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/global-copy-nodes/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires reading & writing node copy buffer to disk"},"tags":["System","Node"]},{"id":"overscan_addon","schema_version":"1.0.0","name":"Overscan Addon","version":"1.1.1","tagline":"Adds Overscan to your renders","archive_hash":"sha256:3c95e0eb67926e0a9d4f546b139aca201d56da18403a021f4dbd4c2964a47ddb","archive_size":6772,"archive_url":"https://extensions.blender.org/download/sha256:3c95e0eb67926e0a9d4f546b139aca201d56da18403a021f4dbd4c2964a47ddb/add-on-overscan-addon-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/overscan-addon/","maintainer":"eknath-kambagiri","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"gizmo_resizer","schema_version":"1.0.0","name":"Gizmo Resizer","version":"2.3.0","tagline":"Resize viewport Gizmo with Numpad keys","archive_hash":"sha256:cbbda09ab73548d968c137beea34fe7bcf34d60ba1f2da6d1fda5f592c2faafe","archive_size":15888,"archive_url":"https://extensions.blender.org/download/sha256:cbbda09ab73548d968c137beea34fe7bcf34d60ba1f2da6d1fda5f592c2faafe/add-on-gizmo-resizer-v2.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gizmo-resizer/","maintainer":"CorentinBileau","license":["SPDX:GPL-3.0-or-later"]},{"id":"Mask_To_Vertex_Color_Pro","schema_version":"1.0.0","name":"MaskToVertexColorPro","version":"2.0.4","tagline":"Mask To VertexColor Pro Tools","archive_hash":"sha256:79eec742a3c6c6d91028f556dec034e26613e44bf3f612dc7ef3579a3a23460a","archive_size":30127,"archive_url":"https://extensions.blender.org/download/sha256:79eec742a3c6c6d91028f556dec034e26613e44bf3f612dc7ef3579a3a23460a/add-on-mask-to-vertex-color-pro-v2.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mask-to-vertex-color-pro/","maintainer":"墨泪MoLei_VFX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images are required as masks"},"tags":["Paint","Material"]},{"id":"b_guides","schema_version":"1.0.0","name":"B Guides","version":"1.0.1","tagline":"composition with guides and rulers for the VSE and 3D Viewport","archive_hash":"sha256:d6ca584e4e52414643f5da441ec87ccde6177e522a4bbce281f9861b67825f57","archive_size":24706,"archive_url":"https://extensions.blender.org/download/sha256:d6ca584e4e52414643f5da441ec87ccde6177e522a4bbce281f9861b67825f57/add-on-b-guides-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b-guides/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","Sequencer"]},{"id":"selection_mode_cycler","schema_version":"1.0.0","name":"Selection Mode Cycler","version":"1.1.0","tagline":"Cycles through mesh selection modes in Edit Mode","archive_hash":"sha256:80a605bad154cec84404fa1f3a5b9db50846912d98fe07b5d790a03843d4ba12","archive_size":1414,"archive_url":"https://extensions.blender.org/download/sha256:80a605bad154cec84404fa1f3a5b9db50846912d98fe07b5d790a03843d4ba12/add-on-selection-mode-cycler-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/selection-mode-cycler/","maintainer":"Lise-2","license":["SPDX:GPL-3.0-or-later"]},{"id":"colornova","schema_version":"1.0.0","name":"COLOR-NOVA // SPECTRAL UV | M-87","version":"1.0.3","tagline":"Essential UV contrast. Absolute clarity for professional focus","archive_hash":"sha256:94647bd18186a01fafa4fe7b7dbb1d530dbb6687929ee72a85f0b7d944652050","archive_size":6344,"archive_url":"https://extensions.blender.org/download/sha256:94647bd18186a01fafa4fe7b7dbb1d530dbb6687929ee72a85f0b7d944652050/theme-colornova-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/colornova/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By","High Contrast","Colorful"]},{"id":"select_similar_geometry","schema_version":"1.0.0","name":"Select Similar Geometry","version":"1.3.0","tagline":"Select objects by percentage of matching vertices","archive_hash":"sha256:549558b40ebcb9135cc6634abaedb5e7fffb8cd901fbc209543e484c79e05d21","archive_size":397646,"archive_url":"https://extensions.blender.org/download/sha256:549558b40ebcb9135cc6634abaedb5e7fffb8cd901fbc209543e484c79e05d21/add-on-select-similar-geometry-v1.3.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/select-similar-geometry/","maintainer":"JuanRomero","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"matgeo","schema_version":"1.0.0","name":"MatGeo","version":"1.0.0","tagline":"Convert Materials to Geometry Nodes","archive_hash":"sha256:8c636cfb2e778681acb09b8222e94284a2a90f5735a4344ab7f6cc3bb6272556","archive_size":9103,"archive_url":"https://extensions.blender.org/download/sha256:8c636cfb2e778681acb09b8222e94284a2a90f5735a4344ab7f6cc3bb6272556/add-on-matgeo-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/matgeo/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Geometry Nodes","Node"]},{"id":"Cross_Select","schema_version":"1.0.0","name":"Cross Select","version":"1.0.9","tagline":"Select scene objects similar like RHINO or CAD","archive_hash":"sha256:ccbb3398ed55e2eca34b16af8e2d6a449b01711f2f912960a62a708b9fd70f9d","archive_size":71100,"archive_url":"https://extensions.blender.org/download/sha256:ccbb3398ed55e2eca34b16af8e2d6a449b01711f2f912960a62a708b9fd70f9d/add-on-cross-select-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cross-select/","maintainer":"RARA","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","3D View","Scene","Node"]},{"id":"Dark_3d","schema_version":"1.0.0","name":"Dark 3d","version":"1.0.0","tagline":"Shaded Buttons","archive_hash":"sha256:85287c4f042cee529776e3307774d0c0084b76b6d1026a3eb4a526119cbe64ad","archive_size":6664,"archive_url":"https://extensions.blender.org/download/sha256:85287c4f042cee529776e3307774d0c0084b76b6d1026a3eb4a526119cbe64ad/theme-dark-3d-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-3d/","maintainer":"SammyTheBest","license":["SPDX:GPL-3.0-or-later"]},{"id":"bone_math","schema_version":"1.0.0","name":"Bone Math","version":"0.1.0","tagline":"Calculate pole angles, plus other bone related math","archive_hash":"sha256:bffa46d552cc35629cededdab661852c6cfaf195224693423343d36233f9be3c","archive_size":4795,"archive_url":"https://extensions.blender.org/download/sha256:bffa46d552cc35629cededdab661852c6cfaf195224693423343d36233f9be3c/add-on-bone-math-v0.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/bone-math/","maintainer":"Xury46","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"surface_diagnostics","schema_version":"1.0.0","name":"Surface Diagnostics","version":"1.4.3","tagline":"Set of tools for diagnosing surface quality","archive_hash":"sha256:962fd2c89467104fae0bf139c1118e079fa7ff65ae8fbf692c741e2ef6c0d103","archive_size":1241115,"archive_url":"https://extensions.blender.org/download/sha256:962fd2c89467104fae0bf139c1118e079fa7ff65ae8fbf692c741e2ef6c0d103/add-on-surface-diagnostics-v1.4.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/surface-diagnostics/","maintainer":"JLBöhm","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View","Geometry Nodes"]},{"id":"sprite_sheet_maker","schema_version":"1.0.0","name":"Sprite Sheet Maker","version":"5.2.3","tagline":"3D to 2D sprite sheet converter with optional pixelation","archive_hash":"sha256:0e4681811e2b54bc9e74cf1d559c75a577e399047432bf09f61c94966aa3e99b","archive_size":7200095,"archive_url":"https://extensions.blender.org/download/sha256:0e4681811e2b54bc9e74cf1d559c75a577e399047432bf09f61c94966aa3e99b/add-on-sprite-sheet-maker-v5.2.3-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/sprite-sheet-maker/","maintainer":"manas-R.-Makde","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Animation","Render"]},{"id":"gather_resources","schema_version":"1.0.0","name":"Gather Resources","version":"0.5.2","tagline":"Collect project media into a local folder","archive_hash":"sha256:455025f49d9ca76e33425cdceb6e30cbe7e1a2cfbb5b0537725c30e2d8257db3","archive_size":10373,"archive_url":"https://extensions.blender.org/download/sha256:455025f49d9ca76e33425cdceb6e30cbe7e1a2cfbb5b0537725c30e2d8257db3/add-on-gather-resources-v0.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gather-resources/","maintainer":"Digital-Art-Freedom","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read project media files and copy them into a local directory"},"tags":["System","Pipeline"]},{"id":"kanagawa","schema_version":"1.0.0","name":"Kanagawa","version":"1.0.2","tagline":"kanagawa.nvim for Blender","archive_hash":"sha256:a8812fbee1f25670d4d3dc9e272e197c99ce40597974cfdb0629ebf4de643004","archive_size":6255,"archive_url":"https://extensions.blender.org/download/sha256:a8812fbee1f25670d4d3dc9e272e197c99ce40597974cfdb0629ebf4de643004/theme-kanagawa-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/kanagawa/","maintainer":"timberlinefpv","license":["SPDX:GPL-3.0-or-later"]},{"id":"cam_tools","schema_version":"1.0.0","name":"Cam Tools","version":"1.2.0","tagline":"Streamlined camera workflow toolkit","archive_hash":"sha256:2523840757e3aef22f5680cace31401194841bddf828b50f4ecdadb810e26a4e","archive_size":17639,"archive_url":"https://extensions.blender.org/download/sha256:2523840757e3aef22f5680cace31401194841bddf828b50f4ecdadb810e26a4e/add-on-cam-tools-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cam-tools/","maintainer":"Akhil_Alukkaran","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"io_scene_owm","schema_version":"1.0.0","name":"OWM Import","version":"3.3.1","tagline":"Import files from the Overwatch extraction tools (DataTool)","archive_hash":"sha256:9b6e6a11ce333504f4a09cbb599e940216133f7007cdbd274f2decfe071d9445","archive_size":279836,"archive_url":"https://extensions.blender.org/download/sha256:9b6e6a11ce333504f4a09cbb599e940216133f7007cdbd274f2decfe071d9445/add-on-io-scene-owm-v3.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-owm/","maintainer":"overtools","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing files from disk"},"tags":["Import-Export"]},{"id":"windows_xp_theme","schema_version":"1.0.0","name":"Windows XP","version":"1.0.3","tagline":"A light theme directly inspired by Windows XP","archive_hash":"sha256:ca44d2ed04de48c14d142eb0104d9abc6591d41447559085622fca424530333e","archive_size":6738,"archive_url":"https://extensions.blender.org/download/sha256:ca44d2ed04de48c14d142eb0104d9abc6591d41447559085622fca424530333e/theme-windows-xp-theme-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/windows-xp-theme/","maintainer":"Alkalide","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Colorful","Inspired By"]},{"id":"ZZZ","schema_version":"1.0.0","name":"ZZZ Theme","version":"1.0.2","tagline":"High-contrast dark theme with Zenless Zone Zero's signature","archive_hash":"sha256:070fce74a8da3a56906da1289cc73afdfe42ab5409b9fbb0418e828653747d86","archive_size":5517,"archive_url":"https://extensions.blender.org/download/sha256:070fce74a8da3a56906da1289cc73afdfe42ab5409b9fbb0418e828653747d86/theme-zzz-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/zzz/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By","High Contrast"]},{"id":"Cyberpunk2077","schema_version":"1.0.0","name":"Cyberpunk 2077","version":"1.2.2","tagline":"A Cyberpunk 2077 theme for Blender","archive_hash":"sha256:ef1b9805013640d1b463f162ff694e152b05a5e6c715154af6b22593d64009ef","archive_size":5852,"archive_url":"https://extensions.blender.org/download/sha256:ef1b9805013640d1b463f162ff694e152b05a5e6c715154af6b22593d64009ef/theme-cyberpunk2077-v1.2.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cyberpunk2077/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"mintLavender","schema_version":"1.0.0","name":"Mint Lavender Chill","version":"1.0.4","tagline":"A Mint lavender theme for Blender with Lo-fi aesthetics","archive_hash":"sha256:f0f94cbdc8c430272abb6b7d0b94b94df7f70421eeeace7314e9c90d598053c5","archive_size":5405,"archive_url":"https://extensions.blender.org/download/sha256:f0f94cbdc8c430272abb6b7d0b94b94df7f70421eeeace7314e9c90d598053c5/theme-mintlavender-v1.0.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/mintlavender/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"sleek_navy","schema_version":"1.0.0","name":"Sleek Navy","version":"1.1.0","tagline":"A clean dark-blue Blender theme","archive_hash":"sha256:4db02ebc9e554c4d07fd7d31c7661062ed8920d7e8dcc471d241af1ece347cf9","archive_size":5549,"archive_url":"https://extensions.blender.org/download/sha256:4db02ebc9e554c4d07fd7d31c7661062ed8920d7e8dcc471d241af1ece347cf9/theme-sleek-navy-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/sleek-navy/","maintainer":"Martel6ix","license":["SPDX:MIT"]},{"id":"multirow","schema_version":"1.0.0","name":"Multirow","version":"1.0.1","tagline":"Text strips with line break","archive_hash":"sha256:c619e40e99055c804c1033d48d851f0415b75ad22a03b1a1922c8c93159317f1","archive_size":4445,"archive_url":"https://extensions.blender.org/download/sha256:c619e40e99055c804c1033d48d851f0415b75ad22a03b1a1922c8c93159317f1/add-on-multirow-v1.0.1.zip","type":"add-on","blender_version_min":"4.4.3","website":"https://extensions.blender.org/add-ons/multirow/","maintainer":"flakmoppen","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer","Text Editor","User Interface"]},{"id":"viewport_camera_positions","schema_version":"1.0.0","name":"Lutaya Viewport Camera","version":"1.0.1","tagline":"Save and switch between camera positions with orthographic views","archive_hash":"sha256:ede7461b4a2d43a0f6f97d17c5d27ef056bc55901608d83dcb46f6c0c832f71b","archive_size":4336,"archive_url":"https://extensions.blender.org/download/sha256:ede7461b4a2d43a0f6f97d17c5d27ef056bc55901608d83dcb46f6c0c832f71b/add-on-viewport-camera-positions-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-camera-positions/","maintainer":"3D_SHVYREV","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load camera position configurations"},"tags":["3D View","Camera"]},{"id":"sequence_loader","schema_version":"1.0.0","name":"Sequence Loader","version":"0.4.0","tagline":"Just-in-time loader for meshio-supported mesh file sequences","archive_hash":"sha256:20c6e8c30cd2c2aa4be1c56817a32562680841c20df0b7a6cff103d543f566ff","archive_size":629459,"archive_url":"https://extensions.blender.org/download/sha256:20c6e8c30cd2c2aa4be1c56817a32562680841c20df0b7a6cff103d543f566ff/add-on-sequence-loader-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sequence-loader/","maintainer":"Stefan-Jeske","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Core functionality to load files from disk"},"tags":["Import-Export"]},{"id":"Studio_Dark","schema_version":"1.0.0","name":"Studio Dark","version":"2.3.5","tagline":"Consistent UI, sharp colors, comfortable contrast, 3 birght lvls","archive_hash":"sha256:1cca72f14819c6b69e2f4c555680bde59a316390be13f5ce0fddd198c3b43d3a","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:1cca72f14819c6b69e2f4c555680bde59a316390be13f5ce0fddd198c3b43d3a/theme-studio-dark-v2.3.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/studio-dark/","maintainer":"3DDinosaur","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"khellstr_light","schema_version":"1.0.0","name":"khellstr light theme","version":"1.0.1","tagline":"Balanced Light Theme for Blender","archive_hash":"sha256:fd1b0e695748382dee2b796e33a2996b98e1573bcd67803e501538158730aefc","archive_size":6567,"archive_url":"https://extensions.blender.org/download/sha256:fd1b0e695748382dee2b796e33a2996b98e1573bcd67803e501538158730aefc/theme-khellstr-light-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/khellstr-light/","maintainer":"khellstr","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"automata_theme","schema_version":"1.0.0","name":"Automata","version":"2.0.0","tagline":"NieR inspired theme","archive_hash":"sha256:7999157fafef87293070f20c98d798e754bf156147cdc753687ffba29bb7a198","archive_size":5950,"archive_url":"https://extensions.blender.org/download/sha256:7999157fafef87293070f20c98d798e754bf156147cdc753687ffba29bb7a198/theme-automata-theme-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/automata-theme/","maintainer":"NSA-Cloud","license":["SPDX:GPL-3.0-or-later"]},{"id":"ani_offset","schema_version":"1.0.0","name":"Ani Offset","version":"3.2.2","tagline":"Propagate pose offsets across selected keyframes","archive_hash":"sha256:6bf4ed70b657094558e0f01616facd761d74d8e7d97b03a55e42cbeec3db3154","archive_size":3526,"archive_url":"https://extensions.blender.org/download/sha256:6bf4ed70b657094558e0f01616facd761d74d8e7d97b03a55e42cbeec3db3154/add-on-ani-offset-v3.2.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/ani-offset/","maintainer":"Drika111","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"asset_optimizer","schema_version":"1.0.0","name":"Game Asset Optimizer","version":"1.0.2","tagline":"Optimize 3D models for Unity and Unreal Engine workflows","archive_hash":"sha256:909b4c1e85e93f5c4aefbdd519d14e05a6435dbd5361301373c84c64c3f7fc2b","archive_size":19580,"archive_url":"https://extensions.blender.org/download/sha256:909b4c1e85e93f5c4aefbdd519d14e05a6435dbd5361301373c84c64c3f7fc2b/add-on-asset-optimizer-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/asset-optimizer/","maintainer":"Sudip-Soni","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export optimized assets for Unity and Unreal Engine"},"tags":["Modeling","Mesh","Pipeline"]},{"id":"k_tools_texture_map_loader","schema_version":"1.0.0","name":"K-Tools: Texture Map Loader","version":"1.5.0","tagline":" An easy way to load Texture Sets in your Shader Material","archive_hash":"sha256:397237f886853b05fb9da2dba1f3f03cd65c172f3b74da9ae227f8584feaca8f","archive_size":1112095,"archive_url":"https://extensions.blender.org/download/sha256:397237f886853b05fb9da2dba1f3f03cd65c172f3b74da9ae227f8584feaca8f/add-on-k-tools-texture-map-loader-v1.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-texture-map-loader/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load Node Groups from disk"},"tags":["Material"]},{"id":"turntable_camera","schema_version":"1.0.0","name":"Turntable Camera","version":"0.1.2","tagline":"Camera Turntable Setup","archive_hash":"sha256:fa20577f3c12d4b6dd05802b7aacf3dd8d433753fc19b3bb8da3adb23ac2b3c5","archive_size":17413,"archive_url":"https://extensions.blender.org/download/sha256:fa20577f3c12d4b6dd05802b7aacf3dd8d433753fc19b3bb8da3adb23ac2b3c5/add-on-turntable-camera-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/turntable-camera/","maintainer":"The_Missing_Field","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"copy_paste_nodes","schema_version":"1.0.0","name":"Copy/Paste Nodes","version":"0.1.6","tagline":"Copy nodes to and from the system clipboard as JSON","archive_hash":"sha256:3c09cea629616ed5c8ad8b4944a5c23eb4a9043931070bdff18ea19d630f5975","archive_size":10745,"archive_url":"https://extensions.blender.org/download/sha256:3c09cea629616ed5c8ad8b4944a5c23eb4a9043931070bdff18ea19d630f5975/add-on-copy-paste-nodes-v0.1.6.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/copy-paste-nodes/","maintainer":"david494","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copy and paste nodes to the clipboard"},"tags":["Node"]},{"id":"mixamo_rig","schema_version":"1.0.0","name":"Mixamo Rig","version":"1.2.2","tagline":"Generate a control rig from Mixamo Fbx skeleton","archive_hash":"sha256:5c59e419355b0b4b5014b7bbcbee4d9a4c38476b8225526e3c904a81b056a191","archive_size":179337,"archive_url":"https://extensions.blender.org/download/sha256:5c59e419355b0b4b5014b7bbcbee4d9a4c38476b8225526e3c904a81b056a191/add-on-mixamo-rig-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.5.999","website":"https://extensions.blender.org/add-ons/mixamo-rig/","maintainer":"tyler.tofu","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Rigging"]},{"id":"time_theme_switcher","schema_version":"1.0.0","name":"Time Theme Switcher","version":"1.0.0","tagline":"Switches between light and dark UI themes at scheduled times","archive_hash":"sha256:0f1d64ae1814f5b2110db105154b7c84343c39648f2196a6d7eeaee8bab95010","archive_size":18346,"archive_url":"https://extensions.blender.org/download/sha256:0f1d64ae1814f5b2110db105154b7c84343c39648f2196a6d7eeaee8bab95010/add-on-time-theme-switcher-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/time-theme-switcher/","maintainer":"CosmoMídias","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read existing themes from disk"},"tags":["User Interface"]},{"id":"img2mat_pro","schema_version":"1.0.0","name":"img2mat_pro","version":"2.0.0","tagline":"Image palettes, PMS matches, and material callouts","archive_hash":"sha256:b365c18e8c132ed1c31643ec6b1c29ccb5b6b3fd62ff911709fd73b5ac8740fe","archive_size":24619,"archive_url":"https://extensions.blender.org/download/sha256:b365c18e8c132ed1c31643ec6b1c29ccb5b6b3fd62ff911709fd73b5ac8740fe/add-on-img2mat-pro-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/img2mat-pro/","maintainer":"stevewarner","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","User Interface","Pipeline"]},{"id":"cad_helper","schema_version":"1.0.0","name":"CAD-Helper","version":"0.7.0","tagline":"Blender Extension to manage imported CAD assemblies","archive_hash":"sha256:f3b569a0cd29d9d96745422d302b1fb94d78c8415e0dffdc73315376f3849fc2","archive_size":44789,"archive_url":"https://extensions.blender.org/download/sha256:f3b569a0cd29d9d96745422d302b1fb94d78c8415e0dffdc73315376f3849fc2/add-on-cad-helper-v0.7.0-windows-x64-macos-arm64-linux-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/cad-helper/","maintainer":"BsIngA","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","macos-arm64","linux-x64"],"tags":["Object"]},{"id":"anim_reviewer","schema_version":"1.0.0","name":"Anim Reviewer","version":"1.1.0","tagline":"Enhance blender playblast capabilities for animation review","archive_hash":"sha256:c0a0fa57ace3f7b947b66c30eb0de9fc2d7ebd36c1915ff5ad96dfea46b7da12","archive_size":1336967,"archive_url":"https://extensions.blender.org/download/sha256:c0a0fa57ace3f7b947b66c30eb0de9fc2d7ebd36c1915ff5ad96dfea46b7da12/add-on-anim-reviewer-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/anim-reviewer/","maintainer":"FhyTan","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save playblast videos in specified output folder"},"tags":["3D View","Animation","Camera","Pipeline"]},{"id":"export_render_as_dng","schema_version":"1.0.0","name":"Export Render as DNG","version":"1.0.3","tagline":"Export renders and images as Bayer-style DNG files","archive_hash":"sha256:a02d2f10564dbcfa599731d957db4daf8573ceac47ba417a7900c0739792ce1a","archive_size":25964,"archive_url":"https://extensions.blender.org/download/sha256:a02d2f10564dbcfa599731d957db4daf8573ceac47ba417a7900c0739792ce1a/add-on-export-render-as-dng-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-render-as-dng/","maintainer":"FloBEAUG","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export DNG to disk"}},{"id":"Origin_move_like_maya","schema_version":"1.0.0","name":"Origin_move_like_maya (Press D)","version":"1.4.0","tagline":"Move pivot independently with snapping and gizmo like maya","archive_hash":"sha256:5e718aa81233aba65fd1aa186cb1588d551da1b21509fa373d75f11e29c17534","archive_size":3563,"archive_url":"https://extensions.blender.org/download/sha256:5e718aa81233aba65fd1aa186cb1588d551da1b21509fa373d75f11e29c17534/add-on-origin-move-like-maya-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/origin-move-like-maya/","maintainer":"deepak756","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling","Mesh"]},{"id":"printing_helper","schema_version":"1.0.0","name":"Printing Helper","version":"0.1.2","tagline":"Set the resolution required for printing more simply","archive_hash":"sha256:3c3a5ea8c40c1cf91c3102b5c7d690ef8ae38a6a562daf4f2200574c2faabeae","archive_size":12655,"archive_url":"https://extensions.blender.org/download/sha256:3c3a5ea8c40c1cf91c3102b5c7d690ef8ae38a6a562daf4f2200574c2faabeae/add-on-printing-helper-v0.1.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/printing-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","Camera"]},{"id":"bh_smart_sym","schema_version":"1.0.0","name":"BH Smart Sym","version":"1.1.2","tagline":"Interactive 3D arrows for quick face symmetrize","archive_hash":"sha256:3c7a058812319863f5137904f2403264b1bba372f5300c04f82ea5fa4dcdc636","archive_size":8737,"archive_url":"https://extensions.blender.org/download/sha256:3c7a058812319863f5137904f2403264b1bba372f5300c04f82ea5fa4dcdc636/add-on-bh-smart-sym-v1.1.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bh-smart-sym/","maintainer":"bogatyr4ik","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"camera_aspect_ratio_guides","schema_version":"1.0.0","name":"Camera Aspect Ratio Guides","version":"2.0.0","tagline":"Professional composition guides with safe areas","archive_hash":"sha256:50bae340eccf1df4cc77e0a2667e08f8ba9f7c894fce9c5854e0f0dd5b29c394","archive_size":11678,"archive_url":"https://extensions.blender.org/download/sha256:50bae340eccf1df4cc77e0a2667e08f8ba9f7c894fce9c5854e0f0dd5b29c394/add-on-camera-aspect-ratio-guides-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"5.5.0","website":"https://extensions.blender.org/add-ons/camera-aspect-ratio-guides/","maintainer":"Prince_Eagle","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Modify compositor nodes for render burn-in"},"tags":["Camera","Render","Compositing"]},{"id":"theme_GoldExperience","schema_version":"1.0.0","name":"Gold Experience","version":"1.0.1","tagline":"A theme if you really like yellow","archive_hash":"sha256:db35f8251ffa5d13b313a05f3032c11a991e2a1dfc786b8765db7351d2e54cdb","archive_size":5811,"archive_url":"https://extensions.blender.org/download/sha256:db35f8251ffa5d13b313a05f3032c11a991e2a1dfc786b8765db7351d2e54cdb/theme-theme-goldexperience-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-goldexperience/","maintainer":"lonku","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Colorful","Inspired By"]},{"id":"catppucin4blender","schema_version":"1.0.0","name":"Catppuccin Theme","version":"5.1.5","tagline":"Catppuccin for Blender","archive_hash":"sha256:07cfa54f72bd154b178e98d4dd49a722de9f35fe2c1104aa214c61116226a875","archive_size":7103,"archive_url":"https://extensions.blender.org/download/sha256:07cfa54f72bd154b178e98d4dd49a722de9f35fe2c1104aa214c61116226a875/theme-catppucin4blender-v5.1.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/catppucin4blender/","maintainer":"Albert-Bici","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark","Colorful"]},{"id":"camerafly","schema_version":"1.0.0","name":"Camerafly","version":"2.1.4","tagline":"Fly around with the Dolly Rig of the Camera Rigs Addon","archive_hash":"sha256:f4557b9a94427680ca9642e734b0b41b428c9b7575f114b31a751fbe6710affe","archive_size":22817,"archive_url":"https://extensions.blender.org/download/sha256:f4557b9a94427680ca9642e734b0b41b428c9b7575f114b31a751fbe6710affe/add-on-camerafly-v2.1.4-windows-x64-windows-arm64-macos-arm64-macos-x64-linux-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camerafly/","maintainer":"MichaelSchieber","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","windows-arm64","macos-arm64","macos-x64","linux-x64"],"tags":["Camera"]},{"id":"face_angle_analyzer","schema_version":"1.0.0","name":"Face Angle Analyzer","version":"8.9.4","tagline":"Measure and visualize face angles against global axes","archive_hash":"sha256:1baab0b6e6ccf88eae5596845af184a14c4fdaac57d192e1be37163aea553bb0","archive_size":6292,"archive_url":"https://extensions.blender.org/download/sha256:1baab0b6e6ccf88eae5596845af184a14c4fdaac57d192e1be37163aea553bb0/add-on-face-angle-analyzer-v8.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/face-angle-analyzer/","maintainer":"Astralis","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View"]},{"id":"rigi_all","schema_version":"1.0.0","name":"Rigi-All","version":"1.6.0","tagline":"Speeds up the Rigify process","archive_hash":"sha256:f8cc4ee95bbb5e9d028459e6f381e7f1255708c5d38b490cf9e754e5f269ecbd","archive_size":154196,"archive_url":"https://extensions.blender.org/download/sha256:f8cc4ee95bbb5e9d028459e6f381e7f1255708c5d38b490cf9e754e5f269ecbd/add-on-rigi-all-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rigi-all/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"Quick_Asset_Saver","schema_version":"1.0.0","name":"Quick Asset Manager","version":"2.1.1","tagline":"Quickly Create, Edit, Organize, or Delete your local asset files","archive_hash":"sha256:7cbe5007e7416b8c82a88ac167ad0193b86d75d291649538f838df240bb7f441","archive_size":80302,"archive_url":"https://extensions.blender.org/download/sha256:7cbe5007e7416b8c82a88ac167ad0193b86d75d291649538f838df240bb7f441/add-on-quick-asset-saver-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-asset-saver/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To read and write to asset library directories"},"tags":["User Interface","System"]},{"id":"bone_widget","schema_version":"1.0.0","name":"Bone Widget","version":"2.3.3","tagline":"Easily Create Bone Widgets","archive_hash":"sha256:782bc123b494fd568b4400735d59d279e23610c4d57a33b3052ceed893726970","archive_size":293994,"archive_url":"https://extensions.blender.org/download/sha256:782bc123b494fd568b4400735d59d279e23610c4d57a33b3052ceed893726970/add-on-bone-widget-v2.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-widget/","maintainer":"WayneDixon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export json and image files from/to disk"},"tags":["Rigging"]},{"id":"toothpaste","schema_version":"1.0.0","name":"ToothPaste (Paste SVGs)","version":"1.1.5","tagline":"Paste SVG from Clipboard as Grease Pencil or Curves","archive_hash":"sha256:ab122c6b6be19062da353b25e8339b847ee12d0c88ed8f39fb5463f52d9e2292","archive_size":122169,"archive_url":"https://extensions.blender.org/download/sha256:ab122c6b6be19062da353b25e8339b847ee12d0c88ed8f39fb5463f52d9e2292/add-on-toothpaste-v1.1.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/toothpaste/","maintainer":"Todor-Hlebarov","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import SVG assets and temporary files for text and image support","clipboard":"Paste SVG data from Clipboard"},"tags":["Grease Pencil","Import-Export"]},{"id":"Bone_Animation_Copy_Tool","schema_version":"1.0.0","name":"Bone Animation Copy Tool","version":"1.1.5","tagline":"Copy animation between armatures using bone constraints","archive_hash":"sha256:88a3155787f7257b4d696d7b84b8a64b68e8ac9f456c4bce79edd129b055a5f2","archive_size":9772,"archive_url":"https://extensions.blender.org/download/sha256:88a3155787f7257b4d696d7b84b8a64b68e8ac9f456c4bce79edd129b055a5f2/add-on-bone-animation-copy-tool-v1.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-animation-copy-tool/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"orbiter","schema_version":"1.0.0","name":"Orbiter","version":"1.1.0","tagline":"Orbit around objects in the viewport","archive_hash":"sha256:a50f42981a2273110cb9af1a508b0573f4e08b21f67bb76c5d91ec6ad4af680a","archive_size":3393,"archive_url":"https://extensions.blender.org/download/sha256:a50f42981a2273110cb9af1a508b0573f4e08b21f67bb76c5d91ec6ad4af680a/add-on-orbiter-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/orbiter/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"spline_generator","schema_version":"1.0.0","name":"Spline Generator","version":"1.0.3","tagline":"Generate parametric spline","archive_hash":"sha256:129cc2a92f5d127bd8d1c15f9766183a1fa25aaa69eda144ef27f47b50315145","archive_size":8307,"archive_url":"https://extensions.blender.org/download/sha256:129cc2a92f5d127bd8d1c15f9766183a1fa25aaa69eda144ef27f47b50315145/add-on-spline-generator-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/spline-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Add Curve"]},{"id":"beautiful_dream","schema_version":"1.0.0","name":"Beautiful Dream","version":"1.0.5","tagline":"This is a variant of Whispering Ripples","archive_hash":"sha256:1348acaf02e162299334e97c05d89a3ed1bfccd5f4263db5ec6d26f9affd55ee","archive_size":5857,"archive_url":"https://extensions.blender.org/download/sha256:1348acaf02e162299334e97c05d89a3ed1bfccd5f4263db5ec6d26f9affd55ee/theme-beautiful-dream-v1.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/beautiful-dream/","maintainer":"KBS-DEV","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"graph_generator","schema_version":"1.0.0","name":"Graph Generator","version":"1.2.2","tagline":"Generate graph between saved keyframes","archive_hash":"sha256:6f8a49aa275a16a70cd75db50d1bbecdc4dc4f0b9d6fd3173a10e7b8967cafe4","archive_size":9526,"archive_url":"https://extensions.blender.org/download/sha256:6f8a49aa275a16a70cd75db50d1bbecdc4dc4f0b9d6fd3173a10e7b8967cafe4/add-on-graph-generator-v1.2.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/graph-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"wisteria","schema_version":"1.0.0","name":"Wisteria","version":"1.0.1","tagline":"Gray with hints of purple","archive_hash":"sha256:d551b27cc0ee87125c02ecc9f22243bf0db7f8f7ffb64a70cca982ecc182a915","archive_size":5690,"archive_url":"https://extensions.blender.org/download/sha256:d551b27cc0ee87125c02ecc9f22243bf0db7f8f7ffb64a70cca982ecc182a915/theme-wisteria-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/wisteria/","maintainer":"cmzw","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"trajectory_anim","schema_version":"1.0.0","name":"Trajectory Anim","version":"1.3.0","tagline":"Animate quickly by drawing trajectory line","archive_hash":"sha256:2cea314d9a7d46e9da8d24d51c7c1f55326c42ef46917a3beecc66ed97bfae83","archive_size":45832,"archive_url":"https://extensions.blender.org/download/sha256:2cea314d9a7d46e9da8d24d51c7c1f55326c42ef46917a3beecc66ed97bfae83/add-on-trajectory-anim-v1.3.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/trajectory-anim/","maintainer":"trisnox","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Analysis_Toolkit","schema_version":"1.0.0","name":"Analysis Toolkit","version":"1.0.1","tagline":"Measurement calculations, illuminance, distance, speed, and more","archive_hash":"sha256:524de12e2a1cb0de369560e7e83aa2a47d45e2ccefdd628d941ebcd23d363823","archive_size":25910,"archive_url":"https://extensions.blender.org/download/sha256:524de12e2a1cb0de369560e7e83aa2a47d45e2ccefdd628d941ebcd23d363823/add-on-analysis-toolkit-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/analysis-toolkit/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","Lighting"]},{"id":"ns_toolkit_mesh_cleanup_pro","schema_version":"1.0.0","name":"NS Toolkit - Mesh Cleanup Pro","version":"1.0.1","tagline":"Professional mesh cleanup with topology visualization tools","archive_hash":"sha256:0d7fa13aae7b308929ffd16d4bfc84a9a8dce03fecfd7df152f4ee434646792e","archive_size":9410,"archive_url":"https://extensions.blender.org/download/sha256:0d7fa13aae7b308929ffd16d4bfc84a9a8dce03fecfd7df152f4ee434646792e/add-on-ns-toolkit-mesh-cleanup-pro-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ns-toolkit-mesh-cleanup-pro/","maintainer":"nandur","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"OLED","schema_version":"1.0.0","name":"OLED","version":"1.0.2","tagline":"OLED theme for Blender","archive_hash":"sha256:b339a87acdc222758ce501b57fe534e06154e3791aeba471c86b742138cf6cca","archive_size":5884,"archive_url":"https://extensions.blender.org/download/sha256:b339a87acdc222758ce501b57fe534e06154e3791aeba471c86b742138cf6cca/theme-oled-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/oled/","maintainer":"NARZ","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"CYNexusLX490","schema_version":"1.0.0","name":"CyanoNexus LX490","version":"1.0.1","tagline":"Stellar-grade Blender theme – tri-spectrum of CyanoNexus LX490","archive_hash":"sha256:8ea816a51657ede592156a97f26568ca0edcf6a1466e57d23947e0d1146899f9","archive_size":6218,"archive_url":"https://extensions.blender.org/download/sha256:8ea816a51657ede592156a97f26568ca0edcf6a1466e57d23947e0d1146899f9/theme-cynexuslx490-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cynexuslx490/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"editorbar","schema_version":"1.0.0","name":"EditorBar","version":"0.4.8","tagline":"Turn Outliner & Properties editors into a toggleable sidebar","archive_hash":"sha256:3cce7a702ba5d31f7f77f2d9bd64d335a1e134e53d2b29206b13476164edaa51","archive_size":25117,"archive_url":"https://extensions.blender.org/download/sha256:3cce7a702ba5d31f7f77f2d9bd64d335a1e134e53d2b29206b13476164edaa51/add-on-editorbar-v0.4.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/editorbar/","maintainer":"atetraxx","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"k_tools_render_preset_manager","schema_version":"1.0.0","name":"K-Tools: Render Preset Manager","version":"1.3.1","tagline":"Save and Load Blender's Settings","archive_hash":"sha256:c2e2224553c604028b4715cb84bdc726b5a60cd1bf375757c4a9ff51bbf459f0","archive_size":92218,"archive_url":"https://extensions.blender.org/download/sha256:c2e2224553c604028b4715cb84bdc726b5a60cd1bf375757c4a9ff51bbf459f0/add-on-k-tools-render-preset-manager-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-render-preset-manager/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export .JSON text files from/to disk"},"tags":["Render"]},{"id":"manage_file_paths","schema_version":"1.0.0","name":"Manage File Paths","version":"1.0.1","tagline":"A list of image file paths with indicators for missing files","archive_hash":"sha256:934b305fd815c3d3d82f26dbc1bf4a72fa5680df3941e261b42f6e5fe1f38906","archive_size":3273,"archive_url":"https://extensions.blender.org/download/sha256:934b305fd815c3d3d82f26dbc1bf4a72fa5680df3941e261b42f6e5fe1f38906/add-on-manage-file-paths-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/manage-file-paths/","maintainer":"GregZaal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Check if image files exist on disk"},"tags":["Material","System"]},{"id":"import_meshed_alpha","schema_version":"1.0.0","name":"Import Meshed Alpha","version":"1.0.2","tagline":"Transparency to Geometry","archive_hash":"sha256:e04d8dd1855ec6a1b081b37032241f6ef3519f11ff683e3e837e4b95e88e9924","archive_size":1809862,"archive_url":"https://extensions.blender.org/download/sha256:e04d8dd1855ec6a1b081b37032241f6ef3519f11ff683e3e837e4b95e88e9924/add-on-import-meshed-alpha-v1.0.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-meshed-alpha/","maintainer":"The_Missing_Field","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Image import"},"platforms":["windows-x64"],"tags":["Mesh","Material"]},{"id":"matcolex","schema_version":"1.0.0","name":"MatColeX","version":"1.7.8","tagline":"Collect, Organize, and Apply Shaders from Your 3D View","archive_hash":"sha256:6b742fd6b14bd16df4a9ff182d73d83b07a2fa6e34780e968114d867d2acb6d5","archive_size":9589,"archive_url":"https://extensions.blender.org/download/sha256:6b742fd6b14bd16df4a9ff182d73d83b07a2fa6e34780e968114d867d2acb6d5/add-on-matcolex-v1.7.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/matcolex/","maintainer":"budijozz","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","3D View","Modeling"]},{"id":"blender_dark_aero_theme","schema_version":"1.0.0","name":"Dark Aero","version":"1.0.0","tagline":"This is a Dark Aero Theme for Blender","archive_hash":"sha256:dd91b8fee851865a4e2441bb32cd44003acf85e919f128b477666b3cacbdf8ca","archive_size":7696,"archive_url":"https://extensions.blender.org/download/sha256:dd91b8fee851865a4e2441bb32cd44003acf85e919f128b477666b3cacbdf8ca/theme-blender-dark-aero-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/blender-dark-aero-theme/","maintainer":"AeroBuoyancy.source","license":["SPDX:GPL-3.0-or-later"]},{"id":"nurbs2mesh","schema_version":"1.0.0","name":"NURBS2Mesh","version":"1.0.3","tagline":"Auto-updating mesh copies from NURBS/Curves","archive_hash":"sha256:6c6d4c2a248679c2f5fbeb3227647baced5bbca6fd23df4e4b8a5b622dd61a35","archive_size":9718,"archive_url":"https://extensions.blender.org/download/sha256:6c6d4c2a248679c2f5fbeb3227647baced5bbca6fd23df4e4b8a5b622dd61a35/add-on-nurbs2mesh-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nurbs2mesh/","maintainer":"Brrainz","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"curve_generator","schema_version":"1.0.0","name":"Curve Generator","version":"1.2.1","tagline":"Generate float curves","archive_hash":"sha256:041ae75e03c1d0988b9c4cf0064654b26234b1dca3dbf8f2eea6307aa2b6adac","archive_size":6289,"archive_url":"https://extensions.blender.org/download/sha256:041ae75e03c1d0988b9c4cf0064654b26234b1dca3dbf8f2eea6307aa2b6adac/add-on-curve-generator-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/curve-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes","Add Curve"]},{"id":"true_roboanimator","schema_version":"1.0.0","name":"True RoboAnimator","version":"1.0.1","tagline":"Robot motion to wheel RPM with CSV export","archive_hash":"sha256:f7fd9db315107b46866da3bdafc33a5faf41bdf208f02f7a1dc4be162a415606","archive_size":18055,"archive_url":"https://extensions.blender.org/download/sha256:f7fd9db315107b46866da3bdafc33a5faf41bdf208f02f7a1dc4be162a415606/add-on-true-roboanimator-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/true-roboanimator/","maintainer":"danyal-sarfraz","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write CSV and animation data files"}},{"id":"MaterialHelper","schema_version":"1.0.0","name":"MaterialHelper","version":"1.4.8","tagline":"Make local asset manager your place to create powerful materials","archive_hash":"sha256:e00593caa244175bc415fdfa2dea1236810e0f434ab37c850d751a11fbed8052","archive_size":3926415,"archive_url":"https://extensions.blender.org/download/sha256:e00593caa244175bc415fdfa2dea1236810e0f434ab37c850d751a11fbed8052/add-on-materialhelper-v1.4.8.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/materialhelper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load preview material file/Access and modify asset catalog file"},"tags":["3D View","Material"]},{"id":"lutiy_timeline","schema_version":"1.0.0","name":"Lutiy Timeline","version":"1.0.1","tagline":"Save and switch between camera frame range","archive_hash":"sha256:7a10d287ecbbb955861d09ae436d12fa9e72f143bef625b1fb0e36dd1748e3bb","archive_size":3790,"archive_url":"https://extensions.blender.org/download/sha256:7a10d287ecbbb955861d09ae436d12fa9e72f143bef625b1fb0e36dd1748e3bb/add-on-lutiy-timeline-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lutiy-timeline/","maintainer":"3D_SHVYREV","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load preset configurations"},"tags":["Animation","Camera","Scene"]},{"id":"py_btn_box","schema_version":"1.0.0","name":"PyBtnBox","version":"5.1.0","tagline":"Use Button To Execute Script","archive_hash":"sha256:064fe1faa509be5bd44f5d0e9b11970e2035508156ba7b2860e8f434c459eeaf","archive_size":14035,"archive_url":"https://extensions.blender.org/download/sha256:064fe1faa509be5bd44f5d0e9b11970e2035508156ba7b2860e8f434c459eeaf/add-on-py-btn-box-v5.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/py-btn-box/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Need to sync button data from python/json files and folder"},"tags":["System"]},{"id":"mesh_attribute_utils","schema_version":"1.0.0","name":"Mesh Attribute Utils","version":"0.2.0","tagline":"Easily view and edit custom mesh attributes","archive_hash":"sha256:e62f38ee324ba6983ce8963358bc06a9570bca9da8ffa2f38f8f653c23365211","archive_size":8347,"archive_url":"https://extensions.blender.org/download/sha256:e62f38ee324ba6983ce8963358bc06a9570bca9da8ffa2f38f8f653c23365211/add-on-mesh-attribute-utils-v0.2.0.zip","type":"add-on","blender_version_min":"4.5.3","website":"https://extensions.blender.org/add-ons/mesh-attribute-utils/","maintainer":"Hannah-Pascal-Noël","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"theme_updater","schema_version":"1.0.0","name":"Theme Updater","version":"1.0.0","tagline":"Update themes from 4.5 LTS to 5.0","archive_hash":"sha256:b376af83f16f0b089690d87a2b8d1dfaeeaa11578ac9a9ff8214d5e4a0308a21","archive_size":5066,"archive_url":"https://extensions.blender.org/download/sha256:b376af83f16f0b089690d87a2b8d1dfaeeaa11578ac9a9ff8214d5e4a0308a21/add-on-theme-updater-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/theme-updater/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"rotor","schema_version":"1.0.0","name":"rotor","version":"2.2.0","tagline":"rotor","archive_hash":"sha256:14c0f05a311c5e60513de355274e7aada4e449b1831e530de0e82e1d9572bc62","archive_size":71356,"archive_url":"https://extensions.blender.org/download/sha256:14c0f05a311c5e60513de355274e7aada4e449b1831e530de0e82e1d9572bc62/add-on-rotor-v2.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/rotor/","maintainer":"niewinny","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View","Mesh"]},{"id":"Blockout","schema_version":"1.0.0","name":"Blockout","version":"1.5.1","tagline":"Blockout","archive_hash":"sha256:7de7d28e969c5fce5feb9589185f8c8f042cc09e1d41e23f640b936e6dc76ed6","archive_size":179732,"archive_url":"https://extensions.blender.org/download/sha256:7de7d28e969c5fce5feb9589185f8c8f042cc09e1d41e23f640b936e6dc76ed6/add-on-blockout-v1.5.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/blockout/","maintainer":"niewinny","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing node group from disk"},"tags":["Modeling","3D View","Mesh"]},{"id":"geo_bake_batch","schema_version":"1.0.0","name":"Geo Bake Batch","version":"0.0.1","tagline":"Batch tools for Geometry Nodes baking","archive_hash":"sha256:5390dc3576d9fefecd1d048d62041e10f3534e29de64d8ede8c19c63db18bf39","archive_size":2570,"archive_url":"https://extensions.blender.org/download/sha256:5390dc3576d9fefecd1d048d62041e10f3534e29de64d8ede8c19c63db18bf39/add-on-geo-bake-batch-v0.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/geo-bake-batch/","maintainer":"Artyom-Pankratov","license":["SPDX:GPL-3.0-or-later"]},{"id":"restart","schema_version":"1.0.0","name":"Restart","version":"1.0.2","tagline":"Restart Blender","archive_hash":"sha256:35f410b9964af45d4c5becb8048e29e417a485bc371d26e23700ccd5fbba409c","archive_size":2824,"archive_url":"https://extensions.blender.org/download/sha256:35f410b9964af45d4c5becb8048e29e417a485bc371d26e23700ccd5fbba409c/add-on-restart-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/restart/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"camera_sensor_database","schema_version":"1.0.0","name":"Camera Sensor Database","version":"1.0.1","tagline":"Provides a database of camera sensors to choose from in Blender","archive_hash":"sha256:32004b0e9484005e64f5679b470706fc1fb051ee083e7636860edcd2c1d8acd9","archive_size":18406,"archive_url":"https://extensions.blender.org/download/sha256:32004b0e9484005e64f5679b470706fc1fb051ee083e7636860edcd2c1d8acd9/add-on-camera-sensor-database-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camera-sensor-database/","maintainer":"Manuel-Houben","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To save the sensor database locally","network":"To download the latest sensor database"},"tags":["Camera"]},{"id":"collection_switcher","schema_version":"1.0.0","name":"Collection Switcher","version":"1.4.0","tagline":"Switch visibility between sub-collections in switchers","archive_hash":"sha256:dbdfecad5e8051a1bd8a8005200ff91c37dab4fb3ffc489d66859be1454519e9","archive_size":1124111,"archive_url":"https://extensions.blender.org/download/sha256:dbdfecad5e8051a1bd8a8005200ff91c37dab4fb3ffc489d66859be1454519e9/add-on-collection-switcher-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/collection-switcher/","maintainer":"Valentin-Komkov","license":["SPDX:GPL-3.0-or-later"]},{"id":"stb_section_toolbox","schema_version":"1.0.0","name":"Section Toolbox","version":"0.0.2","tagline":"Parametric section box and planar cuts with SVG DXF export","archive_hash":"sha256:93dd3b52321132a6c44cfdf0a738628fc156fba3d06d5f8d57fd2f189447f3f7","archive_size":30173,"archive_url":"https://extensions.blender.org/download/sha256:93dd3b52321132a6c44cfdf0a738628fc156fba3d06d5f8d57fd2f189447f3f7/add-on-stb-section-toolbox-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stb-section-toolbox/","maintainer":"Victor-Calixto","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export SVG and DXF to disk"},"tags":["Modeling","Mesh","Import-Export","Object"]},{"id":"uv_maps_plus","schema_version":"1.0.0","name":"UV Maps+","version":"2026.1.2","tagline":"Reorder UV Maps, Copy/Paste UVs, and exceed the 8-map limit","archive_hash":"sha256:a85d5e6b619544489c39c0b6208a5012907877f0a8c71931d5f9bae813e0e318","archive_size":18036,"archive_url":"https://extensions.blender.org/download/sha256:a85d5e6b619544489c39c0b6208a5012907877f0a8c71931d5f9bae813e0e318/add-on-uv-maps-plus-v2026.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/uv-maps-plus/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","User Interface"]},{"id":"parallax_node","schema_version":"1.0.0","name":"Parallax Node","version":"1.1.3","tagline":"Adds parallax node for shader nodes","archive_hash":"sha256:6f196f5aeb175b28c1d5cd0b4b674c8b2c2ae394bef5dfe6f87bf6687ca4e821","archive_size":12716,"archive_url":"https://extensions.blender.org/download/sha256:6f196f5aeb175b28c1d5cd0b4b674c8b2c2ae394bef5dfe6f87bf6687ca4e821/add-on-parallax-node-v1.1.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/parallax-node/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"easy_driver","schema_version":"1.0.0","name":"Easy Driver","version":"1.5.2","tagline":"Technical rigging made easier","archive_hash":"sha256:85709b0be7bef891c778484d8182caf4869b32767cf28ab95275d17a219a0d55","archive_size":40933,"archive_url":"https://extensions.blender.org/download/sha256:85709b0be7bef891c778484d8182caf4869b32767cf28ab95275d17a219a0d55/add-on-easy-driver-v1.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easy-driver/","maintainer":"NeoEmberArt","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"hifi_builder","schema_version":"1.0.0","name":"HiFi Architecture Builder v4.5.8","version":"4.5.8","tagline":"One-click architecture, and game engine prep tool","archive_hash":"sha256:509a885bee9c0a8c9949a3f0899dbcd8e4b26c6aa08b7d5b7d20ec2e88404cd5","archive_size":101569,"archive_url":"https://extensions.blender.org/download/sha256:509a885bee9c0a8c9949a3f0899dbcd8e4b26c6aa08b7d5b7d20ec2e88404cd5/add-on-hifi-builder-v4.5.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hifi-builder/","maintainer":"Malik-Nomi","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","Modeling","Game Engine","Animation"]},{"id":"secondary_language","schema_version":"1.0.0","name":"Secondary Language","version":"1.1.0","tagline":"Quickly switch to secondary language","archive_hash":"sha256:f4fca123ca687c2b2977fdcef6157718d47d4bae15970ff3e90064948abd6049","archive_size":3939,"archive_url":"https://extensions.blender.org/download/sha256:f4fca123ca687c2b2977fdcef6157718d47d4bae15970ff3e90064948abd6049/add-on-secondary-language-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/secondary-language/","maintainer":"mdlt7z","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"driver_helper","schema_version":"1.0.0","name":"DriverHelper","version":"1.0.1","tagline":"Helps generate driver formulas in the Shape Keys panel","archive_hash":"sha256:5e6937bfd83777793ecc35c0c52351bd45ff842d76fe5914f2c5df9f609d3149","archive_size":2152,"archive_url":"https://extensions.blender.org/download/sha256:5e6937bfd83777793ecc35c0c52351bd45ff842d76fe5914f2c5df9f609d3149/add-on-driver-helper-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/driver-helper/","maintainer":"Zakmen150","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"format_rename","schema_version":"1.0.0","name":"Format Rename","version":"0.0.6","tagline":"Format Rename","archive_hash":"sha256:389000c6503f93d27a2506860690573d1155ada0571d834420da1b1bd11ba5ee","archive_size":19668,"archive_url":"https://extensions.blender.org/download/sha256:389000c6503f93d27a2506860690573d1155ada0571d834420da1b1bd11ba5ee/add-on-format-rename-v0.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/format-rename/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"NieR_Automata","schema_version":"1.0.0","name":"YorHa - Operator","version":"1.1.0","tagline":"A Dark Version Of Nier Automata Ui inspired by YorHa-Operator","archive_hash":"sha256:37142058b557023d2d7bd00556c7ddaa53effadc124d7a8576a76383b98c39a1","archive_size":5484,"archive_url":"https://extensions.blender.org/download/sha256:37142058b557023d2d7bd00556c7ddaa53effadc124d7a8576a76383b98c39a1/theme-nier-automata-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/nier-automata/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"layer_comp","schema_version":"1.0.0","name":"LayerComp","version":"1.1.9","tagline":"Layer-based compositing tool, similar to After Effects","archive_hash":"sha256:08a66a76ed4d82825968d5b8c7a5276ca37e51929d801ad666ea78f9d9a0c0f1","archive_size":554503,"archive_url":"https://extensions.blender.org/download/sha256:08a66a76ed4d82825968d5b8c7a5276ca37e51929d801ad666ea78f9d9a0c0f1/add-on-layer-comp-v1.1.9.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/layer-comp/","maintainer":"KENKEN","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export Blend file from/to disk"},"tags":["Compositing","Node","Render"]},{"id":"select_123","schema_version":"1.0.0","name":"123 Select","version":"1.0.0","tagline":"Switch vertex edge face in Object Mode","archive_hash":"sha256:d2e9f6103ae21032457a7446e69d0739db1ec7484ed632f43e528ace040fed69","archive_size":2138,"archive_url":"https://extensions.blender.org/download/sha256:d2e9f6103ae21032457a7446e69d0739db1ec7484ed632f43e528ace040fed69/add-on-select-123-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/select-123/","maintainer":"Fisch_Tu","license":["SPDX:GPL-3.0-or-later"]},{"id":"ramp_generator","schema_version":"1.0.0","name":"Ramp Generator","version":"1.4.3","tagline":"Generate color ramps","archive_hash":"sha256:66bdec66a8260ec4bdf3341d059ff5e99d34b24a9e67f53c4897b1a27675a38c","archive_size":3932,"archive_url":"https://extensions.blender.org/download/sha256:66bdec66a8260ec4bdf3341d059ff5e99d34b24a9e67f53c4897b1a27675a38c/add-on-ramp-generator-v1.4.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ramp-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes","Compositing"]},{"id":"Timelapse_extension","schema_version":"1.0.0","name":"Timelapse","version":"1.0.1","tagline":"Take timed screenshots inside Blender","archive_hash":"sha256:c222a4fdd80114eeac3d556b9c4934f9f38382e25c00115fad1ebed9097474d1","archive_size":3049,"archive_url":"https://extensions.blender.org/download/sha256:c222a4fdd80114eeac3d556b9c4934f9f38382e25c00115fad1ebed9097474d1/add-on-timelapse-extension-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.1","website":"https://extensions.blender.org/add-ons/timelapse-extension/","maintainer":"Silky-Renders","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export png/jpeg to disk"},"tags":["System"]},{"id":"blender_frutiger_aero_theme","schema_version":"1.0.0","name":"Frutiger Aero","version":"1.1.3","tagline":"This is a Frutiger Aero Theme for Blender","archive_hash":"sha256:55211f98e8097958a59f34af945f4a16ce490025f4b50c8edf939aa53b009f11","archive_size":6989,"archive_url":"https://extensions.blender.org/download/sha256:55211f98e8097958a59f34af945f4a16ce490025f4b50c8edf939aa53b009f11/theme-blender-frutiger-aero-theme-v1.1.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blender-frutiger-aero-theme/","maintainer":"AeroBuoyancy.source","license":["SPDX:GPL-3.0-or-later"]},{"id":"markcam","schema_version":"1.0.0","name":"MarkCam","version":"2.5.0","tagline":"Quick camera-from-view + timeline marker tools","archive_hash":"sha256:e77094449c22c6b3d97280fb4b95ee456fd16c9677c14e2fd36aaf3c5fd4cebd","archive_size":6762,"archive_url":"https://extensions.blender.org/download/sha256:e77094449c22c6b3d97280fb4b95ee456fd16c9677c14e2fd36aaf3c5fd4cebd/add-on-markcam-v2.5.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/markcam/","maintainer":"SomRender","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Animation"]},{"id":"Work_n_rose","schema_version":"1.0.0","name":"Work_n_rose","version":"1.5.0","tagline":"Dark Mood, 4thegoat","archive_hash":"sha256:6c1622ccf5e23b713a6eed923ebf8b771ec8cdd18d42ec54f9f6cc0b032a0122","archive_size":6148,"archive_url":"https://extensions.blender.org/download/sha256:6c1622ccf5e23b713a6eed923ebf8b771ec8cdd18d42ec54f9f6cc0b032a0122/theme-work-n-rose-v1.5.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/work-n-rose/","maintainer":"Nois3G4te","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"stroke_material_display","schema_version":"1.0.0","name":"Stroke Material Display","version":"1.0.1","tagline":"Display material names of selected Grease Pencil strokes","archive_hash":"sha256:807cb0171624b4fbb0960fd3f2ad455bb4611fd9fbd90b3c52cef01107019317","archive_size":3088,"archive_url":"https://extensions.blender.org/download/sha256:807cb0171624b4fbb0960fd3f2ad455bb4611fd9fbd90b3c52cef01107019317/add-on-stroke-material-display-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/stroke-material-display/","maintainer":"JohnNyquist","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil"]},{"id":"spa_sequencer","schema_version":"1.0.0","name":"SPArk Sequencer","version":"0.1.6","tagline":"Toolset to improve the sequence workflow in Blender","archive_hash":"sha256:2f9ea5309e0f0778d775c896b2b575fadaab20df993c7d453c11704697180b1a","archive_size":73645,"archive_url":"https://extensions.blender.org/download/sha256:2f9ea5309e0f0778d775c896b2b575fadaab20df993c7d453c11704697180b1a/add-on-spa-sequencer-v0.1.6.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/spa-sequencer/","maintainer":"TinyNick","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"compositor_file_output_replacer","schema_version":"1.0.0","name":"Compositor File Output Replacer","version":"1.3.0","tagline":"Find and replace text in File Output node paths","archive_hash":"sha256:fc5ba89eb189670904813d758c2913c22ed3e66f830fc0ba01333ce8c46c8757","archive_size":3158,"archive_url":"https://extensions.blender.org/download/sha256:fc5ba89eb189670904813d758c2913c22ed3e66f830fc0ba01333ce8c46c8757/add-on-compositor-file-output-replacer-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/compositor-file-output-replacer/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Node"]},{"id":"miunau_slcamera","schema_version":"1.0.0","name":"Second Life-style camera","version":"1.0.4","tagline":"Second Life-style camera with ALT (option)/CTRL/SHIFT keys","archive_hash":"sha256:e52827160361d2ea0b1c7cdf8603879df1b604dada91e2535d0a17abfe5a8e06","archive_size":19907,"archive_url":"https://extensions.blender.org/download/sha256:e52827160361d2ea0b1c7cdf8603879df1b604dada91e2535d0a17abfe5a8e06/add-on-miunau-slcamera-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/miunau-slcamera/","maintainer":"miunau","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"blue_archive_theme","schema_version":"1.0.0","name":"Blue Archive","version":"1.2.1","tagline":"Theme inspired by Blue Archive game UI","archive_hash":"sha256:b8049642276b5da71a498c9433a46b628ec154b050fa27c5e06fe6236b0f1b31","archive_size":5159,"archive_url":"https://extensions.blender.org/download/sha256:b8049642276b5da71a498c9433a46b628ec154b050fa27c5e06fe6236b0f1b31/theme-blue-archive-theme-v1.2.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blue-archive-theme/","maintainer":"RAZUMNO","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Inspired By"]},{"id":"toolhub","schema_version":"1.0.0","name":"Tool Hub","version":"1.0.2","tagline":"This add-on searches and pins in a pie-menu","archive_hash":"sha256:cbf1d344e714f273a7e97607576712141e3c7fb7b8c0eea5c17b51072c913ed2","archive_size":26285,"archive_url":"https://extensions.blender.org/download/sha256:cbf1d344e714f273a7e97607576712141e3c7fb7b8c0eea5c17b51072c913ed2/add-on-toolhub-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toolhub/","maintainer":"Mr.Bir","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"attrio_csv","schema_version":"1.0.0","name":"Attrio CSV","version":"1.0.1","tagline":"Bake and read back Evaluated Dependency Graph Data as CSV","archive_hash":"sha256:1091d651c2b57d2ce9cc7c3b5037a0e2892f568db65e67ffcf57ced8c355cf68","archive_size":161895,"archive_url":"https://extensions.blender.org/download/sha256:1091d651c2b57d2ce9cc7c3b5037a0e2892f568db65e67ffcf57ced8c355cf68/add-on-attrio-csv-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/attrio-csv/","maintainer":"sharpened","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Bake","Geometry Nodes"]},{"id":"use_for_rendering_plus","schema_version":"1.0.0","name":"View Layer Plus","version":"1.2.5","tagline":"Seamlessly extend View Layers management","archive_hash":"sha256:b31aaf82ee670ea35a0933557a29c6f6d898af0324a38c4ad221c0030345fb25","archive_size":63199,"archive_url":"https://extensions.blender.org/download/sha256:b31aaf82ee670ea35a0933557a29c6f6d898af0324a38c4ad221c0030345fb25/add-on-use-for-rendering-plus-v1.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/use-for-rendering-plus/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","User Interface"]},{"id":"essential_brush_saver","schema_version":"1.0.0","name":"Essential Brush Saver","version":"1.1.3","tagline":"Automatically save and load essential brush settings","archive_hash":"sha256:c83987bf62b92a0890d9aeae3bcf7b4c31df7d38d6b1991b10a61610f50738a0","archive_size":6069,"archive_url":"https://extensions.blender.org/download/sha256:c83987bf62b92a0890d9aeae3bcf7b4c31df7d38d6b1991b10a61610f50738a0/add-on-essential-brush-saver-v1.1.3.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/essential-brush-saver/","maintainer":"emptybraces","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/Load configuration data JSON file to/from disk"},"tags":["Paint","Sculpt","System"]},{"id":"space_colonization_tree_generator","schema_version":"1.0.0","name":"Space colonization tree generator","version":"1.0.0","tagline":"A simple add-on which uses the space colonization approach","archive_hash":"sha256:4b3ed3c3d2ff48e8bd3eec520098e42d24937f4167ed3fd9210a870369a9ef83","archive_size":6781,"archive_url":"https://extensions.blender.org/download/sha256:4b3ed3c3d2ff48e8bd3eec520098e42d24937f4167ed3fd9210a870369a9ef83/add-on-space-colonization-tree-generator-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/space-colonization-tree-generator/","maintainer":"LS","license":["SPDX:GPL-3.0-or-later"]},{"id":"bake_instance_animation","schema_version":"1.0.0","name":"Bake Instance Animation (烘焙几何节点实例动画)","version":"1.0.3","tagline":"Bake geometry nodes instance animation to keyframe animation","archive_hash":"sha256:eea61c5dfe87559ead85806327ea8dcf1c3c9a8e650d35650a6b624f82a94ad4","archive_size":8497,"archive_url":"https://extensions.blender.org/download/sha256:eea61c5dfe87559ead85806327ea8dcf1c3c9a8e650d35650a6b624f82a94ad4/add-on-bake-instance-animation-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bake-instance-animation/","maintainer":"ChyiZ_","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"Candymouse","schema_version":"1.0.0","name":"Candymouse","version":"1.1.2","tagline":"A neutral grey theme with colorful accents","archive_hash":"sha256:d58ec79f4882ab7cd7c1ee527c0df326b1866fd1e6ee9bbe3a424765ce2c48d8","archive_size":5846,"archive_url":"https://extensions.blender.org/download/sha256:d58ec79f4882ab7cd7c1ee527c0df326b1866fd1e6ee9bbe3a424765ce2c48d8/theme-candymouse-v1.1.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/candymouse/","maintainer":"milomouse","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"shiva_img2mat","schema_version":"1.0.0","name":"Image to Mat","version":"1.0.0","tagline":"Generate material from image","archive_hash":"sha256:70a119b9df99d6521deed569f4b68765af8bfeb23b5045f6eacc7e24ffb940b8","archive_size":3150,"archive_url":"https://extensions.blender.org/download/sha256:70a119b9df99d6521deed569f4b68765af8bfeb23b5045f6eacc7e24ffb940b8/add-on-shiva-img2mat-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shiva-img2mat/","maintainer":"SHIVA","license":["SPDX:GPL-3.0-or-later"]},{"id":"easy_tree","schema_version":"1.0.0","name":"Easy Tree","version":"1.0.1","tagline":"Create one-click procedural trees","archive_hash":"sha256:9ba32029650173c303037155c629dd85953699dbd8e62bd5e71da6927c84a4ff","archive_size":17712727,"archive_url":"https://extensions.blender.org/download/sha256:9ba32029650173c303037155c629dd85953699dbd8e62bd5e71da6927c84a4ff/add-on-easy-tree-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/easy-tree/","maintainer":"Jacob-Johnston","license":["SPDX:GPL-3.0-or-later"]},{"id":"wheel_o_matic","schema_version":"1.0.0","name":"Wheel-O-Matic","version":"1.0.2","tagline":"Automatic wheel rotation in any direction","archive_hash":"sha256:b1bbffe18d262809b768ff28f1491a0141c71c45ff5789338d737706ee9b29db","archive_size":20178,"archive_url":"https://extensions.blender.org/download/sha256:b1bbffe18d262809b768ff28f1491a0141c71c45ff5789338d737706ee9b29db/add-on-wheel-o-matic-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wheel-o-matic/","maintainer":"TechArtToolBox","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"blender_game_tools","schema_version":"1.0.0","name":"Game Tools","version":"0.3.2","tagline":"Game Tools","archive_hash":"sha256:5c62770748af9a4cf620e642b98716e63392012ca9e6a6436b47b5cd3d38f66e","archive_size":249307,"archive_url":"https://extensions.blender.org/download/sha256:5c62770748af9a4cf620e642b98716e63392012ca9e6a6436b47b5cd3d38f66e/add-on-blender-game-tools-v0.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-game-tools/","maintainer":"Cremuss","license":["SPDX:GPL-3.0-or-later"],"tags":["Bake","UV","Mesh","Pipeline"]},{"id":"keyframe_selected","schema_version":"1.0.0","name":"Keyframe selected","version":"1.3.3","tagline":"Insert or delete keyframes on selected items","archive_hash":"sha256:cfb13e15f9a4bfe2155bba29b9a2f0da5a585ffdd4e96ada00c47083ec1ca0ca","archive_size":6059,"archive_url":"https://extensions.blender.org/download/sha256:cfb13e15f9a4bfe2155bba29b9a2f0da5a585ffdd4e96ada00c47083ec1ca0ca/add-on-keyframe-selected-v1.3.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/keyframe-selected/","maintainer":"xbodya13","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"i32_the_mandelbrot_set","schema_version":"1.0.0","name":"i32 the Mandelbrot Set","version":"1.0.3","tagline":"The Mandelbrot set using only Integer Math and Bit Math Nodes","archive_hash":"sha256:db3afe337e319b0a42ca1d4731c281924be16a7f583eb4f9f9ea27d9e9f81947","archive_size":46805,"archive_url":"https://extensions.blender.org/download/sha256:db3afe337e319b0a42ca1d4731c281924be16a7f583eb4f9f9ea27d9e9f81947/add-on-i32-the-mandelbrot-set-v1.0.3.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/i32-the-mandelbrot-set/","maintainer":"Osipenkov+Art","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes"]},{"id":"node_tree_screenshot","schema_version":"1.0.0","name":"Node Tree Screenshot","version":"1.1.1","tagline":"Screenshot utility for large node trees","archive_hash":"sha256:fc9713b92bebdc4c88b0ded0666306c45dea3e28621f0b9a0e89133033df8d56","archive_size":18742702,"archive_url":"https://extensions.blender.org/download/sha256:fc9713b92bebdc4c88b0ded0666306c45dea3e28621f0b9a0e89133033df8d56/add-on-node-tree-screenshot-v1.1.1-windows-x64-macos-arm64-linux-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/node-tree-screenshot/","maintainer":"LukasTönne","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","macos-arm64","linux-x64"],"tags":["Node"]},{"id":"visual_limits","schema_version":"1.0.0","name":"Visual limits","version":"1.3.2","tagline":"This addon shows rigid body constraint limits in viewport","archive_hash":"sha256:fcb0ca388657a7fe0d2ce862ce5fdaa178c75160ce74e775981bdecc72a2509e","archive_size":2710,"archive_url":"https://extensions.blender.org/download/sha256:fcb0ca388657a7fe0d2ce862ce5fdaa178c75160ce74e775981bdecc72a2509e/add-on-visual-limits-v1.3.2.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/visual-limits/","maintainer":"xbodya13","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"auto_sync_object_data_names","schema_version":"1.0.0","name":"Auto Sync Object Data Names","version":"1.0.0","tagline":"Automatically sync object and data names","archive_hash":"sha256:6da30fc3031f193cbac124155168d944dd62b674ede4465becc262d61288c8ab","archive_size":19044,"archive_url":"https://extensions.blender.org/download/sha256:6da30fc3031f193cbac124155168d944dd62b674ede4465becc262d61288c8ab/add-on-auto-sync-object-data-names-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-sync-object-data-names/","maintainer":"GeeDoubleU","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Pipeline"]},{"id":"Tracker2Nuke","schema_version":"1.0.0","name":"Tracker to Nuke","version":"1.1.0","tagline":"Instantly export Blender tracking data to a Nuke Tracker node","archive_hash":"sha256:b937c0ddfdd9cdea2e22332b540bd2bf7dbd9bd3a9b6dcb2366930a73818029d","archive_size":5120,"archive_url":"https://extensions.blender.org/download/sha256:b937c0ddfdd9cdea2e22332b540bd2bf7dbd9bd3a9b6dcb2366930a73818029d/add-on-tracker2nuke-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tracker2nuke/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Import-Export"]},{"id":"polychase","schema_version":"1.0.0","name":"Polychase","version":"0.0.14","tagline":"Mesh Based Motion Tracking in Blender","archive_hash":"sha256:e687a1b30e20971951176d5ad136acd6f945904f9e0d1054043f506e3c1bc9d0","archive_size":6053241,"archive_url":"https://extensions.blender.org/download/sha256:e687a1b30e20971951176d5ad136acd6f945904f9e0d1054043f506e3c1bc9d0/add-on-polychase-v0.0.14-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/polychase/","maintainer":"theartful","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write optical flow database to disk"},"platforms":["windows-x64"],"tags":["Animation","Tracking"]},{"id":"Bone_Aligner","schema_version":"1.0.0","name":"Bone Aligner","version":"1.1.4","tagline":"Quickly align two bones","archive_hash":"sha256:bc842ad69c28089a444998780860f6755b140c8819ff92caebff935ec4180af8","archive_size":2841,"archive_url":"https://extensions.blender.org/download/sha256:bc842ad69c28089a444998780860f6755b140c8819ff92caebff935ec4180af8/add-on-bone-aligner-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-aligner/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"perfectly_normal","schema_version":"1.0.0","name":"Perfectly Normal","version":"0.0.2","tagline":"Manipulate face-corner normals as mesh components","archive_hash":"sha256:e52b80edcba7441d962ececa8db61da530d401f694670d9c03b463347334ce56","archive_size":159727,"archive_url":"https://extensions.blender.org/download/sha256:e52b80edcba7441d962ececa8db61da530d401f694670d9c03b463347334ce56/add-on-perfectly-normal-v0.0.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/perfectly-normal/","maintainer":"Seth-Adam-Trowbridge","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write asset resources from/to disk"},"tags":["Mesh","Modeling","Geometry Nodes"]},{"id":"beantextures","schema_version":"1.0.0","name":"Beantextures","version":"1.1.0","tagline":"Addon to help with 2D texture-based animations","archive_hash":"sha256:3273b6d7045724c0e4e1ea3c98924ee1831e5fd2712eb69391fb2f50d465fa59","archive_size":23669,"archive_url":"https://extensions.blender.org/download/sha256:3273b6d7045724c0e4e1ea3c98924ee1831e5fd2712eb69391fb2f50d465fa59/add-on-beantextures-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/beantextures/","maintainer":"daringcuteseal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import image textures to generated node group"},"tags":["Animation","Node","Rigging"]},{"id":"SmartScene_Toolkit","schema_version":"1.0.0","name":"SmartScene Toolkit","version":"1.4.0","tagline":"Toolkit for smarter parent, hierarchy, mirror operations","archive_hash":"sha256:135648cb28a6598c932adf8b34ef4652026f71e57f0dd2b7e352b88d5dc19b60","archive_size":14746,"archive_url":"https://extensions.blender.org/download/sha256:135648cb28a6598c932adf8b34ef4652026f71e57f0dd2b7e352b88d5dc19b60/add-on-smartscene-toolkit-v1.4.0.zip","type":"add-on","blender_version_min":"4.4.3","website":"https://extensions.blender.org/add-ons/smartscene-toolkit/","maintainer":"Marcus997","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Scene"]},{"id":"Blackboard_Theme","schema_version":"1.0.0","name":"Blackboard_Theme","version":"2.3.1","tagline":"Chalk on Dark","archive_hash":"sha256:6f8e586e447e1846cd5cf6bc11b2b209d6513279844149581a1fd5c835d36aee","archive_size":5716,"archive_url":"https://extensions.blender.org/download/sha256:6f8e586e447e1846cd5cf6bc11b2b209d6513279844149581a1fd5c835d36aee/theme-blackboard-theme-v2.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blackboard-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"surfacepsycho","schema_version":"1.0.0","name":"Surface Psycho","version":"0.9.7","tagline":"Precision Surface Design","archive_hash":"sha256:9451d01e5b72005bdd492d45572d01bdfc496f0e64bdd63a84c49603986bcde1","archive_size":51716083,"archive_url":"https://extensions.blender.org/download/sha256:9451d01e5b72005bdd492d45572d01bdfc496f0e64bdd63a84c49603986bcde1/add-on-surfacepsycho-v0.9.7-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/surfacepsycho/","maintainer":"RomainGuimbal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export CAD files"},"platforms":["windows-x64"],"tags":["Modeling","Import-Export","Geometry Nodes","Add Curve"]},{"id":"sync_material_viewport_color","schema_version":"1.0.0","name":"Sync Material Viewport Color","version":"1.0.2","tagline":"Sets diffuse color, metallic and roughness for viewport display","archive_hash":"sha256:1e6302ca53e77ca3163ef07be912988880d13574b20cec5d5fb3735c4eac9cc9","archive_size":7318,"archive_url":"https://extensions.blender.org/download/sha256:1e6302ca53e77ca3163ef07be912988880d13574b20cec5d5fb3735c4eac9cc9/add-on-sync-material-viewport-color-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sync-material-viewport-color/","maintainer":"Qiu-Feng","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Material"]},{"id":"Dim_Fog","schema_version":"1.0.0","name":"Dim Fog","version":"2.0.0","tagline":"Moody & Cozy theme","archive_hash":"sha256:442ee419c1f5439af9cb9643ed06c5ce7461ef565622854ec754642ef45b885c","archive_size":5195,"archive_url":"https://extensions.blender.org/download/sha256:442ee419c1f5439af9cb9643ed06c5ce7461ef565622854ec754642ef45b885c/theme-dim-fog-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dim-fog/","maintainer":"huleeb","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"ccnc_animation_objects","schema_version":"1.0.0","name":"CCNCAnimationObjects","version":"1.2.3","tagline":"CNC simulation object editor with camera and spark effects","archive_hash":"sha256:51d61dc81125b537f01f25da6b52a6ba1ba694e9c83ef6d1f3a97b47af051d82","archive_size":85342,"archive_url":"https://extensions.blender.org/download/sha256:51d61dc81125b537f01f25da6b52a6ba1ba694e9c83ef6d1f3a97b47af051d82/add-on-ccnc-animation-objects-v1.2.3.zip","type":"add-on","blender_version_min":"4.4.3","website":"https://extensions.blender.org/add-ons/ccnc-animation-objects/","maintainer":"Bitsqueezer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export CSV files"},"tags":["Modeling","Animation","Camera"]},{"id":"VAT","schema_version":"1.0.0","name":"Vertex Animation Texture Addon (VAT)","version":"1.0.1","tagline":"Tools for vertex animation textures in Blender","archive_hash":"sha256:5fb62160f6e6642150e74bc02421cd46c338a96d85e28e3e48f6baaad1bfb065","archive_size":8592,"archive_url":"https://extensions.blender.org/download/sha256:5fb62160f6e6642150e74bc02421cd46c338a96d85e28e3e48f6baaad1bfb065/add-on-vat-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vat/","maintainer":"Flement","license":["SPDX:GPL-3.0-or-later"]},{"id":"VCS","schema_version":"1.0.0","name":"Vertex Color Selector","version":"1.0.9","tagline":"VertexColor Select tool","archive_hash":"sha256:0dd54c9febb5b08d20d9db9797384130169c552db74563214f6f7a589e1555f4","archive_size":8745,"archive_url":"https://extensions.blender.org/download/sha256:0dd54c9febb5b08d20d9db9797384130169c552db74563214f6f7a589e1555f4/add-on-vcs-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vcs/","maintainer":"D31","license":["SPDX:GPL-3.0-or-later"]},{"id":"script_manager_pro","schema_version":"1.0.0","name":"Script Manager Pro","version":"0.0.3","tagline":"Manage and run Python scripts with one-click access","archive_hash":"sha256:005a3e75a2bee8f30718c1773d05533e8112101254d7103f56f0dce3c6e12fff","archive_size":3129,"archive_url":"https://extensions.blender.org/download/sha256:005a3e75a2bee8f30718c1773d05533e8112101254d7103f56f0dce3c6e12fff/add-on-script-manager-pro-v0.0.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/script-manager-pro/","maintainer":"CemilBerk","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads and writes script metadata to a JSON file"}},{"id":"anim_auto_offset","schema_version":"1.0.0","name":"Animation Auto Offset","version":"1.3.3","tagline":"Update all keyframes relatively on transform changes","archive_hash":"sha256:ecc8d313128cc14480d90c40ab5558eab2fded25757f242ddddc4d5a14cd64e1","archive_size":15402,"archive_url":"https://extensions.blender.org/download/sha256:ecc8d313128cc14480d90c40ab5558eab2fded25757f242ddddc4d5a14cd64e1/add-on-anim-auto-offset-v1.3.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/anim-auto-offset/","maintainer":"Marek-Zając","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"auto_wrinkle_map","schema_version":"1.0.0","name":"Auto Wrinkle Map","version":"0.0.7","tagline":"Helps you to create wrinkle maps driven from bones in one click","archive_hash":"sha256:342a46d212aef292c92e9f751b4cd1f97ccaa677acc8e1cdc1ce23f638ef198a","archive_size":10763,"archive_url":"https://extensions.blender.org/download/sha256:342a46d212aef292c92e9f751b4cd1f97ccaa677acc8e1cdc1ce23f638ef198a/add-on-auto-wrinkle-map-v0.0.7.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/auto-wrinkle-map/","maintainer":"Hattiffnat","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Material","Node","Animation"]},{"id":"node_void_keeper","schema_version":"1.0.0","name":"NodeVoidKeeper","version":"1.0.1","tagline":"Keeps your nodes centered at the origin, so you can't lose them","archive_hash":"sha256:a6ac8d276fc301e317c45b4c5ec55672266fb11e0cb2a82f7436c106db8e053d","archive_size":15610,"archive_url":"https://extensions.blender.org/download/sha256:a6ac8d276fc301e317c45b4c5ec55672266fb11e0cb2a82f7436c106db8e053d/add-on-node-void-keeper-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-void-keeper/","maintainer":"MagnumVD","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"autocam","schema_version":"1.0.0","name":"AutoCam","version":"2.0.6","tagline":"Intuitive camera tools, built for artists","archive_hash":"sha256:375b428c576948a9f8a9311e64c4f4109aa41fec3c1b76b8c79a1b67685b2132","archive_size":67410,"archive_url":"https://extensions.blender.org/download/sha256:375b428c576948a9f8a9311e64c4f4109aa41fec3c1b76b8c79a1b67685b2132/add-on-autocam-v2.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/autocam/","maintainer":"RenderRides","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Animation","Rigging","Render","Add Curve"]},{"id":"additional_batch_rename","schema_version":"1.0.0","name":"Additional Batch Rename","version":"1.1.1","tagline":"Additional batch rename operators","archive_hash":"sha256:c8cbfda2e658806b84e437759fdce84053abfd16266dbd29e5b89a074a305c11","archive_size":15993,"archive_url":"https://extensions.blender.org/download/sha256:c8cbfda2e658806b84e437759fdce84053abfd16266dbd29e5b89a074a305c11/add-on-additional-batch-rename-v1.1.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/additional-batch-rename/","maintainer":"Endertainer007","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","Object"]},{"id":"proceduraltiles","schema_version":"1.0.0","name":"Procedural Tiles","version":"0.0.4","tagline":"A library of shader nodes. +100 NEW NODES","archive_hash":"sha256:4c6040e0c5654c066fa66f48321857d44e26ca1726d3c8c70cd04050cb6efc30","archive_size":4261663,"archive_url":"https://extensions.blender.org/download/sha256:4c6040e0c5654c066fa66f48321857d44e26ca1726d3c8c70cd04050cb6efc30/add-on-proceduraltiles-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/proceduraltiles/","maintainer":"Aisun-Tang","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Material"]},{"id":"simple_gcode_importer","schema_version":"1.0.0","name":"Simple Gcode Importer","version":"1.1.1","tagline":"Import Gcode to blender as paths","archive_hash":"sha256:aa644b0c5f1cb47878c08bddc029da401e9e357c5e82c4b254801e57897c8f29","archive_size":2397,"archive_url":"https://extensions.blender.org/download/sha256:aa644b0c5f1cb47878c08bddc029da401e9e357c5e82c4b254801e57897c8f29/add-on-simple-gcode-importer-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-gcode-importer/","maintainer":"kmnunley","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Pipeline"]},{"id":"controller_link","schema_version":"1.0.0","name":"Controller Link","version":"1.0.1","tagline":"Use a gamepad as input","archive_hash":"sha256:cf2ef139dc3a07eb2185b91e19586bedaaa684d101fe03449d080262e2fe3c8f","archive_size":16281033,"archive_url":"https://extensions.blender.org/download/sha256:cf2ef139dc3a07eb2185b91e19586bedaaa684d101fe03449d080262e2fe3c8f/add-on-controller-link-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/controller-link/","maintainer":"globglob3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"glare_node_controller","schema_version":"1.0.0","name":"Glare Node Controller","version":"2.3.3","tagline":"panel to control Glare","archive_hash":"sha256:e9a4d48813add31c7f4c04198f4ebfba47dc88be90f4f828762e8ae2c3445d68","archive_size":3563,"archive_url":"https://extensions.blender.org/download/sha256:e9a4d48813add31c7f4c04198f4ebfba47dc88be90f4f828762e8ae2c3445d68/add-on-glare-node-controller-v2.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/glare-node-controller/","maintainer":"darkstarrd","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Render"]},{"id":"dragonff","schema_version":"1.0.0","name":"DragonFF","version":"1.1.0","tagline":"Add-on to edit RenderWare Formats (.dff, .txd, .col)","archive_hash":"sha256:08df6ba49bc85ea983e1661c1151d3ea2b03d7764e815cc85ffce8af31b8267e","archive_size":225580,"archive_url":"https://extensions.blender.org/download/sha256:08df6ba49bc85ea983e1661c1151d3ea2b03d7764e815cc85ffce8af31b8267e/add-on-dragonff-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dragonff/","maintainer":"Parik","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export DFF/TXD/COL/IPL/IDE from/to disk"},"tags":["Import-Export","3D View","Mesh","Material"]},{"id":"maya_pivot","schema_version":"1.0.0","name":"Maya Pivot","version":"1.0.0","tagline":"Implements a Maya-like pivot system in Blender","archive_hash":"sha256:14893b7a7fdef8ffd4ebb538f770b38257c020ca9a02b39d5f3a49dc674083e2","archive_size":16036,"archive_url":"https://extensions.blender.org/download/sha256:14893b7a7fdef8ffd4ebb538f770b38257c020ca9a02b39d5f3a49dc674083e2/add-on-maya-pivot-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/maya-pivot/","maintainer":"Zinkenite","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling","Mesh"]},{"id":"Blueprint_Paper_Theme","schema_version":"1.0.0","name":"Blueprint_Paper_Theme","version":"2.3.1","tagline":"Technical Drawing","archive_hash":"sha256:26176f60d47e6e14d43ae0404d10ba688ee8336478d6b44402855ca2de760d5e","archive_size":5758,"archive_url":"https://extensions.blender.org/download/sha256:26176f60d47e6e14d43ae0404d10ba688ee8336478d6b44402855ca2de760d5e/theme-blueprint-paper-theme-v2.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blueprint-paper-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"color_grid_texture_gen","schema_version":"1.0.0","name":"Color Grid Texture Generator","version":"0.1.2","tagline":"Generate customizable color grid textures","archive_hash":"sha256:f5e0ad6b318cca21a773d071af6df303b1d4ec419bdd514e086aca95bc510a9f","archive_size":28692,"archive_url":"https://extensions.blender.org/download/sha256:f5e0ad6b318cca21a773d071af6df303b1d4ec419bdd514e086aca95bc510a9f/add-on-color-grid-texture-gen-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/color-grid-texture-gen/","maintainer":"andersmmg","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Read Coolors URL from clipboard"},"tags":["Material","UV"]},{"id":"BL_FastStart","schema_version":"1.0.0","name":"BL Fast Start (MP4/MOV)","version":"1.9.4","tagline":"A checkbox to add a 'Fast Start' copy of MP4/MOV renders","archive_hash":"sha256:6816f8d0815101c8ffdc93530e012e6e770dfc8ffc9b5ac441ae57eb74407694","archive_size":22865,"archive_url":"https://extensions.blender.org/download/sha256:6816f8d0815101c8ffdc93530e012e6e770dfc8ffc9b5ac441ae57eb74407694/add-on-bl-faststart-v1.9.4.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bl-faststart/","maintainer":"usrname0","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","User Interface"]},{"id":"jiggle_physics","schema_version":"1.0.0","name":"Jiggle Physics","version":"4.5.2","tagline":"Add stretchy jiggle physics to your Blender rigs","archive_hash":"sha256:26daa9b47b41a1f18aa38c4103f7127c906698ad56e4f9f090e6092f83212239","archive_size":32913,"archive_url":"https://extensions.blender.org/download/sha256:26daa9b47b41a1f18aa38c4103f7127c906698ad56e4f9f090e6092f83212239/add-on-jiggle-physics-v4.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/jiggle-physics/","maintainer":"naelstrof","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"paws_bakery","schema_version":"1.0.0","name":"PAWS: Bakery","version":"0.5.1","tagline":"Texture Baking tools for Game-Ready pipeline by Pawsgineer","archive_hash":"sha256:3a9a2d5d563d38ff8fd3b76fec281213da773425995b2c5b79c7e69f35e17ad0","archive_size":165829,"archive_url":"https://extensions.blender.org/download/sha256:3a9a2d5d563d38ff8fd3b76fec281213da773425995b2c5b79c7e69f35e17ad0/add-on-paws-bakery-v0.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/paws-bakery/","maintainer":"Steve-Paws","license":["SPDX:GPL-3.0-or-later"],"tags":["Bake","Pipeline","Material"]},{"id":"MakePlanarFacesPlus","schema_version":"1.0.0","name":"Make Planar Faces Plus","version":"1.1.0","tagline":"Powerful Make Planar Faces Operator","archive_hash":"sha256:de63571b8ee2edafff87ba9bc95a71495cdc15f61c8b8b16d9d5ee01fac65fe4","archive_size":258249,"archive_url":"https://extensions.blender.org/download/sha256:de63571b8ee2edafff87ba9bc95a71495cdc15f61c8b8b16d9d5ee01fac65fe4/add-on-makeplanarfacesplus-v1.1.0-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/makeplanarfacesplus/","maintainer":"Anton-Florey","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh"]},{"id":"shape_key_mirror_plus","schema_version":"1.0.0","name":"Shape Key Mirror Plus","version":"1.9.0","tagline":"Mirror shape key deltas across symmetric axes","archive_hash":"sha256:e67a7c722d2ad02a4c1fd5e9d99498193d0e1d604c86f20a45dd44ca5863b339","archive_size":17431,"archive_url":"https://extensions.blender.org/download/sha256:e67a7c722d2ad02a4c1fd5e9d99498193d0e1d604c86f20a45dd44ca5863b339/add-on-shape-key-mirror-plus-v1.9.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shape-key-mirror-plus/","maintainer":"Ciyorie","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"marchingcube","schema_version":"1.0.0","name":"Marching Cube","version":"0.3.0","tagline":"Generate iso-surface meshes using the Marching Cubes algorithm","archive_hash":"sha256:4a372e364622fa0539b87f9522bbd60c58e6e06e3e2dc32d725c10707343db18","archive_size":41468991,"archive_url":"https://extensions.blender.org/download/sha256:4a372e364622fa0539b87f9522bbd60c58e6e06e3e2dc32d725c10707343db18/add-on-marchingcube-v0.3.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/marchingcube/","maintainer":"Thomas-Berger","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Add Mesh"]},{"id":"terrainmixer","schema_version":"1.0.0","name":"Terrain Mixer","version":"3.1.3","tagline":"Easy to use shader-based terrain generator for Cycles","archive_hash":"sha256:802d22cc5d7dbce0221d3399bc23b8f96799ba5c66421d7261016bd64d5800ac","archive_size":66614047,"archive_url":"https://extensions.blender.org/download/sha256:802d22cc5d7dbce0221d3399bc23b8f96799ba5c66421d7261016bd64d5800ac/add-on-terrainmixer-v3.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/terrainmixer/","maintainer":"zets","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Easily replace default image files with your own","network":"Documentation and tutorials available online"},"tags":["Add Mesh","Bake","Material"]},{"id":"vectart_animation","schema_version":"1.0.0","name":"Vectart Animation","version":"1.1.4","tagline":"Animation tools for VectArt curves and objects","archive_hash":"sha256:d35ccba3d1fc4ca478edbebdc2620409071d1ebbb4e70d02218a5e15a06972eb","archive_size":22398,"archive_url":"https://extensions.blender.org/download/sha256:d35ccba3d1fc4ca478edbebdc2620409071d1ebbb4e70d02218a5e15a06972eb/add-on-vectart-animation-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vectart-animation/","maintainer":"Dimona-Patrick-243","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Viewport_stabilizer","schema_version":"1.0.0","name":"Viewport stabilizer","version":"1.0.2","tagline":"Stabilise 3d point on your screen","archive_hash":"sha256:ddb4f4e4d410fa18b27f934bcce9abcd451c8b494cccccd32f1de206926b9cd1","archive_size":5207,"archive_url":"https://extensions.blender.org/download/sha256:ddb4f4e4d410fa18b27f934bcce9abcd451c8b494cccccd32f1de206926b9cd1/add-on-viewport-stabilizer-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-stabilizer/","maintainer":"Yaroslav_Yushk","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Tracking"]},{"id":"multiple_camera_render","schema_version":"1.0.0","name":"Multiple Camera Render","version":"4.4.0","tagline":"Sequential rendering from multiple cameras","archive_hash":"sha256:2f475eeea55812da815c61c925b92cd8301733ab82a0fbb8e4e2c4dffaa1e441","archive_size":135372,"archive_url":"https://extensions.blender.org/download/sha256:2f475eeea55812da815c61c925b92cd8301733ab82a0fbb8e4e2c4dffaa1e441/add-on-multiple-camera-render-v4.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/multiple-camera-render/","maintainer":"ivan-perevala","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Writing execution log files inside extension directory"},"tags":["Render","Animation","Camera","3D View"]},{"id":"set_vertex_distance","schema_version":"1.0.0","name":"Set Vertex Distance","version":"2.0.0","tagline":"Set vertex distance single vertex or connected component","archive_hash":"sha256:b7ef6995d2f2953d1b6af31b947e4f47d1194f1cf775bb6c8c23a1343b1dbed7","archive_size":3128,"archive_url":"https://extensions.blender.org/download/sha256:b7ef6995d2f2953d1b6af31b947e4f47d1194f1cf775bb6c8c23a1343b1dbed7/add-on-set-vertex-distance-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/set-vertex-distance/","maintainer":"alicoskun","license":["SPDX:GPL-3.0-or-later"]},{"id":"modifer_stack_manager","schema_version":"1.0.0","name":"Modifier Stack Manager","version":"1.4.0","tagline":"A UI List implementation for Blender's modifier stack","archive_hash":"sha256:9da5047863bb70c7c86ea0ea77976c1562fef3c98dbc672e8ea81ab05fb85138","archive_size":6635,"archive_url":"https://extensions.blender.org/download/sha256:9da5047863bb70c7c86ea0ea77976c1562fef3c98dbc672e8ea81ab05fb85138/add-on-modifer-stack-manager-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/modifer-stack-manager/","maintainer":"salaivv","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","User Interface"]},{"id":"cloud_midnight_teal","schema_version":"1.0.0","name":"Cloud Guy's Theme","version":"1.0.3","tagline":"Custom theme made by me and a friend","archive_hash":"sha256:410cbdebbcb43282fbe2d27956a41eb2158a33f158e97418997f275a435c5816","archive_size":5920,"archive_url":"https://extensions.blender.org/download/sha256:410cbdebbcb43282fbe2d27956a41eb2158a33f158e97418997f275a435c5816/theme-cloud-midnight-teal-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cloud-midnight-teal/","maintainer":"Cloud-Guy","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"Cad_measure_extension","schema_version":"1.0.0","name":"Cad_Dimensions","version":"2.0.0","tagline":"Extension for a new measuring system","archive_hash":"sha256:fdc1a528d7808c897d7cf3469b09921a5b29174cfa6293400f82a1cd0eb65efb","archive_size":251303,"archive_url":"https://extensions.blender.org/download/sha256:fdc1a528d7808c897d7cf3469b09921a5b29174cfa6293400f82a1cd0eb65efb/add-on-cad-measure-extension-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cad-measure-extension/","maintainer":"Mr.Nobody3d","license":["SPDX:GPL-3.0-or-later"]},{"id":"Bbrush","schema_version":"1.0.0","name":"Bbrush","version":"1.5.1","tagline":"Sculpting using only a pen and keyboard","archive_hash":"sha256:2501fc16046f53c0d5eadb046baaa1fc5203c30650b8bf642139d12bec040f55","archive_size":544191,"archive_url":"https://extensions.blender.org/download/sha256:2501fc16046f53c0d5eadb046baaa1fc5203c30650b8bf642139d12bec040f55/add-on-bbrush-v1.5.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bbrush/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"View navigation texture load"},"tags":["Sculpt"]},{"id":"acreplay_importer","schema_version":"1.0.0","name":"AC Replay Importer","version":"0.3.0","tagline":"Animate your cars using Assetto Corsa replays","archive_hash":"sha256:4d91f27fa56cd998c9b2b8ee421d537627413a2dd0d98358ce8a0260fb5b00da","archive_size":8688,"archive_url":"https://extensions.blender.org/download/sha256:4d91f27fa56cd998c9b2b8ee421d537627413a2dd0d98358ce8a0260fb5b00da/add-on-acreplay-importer-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/acreplay-importer/","maintainer":"abchouhan","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import CSV from disk"},"tags":["Animation"]},{"id":"better_bend","schema_version":"1.0.0","name":"Better Bend","version":"1.1.0","tagline":"Cinema 4D-style deformers for Blender","archive_hash":"sha256:a7ce330e85d172706da357cd6291d96663c1a1386c758bcb41a1eb7aa41d1a91","archive_size":4729,"archive_url":"https://extensions.blender.org/download/sha256:a7ce330e85d172706da357cd6291d96663c1a1386c758bcb41a1eb7aa41d1a91/add-on-better-bend-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/better-bend/","maintainer":"Lije.Morgan","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"capture_thumbnails_from_viewport","schema_version":"1.0.0","name":"Asset Browser: Capture Thumbnail from Viewport","version":"1.0.3","tagline":"Add new thumbnails for you asset based on the current viewport","archive_hash":"sha256:116dd46abed00a8bbe841a48a5872c48905a79f90a09c8a472c30aa0f13c48f6","archive_size":1759,"archive_url":"https://extensions.blender.org/download/sha256:116dd46abed00a8bbe841a48a5872c48905a79f90a09c8a472c30aa0f13c48f6/add-on-capture-thumbnails-from-viewport-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/capture-thumbnails-from-viewport/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create a .png in temp folder"},"tags":["Pipeline"]},{"id":"skin_weights_copypaster","schema_version":"1.0.0","name":"Skin Weights Copypaster","version":"0.3.3","tagline":"Copies skin weights from one vertex to selection","archive_hash":"sha256:16d5bcface65447e03e57a4cd169d64b200df2e4ac88a9e7290dbc5e3d9324b3","archive_size":16850,"archive_url":"https://extensions.blender.org/download/sha256:16d5bcface65447e03e57a4cd169d64b200df2e4ac88a9e7290dbc5e3d9324b3/add-on-skin-weights-copypaster-v0.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/skin-weights-copypaster/","maintainer":"Ihor-Spasivskyi","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"MAD","schema_version":"1.0.0","name":"MAD (Microphone Audio Driver)","version":"0.1.6","tagline":"Use your Microphone as an Animation Driver in Blender","archive_hash":"sha256:fd2c01fb744c526daa1d1a4020d315cbf2568bd18460d528a3dfb0a4daf3232b","archive_size":663187,"archive_url":"https://extensions.blender.org/download/sha256:fd2c01fb744c526daa1d1a4020d315cbf2568bd18460d528a3dfb0a4daf3232b/add-on-mad-v0.1.6-windows-x64-windows-arm64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mad/","maintainer":"F1dg3t","license":["SPDX:GPL-3.0-or-later"],"permissions":{"microphone":"Capture audio input for real-time animation"},"platforms":["windows-x64","windows-arm64"],"tags":["Rigging","Animation"]},{"id":"iocgpoly_lip_sync","schema_version":"1.0.0","name":"Lip Sync","version":"2.3.2","tagline":"Automatic lip sync for your Blender models","archive_hash":"sha256:8c761c89173c714eee0114471ed8f13c99b09a811ec11d7dbbce72a9599024a3","archive_size":37476376,"archive_url":"https://extensions.blender.org/download/sha256:8c761c89173c714eee0114471ed8f13c99b09a811ec11d7dbbce72a9599024a3/add-on-iocgpoly-lip-sync-v2.3.2-windows-x64.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/iocgpoly-lip-sync/","maintainer":"Charley3D","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Models / Extract libs to disk","network":"Need to download Voices Models to enable lip sync"},"platforms":["windows-x64"],"tags":["Animation","Sequencer"]},{"id":"FakeBones","schema_version":"1.0.0","name":"FakeBones","version":"1.0.7","tagline":"enhance armature visualization","archive_hash":"sha256:1c766ee1bf8f385f3f87169b37b3c2447d5620c59a090ff413da6ee6cd30aed1","archive_size":4158,"archive_url":"https://extensions.blender.org/download/sha256:1c766ee1bf8f385f3f87169b37b3c2447d5620c59a090ff413da6ee6cd30aed1/add-on-fakebones-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fakebones/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Steam","schema_version":"1.0.0","name":"Steam","version":"3.0.3","tagline":"Inspired by the old Steam UI. ","archive_hash":"sha256:9982ed52c45db941e0203689374d2942ed6207dc11f65fe12a8062123dcadf7f","archive_size":5495,"archive_url":"https://extensions.blender.org/download/sha256:9982ed52c45db941e0203689374d2942ed6207dc11f65fe12a8062123dcadf7f/theme-steam-v3.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/steam/","maintainer":"ArtinŌr","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By"]},{"id":"AnimCurveSorter","schema_version":"1.0.0","name":"Anim Curve Sorter","version":"1.0.2","tagline":"Easily organise your animation curves","archive_hash":"sha256:2952fa50ce39cdff182259c7041e4a276a7524a73813d2adc75f448c3afa1721","archive_size":17382,"archive_url":"https://extensions.blender.org/download/sha256:2952fa50ce39cdff182259c7041e4a276a7524a73813d2adc75f448c3afa1721/add-on-animcurvesorter-v1.0.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/animcurvesorter/","maintainer":"Duncan-Readle","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"ccustomnodes","schema_version":"1.0.0","name":"Object Utility Nodes","version":"1.0.4","tagline":"Custom nodes in new node editor","archive_hash":"sha256:17ae56da737287d2b7ba7c350d5c6697fef15227c45deb45ce46b8abfad81180","archive_size":7115868,"archive_url":"https://extensions.blender.org/download/sha256:17ae56da737287d2b7ba7c350d5c6697fef15227c45deb45ce46b8abfad81180/add-on-ccustomnodes-v1.0.4-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ccustomnodes/","maintainer":"Bitsqueezer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save colorwheel pictures from/to temp folder"},"platforms":["windows-x64"],"tags":["Node"]},{"id":"easymesh_batch_exporter","schema_version":"1.0.0","name":"EasyMesh Batch Exporter","version":"1.6.2","tagline":"Streamlined mesh export for game development workflows","archive_hash":"sha256:874bb4a47f6664fd1a77a3ea9fc887d3907d7a662cc85342a299e0fbad4cf9b2","archive_size":80528,"archive_url":"https://extensions.blender.org/download/sha256:874bb4a47f6664fd1a77a3ea9fc887d3907d7a662cc85342a299e0fbad4cf9b2/add-on-easymesh-batch-exporter-v1.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easymesh-batch-exporter/","maintainer":"spec-arte","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export mesh files to the specified directory"},"tags":["Import-Export"]},{"id":"SuperDuperBatchExporter","schema_version":"1.0.0","name":"Super Duper Batch Exporter","version":"2.8.2","tagline":"One click export to multiple files","archive_hash":"sha256:78bf2172083f1cd455aee1d709c0d5a33170dbc5734c5959ca6cd5059bbc8a51","archive_size":30522,"archive_url":"https://extensions.blender.org/download/sha256:78bf2172083f1cd455aee1d709c0d5a33170dbc5734c5959ca6cd5059bbc8a51/add-on-superduperbatchexporter-v2.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/superduperbatchexporter/","maintainer":"BastianLS","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export files to disk & create subdirectories in output directory"},"tags":["Import-Export"]},{"id":"measure_and_scale","schema_version":"1.0.0","name":"Measure and Scale","version":"1.1.6","tagline":"Measure and Scale object uniformaly","archive_hash":"sha256:b62e9e246a90461e15f2a8c74fca1afea39f7364793e284ac73b14b21b23f7e5","archive_size":9679,"archive_url":"https://extensions.blender.org/download/sha256:b62e9e246a90461e15f2a8c74fca1afea39f7364793e284ac73b14b21b23f7e5/add-on-measure-and-scale-v1.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/measure-and-scale/","maintainer":"Belaid-ZIANE","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"Enhanced_Top_Bar","schema_version":"1.0.0","name":"Enhanced Top Bar","version":"1.0.4","tagline":"Easy access to your ViewLayers rendering properties","archive_hash":"sha256:6cafc46869812bea3791ae4a8c67205e4d88da53f8123826710da58d688150c5","archive_size":6863,"archive_url":"https://extensions.blender.org/download/sha256:6cafc46869812bea3791ae4a8c67205e4d88da53f8123826710da58d688150c5/add-on-enhanced-top-bar-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/enhanced-top-bar/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"Mesh2Rig","schema_version":"1.0.0","name":"Mesh2Rig","version":"2.5.0","tagline":"Transfer simulation, shape keys and other to rig animation","archive_hash":"sha256:5c8623854ee991516160767ee929f214a96e367fa416266866479d133652674a","archive_size":16675,"archive_url":"https://extensions.blender.org/download/sha256:5c8623854ee991516160767ee929f214a96e367fa416266866479d133652674a/add-on-mesh2rig-v2.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh2rig/","maintainer":"3DemFX","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation","Bake","Game Engine","Pipeline"]},{"id":"Individual_Camera_Properties","schema_version":"1.0.0","name":"Individual Camera Properties","version":"1.0.1","tagline":"Resolution, Scene and Render properties for each camera instance","archive_hash":"sha256:c035744e1b619829607ce767b7f7e3dc97985bb412de7216793f34a3109e8b0d","archive_size":78843,"archive_url":"https://extensions.blender.org/download/sha256:c035744e1b619829607ce767b7f7e3dc97985bb412de7216793f34a3109e8b0d/add-on-individual-camera-properties-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/individual-camera-properties/","maintainer":"Alexander-Bicukow","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To save and write presets files to disk"},"tags":["Camera"]},{"id":"VSE_SRT_Subtitle_Importer_4_2_extension","schema_version":"1.0.0","name":"SRT Subtitle Importer/Exporter","version":"2.0.0","tagline":"Import/Export SRT subtitle files to/from VSE strips","archive_hash":"sha256:53f5b2f01d444edd210bcee5b14b751807cd855e1f8a4a83423e49c9c6e0fe64","archive_size":7448,"archive_url":"https://extensions.blender.org/download/sha256:53f5b2f01d444edd210bcee5b14b751807cd855e1f8a4a83423e49c9c6e0fe64/add-on-vse-srt-subtitle-importer-4-2-extension-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/vse-srt-subtitle-importer-4-2-extension/","maintainer":"PoYakong","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"DorchaLiath","schema_version":"1.0.0","name":"Dorcha Liath","version":"5.0.1","tagline":"Dark Grey","archive_hash":"sha256:aba960fe244b919144407a104c23e98037803095bc2856c08c8aef58ffaf326d","archive_size":5206,"archive_url":"https://extensions.blender.org/download/sha256:aba960fe244b919144407a104c23e98037803095bc2856c08c8aef58ffaf326d/theme-dorchaliath-v5.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dorchaliath/","maintainer":"rory-fly","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"QuickCatalogs","schema_version":"1.0.0","name":"Quick Catalogs ( Asset Browser )","version":"1.0.2","tagline":"Make Asset Catalogs from selected Collections","archive_hash":"sha256:417f58839a3f7e90e31733319d75e4317e9415926fd379e605bc54bb61b5a540","archive_size":2677,"archive_url":"https://extensions.blender.org/download/sha256:417f58839a3f7e90e31733319d75e4317e9415926fd379e605bc54bb61b5a540/add-on-quickcatalogs-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quickcatalogs/","maintainer":"justOniL","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"import_export_skin_weights","schema_version":"1.0.0","name":"Import Export Skin Weights","version":"1.0.1","tagline":"Import and export skin weights for Blender","archive_hash":"sha256:248b74f7b176819621f0cd33276070b1ad22c2112f80bfc628045dfea16f6412","archive_size":16987,"archive_url":"https://extensions.blender.org/download/sha256:248b74f7b176819621f0cd33276070b1ad22c2112f80bfc628045dfea16f6412/add-on-import-export-skin-weights-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-export-skin-weights/","maintainer":"Nguyen-Phuc-Nguyen","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Import-Export"]},{"id":"menace","schema_version":"1.0.0","name":"Menace","version":"2.0.0","tagline":"The official HugeMenace theme for Blender","archive_hash":"sha256:ecbb9abc2836fe097c57fe9a5212dcc1fc9a80e62a932e477cf3509922f4cd3d","archive_size":5448,"archive_url":"https://extensions.blender.org/download/sha256:ecbb9abc2836fe097c57fe9a5212dcc1fc9a80e62a932e477cf3509922f4cd3d/theme-menace-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/menace/","maintainer":"HugeMenace","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"solid_boot","schema_version":"1.0.0","name":"Solid Boot","version":"1.1.0","tagline":"3D Views loaded in Solid Mode rather Material Preview","archive_hash":"sha256:97801936f20f108a733fff22fb754a65b4f6af115b0e070a999df4fa66de80fa","archive_size":15759,"archive_url":"https://extensions.blender.org/download/sha256:97801936f20f108a733fff22fb754a65b4f6af115b0e070a999df4fa66de80fa/add-on-solid-boot-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/solid-boot/","maintainer":"CosmoMídias","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"neon_nexus","schema_version":"1.0.0","name":"Neon Nexus","version":"2.0.0","tagline":"A futuristic neon theme for Blender","archive_hash":"sha256:ec0e4a9ff5bfe79411d7dd3ece3e9cb3efad2c28e612c8135733e072b0ae9849","archive_size":6238,"archive_url":"https://extensions.blender.org/download/sha256:ec0e4a9ff5bfe79411d7dd3ece3e9cb3efad2c28e612c8135733e072b0ae9849/theme-neon-nexus-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/neon-nexus/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"SaveSelection","schema_version":"1.0.0","name":"Save Selection","version":"1.0.5","tagline":"Save selected objects in Blender Format","archive_hash":"sha256:615594aed9531a69fb49db5f928888886812f5ed83a63974a694a21f0e8f769e","archive_size":3694,"archive_url":"https://extensions.blender.org/download/sha256:615594aed9531a69fb49db5f928888886812f5ed83a63974a694a21f0e8f769e/add-on-saveselection-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/saveselection/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"grey_orange","schema_version":"1.0.0","name":"Grey Orange","version":"3.0.2","tagline":"Dark neutral grey theme with orange accents","archive_hash":"sha256:2ec8fdf114eb1122ce48f9c5ced7e91284f606987db1dbaa14087bac316e059a","archive_size":6653,"archive_url":"https://extensions.blender.org/download/sha256:2ec8fdf114eb1122ce48f9c5ced7e91284f606987db1dbaa14087bac316e059a/theme-grey-orange-v3.0.2.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/grey-orange/","maintainer":"TimoShch","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"Neutro_Laranja","schema_version":"1.0.0","name":"Neutro Laranja","version":"3.0.0","tagline":"This is another extension","archive_hash":"sha256:84b584efded84667d8dfb689775d9b528f41658c6a6d68e2b8f6af342e32bc00","archive_size":7421,"archive_url":"https://extensions.blender.org/download/sha256:84b584efded84667d8dfb689775d9b528f41658c6a6d68e2b8f6af342e32bc00/theme-neutro-laranja-v3.0.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/neutro-laranja/","maintainer":"Push","license":["SPDX:GPL-3.0-or-later"],"tags":["Accessibility","Light"]},{"id":"quickj","schema_version":"1.0.0","name":"Quick J ( Connect Vertex Path )","version":"1.2.0","tagline":"Quickly connect vertices under the cursor","archive_hash":"sha256:4c7a02ff221bd957d9d8be2cadf5519a2bc68adb9ca7960abb5bbe246dab1905","archive_size":2524,"archive_url":"https://extensions.blender.org/download/sha256:4c7a02ff221bd957d9d8be2cadf5519a2bc68adb9ca7960abb5bbe246dab1905/add-on-quickj-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quickj/","maintainer":"justOniL","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"Batch_Material_Helper","schema_version":"1.0.0","name":"Batch Material Helper","version":"1.0.6","tagline":"Helps you quickly modify materials","archive_hash":"sha256:ce7f2ea29bd087f1f26e882133fd0ebf5212ed14fa547fa6c6bf4288f0d38ca5","archive_size":4099,"archive_url":"https://extensions.blender.org/download/sha256:ce7f2ea29bd087f1f26e882133fd0ebf5212ed14fa547fa6c6bf4288f0d38ca5/add-on-batch-material-helper-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-material-helper/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Material"]},{"id":"UV_Flatten_Tool","schema_version":"1.0.0","name":"UV_Flatten_Tool","version":"1.0.7","tagline":"Flatten mesh to active UV coordinates and store as shape key","archive_hash":"sha256:ab3b58a97af9c8c1e7d329be2869bca7c4a714e6d57abf7aa37c80c47a82f16b","archive_size":2774,"archive_url":"https://extensions.blender.org/download/sha256:ab3b58a97af9c8c1e7d329be2869bca7c4a714e6d57abf7aa37c80c47a82f16b/add-on-uv-flatten-tool-v1.0.7.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/uv-flatten-tool/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"fractal_family","schema_version":"1.0.0","name":"Fractal Family","version":"1.1.6","tagline":"Create fractal curves with ease using complex integer lattices","archive_hash":"sha256:9b6497b8c5234dd27036654f8dbc1f2807466695ee6bc69aefcc3e30fdb6b570","archive_size":16744,"archive_url":"https://extensions.blender.org/download/sha256:9b6497b8c5234dd27036654f8dbc1f2807466695ee6bc69aefcc3e30fdb6b570/add-on-fractal-family-v1.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fractal-family/","maintainer":"imare32","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"apply_modifiers_with_shape_keys","schema_version":"1.0.0","name":"Apply modifier with shape keys","version":"1.0.4","tagline":"Applies modifiers on objects even if they have shape keys","archive_hash":"sha256:063ae9bfae007c27e2ba34b3d0a990a6bb68d923af828b1d06510c95972881ab","archive_size":19128,"archive_url":"https://extensions.blender.org/download/sha256:063ae9bfae007c27e2ba34b3d0a990a6bb68d923af828b1d06510c95972881ab/add-on-apply-modifiers-with-shape-keys-v1.0.4.zip","type":"add-on","blender_version_min":"4.3.2","website":"https://extensions.blender.org/add-ons/apply-modifiers-with-shape-keys/","maintainer":"Orange Turbine","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Modeling","Rigging"]},{"id":"animation_transform_offset","schema_version":"1.0.0","name":"Animation Transform Offset","version":"1.0.0","tagline":"Transform objects and offset their animations in one go","archive_hash":"sha256:8b5beb3a69b3a1923a4be6dfbd5089b9cca27fdaa23b035d43508c479dbf58fc","archive_size":15793,"archive_url":"https://extensions.blender.org/download/sha256:8b5beb3a69b3a1923a4be6dfbd5089b9cca27fdaa23b035d43508c479dbf58fc/add-on-animation-transform-offset-v1.0.0.zip","type":"add-on","blender_version_min":"4.3.2","website":"https://extensions.blender.org/add-ons/animation-transform-offset/","maintainer":"softyoda","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"theme_2000","schema_version":"1.0.0","name":"Theme 2000","version":"1.1.2","tagline":"Inspired by Windows XP, MS office 2007, Sims","archive_hash":"sha256:bf408b6600cddfacf2a9ecfb3b14352153cee68629e1a0ae6e581451f696169a","archive_size":5758,"archive_url":"https://extensions.blender.org/download/sha256:bf408b6600cddfacf2a9ecfb3b14352153cee68629e1a0ae6e581451f696169a/theme-theme-2000-v1.1.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-2000/","maintainer":"danil_orlow","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"multi_user","schema_version":"1.0.0","name":"Multiuser","version":"0.7.4","tagline":"Enable real-time collaborative workflow inside blender","archive_hash":"sha256:8d3be85891043e403cda5da0f527cb1daf9f3480d753beac683a551abc6fdfef","archive_size":2558933,"archive_url":"https://extensions.blender.org/download/sha256:8d3be85891043e403cda5da0f527cb1daf9f3480d753beac683a551abc6fdfef/add-on-multi-user-v0.7.4-windows-x64.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/multi-user/","maintainer":"slumber","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Need to sync scene data to server"},"platforms":["windows-x64"]},{"id":"references_overlays","schema_version":"1.0.0","name":"References Overlays","version":"2.3.2","tagline":"PureRef for Blender. You can add references in the 3D Viewport","archive_hash":"sha256:b849d80c20d6b50dcc5a4228f1aedc1bbc38edf2b18f78422f803c18bc2860a3","archive_size":14178245,"archive_url":"https://extensions.blender.org/download/sha256:b849d80c20d6b50dcc5a4228f1aedc1bbc38edf2b18f78422f803c18bc2860a3/add-on-references-overlays-v2.3.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/references-overlays/","maintainer":"KENKEN","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import BMP/TIFF/PNG/JPG/JPEG/GIF/MP4/WEBM from/to disk","clipboard":"Paste image from the Clipboard"},"platforms":["windows-x64"],"tags":["3D View","User Interface"]},{"id":"altview","schema_version":"1.0.0","name":"AltView","version":"1.0.1","tagline":"Switch views + lock/unlock rotation","archive_hash":"sha256:ea3678752e8e16cf258ae1eb0a2e0701ca228ae523a0163f8d0dbf030546cb60","archive_size":4561,"archive_url":"https://extensions.blender.org/download/sha256:ea3678752e8e16cf258ae1eb0a2e0701ca228ae523a0163f8d0dbf030546cb60/add-on-altview-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.5","website":"https://extensions.blender.org/add-ons/altview/","maintainer":"Iurii-Tiuzhin","license":["SPDX:GPL-3.0-or-later"]},{"id":"remove_static_fcurves","schema_version":"1.0.0","name":"Remove Static FCurves","version":"0.4.0","tagline":"Clean up animation channels that have no data","archive_hash":"sha256:3cd0f3e31abab7e43f94fe836167b818f5e9de0f62563c635abbf2da976b120d","archive_size":6729,"archive_url":"https://extensions.blender.org/download/sha256:3cd0f3e31abab7e43f94fe836167b818f5e9de0f62563c635abbf2da976b120d/add-on-remove-static-fcurves-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/remove-static-fcurves/","maintainer":"lokimckay","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"PlaceHelper","schema_version":"1.0.0","name":"Place Helper","version":"2.0.0","tagline":"Place, align and scatter objects with ease","archive_hash":"sha256:b716a8028e846db794aff472e96b475f2593082b898355a46502d3cc03013544","archive_size":99170,"archive_url":"https://extensions.blender.org/download/sha256:b716a8028e846db794aff472e96b475f2593082b898355a46502d3cc03013544/add-on-placehelper-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/placehelper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object"]},{"id":"headsup_warnings","schema_version":"1.0.0","name":"HeadsUp Warnings","version":"1.1.0","tagline":"Display UI warnings to avoid and resolve common mistakes","archive_hash":"sha256:d4d30ca6d12c48a3bfe4873687817d28351c1eb17768db0687f999f96c880880","archive_size":33611,"archive_url":"https://extensions.blender.org/download/sha256:d4d30ca6d12c48a3bfe4873687817d28351c1eb17768db0687f999f96c880880/add-on-headsup-warnings-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/headsup-warnings/","maintainer":"ManuelLuellau","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Check filepaths to validate if Textures are missing"},"tags":["3D View","Compositing","Render"]},{"id":"unlooped","schema_version":"1.0.0","name":"Unlooped","version":"1.0.1","tagline":"Prevent Blender from looping scene playback","archive_hash":"sha256:a254b5faa77745aa3ec6fbd93cfc02d6933dcc20cd4e9f9fe6c853f937b733f4","archive_size":14253,"archive_url":"https://extensions.blender.org/download/sha256:a254b5faa77745aa3ec6fbd93cfc02d6933dcc20cd4e9f9fe6c853f937b733f4/add-on-unlooped-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unlooped/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Blend95","schema_version":"1.0.0","name":"Blend95","version":"1.0.0","tagline":"90s, xp, old","archive_hash":"sha256:fe107f25135c986dc75a83ac02114a31ef88628683ac3b58dc2a12341621aa7e","archive_size":5999,"archive_url":"https://extensions.blender.org/download/sha256:fe107f25135c986dc75a83ac02114a31ef88628683ac3b58dc2a12341621aa7e/theme-blend95-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","blender_version_max":"10.0.0","website":"https://extensions.blender.org/themes/blend95/","maintainer":"romanasdf1","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"Quick_Studio_Light","schema_version":"1.0.0","name":"Quick Studio Light","version":"1.1.9","tagline":"Simple and fast lighting with improved selection","archive_hash":"sha256:878f79ee310be191098c731ee907a9eb8bf2086800af7f659543e7501a0cc7af","archive_size":90483,"archive_url":"https://extensions.blender.org/download/sha256:878f79ee310be191098c731ee907a9eb8bf2086800af7f659543e7501a0cc7af/add-on-quick-studio-light-v1.1.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-studio-light/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting","3D View"]},{"id":"typst_importer","schema_version":"1.0.0","name":"Typst Importer","version":"0.3.7","tagline":"Render mathematical equations and code blocks","archive_hash":"sha256:3fd01a8fa572bcceb910bfe3eb931058220822da8bcb721c5bc8ba4c4260cff7","archive_size":35882774,"archive_url":"https://extensions.blender.org/download/sha256:3fd01a8fa572bcceb910bfe3eb931058220822da8bcb721c5bc8ba4c4260cff7/add-on-typst-importer-v0.3.7-windows-x64.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/typst-importer/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Import-Export"]},{"id":"node_align","schema_version":"1.0.0","name":"Node Align(节点对齐)","version":"3.2.6","tagline":"Shift+Q|Ctrl+Q Pie menu-Align Nodes in Multiple Ways(多种方式对齐节点)","archive_hash":"sha256:eab7487c2e0925279ef8184ac6e611bf88c4a9f964a5fc72f6f5b9bf7c959403","archive_size":23687,"archive_url":"https://extensions.blender.org/download/sha256:eab7487c2e0925279ef8184ac6e611bf88c4a9f964a5fc72f6f5b9bf7c959403/add-on-node-align-v3.2.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-align/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"gp_tween","schema_version":"1.0.0","name":"GP Tween (c)","version":"2.4.0","tagline":"Quick Grease Pencil Tweening","archive_hash":"sha256:c5990e9a2ae583535ea2179e225effa84ea7e11a8870cd3c390dc75773116e25","archive_size":169988,"archive_url":"https://extensions.blender.org/download/sha256:c5990e9a2ae583535ea2179e225effa84ea7e11a8870cd3c390dc75773116e25/add-on-gp-tween-v2.4.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/gp-tween/","maintainer":"cosmosmythos","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write GP Tween nodegroup asset from/to disk","clipboard":"Copy and Paste GP Tween nodegroup"},"tags":["Grease Pencil","Animation","Geometry Nodes"]},{"id":"time_tracker","schema_version":"1.0.0","name":"Time Tracker","version":"0.2.4","tagline":"This extension tracks your time spent in blend files","archive_hash":"sha256:69178cd1c0f07232a68f85724b0f76e005d221c18a0e466619f49ac957bd87b9","archive_size":23923,"archive_url":"https://extensions.blender.org/download/sha256:69178cd1c0f07232a68f85724b0f76e005d221c18a0e466619f49ac957bd87b9/add-on-time-tracker-v0.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/time-tracker/","maintainer":"PhinDev","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save timing data to disk"},"tags":["System"]},{"id":"simple_audio_visualizer","schema_version":"1.0.0","name":"Simple Audio Visualizer","version":"1.2.0","tagline":"Creates a simple audio visualizer","archive_hash":"sha256:311d38d93b5734290ea4e3cb8d5f8ddc8a757ea4376bcf8fa56d183daed76190","archive_size":6391,"archive_url":"https://extensions.blender.org/download/sha256:311d38d93b5734290ea4e3cb8d5f8ddc8a757ea4376bcf8fa56d183daed76190/add-on-simple-audio-visualizer-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-audio-visualizer/","maintainer":"Polyfjord","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import audio from disk"},"tags":["Animation"]},{"id":"easy_clouds","schema_version":"1.0.0","name":"Easy Clouds","version":"2.2.0","tagline":"Procedural clouds that are easy to customize","archive_hash":"sha256:98f8d4ca22c8e8a0ec85e0ad98f0d681fedd8c7f346766a8fb53aa69207eb2fd","archive_size":10614,"archive_url":"https://extensions.blender.org/download/sha256:98f8d4ca22c8e8a0ec85e0ad98f0d681fedd8c7f346766a8fb53aa69207eb2fd/add-on-easy-clouds-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easy-clouds/","maintainer":"LunarKitten","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Add Mesh","Node"]},{"id":"MustardSimplify","schema_version":"1.0.0","name":"Mustard Simplify","version":"2026.2.0","tagline":"Tool to simplify scenes for improved viewport performance","archive_hash":"sha256:52e7ba18e9956e98f977cdaef9e2f5838ef9a0d63f0a1b2dddb2a43c3db06ace","archive_size":56521,"archive_url":"https://extensions.blender.org/download/sha256:52e7ba18e9956e98f977cdaef9e2f5838ef9a0d63f0a1b2dddb2a43c3db06ace/add-on-mustardsimplify-v2026.2.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/mustardsimplify/","maintainer":"Mustard","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene"]},{"id":"QuickTools_v3","schema_version":"1.0.0","name":"Grease Pencil QuickTools_v3","version":"1.1.7","tagline":"Grease Pencil Toobar in N sidebar with auto mode switch","archive_hash":"sha256:80a8be8f55be5ecf1491c0f255a905d09ac187e7d25070c4b10ee5459fc4cae9","archive_size":53548,"archive_url":"https://extensions.blender.org/download/sha256:80a8be8f55be5ecf1491c0f255a905d09ac187e7d25070c4b10ee5459fc4cae9/add-on-quicktools-v3-v1.1.7.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/quicktools-v3/","maintainer":"PongBuster","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil"]},{"id":"named_attribute_list","schema_version":"1.0.0","name":"Node Attribute List(节点属性列表)","version":"2.11.0","tagline":"Quickly Add Attribute Node in GN and Shader(几何节点和材质里快速添加属性节点)","archive_hash":"sha256:2403d64ec154913f5a72543e78ccdd6280df9f6010e9e2fe08d9cdc6e8f78658","archive_size":100935,"archive_url":"https://extensions.blender.org/download/sha256:2403d64ec154913f5a72543e78ccdd6280df9f6010e9e2fe08d9cdc6e8f78658/add-on-named-attribute-list-v2.11.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/named-attribute-list/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"CurveFitting","schema_version":"1.0.0","name":"Curve Fitting","version":"0.3.0","tagline":"Smooth out uneven vertex arrangements keeping original shape","archive_hash":"sha256:4c39752087fdab6108589e4506824701cf6d352f32e6be8f66891362bd382e9a","archive_size":22449,"archive_url":"https://extensions.blender.org/download/sha256:4c39752087fdab6108589e4506824701cf6d352f32e6be8f66891362bd382e9a/add-on-curvefitting-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/curvefitting/","maintainer":"zuda77","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"Utilities_Gadget","schema_version":"1.0.0","name":"Utilities Gadget","version":"1.1.5","tagline":"Batch rendering and model conversio","archive_hash":"sha256:9a56ba155f59e292d1769e1ac3cd3eb641cc9013ead197853fa398757be9d6bc","archive_size":6095,"archive_url":"https://extensions.blender.org/download/sha256:9a56ba155f59e292d1769e1ac3cd3eb641cc9013ead197853fa398757be9d6bc/add-on-utilities-gadget-v1.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/utilities-gadget/","maintainer":"HurcaGuari","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"bbone_Tools","schema_version":"1.0.0","name":"the bendybones toolkit","version":"1.6.0","tagline":"a simple toolkit for rigging with bendybones","archive_hash":"sha256:a5560c8e61a605354ae65519f983ac19636fcdcebc5f781bde727d58e7906a79","archive_size":4337,"archive_url":"https://extensions.blender.org/download/sha256:a5560c8e61a605354ae65519f983ac19636fcdcebc5f781bde727d58e7906a79/add-on-bbone-tools-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bbone-tools/","maintainer":"Felipe-G","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"viewtools","schema_version":"1.0.0","name":"ViewTools","version":"1.0.0","tagline":"Essential Viewport tools for industrial workflows","archive_hash":"sha256:1d9bb6ed90fc9f289b34e63efb833acb370dd6aaed98a19183c13598236a8922","archive_size":4857,"archive_url":"https://extensions.blender.org/download/sha256:1d9bb6ed90fc9f289b34e63efb833acb370dd6aaed98a19183c13598236a8922/add-on-viewtools-v1.0.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/viewtools/","maintainer":"Ishara-Sandeepa","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface","Mesh","Object"]},{"id":"persiantype","schema_version":"1.0.0","name":"Persian type","version":"2.0.1","tagline":"Add Persian/Arabic type directly to Blender","archive_hash":"sha256:f519fd2e627f369686c5b9272526326b5cfb37e2555deb39f1a17299b8f1cb9e","archive_size":1952767,"archive_url":"https://extensions.blender.org/download/sha256:f519fd2e627f369686c5b9272526326b5cfb37e2555deb39f1a17299b8f1cb9e/add-on-persiantype-v2.0.1.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/persiantype/","maintainer":"Damyar","license":["SPDX:GPL-3.0-or-later"]},{"id":"group_input_helper","schema_version":"1.0.0","name":"Group input helper(节点组输入助手)","version":"2.9.8","tagline":"Qucik add/split/merge Group Input node/socket(快速添加拆分合并移动组输入节点接口)","archive_hash":"sha256:0e0563d36700e10a98c0c124d20d6866186625a0d351a21096caf45a318b0007","archive_size":76056,"archive_url":"https://extensions.blender.org/download/sha256:0e0563d36700e10a98c0c124d20d6866186625a0d351a21096caf45a318b0007/add-on-group-input-helper-v2.9.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/group-input-helper/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"botanesque","schema_version":"1.0.0","name":"Botanesque","version":"1.1.0","tagline":"Cozy brown blender theme","archive_hash":"sha256:fe991ce8b287c8aaea5f3c4cf503be2afd1fb96daa9ee0eb0a954b9cdc70a200","archive_size":5736,"archive_url":"https://extensions.blender.org/download/sha256:fe991ce8b287c8aaea5f3c4cf503be2afd1fb96daa9ee0eb0a954b9cdc70a200/theme-botanesque-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/botanesque/","maintainer":"polygoniq","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"shutdown_after_render","schema_version":"1.0.0","name":"Shutdown after render","version":"0.4.0","tagline":"Automatically shuts down your PC after your render finishes","archive_hash":"sha256:d7dc0b029145c7411cf660ca67d4909104ea13f3fc8bec2474dc5a8942479f1a","archive_size":4087,"archive_url":"https://extensions.blender.org/download/sha256:d7dc0b029145c7411cf660ca67d4909104ea13f3fc8bec2474dc5a8942479f1a/add-on-shutdown-after-render-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shutdown-after-render/","maintainer":"David-Bühler","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"io_scene_pod","schema_version":"1.0.0","name":"UbiSoft Pod formats","version":"0.36.8","tagline":"Import-Export Pod tracks, ghosts, images, and cars","archive_hash":"sha256:a419a08af2dba5dbf487fbe33e98ad3738594e8549718332f4d719aac8c6b57b","archive_size":7257423,"archive_url":"https://extensions.blender.org/download/sha256:a419a08af2dba5dbf487fbe33e98ad3738594e8549718332f4d719aac8c6b57b/add-on-io-scene-pod-v0.36.8-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/io-scene-pod/","maintainer":"Syroot","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export","Scene"]},{"id":"has_paint_layers","schema_version":"1.0.0","name":"HAS Paint Layers","version":"0.8.93","tagline":"Layers for texture painting","archive_hash":"sha256:d768c479f5d60b9eba58555db5a1d9d7ff29c402f8b4f7418d5ad34d3c790255","archive_size":68078,"archive_url":"https://extensions.blender.org/download/sha256:d768c479f5d60b9eba58555db5a1d9d7ff29c402f8b4f7418d5ad34d3c790255/add-on-has-paint-layers-v0.8.93.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/has-paint-layers/","maintainer":"Hirourk","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Store temporary images"},"tags":["Paint","Bake"]},{"id":"shapekey_keeper","schema_version":"1.0.0","name":"SKkeeper","version":"1.8.2","tagline":"Applies modifiers while keeping shapekeys and drivers","archive_hash":"sha256:4a02b8366b5b251b36b03b397781572b5ce60e12900d869a419b8969cd1cc678","archive_size":20217,"archive_url":"https://extensions.blender.org/download/sha256:4a02b8366b5b251b36b03b397781572b5ce60e12900d869a419b8969cd1cc678/add-on-shapekey-keeper-v1.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapekey-keeper/","maintainer":"Nidus","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"RetroGrey","schema_version":"1.0.0","name":"RetroGrey","version":"1.3.4","tagline":"Theme inspired by the grey color of 90s computer devices","archive_hash":"sha256:efae32bcfb363f12d5be7c11b3dc9398fa938f0113f3524e96f37e84582ff758","archive_size":6837,"archive_url":"https://extensions.blender.org/download/sha256:efae32bcfb363f12d5be7c11b3dc9398fa938f0113f3524e96f37e84582ff758/theme-retrogrey-v1.3.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/retrogrey/","maintainer":"Oskar_Wasiluk","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"datablock_utils","schema_version":"1.0.0","name":"Data-Block Utilities","version":"1.3.2","tagline":"Show users, merge duplicates, find similar, and more","archive_hash":"sha256:db3574b4ae63feb175a5027b3d393fb586ba2d1cdf605618ca69f8c3b6592e07","archive_size":1740530,"archive_url":"https://extensions.blender.org/download/sha256:db3574b4ae63feb175a5027b3d393fb586ba2d1cdf605618ca69f8c3b6592e07/add-on-datablock-utils-v1.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/datablock-utils/","maintainer":"Leonardo-Pike-Excell","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","System"]},{"id":"ambientcg_material_importer","schema_version":"1.0.0","name":"AmbientCG Material Importer","version":"1.4.0","tagline":"One-click material creation from AmbientCG","archive_hash":"sha256:83f901d2671ad425d1a2251ca7ed74a02a4ad87b0870b14a82bb04b76079a082","archive_size":4167,"archive_url":"https://extensions.blender.org/download/sha256:83f901d2671ad425d1a2251ca7ed74a02a4ad87b0870b14a82bb04b76079a082/add-on-ambientcg-material-importer-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ambientcg-material-importer/","maintainer":"Nino-Filiu","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and cache textures to disk","network":"Makes calls to AmbientCG"},"tags":["Import-Export","Material"]},{"id":"cursor_plus","schema_version":"1.0.0","name":"3D Cursor Plus","version":"1.0.4","tagline":"Axes, undo and few other tools for your 3D Cursor","archive_hash":"sha256:e4f35c9732aa75a941cce0bb25ba82a1c606239bef60513a30bf2339f0c24a47","archive_size":79566,"archive_url":"https://extensions.blender.org/download/sha256:e4f35c9732aa75a941cce0bb25ba82a1c606239bef60513a30bf2339f0c24a47/add-on-cursor-plus-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cursor-plus/","maintainer":"chokavr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/Load gizmo presets and Pie menu configuration"},"tags":["3D View"]},{"id":"two_point_perspective","schema_version":"1.0.0","name":"Two-Point Perspective","version":"0.0.2","tagline":"Replaces the active camera with a two-point perspective one","archive_hash":"sha256:5b6e59e62df8879f4341f242cd3a4488dc0fe441f80385a23915d6a3fcb1b3bd","archive_size":17509,"archive_url":"https://extensions.blender.org/download/sha256:5b6e59e62df8879f4341f242cd3a4488dc0fe441f80385a23915d6a3fcb1b3bd/add-on-two-point-perspective-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/two-point-perspective/","maintainer":"Athina-Syntychaki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"Grid_Dimensions","schema_version":"1.0.0","name":"Grid Dimensions/网格标注","version":"1.1.2","tagline":"Grid Dimensions/网格标注","archive_hash":"sha256:1f61463cc6ea7a08297e7c7b6f268eba1a0240c07b2912628fcd4a1b5bb14053","archive_size":34880,"archive_url":"https://extensions.blender.org/download/sha256:1f61463cc6ea7a08297e7c7b6f268eba1a0240c07b2912628fcd4a1b5bb14053/add-on-grid-dimensions-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grid-dimensions/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"mpfb","schema_version":"1.0.0","name":"MPFB","version":"2.0.16","tagline":"Human character generator and editor","archive_hash":"sha256:b5cdc8b08147e0c6463e4faa01147491b13a0b062f73415363f029debd11c934","archive_size":44978070,"archive_url":"https://extensions.blender.org/download/sha256:b5cdc8b08147e0c6463e4faa01147491b13a0b062f73415363f029debd11c934/add-on-mpfb-v2.0.16.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mpfb/","maintainer":"Joel-Palmius","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load and save data","network":"(optional) Interact with local instance of MakeHuman"},"tags":["Add Mesh","Rigging"]},{"id":"motion_inspector","schema_version":"1.0.0","name":"Motion inspector","version":"0.2.9","tagline":"Inspect F-Curves and animated object movement","archive_hash":"sha256:693f63eb2e2f8bb04e8dbe703dfd7dd1404026ce5dbe2474fe25eae06381db53","archive_size":4834,"archive_url":"https://extensions.blender.org/download/sha256:693f63eb2e2f8bb04e8dbe703dfd7dd1404026ce5dbe2474fe25eae06381db53/add-on-motion-inspector-v0.2.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/motion-inspector/","maintainer":"Chalouek-RGBit","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","3D View"]},{"id":"modern_primitive","schema_version":"1.0.0","name":"Modern Primitive","version":"0.0.55","tagline":"Modern Primitive for Non-Destructive Modeling","archive_hash":"sha256:73cbd13d9a7f39c60fc49a48752ebcfcd078f215db9304a26cf4e22a398a0bf8","archive_size":3407351,"archive_url":"https://extensions.blender.org/download/sha256:73cbd13d9a7f39c60fc49a48752ebcfcd078f215db9304a26cf4e22a398a0bf8/add-on-modern-primitive-v0.0.55.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/modern-primitive/","maintainer":"Degarashi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Geometry-Node from Add-on Directory"},"tags":["Add Mesh","Modeling"]},{"id":"greasepencil_nudge_frames","schema_version":"1.0.0","name":"Grease Pencil Nudge Frames","version":"0.1.1","tagline":"Modify exposure in the dopesheet with D/F","archive_hash":"sha256:935857f93894275c01154fbf40ac769f5430fdcf5737315d9f84a2aef9922c6f","archive_size":1738,"archive_url":"https://extensions.blender.org/download/sha256:935857f93894275c01154fbf40ac769f5430fdcf5737315d9f84a2aef9922c6f/add-on-greasepencil-nudge-frames-v0.1.1.zip","type":"add-on","blender_version_min":"4.3.1","website":"https://extensions.blender.org/add-ons/greasepencil-nudge-frames/","maintainer":"bergamote","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Grease Pencil"]},{"id":"Non_Destructive_Primitives","schema_version":"1.0.0","name":"ND Primitives","version":"0.2.46","tagline":"Non-Destructive Parametric Primitives in Blender","archive_hash":"sha256:7be2a39d184c099018628d93580fec929a192f3a367d3eb332dbc8231eb8d4f8","archive_size":290494,"archive_url":"https://extensions.blender.org/download/sha256:7be2a39d184c099018628d93580fec929a192f3a367d3eb332dbc8231eb8d4f8/add-on-non-destructive-primitives-v0.2.46.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/non-destructive-primitives/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Geometry Nodes Objects from Add-on Folder"},"tags":["Modeling","Add Mesh"]},{"id":"orange_dark_vignette","schema_version":"1.0.0","name":"Orange Dark + Vignette","version":"1.1.0","tagline":"Transparent orange UI and vignette, Blender colors","archive_hash":"sha256:4713520790d11b9b883ee47b9f9fb751615cb5c1d02ad3c4aa455d40ca08832d","archive_size":5835,"archive_url":"https://extensions.blender.org/download/sha256:4713520790d11b9b883ee47b9f9fb751615cb5c1d02ad3c4aa455d40ca08832d/theme-orange-dark-vignette-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/orange-dark-vignette/","maintainer":"danil_orlow","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"node_pinyin","schema_version":"1.0.0","name":"szm/首字母","version":"1.2.0","tagline":"Enable node and modifier search with PinYin/支持节点和修改器的中文拼音搜索","archive_hash":"sha256:f94b8f609474f189ed0735335f7503d47679c8a76ef7ba1be1efeaa169edd3fe","archive_size":40672,"archive_url":"https://extensions.blender.org/download/sha256:f94b8f609474f189ed0735335f7503d47679c8a76ef7ba1be1efeaa169edd3fe/add-on-node-pinyin-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-pinyin/","maintainer":"Xinyu-Zhu","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"proto_game_asset_tools","schema_version":"1.0.0","name":"PROTO Game Asset Tools","version":"1.3.0","tagline":"tools for game assets, fixed Unreal FBX exports","archive_hash":"sha256:14f7544d04722472d4b24bbdb04550aea16c39c6e5e8a49dfe46220dbe274802","archive_size":28673,"archive_url":"https://extensions.blender.org/download/sha256:14f7544d04722472d4b24bbdb04550aea16c39c6e5e8a49dfe46220dbe274802/add-on-proto-game-asset-tools-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/proto-game-asset-tools/","maintainer":"PROTOWLF","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export FBX to disk","clipboard":"Copy and paste data"},"tags":["Import-Export","Game Engine"]},{"id":"b_subeditor","schema_version":"1.0.0","name":"B SubEditor","version":"1.0.1","tagline":"Sync subtitles in Text Editor/VSE","archive_hash":"sha256:ecf1dd66d0d2812603227a549d07efe010749e17149f7c3c247b07fa68f3cf5d","archive_size":6393,"archive_url":"https://extensions.blender.org/download/sha256:ecf1dd66d0d2812603227a549d07efe010749e17149f7c3c247b07fa68f3cf5d/add-on-b-subeditor-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b-subeditor/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory with subtitle files"},"tags":["Sequencer","Text Editor","Import-Export"]},{"id":"b_Unicode","schema_version":"1.0.0","name":"B Unicode","version":"1.1.1","tagline":"Access Unicode characters","archive_hash":"sha256:8f2e8f263321c2d29cd54ddbb3bb25d04965f5f58921b5749702e475774cd83c","archive_size":40909,"archive_url":"https://extensions.blender.org/download/sha256:8f2e8f263321c2d29cd54ddbb3bb25d04965f5f58921b5749702e475774cd83c/add-on-b-unicode-v1.1.1.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/b-unicode/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Sequencer","Text Editor"]},{"id":"sco_edgewise","schema_version":"1.0.0","name":"SCO EdgeWise","version":"2.0.6","tagline":"Measure distances, edge lengths, and angles in Edit Mode","archive_hash":"sha256:c541631ac21cda9bf95205851e0910404ba01b115bc524a26f2b60b9f9cd4dae","archive_size":137848,"archive_url":"https://extensions.blender.org/download/sha256:c541631ac21cda9bf95205851e0910404ba01b115bc524a26f2b60b9f9cd4dae/add-on-sco-edgewise-v2.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sco-edgewise/","maintainer":"BEAST_of_BURDEN","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"font_selector","schema_version":"1.0.0","name":"Font Selector","version":"3.2.2","tagline":"Browse available fonts from blender","archive_hash":"sha256:6f2006ea677059102fc7265f5dd0d9149ba80b93cbcef7d09d06aade32fda3c6","archive_size":1183546,"archive_url":"https://extensions.blender.org/download/sha256:6f2006ea677059102fc7265f5dd0d9149ba80b93cbcef7d09d06aade32fda3c6/add-on-font-selector-v3.2.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/font-selector/","maintainer":"tonton_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing json preset files, Reading font files"},"tags":["Import-Export","System"]},{"id":"vertex_overlap","schema_version":"1.0.0","name":"Vertex Overlap","version":"1.1.0","tagline":"Alerts you to overlapping vertices in real-time","archive_hash":"sha256:0c281759e0e4e627b5a6d9f1a134391a04e1a944746ef8472186cf7416eb6f14","archive_size":17220,"archive_url":"https://extensions.blender.org/download/sha256:0c281759e0e4e627b5a6d9f1a134391a04e1a944746ef8472186cf7416eb6f14/add-on-vertex-overlap-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vertex-overlap/","maintainer":"Shawn-Shipley","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"quick_resolution_setup","schema_version":"1.0.0","name":"Quick Resolution Setup","version":"1.1.0","tagline":"Quick Resolution Setup","archive_hash":"sha256:e90bfb222c33399c8569dc67819d677bca9a5e3cca2c881a8968013e948e40ea","archive_size":23899,"archive_url":"https://extensions.blender.org/download/sha256:e90bfb222c33399c8569dc67819d677bca9a5e3cca2c881a8968013e948e40ea/add-on-quick-resolution-setup-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-resolution-setup/","maintainer":"Hades-Su","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Render"]},{"id":"audio_notifier","schema_version":"1.0.0","name":"Audio Notifier","version":"1.0.5","tagline":"Audio notifications for success, cancel and warning","archive_hash":"sha256:c268571786d940171942d5e747c1c3424a5d02c184600d11704a8a46b5199541","archive_size":36990,"archive_url":"https://extensions.blender.org/download/sha256:c268571786d940171942d5e747c1c3424a5d02c184600d11704a8a46b5199541/add-on-audio-notifier-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/audio-notifier/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"k_tools_mode_highlight","schema_version":"1.0.0","name":"K-Tools: Mode Highlight","version":"1.1.5","tagline":"Automatically change the header color based on the current mode","archive_hash":"sha256:eae884fe1f34f0453d23b0b254ab85a2cd3e85b7b95dbf867a65fd7370c804c4","archive_size":13305,"archive_url":"https://extensions.blender.org/download/sha256:eae884fe1f34f0453d23b0b254ab85a2cd3e85b7b95dbf867a65fd7370c804c4/add-on-k-tools-mode-highlight-v1.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-mode-highlight/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"xray_selection_tools","schema_version":"1.0.0","name":"X-Ray Selection Tools","version":"4.10.2","tagline":"Box, lasso and circle selection tools with x-ray","archive_hash":"sha256:5abcac3932b30d66b8d693aaf6cf54811b9944a6fb7226f0819fe29e3157134e","archive_size":88167,"archive_url":"https://extensions.blender.org/download/sha256:5abcac3932b30d66b8d693aaf6cf54811b9944a6fb7226f0819fe29e3157134e/add-on-xray-selection-tools-v4.10.2.zip","type":"add-on","blender_version_min":"5.1.1","website":"https://extensions.blender.org/add-ons/xray-selection-tools/","maintainer":"MarshmallowCirno","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"autokey_highlight","schema_version":"1.0.0","name":"Autokey Highlight","version":"1.0.7","tagline":"Highlights the viewport when autokey is enabled","archive_hash":"sha256:3b250ef260551db38a91e00e8a605747260c47798b1db8a2dffb8fcd8c8fa6e8","archive_size":3186,"archive_url":"https://extensions.blender.org/download/sha256:3b250ef260551db38a91e00e8a605747260c47798b1db8a2dffb8fcd8c8fa6e8/add-on-autokey-highlight-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/autokey-highlight/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","3D View","System"]},{"id":"EdgeFlow","schema_version":"1.0.0","name":"EdgeFlow","version":"1.1.2","tagline":"Helps adjusting mesh geometry to curved surfaces","archive_hash":"sha256:4fa53590a837813c72dc9ed0a416f8e3de61352abb262b461974cd9f7092b1c1","archive_size":34350,"archive_url":"https://extensions.blender.org/download/sha256:4fa53590a837813c72dc9ed0a416f8e3de61352abb262b461974cd9f7092b1c1/add-on-edgeflow-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edgeflow/","maintainer":"Benjamin-Sauder","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"LightHepler","schema_version":"1.0.0","name":"Light Helper","version":"0.4.6","tagline":"Light Helper","archive_hash":"sha256:a99c5697ffcb22e6d7a64cd17d353137206b38b707519f03afcaa23933ba214d","archive_size":20722,"archive_url":"https://extensions.blender.org/download/sha256:a99c5697ffcb22e6d7a64cd17d353137206b38b707519f03afcaa23933ba214d/add-on-lighthepler-v0.4.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lighthepler/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"lattice_helper","schema_version":"1.0.0","name":"Lattice Helper","version":"1.2.5","tagline":"Apply Lattice modifier to object(s) in object/edit mode","archive_hash":"sha256:f55bbabd50eef367d05158fbd122b93c2dacb47732d871f4e67455aafd3259c4","archive_size":12464,"archive_url":"https://extensions.blender.org/download/sha256:f55bbabd50eef367d05158fbd122b93c2dacb47732d871f4e67455aafd3259c4/add-on-lattice-helper-v1.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lattice-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"color_randomizer","schema_version":"1.0.0","name":"Color Randomizer","version":"1.3.0","tagline":"Randomly assign colors to objects","archive_hash":"sha256:08820b85193be83b338634efc1e941a944b1666273b9b052771d88f667477944","archive_size":10414,"archive_url":"https://extensions.blender.org/download/sha256:08820b85193be83b338634efc1e941a944b1666273b9b052771d88f667477944/add-on-color-randomizer-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/color-randomizer/","maintainer":"ilumetric","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"lumos","schema_version":"1.0.0","name":"Lumos","version":"3.2.2","tagline":"Bring your lighting to the next level","archive_hash":"sha256:65420e29fe19c6213415f0091bb28b5e3e41d238d9062042157fd286a2cef8ef","archive_size":40153,"archive_url":"https://extensions.blender.org/download/sha256:65420e29fe19c6213415f0091bb28b5e3e41d238d9062042157fd286a2cef8ef/add-on-lumos-v3.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lumos/","maintainer":"Eqkoss","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting","3D View"]},{"id":"rmKit","schema_version":"1.0.0","name":"rmKit","version":"1.0.13","tagline":"Tools and Utils for Modeling and GameWorkflows","archive_hash":"sha256:25c336e8ad89518cb70c7a460ec07fa94d14bd7ebd6170974817d3ee3240b92c","archive_size":83033,"archive_url":"https://extensions.blender.org/download/sha256:25c336e8ad89518cb70c7a460ec07fa94d14bd7ebd6170974817d3ee3240b92c/add-on-rmkit-v1.0.13.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rmkit/","maintainer":"Timothee-Yeramian","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Modeling","Mesh","Object","Material"]},{"id":"Duplication_Tool_addon","schema_version":"1.0.0","name":"Duplication Tool","version":"1.0.2","tagline":"Create copies with incremental names and materials","archive_hash":"sha256:691aedb7c878f624519c697a6502fb9fe7ecc7c2f258d3c9ca34ded0c2ff2864","archive_size":3052,"archive_url":"https://extensions.blender.org/download/sha256:691aedb7c878f624519c697a6502fb9fe7ecc7c2f258d3c9ca34ded0c2ff2864/add-on-duplication-tool-addon-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/duplication-tool-addon/","maintainer":"Vinay-chikkam","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","System"]},{"id":"import_files_svg_cuts_directory","schema_version":"1.0.0","name":"Import SVG Cuts Directory","version":"1.0.1","tagline":"Import object based on a directory of SVG cuts","archive_hash":"sha256:bdfe34a8b5e59c0d98342756cfc0ef9185622bd161a3642ba1a43ed0818b6cfb","archive_size":5958242,"archive_url":"https://extensions.blender.org/download/sha256:bdfe34a8b5e59c0d98342756cfc0ef9185622bd161a3642ba1a43ed0818b6cfb/add-on-import-files-svg-cuts-directory-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-files-svg-cuts-directory/","maintainer":"Benedikt-Schaber","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import directory of SVGs from disk"},"tags":["Import-Export"]},{"id":"sakura_poselib","schema_version":"1.0.0","name":"Sakura Poselib","version":"1.4.4","tagline":"Yet another Pose Library with handful features","archive_hash":"sha256:09a1c37cb2ef33976df34d8629bd0b33ec2e734eb916093128ed0f6dc060102e","archive_size":56108,"archive_url":"https://extensions.blender.org/download/sha256:09a1c37cb2ef33976df34d8629bd0b33ec2e734eb916093128ed0f6dc060102e/add-on-sakura-poselib-v1.4.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sakura-poselib/","maintainer":"Kafuji","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/Load Poselib data as Json or CSV"},"tags":["Animation"]},{"id":"audio_exporter","schema_version":"1.0.0","name":"Audio Exporter","version":"1.1.0","tagline":"Export audio separate or combined files in VSE","archive_hash":"sha256:4154a825f0d4ffb9b0d47f400bc8c2b6880e853510ad93650bc598c63c9a14be","archive_size":6145,"archive_url":"https://extensions.blender.org/download/sha256:4154a825f0d4ffb9b0d47f400bc8c2b6880e853510ad93650bc598c63c9a14be/add-on-audio-exporter-v1.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/audio-exporter/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory where it exports audio files"},"tags":["Sequencer"]},{"id":"Shadingplus","schema_version":"1.0.0","name":"Shading +","version":"1.1.4","tagline":"Shading pie for designers and artists","archive_hash":"sha256:af133ec48e4121248200435f78a3f9d7601ad80b6b47fe68d6fa906870117b67","archive_size":50470985,"archive_url":"https://extensions.blender.org/download/sha256:af133ec48e4121248200435f78a3f9d7601ad80b6b47fe68d6fa906870117b67/add-on-shadingplus-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shadingplus/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"brushstroke_tools","schema_version":"1.0.0","name":"Brushstroke Tools","version":"1.2.3","tagline":"Brushstroke painting tools by the Blender Studio","archive_hash":"sha256:b66728b70b2d6af5ad942b5aa27fcc540db0972c22169480aa552d1e22061fe4","archive_size":29638062,"archive_url":"https://extensions.blender.org/download/sha256:b66728b70b2d6af5ad942b5aa27fcc540db0972c22169480aa552d1e22061fe4/add-on-brushstroke-tools-v1.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/brushstroke-tools/","maintainer":"Blender Studio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write brushstroke asset resources from/to disk"},"tags":["Paint","Geometry Nodes","Material"]},{"id":"node_color_tools","schema_version":"1.0.0","name":"Node Color Tools Pie","version":"1.0.3","tagline":"Quick, organized node colors with pie menu ease","archive_hash":"sha256:e59fd49dbc701c9f45705e7f28dcf4d5d93dc13bf8820a5c8bf813a50c33b1e7","archive_size":4752,"archive_url":"https://extensions.blender.org/download/sha256:e59fd49dbc701c9f45705e7f28dcf4d5d93dc13bf8820a5c8bf813a50c33b1e7/add-on-node-color-tools-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-color-tools/","maintainer":"Lumpengnom","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"mesh_analysis_overlay","schema_version":"1.0.0","name":"Mesh Analysis Overlay","version":"4.1.0","tagline":"Mesh Analysis Overlay","archive_hash":"sha256:08b24bce782c7c8c72d47a3e2c8708a571f19538fed30d57d30fa874f7791a5c","archive_size":18588,"archive_url":"https://extensions.blender.org/download/sha256:08b24bce782c7c8c72d47a3e2c8708a571f19538fed30d57d30fa874f7791a5c/add-on-mesh-analysis-overlay-v4.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/mesh-analysis-overlay/","maintainer":"DShot92","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"gamiflow","schema_version":"1.0.0","name":"GamiFlow","version":"1.9.10","tagline":"Easier game asset creation","archive_hash":"sha256:725dbcc49ccbbaac34d6733f44dcae055ce4ed2c304822df7c5a91417e2e0283","archive_size":162741,"archive_url":"https://extensions.blender.org/download/sha256:725dbcc49ccbbaac34d6733f44dcae055ce4ed2c304822df7c5a91417e2e0283/add-on-gamiflow-v1.9.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gamiflow/","maintainer":"Mathieu.Einig","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export FBX files to disk"},"tags":["Import-Export","Object"]},{"id":"Runlevel_Two","schema_version":"1.0.0","name":"Runlevel Two","version":"1.2.0","tagline":"A refined, distraction-free color palette, pleasing to the eye","archive_hash":"sha256:58de5dc3b042dc70479d8315ea628381f1549c6a22c22941a8ac90adabaca1a1","archive_size":5962,"archive_url":"https://extensions.blender.org/download/sha256:58de5dc3b042dc70479d8315ea628381f1549c6a22c22941a8ac90adabaca1a1/theme-runlevel-two-v1.2.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/runlevel-two/","maintainer":"Rene-Smaal","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Accessibility","Colorful"]},{"id":"render_overscan","schema_version":"1.0.0","name":"Render Overscan","version":"0.1.16","tagline":"Applies and manages overscan in renders","archive_hash":"sha256:3fd9bb4da29f3d9a572e6c24e3740c651f50172e5f3e421dacfd0ab28d9428fa","archive_size":3933,"archive_url":"https://extensions.blender.org/download/sha256:3fd9bb4da29f3d9a572e6c24e3740c651f50172e5f3e421dacfd0ab28d9428fa/add-on-render-overscan-v0.1.16.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/render-overscan/","maintainer":"efimpetelin","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"strip_array","schema_version":"1.0.0","name":"Strip Array","version":"1.1.0","tagline":"Array of duplicated strips, Customizable, Strips Display","archive_hash":"sha256:35813e53db04e787e8a6629b33529766cedc3d78d25111ab200822eda1b577ba","archive_size":4825,"archive_url":"https://extensions.blender.org/download/sha256:35813e53db04e787e8a6629b33529766cedc3d78d25111ab200822eda1b577ba/add-on-strip-array-v1.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/strip-array/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"latticemagic","schema_version":"1.0.0","name":"Lattice Magic","version":"1.0.1","tagline":"Lattice-based deforming tools","archive_hash":"sha256:7f888bac24e8ea490446b75a07609e37f257d7cf7ba67c44703f06de0bb1c91e","archive_size":29840,"archive_url":"https://extensions.blender.org/download/sha256:7f888bac24e8ea490446b75a07609e37f257d7cf7ba67c44703f06de0bb1c91e/add-on-latticemagic-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/latticemagic/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"Show_Object_Data_Users_in_Viewport","schema_version":"1.0.0","name":"Show Collection/Object/Data Users in Viewport","version":"1.0.6","tagline":"Show Collection/Object/Data Users in the Viewport","archive_hash":"sha256:9976496cb96fd37b3121f107981be35f6336da4692e00bb43ccdb4582d010699","archive_size":4288,"archive_url":"https://extensions.blender.org/download/sha256:9976496cb96fd37b3121f107981be35f6336da4692e00bb43ccdb4582d010699/add-on-show-object-data-users-in-viewport-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/show-object-data-users-in-viewport/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"camera_shakify","schema_version":"1.0.0","name":"Camera Shakify","version":"0.5.1","tagline":"Add captured camera shake/wobble to your cameras","archive_hash":"sha256:40bb62e0960b301fe8c7b1de11ec959b8ce6c55ce03ed720c5c3b21c0c764e36","archive_size":78219,"archive_url":"https://extensions.blender.org/download/sha256:40bb62e0960b301fe8c7b1de11ec959b8ce6c55ce03ed720c5c3b21c0c764e36/add-on-camera-shakify-v0.5.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/camera-shakify/","maintainer":"Eat the Future","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Camera"]},{"id":"embroidery_importer","schema_version":"1.0.0","name":"Embroidery Importer","version":"0.9.6","tagline":"Import embroidery files into Blender","archive_hash":"sha256:d9481434abe7dc30e943e794733519035a1e29f8ba1590a23961a658860774f7","archive_size":157512,"archive_url":"https://extensions.blender.org/download/sha256:d9481434abe7dc30e943e794733519035a1e29f8ba1590a23961a658860774f7/add-on-embroidery-importer-v0.9.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/embroidery-importer/","maintainer":"javl","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read embroidery files from disk"},"tags":["Import-Export"]},{"id":"mio3_uv","schema_version":"1.0.0","name":"Mio3 UV","version":"2.2.0","tagline":"UV Edit Assistant Tools","archive_hash":"sha256:597e349839c347c7894381b4fcbcea7777ec034f604ad753bcb1038323478219","archive_size":5203225,"archive_url":"https://extensions.blender.org/download/sha256:597e349839c347c7894381b4fcbcea7777ec034f604ad753bcb1038323478219/add-on-mio3-uv-v2.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mio3-uv/","maintainer":"mio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Imports images, nodes, and translations from the bundled files"},"tags":["UV"]},{"id":"S3D_QuickSwitch","schema_version":"1.0.0","name":"Quick Switch","version":"2.1.0","tagline":"Quickly switch between Editor Areas","archive_hash":"sha256:d6b8fe2348c76f91687bfcdedf7264dc605c1eff99562b8a3827151f7d19f380","archive_size":6932,"archive_url":"https://extensions.blender.org/download/sha256:d6b8fe2348c76f91687bfcdedf7264dc605c1eff99562b8a3827151f7d19f380/add-on-s3d-quickswitch-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/s3d-quickswitch/","maintainer":"Silvie3D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","Pipeline"]},{"id":"Frigus_Nox","schema_version":"1.0.0","name":"Frigus Nox","version":"1.0.8","tagline":"Frigus Nox theme","archive_hash":"sha256:5bf2f16afce50f77cb329a0dbd80c0d24d1c925365b273e6359714f96876444e","archive_size":5668,"archive_url":"https://extensions.blender.org/download/sha256:5bf2f16afce50f77cb329a0dbd80c0d24d1c925365b273e6359714f96876444e/theme-frigus-nox-v1.0.8.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frigus-nox/","maintainer":"Cyrill-Vitkovskiy","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"spreadsheet_import","schema_version":"1.0.0","name":"Spreadsheet Import","version":"0.4.0","tagline":"Import data to spreadsheet for use with geometry nodes","archive_hash":"sha256:a339f6a2de9447fd26e59bcc1b4241bd493a251de1ed242579671d6219ac21ba","archive_size":16630,"archive_url":"https://extensions.blender.org/download/sha256:a339f6a2de9447fd26e59bcc1b4241bd493a251de1ed242579671d6219ac21ba/add-on-spreadsheet-import-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/spreadsheet-import/","maintainer":"smonbrogg","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load CSV and JSON files from disk"},"tags":["Import-Export","Geometry Nodes"]},{"id":"Scene_ViewLayer_Switcher","schema_version":"1.0.0","name":"Scene/View/Workspace Switcher","version":"1.1.0","tagline":"Shortcut for Scenes/ViewLayers","archive_hash":"sha256:1d8572fcf0ce5007edd83615b40418230c3ce7be133e005d0986ff065c2a04d0","archive_size":11003,"archive_url":"https://extensions.blender.org/download/sha256:1d8572fcf0ce5007edd83615b40418230c3ce7be133e005d0986ff065c2a04d0/add-on-scene-viewlayer-switcher-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-viewlayer-switcher/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"pohlke","schema_version":"1.0.0","name":"Pohlke","version":"2.0.0","tagline":"One-click standard axonometric and oblique projection cameras","archive_hash":"sha256:c20f9ae11702babf1e09bb0586ff30731f7a5cea7869d0e17a77c0a6ac40ad25","archive_size":16257,"archive_url":"https://extensions.blender.org/download/sha256:c20f9ae11702babf1e09bb0586ff30731f7a5cea7869d0e17a77c0a6ac40ad25/add-on-pohlke-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pohlke/","maintainer":"mononym","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"FishSim","schema_version":"1.0.0","name":"FishSim","version":"4.2.0","tagline":"Fish Swimming Simulation","archive_hash":"sha256:85e0a06c223139250853e1bb7e51fabf47ed7fcd287de89440bad1f6ee2b244a","archive_size":16851312,"archive_url":"https://extensions.blender.org/download/sha256:85e0a06c223139250853e1bb7e51fabf47ed7fcd287de89440bad1f6ee2b244a/add-on-fishsim-v4.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fishsim/","maintainer":"Nerk","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"sync_render_sets","schema_version":"1.0.0","name":"Sync Render Sets","version":"1.2.1","tagline":"Sync scenes render settings/colorspaces,viewlayers`s passes","archive_hash":"sha256:37cfd9b7c85b37fb0e53ebc7c1148bb0e331e1731059a7d408bfbf40652ee362","archive_size":24219,"archive_url":"https://extensions.blender.org/download/sha256:37cfd9b7c85b37fb0e53ebc7c1148bb0e331e1731059a7d408bfbf40652ee362/add-on-sync-render-sets-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sync-render-sets/","maintainer":"CP-Design","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"circular_stacker","schema_version":"1.0.0","name":"Circular Stacker","version":"1.0.0","tagline":"Distribute selected objects in a circular (donut) pattern","archive_hash":"sha256:c8beafaa14035e601afd131c1129460d396f3d0260a807d2ca7a1c3552361451","archive_size":3099,"archive_url":"https://extensions.blender.org/download/sha256:c8beafaa14035e601afd131c1129460d396f3d0260a807d2ca7a1c3552361451/add-on-circular-stacker-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/circular-stacker/","maintainer":"Hydrocallis","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"overscan","schema_version":"1.0.0","name":"Overscan Render","version":"1.2.3","tagline":"Render with an overscan","archive_hash":"sha256:6599df781f683d78c2a0f2095b81c8d920e74d4b32d6de19095986afe299e10b","archive_size":3063,"archive_url":"https://extensions.blender.org/download/sha256:6599df781f683d78c2a0f2095b81c8d920e74d4b32d6de19095986afe299e10b/add-on-overscan-v1.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/overscan/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"Distribute","schema_version":"1.0.0","name":"Distribute","version":"1.1.0","tagline":"Distribute selected objects from first to last on X, Y or Z axis","archive_hash":"sha256:c293bd89069c379b97add283081a9a61727b1f1737a1cd5f042881b21c520e47","archive_size":1692,"archive_url":"https://extensions.blender.org/download/sha256:c293bd89069c379b97add283081a9a61727b1f1737a1cd5f042881b21c520e47/add-on-distribute-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/distribute/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"motionpath","schema_version":"1.0.0","name":"Motion Path Creator","version":"2.1.2","tagline":"Create motion paths for bones, vertices, empties and objects","archive_hash":"sha256:6afd3b0e6f7e740b6603a8e5773c306cefe0f26da628685184ef5dda92a2189f","archive_size":6955,"archive_url":"https://extensions.blender.org/download/sha256:6afd3b0e6f7e740b6603a8e5773c306cefe0f26da628685184ef5dda92a2189f/add-on-motionpath-v2.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/motionpath/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"fireray","schema_version":"1.0.0","name":"Fire Ray","version":"2.0.0","tagline":"Reality Capture setup and create an empty on a tracked camera","archive_hash":"sha256:ddf5d45609f794693fa8eca42bf8427c0095ba9b7ff032250cb1bde891a3fdb3","archive_size":2709,"archive_url":"https://extensions.blender.org/download/sha256:ddf5d45609f794693fa8eca42bf8427c0095ba9b7ff032250cb1bde891a3fdb3/add-on-fireray-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fireray/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Tracking"]},{"id":"HDRIRotator","schema_version":"1.0.0","name":"HDRI Rotator","version":"1.1.4","tagline":"Move and rotate HDRIs, Shadows and Lights from the viewport","archive_hash":"sha256:69e4cb8239059d348bce877309c59df997c37162b7b3d04f2aebd74edb0b5b53","archive_size":20170,"archive_url":"https://extensions.blender.org/download/sha256:69e4cb8239059d348bce877309c59df997c37162b7b3d04f2aebd74edb0b5b53/add-on-hdrirotator-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hdrirotator/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"auto_active_camera_switcher","schema_version":"1.0.0","name":"Auto Active Camera Switcher","version":"1.0.2","tagline":"Automatically makes the selected camera the active camera","archive_hash":"sha256:b604674c6f02cc353293796c7c645606a7829ebc8bb80e5ca6dc9843c7342bd5","archive_size":2653,"archive_url":"https://extensions.blender.org/download/sha256:b604674c6f02cc353293796c7c645606a7829ebc8bb80e5ca6dc9843c7342bd5/add-on-auto-active-camera-switcher-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-active-camera-switcher/","maintainer":"Yamato3D-3dnchu.com-","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera"]},{"id":"AddonProfiler","schema_version":"1.0.0","name":"Add-on Profiler","version":"2.1.0","tagline":"Monitor and capture add-on profiling data","archive_hash":"sha256:3f3f29f987b24e3669ca4ea739f1ded51ee2ded6adad647699eca3f96f99974c","archive_size":5449,"archive_url":"https://extensions.blender.org/download/sha256:3f3f29f987b24e3669ca4ea739f1ded51ee2ded6adad647699eca3f96f99974c/add-on-addonprofiler-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/addonprofiler/","maintainer":"MrClock","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and process benchmark and profile data"},"tags":["Development"]},{"id":"add_frame_range_presets","schema_version":"1.0.0","name":"Add Frame Range Presets","version":"1.1.3","tagline":"Create preset frame ranges in just a click","archive_hash":"sha256:3977d76fee643f5db538f589fc07c96e7a939a32800d6db73fd6422d146dd1ed","archive_size":16118,"archive_url":"https://extensions.blender.org/download/sha256:3977d76fee643f5db538f589fc07c96e7a939a32800d6db73fd6422d146dd1ed/add-on-add-frame-range-presets-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-frame-range-presets/","maintainer":"stoatsnhoney","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"C3DB","schema_version":"1.0.0","name":"3D Cursors Briefcase","version":"0.1.8","tagline":"Store and manage multiple 3D Cursors","archive_hash":"sha256:41c7aa4374a6bb8a05e2e2f024d8e0d8c503c9c14c52bd48785e9c0b4ce9da38","archive_size":6803,"archive_url":"https://extensions.blender.org/download/sha256:41c7aa4374a6bb8a05e2e2f024d8e0d8c503c9c14c52bd48785e9c0b4ce9da38/add-on-c3db-v0.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/c3db/","maintainer":"dupoxy","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"cameraide_settings","schema_version":"1.0.0","name":"Cameraide","version":"1.1.0","tagline":"Camera specific Resolution, Frame Range, Output Path & Format","archive_hash":"sha256:564539c2e6e457a83e4879fee123e966fda3da429b072255e38e01757f322e89","archive_size":68544,"archive_url":"https://extensions.blender.org/download/sha256:564539c2e6e457a83e4879fee123e966fda3da429b072255e38e01757f322e89/add-on-cameraide-settings-v1.1.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/cameraide-settings/","maintainer":"longiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Render"]},{"id":"simple_bounce_curve","schema_version":"1.0.0","name":"Simple Bounce Curve","version":"1.1.0","tagline":"Creates a simple bounce curve between selected objects","archive_hash":"sha256:d9600617c81ca045b5aeffc5e393a1d09e589d7aca4d6ab15a0845720a93b47b","archive_size":2102,"archive_url":"https://extensions.blender.org/download/sha256:d9600617c81ca045b5aeffc5e393a1d09e589d7aca4d6ab15a0845720a93b47b/add-on-simple-bounce-curve-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-bounce-curve/","maintainer":"Polyfjord","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Object"]},{"id":"org_tayou_bone_vertex_group_merge","schema_version":"1.0.0","name":"Bone and Vertex Group Merge","version":"1.4.1","tagline":"merge selected bones into the active bone","archive_hash":"sha256:ce830a02f48ccc0ed33ec043729df2cb83acb0ba0b91eb3f5f914e5339add61a","archive_size":17934,"archive_url":"https://extensions.blender.org/download/sha256:ce830a02f48ccc0ed33ec043729df2cb83acb0ba0b91eb3f5f914e5339add61a/add-on-org-tayou-bone-vertex-group-merge-v1.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/org-tayou-bone-vertex-group-merge/","maintainer":"Tayou","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"Custom_Grid_Scales","schema_version":"1.0.0","name":"Custom Grid Scales","version":"1.1.0","tagline":"Adds the ability to quickly change between custom grid scales","archive_hash":"sha256:05fa8215b7ed9ded0cca86164f49e09d5cc393e92f80dba4cc6c5c6358588b01","archive_size":2631,"archive_url":"https://extensions.blender.org/download/sha256:05fa8215b7ed9ded0cca86164f49e09d5cc393e92f80dba4cc6c5c6358588b01/add-on-custom-grid-scales-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.1","website":"https://extensions.blender.org/add-ons/custom-grid-scales/","maintainer":"Jacob-Beatty","license":["SPDX:GPL-3.0-or-later"]},{"id":"more_colors","schema_version":"1.0.0","name":"HUE","version":"1.2.2","tagline":"A set of tools to make vertex painting easier","archive_hash":"sha256:1fbaa310bd64dfa268b1ed52895f894e2d9d4c7eca7de88034a3eae5d1dd93d3","archive_size":57737,"archive_url":"https://extensions.blender.org/download/sha256:1fbaa310bd64dfa268b1ed52895f894e2d9d4c7eca7de88034a3eae5d1dd93d3/add-on-more-colors-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/more-colors/","maintainer":"FardreamerLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Mesh","Paint"]},{"id":"thomas_rig_legacy","schema_version":"1.0.0","name":"Thomas Rig Legacy","version":"1.2.8","tagline":"Addon for this rig","archive_hash":"sha256:9a3e7a31cb7fedeb7ed71bc6295e682dcc0c129f1b65c7de04c0dd34295469fe","archive_size":10605168,"archive_url":"https://extensions.blender.org/download/sha256:9a3e7a31cb7fedeb7ed71bc6295e682dcc0c129f1b65c7de04c0dd34295469fe/add-on-thomas-rig-legacy-v1.2.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/thomas-rig-legacy/","maintainer":"BlueEvilGFX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To save the skin to Blender-tmp & read MC textures","network":"To download a skin with the Minecraft/Mojang API"},"tags":["Animation","Rigging"]},{"id":"cortecloud_export","schema_version":"1.0.0","name":"CorteCloud Export","version":"1.0.5","tagline":"Manage and Export wood cut list to CorteCloud csv format","archive_hash":"sha256:ac372a5a9e812069840c9b24f86e86af9f625b798445d128732b8dd94890a191","archive_size":20274,"archive_url":"https://extensions.blender.org/download/sha256:ac372a5a9e812069840c9b24f86e86af9f625b798445d128732b8dd94890a191/add-on-cortecloud-export-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cortecloud-export/","maintainer":"Filipe-Rocha-Lopes","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export csv files"}},{"id":"auto_reload","schema_version":"1.0.0","name":"Auto Reload","version":"3.1.2","tagline":"Automatic reload for external files","archive_hash":"sha256:881d502684e842f2b90d1d911128adea6cebc39b31b91dc311ffc3bfb115f7d4","archive_size":21511,"archive_url":"https://extensions.blender.org/download/sha256:881d502684e842f2b90d1d911128adea6cebc39b31b91dc311ffc3bfb115f7d4/add-on-auto-reload-v3.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-reload/","maintainer":"tonton_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Checking/Reloading external files from current blend"},"tags":["Import-Export","Pipeline"]},{"id":"core_debug_tools","schema_version":"1.0.0","name":"Core Debug Tools","version":"0.1.0","tagline":"Debugging utilities for core Blender developers","archive_hash":"sha256:f21387eea0b95445be76e9b6eee95c7ad807451aefdc65a36dce7a11d262ad20","archive_size":629513,"archive_url":"https://extensions.blender.org/download/sha256:f21387eea0b95445be76e9b6eee95c7ad807451aefdc65a36dce7a11d262ad20/add-on-core-debug-tools-v0.1.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/core-debug-tools/","maintainer":"JacquesLucke","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Build temporary html files to view in the browser"},"tags":["Development"]},{"id":"Colorista","schema_version":"1.0.0","name":"Colorista","version":"1.1.9","tagline":"A convenient color grading add-on designed for colorists","archive_hash":"sha256:07da6c3d687b8a6f88ea120adf93b10cf0a5a88aca12998a2cb02f20380523ef","archive_size":950252,"archive_url":"https://extensions.blender.org/download/sha256:07da6c3d687b8a6f88ea120adf93b10cf0a5a88aca12998a2cb02f20380523ef/add-on-colorista-v1.1.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/colorista/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read Node"},"tags":["Modeling","Node","Render","Compositing"]},{"id":"popoti_align_helper","schema_version":"1.0.0","name":"POPOTI Align Helper","version":"1.2.7","tagline":"More friendly alignment based on observation perspective","archive_hash":"sha256:fca6fa04bc5880bf5d8bdce12d49f6cde3b9d5db7f79f957e1ef504cfde4720f","archive_size":95518,"archive_url":"https://extensions.blender.org/download/sha256:fca6fa04bc5880bf5d8bdce12d49f6cde3b9d5db7f79f957e1ef504cfde4720f/add-on-popoti-align-helper-v1.2.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/popoti-align-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object"]},{"id":"UV_Snapper","schema_version":"1.0.0","name":"UV Snapper","version":"1.1.1","tagline":"Snap selected UVs to a custom atlas","archive_hash":"sha256:e8b8a90172e88ed991b7c3dfae419b660a9209caf9a1de97ab68b2ecd4d744eb","archive_size":236058,"archive_url":"https://extensions.blender.org/download/sha256:e8b8a90172e88ed991b7c3dfae419b660a9209caf9a1de97ab68b2ecd4d744eb/add-on-uv-snapper-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/uv-snapper/","maintainer":"Duncan-Readle","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"theme_moss","schema_version":"1.0.0","name":"Moss","version":"1.0.5","tagline":"Mossy castle dark theme","archive_hash":"sha256:3475452906c58f1ec3d6b15a961a729cce0e3986ec081e5b6cfc055967ae4078","archive_size":5609,"archive_url":"https://extensions.blender.org/download/sha256:3475452906c58f1ec3d6b15a961a729cce0e3986ec081e5b6cfc055967ae4078/theme-theme-moss-v1.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-moss/","maintainer":"Sereda","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"mesh_repair_tools","schema_version":"1.0.0","name":"Mesh Repair Tools","version":"4.0.2","tagline":"An integrated toolbox for mesh repair","archive_hash":"sha256:4d7221841bcc5fb23a26835dbfd9b2a87ce2ddcb29215d1f715329a924008fc7","archive_size":13836,"archive_url":"https://extensions.blender.org/download/sha256:4d7221841bcc5fb23a26835dbfd9b2a87ce2ddcb29215d1f715329a924008fc7/add-on-mesh-repair-tools-v4.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-repair-tools/","maintainer":"SineWave","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","User Interface"]},{"id":"profiling_buddy","schema_version":"1.0.0","name":"Profiling Buddy","version":"1.0.0","tagline":"Adds modifier panel to profile execution times","archive_hash":"sha256:025a1466757a8937bbea1cf5f377272eeb2f259b8be6b1f558d5c642629c78d0","archive_size":1756,"archive_url":"https://extensions.blender.org/download/sha256:025a1466757a8937bbea1cf5f377272eeb2f259b8be6b1f558d5c642629c78d0/add-on-profiling-buddy-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/profiling-buddy/","maintainer":"SimonThommes","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Rigging","Geometry Nodes","User Interface"]},{"id":"Proton","schema_version":"1.0.0","name":"Proton","version":"1.1.0","tagline":"A modern dark theme for Blender with purple accents","archive_hash":"sha256:3bc76322cf8e763fdd823cd1955acc00e92480a9add6c7829a981459d93cad99","archive_size":5141,"archive_url":"https://extensions.blender.org/download/sha256:3bc76322cf8e763fdd823cd1955acc00e92480a9add6c7829a981459d93cad99/theme-proton-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/proton/","maintainer":"VISaberToothIV","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"clean_game_asset_exporter","schema_version":"1.0.0","name":"Clean Game Asset Exporter","version":"1.0.0","tagline":"Game asset exporter for the Defold game engine","archive_hash":"sha256:377a5cbde66f7ea39b861f3062a7ec5c919c8e0a515aeeb8add9e06ae5aacea3","archive_size":4988,"archive_url":"https://extensions.blender.org/download/sha256:377a5cbde66f7ea39b861f3062a7ec5c919c8e0a515aeeb8add9e06ae5aacea3/add-on-clean-game-asset-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clean-game-asset-exporter/","maintainer":"DeBolt","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export game asset files to disk"},"tags":["Game Engine","Import-Export"]},{"id":"Neo_Grey_Theme","schema_version":"1.0.0","name":"Neo_Grey_Theme","version":"2.5.2","tagline":"Dust Cloud","archive_hash":"sha256:82dc471246367596754ec134acefa92d725b071ee066a650063231a81fb401d5","archive_size":5688,"archive_url":"https://extensions.blender.org/download/sha256:82dc471246367596754ec134acefa92d725b071ee066a650063231a81fb401d5/theme-neo-grey-theme-v2.5.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/neo-grey-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"SMEAR","schema_version":"1.0.0","name":"SMEAR","version":"1.1.8","tagline":"Create smear frames for 3D animations","archive_hash":"sha256:eb035521ff506fa339916040c6184b5d09a124125bdfbb942ce2a50ca1b5b1e5","archive_size":3313751,"archive_url":"https://extensions.blender.org/download/sha256:eb035521ff506fa339916040c6184b5d09a124125bdfbb942ce2a50ca1b5b1e5/add-on-smear-v1.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smear/","maintainer":"Jean-Basset","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"simple_deform_helper","schema_version":"1.0.0","name":"Simple Deform Helper","version":"0.2.7","tagline":"Simple Deform visualization adjustment tool","archive_hash":"sha256:4f8fbd7850d9415c8a5c3180af85d66c7b17c5a83a01a08bab14932525631acb","archive_size":173571,"archive_url":"https://extensions.blender.org/download/sha256:4f8fbd7850d9415c8a5c3180af85d66c7b17c5a83a01a08bab14932525631acb/add-on-simple-deform-helper-v0.2.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-deform-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object","Mesh"]},{"id":"image_packer","schema_version":"1.0.0","name":"Image Packer","version":"1.0.7","tagline":"Packs images into a single image","archive_hash":"sha256:32ff0572ecfd9fd7af321ae9299f59101c3d222879c7d7aebb2622f1c3f82c2c","archive_size":24146,"archive_url":"https://extensions.blender.org/download/sha256:32ff0572ecfd9fd7af321ae9299f59101c3d222879c7d7aebb2622f1c3f82c2c/add-on-image-packer-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/image-packer/","maintainer":"Quint-Vrolijk","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"Modal_lattice_resolution","schema_version":"1.0.0","name":"Modal Lattice Resolution","version":"0.3.4","tagline":"Create Lattice or Tweak Resolution from 3D viewport, 'L' keymap","archive_hash":"sha256:13fb4af136685386fb22fe40e68d29c9a7cebdc24d6a5acc2d87ce031e0ad13b","archive_size":7314,"archive_url":"https://extensions.blender.org/download/sha256:13fb4af136685386fb22fe40e68d29c9a7cebdc24d6a5acc2d87ce031e0ad13b/add-on-modal-lattice-resolution-v0.3.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/modal-lattice-resolution/","maintainer":"Tyo79","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Mesh"]},{"id":"you_are_autosave","schema_version":"1.0.0","name":"You Are Autosave","version":"1.5.0","tagline":"Show a warning when you haven't saved in a while","archive_hash":"sha256:7655433433ca018ea03604dc0b8759ce2de9d5c239024017abb8a95b153ee63b","archive_size":17503,"archive_url":"https://extensions.blender.org/download/sha256:7655433433ca018ea03604dc0b8759ce2de9d5c239024017abb8a95b153ee63b/add-on-you-are-autosave-v1.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/you-are-autosave/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"univ","schema_version":"1.0.0","name":"UniV","version":"4.0.0","tagline":"Smart UV Tools","archive_hash":"sha256:734a70137ab6824c9b4294a8aef2cd76e23c667795ebf7f360668ebe45968963","archive_size":471709,"archive_url":"https://extensions.blender.org/download/sha256:734a70137ab6824c9b4294a8aef2cd76e23c667795ebf7f360668ebe45968963/add-on-univ-v4.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/univ/","maintainer":"Oxicid","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Creates and updates icon files in the add-on directory"},"tags":["UV"]},{"id":"dark_17","schema_version":"1.0.0","name":"17 Dark","version":"1.0.2","tagline":"Makes Blender darker","archive_hash":"sha256:c1527478cbb92a6f87eadb887b6971534c97e2222d580578c77118a140ba3ddb","archive_size":5616,"archive_url":"https://extensions.blender.org/download/sha256:c1527478cbb92a6f87eadb887b6971534c97e2222d580578c77118a140ba3ddb/theme-dark-17-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-17/","maintainer":"S41L0R","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"bone_eyedropper","schema_version":"1.0.0","name":"Bone Eyedropper","version":"1.1.8","tagline":"Eyedrop a bone from active or target and assign it to a property","archive_hash":"sha256:b2b551c815a874247b7d4e8c11b167d331319bea1f7551db5a2ac443642297fd","archive_size":139882,"archive_url":"https://extensions.blender.org/download/sha256:b2b551c815a874247b7d4e8c11b167d331319bea1f7551db5a2ac443642297fd/add-on-bone-eyedropper-v1.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-eyedropper/","maintainer":"Nifs","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import .blend from disk","clipboard":"Copy property paths to clipboard"},"tags":["3D View","User Interface"]},{"id":"quick_export_extension","schema_version":"1.0.0","name":"Quick Export","version":"1.1.0","tagline":"Exports the active object's collection if it has exporters","archive_hash":"sha256:bc786396fcbd9e0c3f309ea0388a815912111e4417f5f3faeb2e7cc5fc975f76","archive_size":2422,"archive_url":"https://extensions.blender.org/download/sha256:bc786396fcbd9e0c3f309ea0388a815912111e4417f5f3faeb2e7cc5fc975f76/add-on-quick-export-extension-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-export-extension/","maintainer":"Maro3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"Real_Time_Paths","schema_version":"1.0.0","name":"Motion Path Pro","version":"3.1.0","tagline":"Update motion path in real time","archive_hash":"sha256:eaee70d1ffaf5b3454ba6cd5c39d4b779b99bd59c52227aa0fea627276db7ff2","archive_size":15369,"archive_url":"https://extensions.blender.org/download/sha256:eaee70d1ffaf5b3454ba6cd5c39d4b779b99bd59c52227aa0fea627276db7ff2/add-on-real-time-paths-v3.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/real-time-paths/","maintainer":"Hamdi-Amer","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"theme_GreenKM","schema_version":"1.0.0","name":"Green Kode Mono","version":"1.1.6","tagline":"Kinda retro green theme","archive_hash":"sha256:9e27e44e3086d3df5937c923415b4271c6a4d6ff0cf288bb01cc62b362d46567","archive_size":6032,"archive_url":"https://extensions.blender.org/download/sha256:9e27e44e3086d3df5937c923415b4271c6a4d6ff0cf288bb01cc62b362d46567/theme-theme-greenkm-v1.1.6.zip","type":"theme","blender_version_min":"5.0.1","website":"https://extensions.blender.org/themes/theme-greenkm/","maintainer":"DannySi","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"Quellenform_theme","schema_version":"1.0.0","name":"Quellenform's Theme","version":"0.1.0","tagline":"A dark grey theme with a gentle touch of blue and green colors","archive_hash":"sha256:1fd5a7c591b27910c3f584f3954a4b478dc3a4585a3bd8748c4290a7bc1da20d","archive_size":5899,"archive_url":"https://extensions.blender.org/download/sha256:1fd5a7c591b27910c3f584f3954a4b478dc3a4585a3bd8748c4290a7bc1da20d/theme-quellenform-theme-v0.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/quellenform-theme/","maintainer":"quellenform","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"act_game_asset_creation_toolset","schema_version":"1.0.0","name":"ACT: Game Asset Creation Toolset","version":"2025.2.1","tagline":"Tools for easy create and export low-poly game assets","archive_hash":"sha256:e733197281ff010e1b5fd4ddc9c17249becc7a14c759ae87e82fa1bed9deb284","archive_size":49479,"archive_url":"https://extensions.blender.org/download/sha256:e733197281ff010e1b5fd4ddc9c17249becc7a14c759ae87e82fa1bed9deb284/add-on-act-game-asset-creation-toolset-v2025.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/act-game-asset-creation-toolset/","maintainer":"IvanVostrikov","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export FBX/OBJ/GLTF to disk"},"tags":["3D View","Object","UV","Mesh","Import-Export","Modeling"]},{"id":"node_to_python","schema_version":"1.0.0","name":"Node To Python","version":"4.2.0","tagline":"Turn node groups into Python code","archive_hash":"sha256:a23d847def65873bf284ab0c80108bd45db61104f7a45fe44f7ec38d849f75e4","archive_size":82229,"archive_url":"https://extensions.blender.org/download/sha256:a23d847def65873bf284ab0c80108bd45db61104f7a45fe44f7ec38d849f75e4/add-on-node-to-python-v4.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-to-python/","maintainer":"Brendan-Parmer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Creates and writes to files in a user-specified directory"},"tags":["Development","Compositing","Geometry Nodes","Material","Node"]},{"id":"Eclipse","schema_version":"1.0.0","name":"Eclipse","version":"1.2.2","tagline":"Where Darkness Meets Elegance","archive_hash":"sha256:9b22fcdaed346fdc37aeb5f4686932495b6bbbb70f9ce62d6c6b960bb5894ba7","archive_size":5863,"archive_url":"https://extensions.blender.org/download/sha256:9b22fcdaed346fdc37aeb5f4686932495b6bbbb70f9ce62d6c6b960bb5894ba7/theme-eclipse-v1.2.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/eclipse/","maintainer":"DaoL","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"custom_templates","schema_version":"1.0.0","name":"Custom Templates","version":"1.7.0","tagline":"Use your own .blend files as template options for new projects","archive_hash":"sha256:b28b219df1598bd2359a9dfa5c5fd99e714c97792ad5947adc64634018b9cff8","archive_size":18893,"archive_url":"https://extensions.blender.org/download/sha256:b28b219df1598bd2359a9dfa5c5fd99e714c97792ad5947adc64634018b9cff8/add-on-custom-templates-v1.7.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/custom-templates/","maintainer":"Francesco-Bellini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export, + from folder, Ensure absolute paths in resources"},"tags":["System","User Interface"]},{"id":"world_apply","schema_version":"1.0.0","name":"World Apply","version":"1.0.1","tagline":"Sync viewport world settings with scene world settings","archive_hash":"sha256:17188904a6800963eae79e35ca53f13c2289c98ad4ef63172d42f250ed33c663","archive_size":2866,"archive_url":"https://extensions.blender.org/download/sha256:17188904a6800963eae79e35ca53f13c2289c98ad4ef63172d42f250ed33c663/add-on-world-apply-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/world-apply/","maintainer":"Baraa-Khaled-Youssef","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read HDRI files stored in Blender's directories"},"tags":["Lighting"]},{"id":"timeline_buttons","schema_version":"1.0.0","name":"Timeline Buttons","version":"1.0.0","tagline":"Put the buttons in timeline to other animation related editors","archive_hash":"sha256:3aac330381de15d2f69641f0f6c7f0dcaec42371e014ca70889cad899d27d815","archive_size":15158,"archive_url":"https://extensions.blender.org/download/sha256:3aac330381de15d2f69641f0f6c7f0dcaec42371e014ca70889cad899d27d815/add-on-timeline-buttons-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/timeline-buttons/","maintainer":"tinkerboi","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"ddslideshow","schema_version":"1.0.0","name":"DDSlideshow","version":"0.0.5","tagline":"Create a Ken Burns Effect slideshow","archive_hash":"sha256:c83b00339fb45a3a50191a3856dead7a9878c5c9101a198ceece181c96d8ab0b","archive_size":7196,"archive_url":"https://extensions.blender.org/download/sha256:c83b00339fb45a3a50191a3856dead7a9878c5c9101a198ceece181c96d8ab0b/add-on-ddslideshow-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ddslideshow/","maintainer":"Michael-Lamertz","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to load images for the slideshow"},"tags":["Sequencer"]},{"id":"ikea_browser","schema_version":"1.0.0","name":"IKEA Browser","version":"0.4.0","tagline":"Search and import models from ikea.com","archive_hash":"sha256:b8b619c55c58ab93222c40e46633d3dc1fc3e2ca2ebf26128572164e04ae27b2","archive_size":7016,"archive_url":"https://extensions.blender.org/download/sha256:b8b619c55c58ab93222c40e46633d3dc1fc3e2ca2ebf26128572164e04ae27b2/add-on-ikea-browser-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ikea-browser/","maintainer":"Shish","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Store downloaded models","network":"Download from ikea.com"},"tags":["Import-Export"]},{"id":"bonsai","schema_version":"1.0.0","name":"Bonsai","version":"0.8.5","tagline":"A native Building Information Model authoring platform using IFC","archive_hash":"sha256:81c0cfc9a6204e13fdd4391daef6e91ed8033488fde69ca5933b3535f490514f","archive_size":123569083,"archive_url":"https://extensions.blender.org/download/sha256:81c0cfc9a6204e13fdd4391daef6e91ed8033488fde69ca5933b3535f490514f/add-on-bonsai-v0.8.5-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/bonsai/","maintainer":"IfcOpenShell","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load and save IFCs, IDS, BCF, etc from disk","network":"Augin / Cove.Tool integration for VR and environmental analysis","clipboard":"Copy and paste error logs"},"platforms":["windows-x64"],"tags":["3D View","Add Mesh","Animation","Camera","Development","Import-Export","Lighting","Material","Modeling","Mesh","Node","Object","Pipeline","Render","Scene","System","User Interface","UV"]},{"id":"Clean_Blue","schema_version":"1.0.0","name":"Clean Blue","version":"1.4.0","tagline":"This is a pleasant light-colored theme","archive_hash":"sha256:6dde8d3518209c90af4af2a06f162a18c34e7c886e0a557f7c0c93fd811fa63d","archive_size":5811,"archive_url":"https://extensions.blender.org/download/sha256:6dde8d3518209c90af4af2a06f162a18c34e7c886e0a557f7c0c93fd811fa63d/theme-clean-blue-v1.4.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/clean-blue/","maintainer":"DaoL","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"redsquare","schema_version":"1.0.0","name":"RedSquare V2","version":"1.2.1","tagline":"A theme with basic red tones and a more square-ish type of look","archive_hash":"sha256:05e411805c178dff7b8a4e3a9fe37a15bea260f01e8903d6e17bf1845f20fc8e","archive_size":5707,"archive_url":"https://extensions.blender.org/download/sha256:05e411805c178dff7b8a4e3a9fe37a15bea260f01e8903d6e17bf1845f20fc8e/theme-redsquare-v1.2.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/redsquare/","maintainer":"luccadanielp","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"mengges_dark_theme","schema_version":"1.0.0","name":"MengGe's Dark Theme","version":"1.2.0","tagline":"Dark Theme Pro Max Ultra Plus Lift","archive_hash":"sha256:f2d43e826c8469ebd6ee3df71eb23af969c9f73ff80b877b2c6036a3c6be25cc","archive_size":5629,"archive_url":"https://extensions.blender.org/download/sha256:f2d43e826c8469ebd6ee3df71eb23af969c9f73ff80b877b2c6036a3c6be25cc/theme-mengges-dark-theme-v1.2.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/mengges-dark-theme/","maintainer":"MengGe_KKD","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"armature_pie","schema_version":"1.0.0","name":"Armature Pie","version":"1.1.2","tagline":"Pick Armatures Comfortably & Solo Collection By Pie Menu","archive_hash":"sha256:f03490659072d00769c5d545524870938508d1b012e6285cd934a34d6b7411da","archive_size":13793,"archive_url":"https://extensions.blender.org/download/sha256:f03490659072d00769c5d545524870938508d1b012e6285cd934a34d6b7411da/add-on-armature-pie-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/armature-pie/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"Elegant_Light_Theme","schema_version":"1.0.0","name":"Elegant_Light_Theme","version":"2.3.2","tagline":"Soft Light","archive_hash":"sha256:03ba0f0c9e8e8a7b33af2d83c4c94697d1d0df40f44c49ce839592247633f064","archive_size":5668,"archive_url":"https://extensions.blender.org/download/sha256:03ba0f0c9e8e8a7b33af2d83c4c94697d1d0df40f44c49ce839592247633f064/theme-elegant-light-theme-v2.3.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/elegant-light-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"livery_helper","schema_version":"1.0.0","name":"LiveryHelper","version":"1.0.3","tagline":"Makes creating, editing and customizing car liveries much easier","archive_hash":"sha256:5f1718454dab8b0507fdd8f1743f5536cb0da9f423e7bc789b664eef19b28cab","archive_size":5198,"archive_url":"https://extensions.blender.org/download/sha256:5f1718454dab8b0507fdd8f1743f5536cb0da9f423e7bc789b664eef19b28cab/add-on-livery-helper-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/livery-helper/","maintainer":"Mast26","license":["SPDX:MIT"],"permissions":{"files":"Loading source livery images"},"tags":["Material"]},{"id":"optiploy","schema_version":"1.0.0","name":"OptiPloy: Rig Spawner","version":"1.8.2","tagline":"Improve your workflow with smarter linking tools","archive_hash":"sha256:8dee57bb226f754c3bcab8986df3eca85ee8148faae759649f48d2374c7e0956","archive_size":41364,"archive_url":"https://extensions.blender.org/download/sha256:8dee57bb226f754c3bcab8986df3eca85ee8148faae759649f48d2374c7e0956/add-on-optiploy-v1.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/optiploy/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and save .blend and folder entries"},"tags":["Pipeline","Animation","Rigging","Import-Export"]},{"id":"io_scene_mvr","schema_version":"1.0.0","name":"Scene MVR (.mvr) and GDTF (.gdtf)","version":"1.5.4","tagline":"My Virtual Rig and General Device Type Format","archive_hash":"sha256:fd319cfc1eb8b9af4e36e6505a92084e4653154515060745e43b28ca60453a52","archive_size":317611,"archive_url":"https://extensions.blender.org/download/sha256:fd319cfc1eb8b9af4e36e6505a92084e4653154515060745e43b28ca60453a52/add-on-io-scene-mvr-v1.5.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-mvr/","maintainer":"NRGSille","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"General Device Type Format and My Virtual Rig files"},"tags":["Import-Export","Scene","Lighting","Tracking","Rigging"]},{"id":"CV_Filter_Channels","schema_version":"1.0.0","name":"Filter_Channels","version":"1.0.8","tagline":"Filter channels in Graph Editor for animation","archive_hash":"sha256:b96b9024aca598c17e2ec30cd33cd25d419cf82d94c51c2e056f2ba3603a9bd2","archive_size":15830,"archive_url":"https://extensions.blender.org/download/sha256:b96b9024aca598c17e2ec30cd33cd25d419cf82d94c51c2e056f2ba3603a9bd2/add-on-cv-filter-channels-v1.0.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cv-filter-channels/","maintainer":"Carles-V","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"right_mouse_navigation","schema_version":"1.0.0","name":"Right Mouse Navigation","version":"2.8.0","tagline":"Game Engine Movement and Menus","archive_hash":"sha256:9974909656bb82cb599949b93df47cabf0b174cd727504254e35fc08a36e222d","archive_size":2200146,"archive_url":"https://extensions.blender.org/download/sha256:9974909656bb82cb599949b93df47cabf0b174cd727504254e35fc08a36e222d/add-on-right-mouse-navigation-v2.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/right-mouse-navigation/","maintainer":"SpectralVectors","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Node","User Interface"]},{"id":"texel_density_checker","schema_version":"1.0.0","name":"Texel Density Checker","version":"2026.1.1","tagline":"Toolset for working with Texel Density","archive_hash":"sha256:ca5554ec5c08a830c344ddc08a4c4f8f2e619178ac05ef582ea0293ab540308d","archive_size":26191,"archive_url":"https://extensions.blender.org/download/sha256:ca5554ec5c08a830c344ddc08a4c4f8f2e619178ac05ef582ea0293ab540308d/add-on-texel-density-checker-v2026.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/texel-density-checker/","maintainer":"IvanVostrikov","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object","UV"]},{"id":"simple_renaming_panel","schema_version":"1.0.0","name":"Simple Renaming","version":"2.1.8","tagline":"Effortlessly rename multiple objects with this simple addon","archive_hash":"sha256:32fc435f6daf82feaa711e1b23c960575fbefce3ae99504ca12bcd4f0eb120b1","archive_size":53269,"archive_url":"https://extensions.blender.org/download/sha256:32fc435f6daf82feaa711e1b23c960575fbefce3ae99504ca12bcd4f0eb120b1/add-on-simple-renaming-panel-v2.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-renaming-panel/","maintainer":"MatthiasPatscheider","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Scene","User Interface"]},{"id":"auto_switch_theme","schema_version":"1.0.0","name":"Auto Switch Theme","version":"1.0.1","tagline":"Set light and dark themes based on your system appearance","archive_hash":"sha256:e3c92dc4696f87117b7ce31d52ed690c3c302ddeca98b5677788c7d2eaeac6b1","archive_size":11020,"archive_url":"https://extensions.blender.org/download/sha256:e3c92dc4696f87117b7ce31d52ed690c3c302ddeca98b5677788c7d2eaeac6b1/add-on-auto-switch-theme-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-switch-theme/","maintainer":"pablovazquez","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Read existing themes from disk"},"tags":["User Interface"]},{"id":"ik_fk_snapping_tool","schema_version":"1.0.0","name":"IK-FK Snapping Tool","version":"3.0.3","tagline":"Tools to perform IK to FK and FK to IK snapping","archive_hash":"sha256:bc34f92eeab8f922dc6918d3f3f05c8f42ddde0faaffbb3a69c3a164dea16ddd","archive_size":19058,"archive_url":"https://extensions.blender.org/download/sha256:bc34f92eeab8f922dc6918d3f3f05c8f42ddde0faaffbb3a69c3a164dea16ddd/add-on-ik-fk-snapping-tool-v3.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ik-fk-snapping-tool/","maintainer":"Endertainer007","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"macos_dark_theme","schema_version":"1.0.0","name":"MacOS Dark Theme","version":"2.0.1","tagline":"The MacOS interface style in Blender","archive_hash":"sha256:5a2b3a93e7d4aad0a6adb3e52f382007e292af49730e5335f018b11c3cfdd4f3","archive_size":17990,"archive_url":"https://extensions.blender.org/download/sha256:5a2b3a93e7d4aad0a6adb3e52f382007e292af49730e5335f018b11c3cfdd4f3/theme-macos-dark-theme-v2.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/macos-dark-theme/","maintainer":"stoatsnhoney","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"openvat","schema_version":"1.0.0","name":"OpenVAT","version":"1.1.0","tagline":"Encode and preview vertex animation textures","archive_hash":"sha256:9ead429665193bae5f97ce5af171ef6cd772aa158f80b6d1c750480d8d9aaec1","archive_size":277888,"archive_url":"https://extensions.blender.org/download/sha256:9ead429665193bae5f97ce5af171ef6cd772aa158f80b6d1c750480d8d9aaec1/add-on-openvat-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/openvat/","maintainer":"sharpened","license":["SPDX:GPL-3.0-or-later"]},{"id":"align2custom","schema_version":"1.0.0","name":"Align 2 Custom","version":"2.1.2","tagline":"Align 3D View to custom orientation or 3D cursor","archive_hash":"sha256:c9c2b3ba9871dc20208c20772006af0644f5ab7aa7f9acf9fc2b03098cbc1856","archive_size":17939,"archive_url":"https://extensions.blender.org/download/sha256:c9c2b3ba9871dc20208c20772006af0644f5ab7aa7f9acf9fc2b03098cbc1856/add-on-align2custom-v2.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/align2custom/","maintainer":"fdaubine","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View"]},{"id":"import_mixamo_root_motion","schema_version":"1.0.0","name":"Import Mixamo - Root Motion","version":"1.0.3","tagline":"Batch Import Fbx (Mixamo) And Apply Root Motion","archive_hash":"sha256:2ac0f138d09124b8dbf5b0c6816f0e17da6bc2ec373808d00b6a34dd672736b3","archive_size":23046,"archive_url":"https://extensions.blender.org/download/sha256:2ac0f138d09124b8dbf5b0c6816f0e17da6bc2ec373808d00b6a34dd672736b3/add-on-import-mixamo-root-motion-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-mixamo-root-motion/","maintainer":"DevilMayCry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import FBX from disk"},"tags":["Import-Export"]},{"id":"geonode_shapekeys","schema_version":"1.0.0","name":"GeoNode Shape Keys","version":"1.0.0","tagline":"Sculpt on linked animated characters","archive_hash":"sha256:2ac8d503b2f7004a7066c9af0432da2327fc471b269e9f90cfb92cd86203442c","archive_size":220787,"archive_url":"https://extensions.blender.org/download/sha256:2ac8d503b2f7004a7066c9af0432da2327fc471b269e9f90cfb92cd86203442c/add-on-geonode-shapekeys-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/geonode-shapekeys/","maintainer":"Mets","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"To load the necessary GeoNodes from its .blend file"},"tags":["Rigging"]},{"id":"mesh_mesh_align_plus","schema_version":"1.0.0","name":"Mesh Align Plus","version":"1.1.0-rc.1","tagline":"Move/align mesh parts+objects based on scene geometry/metrics","archive_hash":"sha256:6177ca247f21143f839cf12aa0fda4b6ef738ef6554ce43c86446348b9bdf719","archive_size":90285,"archive_url":"https://extensions.blender.org/download/sha256:6177ca247f21143f839cf12aa0fda4b6ef738ef6554ce43c86446348b9bdf719/add-on-mesh-mesh-align-plus-v1.1.0-rc.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-mesh-align-plus/","maintainer":"BitByte","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View","Mesh","Modeling","Object","User Interface"]},{"id":"theme_Houdini","schema_version":"1.0.0","name":"Houdini","version":"1.3.0","tagline":"Theme Inspired By SideFX Houdini","archive_hash":"sha256:3d656c2c963edaf5040ca9ffb4f87ba7559b2cf6b3962d66b951a9e21d3dd3b9","archive_size":5502,"archive_url":"https://extensions.blender.org/download/sha256:3d656c2c963edaf5040ca9ffb4f87ba7559b2cf6b3962d66b951a9e21d3dd3b9/theme-theme-houdini-v1.3.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-houdini/","maintainer":"rmantdtg","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By"]},{"id":"mio3_copy_weight","schema_version":"1.0.0","name":"Mio3 Copy Weight","version":"1.1.0","tagline":"Copies weights of selected vertices across objects","archive_hash":"sha256:6957c7eb02bbae11a3a5efef3b1470c8471b1864a71c08c69edeb0941249e92e","archive_size":15521,"archive_url":"https://extensions.blender.org/download/sha256:6957c7eb02bbae11a3a5efef3b1470c8471b1864a71c08c69edeb0941249e92e/add-on-mio3-copy-weight-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mio3-copy-weight/","maintainer":"mio","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"whispering_ripples","schema_version":"1.0.0","name":"Whispering Ripples","version":"1.3.0","tagline":"In the whisper of the night, ripples of creativity flow freely","archive_hash":"sha256:90a7ebd8eb00c189410b2bdb76c9d45863a44284af13ca8a3bf78a42bf1f93e1","archive_size":6168,"archive_url":"https://extensions.blender.org/download/sha256:90a7ebd8eb00c189410b2bdb76c9d45863a44284af13ca8a3bf78a42bf1f93e1/theme-whispering-ripples-v1.3.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/whispering-ripples/","maintainer":"DaoL","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"sequenced_bake","schema_version":"1.0.0","name":"Sequenced Bake","version":"1.1.6","tagline":"Tools for baking material sequences and generating sprite sheets","archive_hash":"sha256:a1235d8ac5b3ae98668e53cf5759dd1ad88e21cc5baf9c7d8d41b9e9d0555a7a","archive_size":44148,"archive_url":"https://extensions.blender.org/download/sha256:a1235d8ac5b3ae98668e53cf5759dd1ad88e21cc5baf9c7d8d41b9e9d0555a7a/add-on-sequenced-bake-v1.1.6.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/sequenced-bake/","maintainer":"Anthony-OConnell","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Saving and opening image files"},"tags":["Material","Bake","Node"]},{"id":"quick_menu","schema_version":"1.0.0","name":"QuickMenu","version":"2.0.0","tagline":"Quick-Add/Mod & Quick-Cam","archive_hash":"sha256:da1b178cbeb2abab2051e7017964a287d56de4c44dbf8386623af4834adce6d2","archive_size":17449,"archive_url":"https://extensions.blender.org/download/sha256:da1b178cbeb2abab2051e7017964a287d56de4c44dbf8386623af4834adce6d2/add-on-quick-menu-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-menu/","maintainer":"QiuMu","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"auto_track","schema_version":"1.0.0","name":"Auto-tracking","version":"1.0.0","tagline":"VFX motion tracking automation","archive_hash":"sha256:e4dc16bbe23f728ddd3c0a1f9a2389e9708c24d4975d00a77da1a676b8df928d","archive_size":3589,"archive_url":"https://extensions.blender.org/download/sha256:e4dc16bbe23f728ddd3c0a1f9a2389e9708c24d4975d00a77da1a676b8df928d/add-on-auto-track-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-track/","maintainer":"mcd1992","license":["SPDX:GPL-2.0-or-later"],"tags":["Tracking"]},{"id":"snap_bisect","schema_version":"1.0.0","name":"Snap Bisect","version":"1.0.6","tagline":"Bisect operator with snapping to vertices or edge midpoints","archive_hash":"sha256:396b5687b0917b6d0ac5105da9f6d18ecf582483c73a96a2de89a06556e2154a","archive_size":3851,"archive_url":"https://extensions.blender.org/download/sha256:396b5687b0917b6d0ac5105da9f6d18ecf582483c73a96a2de89a06556e2154a/add-on-snap-bisect-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/snap-bisect/","maintainer":"AdamDominec","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"shape_key_swapper_extension","schema_version":"1.0.0","name":"ShapeKeySwapper","version":"1.0.3","tagline":"Swap vertex positions between 0 and 1 of the active shape key","archive_hash":"sha256:cdf443f57432608598903ed9f25a0821341ebb75feec8c83ead31545956476e0","archive_size":1941,"archive_url":"https://extensions.blender.org/download/sha256:cdf443f57432608598903ed9f25a0821341ebb75feec8c83ead31545956476e0/add-on-shape-key-swapper-extension-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shape-key-swapper-extension/","maintainer":"Maro3D","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"passpartout_slider","schema_version":"1.0.0","name":"Passpartout Slider","version":"1.0.0","tagline":"Let's you control active camera Passpartout by pressing P","archive_hash":"sha256:7d7cb75097ba7baff6feea1dff47164f2a36cd660d0845353a2ddb44fa134e21","archive_size":1819,"archive_url":"https://extensions.blender.org/download/sha256:7d7cb75097ba7baff6feea1dff47164f2a36cd660d0845353a2ddb44fa134e21/add-on-passpartout-slider-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/passpartout-slider/","maintainer":"Costa","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"keyframe_tools_extension","schema_version":"1.0.0","name":"Keyframe Tools","version":"1.0.7","tagline":"A set of tools for inserting, deleting, and moving keyframes","archive_hash":"sha256:e755c7ebb0df1e234b11a7f6ee93d05f9367913cf29121bdd42ce32fa52e324e","archive_size":11009,"archive_url":"https://extensions.blender.org/download/sha256:e755c7ebb0df1e234b11a7f6ee93d05f9367913cf29121bdd42ce32fa52e324e/add-on-keyframe-tools-extension-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyframe-tools-extension/","maintainer":"Hydrocallis","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"omUlete","schema_version":"1.0.0","name":"omUlete","version":"0.98.8","tagline":"A stand-alone exporter for the Panda3D .egg format","archive_hash":"sha256:44c9b28bfc67dae7f58edca9527728c860fac7901f7d817a33110d4686f999a0","archive_size":33170,"archive_url":"https://extensions.blender.org/download/sha256:44c9b28bfc67dae7f58edca9527728c860fac7901f7d817a33110d4686f999a0/add-on-omulete-v0.98.8.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/omulete/","maintainer":"Jackson-Sutherland","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"save exported egg files"},"tags":["Import-Export","Game Engine"]},{"id":"custom_output_path","schema_version":"1.0.0","name":"Custom Output Path","version":"1.1.8","tagline":"Customize file output paths with placeholders","archive_hash":"sha256:5b4b0bb7278624c271076cf910845d2318911da34e55d680749d7f9a219fea8b","archive_size":22437,"archive_url":"https://extensions.blender.org/download/sha256:5b4b0bb7278624c271076cf910845d2318911da34e55d680749d7f9a219fea8b/add-on-custom-output-path-v1.1.8.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/custom-output-path/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Render"]},{"id":"render_preset","schema_version":"1.0.0","name":"Render Preset","version":"1.3.4","tagline":"Create and use render presets","archive_hash":"sha256:429dcb66ab8906791ae7ec237b9f07990f93ce00738f195f282ebc137142ebd3","archive_size":74565,"archive_url":"https://extensions.blender.org/download/sha256:429dcb66ab8906791ae7ec237b9f07990f93ce00738f195f282ebc137142ebd3/add-on-render-preset-v1.3.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-preset/","maintainer":"tonton_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing json preset files in a user-defined location"},"tags":["Render","Pipeline"]},{"id":"mesh_maze","schema_version":"1.0.0","name":"Maze any Mesh","version":"1.2.2","tagline":"Convert any mesh to a maze pattern","archive_hash":"sha256:032c4ec845968791fceba506688f0af05f64566a88fc9f8d3353c4d8aa0589f2","archive_size":18705,"archive_url":"https://extensions.blender.org/download/sha256:032c4ec845968791fceba506688f0af05f64566a88fc9f8d3353c4d8aa0589f2/add-on-mesh-maze-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-maze/","maintainer":"elfnorcat","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"NodePie","schema_version":"1.0.0","name":"Node Pie","version":"1.2.56","tagline":"Add nodes faster with a pie menu","archive_hash":"sha256:83d6a7229c6b20e63ca22ed99596bda5de6b816c9859969391b2738ebad75d0c","archive_size":478543,"archive_url":"https://extensions.blender.org/download/sha256:83d6a7229c6b20e63ca22ed99596bda5de6b816c9859969391b2738ebad75d0c/add-on-nodepie-v1.2.56.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nodepie/","maintainer":"Strike_Digital","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing config files"},"tags":["User Interface","Node"]},{"id":"drag_and_drop_support","schema_version":"1.0.0","name":"Drag and Drop Support","version":"1.3.0","tagline":"Support and improve drag and drop imports in Blender","archive_hash":"sha256:ffca1b51dec3b369d4550b7890bdcfe83ca5e33fbf8b0f77c6feb777640a0980","archive_size":29508,"archive_url":"https://extensions.blender.org/download/sha256:ffca1b51dec3b369d4550b7890bdcfe83ca5e33fbf8b0f77c6feb777640a0980/add-on-drag-and-drop-support-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/drag-and-drop-support/","maintainer":"Natsune-Mochizuki","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import models from the disk"},"tags":["3D View","Import-Export"]},{"id":"deep_gray_something","schema_version":"1.0.0","name":"Deep Gray Something","version":"1.0.1","tagline":"Blender 5 dark theme with blue and green selection highlights","archive_hash":"sha256:c7b1258ab1aec1a1e740e3899353305af318599e29fad0ef83abfdd0e44302c1","archive_size":6009,"archive_url":"https://extensions.blender.org/download/sha256:c7b1258ab1aec1a1e740e3899353305af318599e29fad0ef83abfdd0e44302c1/theme-deep-gray-something-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/deep-gray-something/","maintainer":"blanchsb","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast","Accessibility"]},{"id":"matbatchtools","schema_version":"1.0.0","name":"Material Batch Tools","version":"2.5.0","tagline":"Quick batch automation of common material tasks","archive_hash":"sha256:9a26ca20d1d0a13eb7dae7032c328343a18f6abeb4c0e7768dfdbefffbe0017c","archive_size":37453,"archive_url":"https://extensions.blender.org/download/sha256:9a26ca20d1d0a13eb7dae7032c328343a18f6abeb4c0e7768dfdbefffbe0017c/add-on-matbatchtools-v2.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/matbatchtools/","maintainer":"Theanine3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"sourceenginecollisiontools","schema_version":"1.0.0","name":"Source Engine Collision Tools","version":"3.2.0","tagline":"Generate & optimize collision models for use in Source Engine","archive_hash":"sha256:494b10804c4457eb370357bd3aebd67f953bc65ad6ec47d86b16b9acd081c577","archive_size":68437,"archive_url":"https://extensions.blender.org/download/sha256:494b10804c4457eb370357bd3aebd67f953bc65ad6ec47d86b16b9acd081c577/add-on-sourceenginecollisiontools-v3.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sourceenginecollisiontools/","maintainer":"Theanine3D","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export collision-related QC and VMF files"},"tags":["Mesh","Object","Game Engine"]},{"id":"hot_node","schema_version":"1.0.0","name":"Hot Node","version":"1.2.1","tagline":"Add nodes like adding node","archive_hash":"sha256:ba974165b67c4820466d70cce8f67242e6d6e8e9bbd6013f833a354cc26ef3f4","archive_size":113483,"archive_url":"https://extensions.blender.org/download/sha256:ba974165b67c4820466d70cce8f67242e6d6e8e9bbd6013f833a354cc26ef3f4/add-on-hot-node-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hot-node/","maintainer":"Trantor","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access file system for storing custom nodes"},"tags":["Node","Geometry Nodes","Material"]},{"id":"ZenUVChecker","schema_version":"1.0.0","name":"Zen UV Checker","version":"1.5.1","tagline":"Check the state of UVs on the model easily with Checker Textures","archive_hash":"sha256:82f22c29e599869a3b87b4cde469c47b603e4d68f70539cadb4196961c152e44","archive_size":2989307,"archive_url":"https://extensions.blender.org/download/sha256:82f22c29e599869a3b87b4cde469c47b603e4d68f70539cadb4196961c152e44/add-on-zenuvchecker-v1.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/zenuvchecker/","maintainer":"Sergey_Tyapkin","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access to folders for importing Checker Textures"},"tags":["UV"]},{"id":"improved_node_search","schema_version":"1.0.0","name":"Improved Node Search","version":"1.0.5","tagline":"Navigate your node tree faster via more node search options","archive_hash":"sha256:a44ed6dbf107e0ef69c008b963ecc776101082c827bd943b9a01cdcc7c3991c4","archive_size":11647,"archive_url":"https://extensions.blender.org/download/sha256:a44ed6dbf107e0ef69c008b963ecc776101082c827bd943b9a01cdcc7c3991c4/add-on-improved-node-search-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/improved-node-search/","maintainer":"Griperis","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"noise_nodes","schema_version":"1.0.0","name":"Noise Nodes","version":"0.7.0","tagline":"Advance Noise Nodes For blender","archive_hash":"sha256:5213c751c997a1fc6905c912a60c254d0b95cdb571b7c3db1058be8b5f3755dc","archive_size":1482042,"archive_url":"https://extensions.blender.org/download/sha256:5213c751c997a1fc6905c912a60c254d0b95cdb571b7c3db1058be8b5f3755dc/add-on-noise-nodes-v0.7.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/noise-nodes/","maintainer":"Haseeb-Ahmed-3","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"clear_filepaths","schema_version":"1.0.0","name":"Clear Filepaths","version":"1.1.2","tagline":"Removes personal filepaths from your .blend file","archive_hash":"sha256:5800df075e83a222323db050bc9b774ad087dbca1b707103dba34ee5901f76a9","archive_size":4114,"archive_url":"https://extensions.blender.org/download/sha256:5800df075e83a222323db050bc9b774ad087dbca1b707103dba34ee5901f76a9/add-on-clear-filepaths-v1.1.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clear-filepaths/","maintainer":"FlailingFog","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Saves a copy of a .blend file without filepaths"},"platforms":["windows-x64"],"tags":["System"]},{"id":"onyx","schema_version":"1.0.0","name":"Onyx","version":"1.2.0","tagline":"A minimalistic dark theme","archive_hash":"sha256:6a5bfa1177c7708a10645d113ea632168fc1447c9c74d36a79cda3c55661c755","archive_size":5222,"archive_url":"https://extensions.blender.org/download/sha256:6a5bfa1177c7708a10645d113ea632168fc1447c9c74d36a79cda3c55661c755/theme-onyx-v1.2.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/onyx/","maintainer":"Aeraglyx","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"professional_plus","schema_version":"1.0.0","name":"Professional Plus","version":"2.0.0","tagline":"Professional theme with more vivid colors","archive_hash":"sha256:17b2b8b1c25538d6d70ec064278629430a29bb8ac9d1ba6b9e8d2f70d5fd2fa5","archive_size":5719,"archive_url":"https://extensions.blender.org/download/sha256:17b2b8b1c25538d6d70ec064278629430a29bb8ac9d1ba6b9e8d2f70d5fd2fa5/theme-professional-plus-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/professional-plus/","maintainer":"Alessandro-Vecchio","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"incremental_auto_save","schema_version":"1.0.0","name":"Incremental Auto-Save","version":"1.1.2","tagline":"Improvements to Blender's Autosave","archive_hash":"sha256:294d6c544419e840d8927f6b88095b409afb2841753d2d9e8447bf8b4d724d4f","archive_size":75152,"archive_url":"https://extensions.blender.org/download/sha256:294d6c544419e840d8927f6b88095b409afb2841753d2d9e8447bf8b4d724d4f/add-on-incremental-auto-save-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/incremental-auto-save/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save preferences & .blends in chosen directories"},"tags":["System"]},{"id":"tiny_backup","schema_version":"1.0.0","name":"Tiny Backup","version":"1.0.2","tagline":"A minimalistic backup solution","archive_hash":"sha256:00f0e44af81d41ba29b5e95b10fad221791be4b611ed8ce462d5afab4f75cadc","archive_size":13763,"archive_url":"https://extensions.blender.org/download/sha256:00f0e44af81d41ba29b5e95b10fad221791be4b611ed8ce462d5afab4f75cadc/add-on-tiny-backup-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tiny-backup/","maintainer":"Thane5","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Save backups on disk"},"tags":["System"]},{"id":"Randomize_Bones_Pose","schema_version":"1.0.0","name":"Randomize_Bones_Pose","version":"2.0.0","tagline":"Randomize_Bones_Pose","archive_hash":"sha256:f7cb0958faf3f296809e664f74ec4aec03b39cf1af6d64371b64061f44044bb4","archive_size":16685,"archive_url":"https://extensions.blender.org/download/sha256:f7cb0958faf3f296809e664f74ec4aec03b39cf1af6d64371b64061f44044bb4/add-on-randomize-bones-pose-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/randomize-bones-pose/","maintainer":"IZ.MdVerz","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"pose_shape_keys","schema_version":"1.0.0","name":"Pose Shape Keys","version":"1.0.0","tagline":"Preserve your shape keys through weight changes, and much more","archive_hash":"sha256:f90f6365a515d7ddd60f8e8410a4a4d1fb36594ae20e3b989f09d9d4360849f6","archive_size":35835,"archive_url":"https://extensions.blender.org/download/sha256:f90f6365a515d7ddd60f8e8410a4a4d1fb36594ae20e3b989f09d9d4360849f6/add-on-pose-shape-keys-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pose-shape-keys/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"select_panel_xdanic","schema_version":"1.0.0","name":"Select panel","version":"0.1.5","tagline":"All selections and more under a panel","archive_hash":"sha256:39f014c0fe720f04cfa525ff9c9e1fa13d899611969efecfe97002fc8a7cb793","archive_size":4058,"archive_url":"https://extensions.blender.org/download/sha256:39f014c0fe720f04cfa525ff9c9e1fa13d899611969efecfe97002fc8a7cb793/add-on-select-panel-xdanic-v0.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/select-panel-xdanic/","maintainer":"xdanic","license":["SPDX:GPL-2.0"],"tags":["User Interface"]},{"id":"theme_XP_AliVe","schema_version":"1.0.0","name":"XP_AliVe","version":"1.0.3","tagline":"Blender theme inspired by 2000s","archive_hash":"sha256:c0bffb862dc60fe848872207122feb401e3de59a6cd5cab5f6f7da9549ad5b7a","archive_size":5978,"archive_url":"https://extensions.blender.org/download/sha256:c0bffb862dc60fe848872207122feb401e3de59a6cd5cab5f6f7da9549ad5b7a/theme-theme-xp-alive-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-xp-alive/","maintainer":"AliVe","license":["SPDX:GPL-2.0-or-later"],"tags":["Colorful","High Contrast","Inspired By","Accessibility"]},{"id":"MustardUI","schema_version":"1.0.0","name":"MustardUI","version":"2026.6.2","tagline":"Easy-to-use UI for human characters","archive_hash":"sha256:b7e3d4c5c5374021267567d3541e69e21fdd9293233a44f494e2d80f18107cc3","archive_size":544375,"archive_url":"https://extensions.blender.org/download/sha256:b7e3d4c5c5374021267567d3541e69e21fdd9293233a44f494e2d80f18107cc3/add-on-mustardui-v2026.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mustardui/","maintainer":"Mustard","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export templates from/to disk"},"tags":["User Interface"]},{"id":"Half_Knife","schema_version":"1.0.0","name":"Half Knife","version":"1.3.85","tagline":"Optimized for fast workflow knife tool for Blender","archive_hash":"sha256:9c03a65b75ae4b8d6b9a3917d4ccd213d005443a56cc38f1519db7a079ab3c83","archive_size":15498,"archive_url":"https://extensions.blender.org/download/sha256:9c03a65b75ae4b8d6b9a3917d4ccd213d005443a56cc38f1519db7a079ab3c83/add-on-half-knife-v1.3.85.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/half-knife/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"node_quick_maths","schema_version":"1.0.0","name":"Node Quick Maths","version":"1.2.2","tagline":"A fast way to make long math chains in node editors","archive_hash":"sha256:c68f02a0e467f315f9693de37ff4a3d2d14b26e01ecb895b95759bb04062ceac","archive_size":22432,"archive_url":"https://extensions.blender.org/download/sha256:c68f02a0e467f315f9693de37ff4a3d2d14b26e01ecb895b95759bb04062ceac/add-on-node-quick-maths-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-quick-maths/","maintainer":"Zeptofine","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Pipeline","User Interface"]},{"id":"easyweight","schema_version":"1.0.0","name":"EasyWeight","version":"1.0.9","tagline":"Weight Painting Workflow Boosters","archive_hash":"sha256:9334b15aef0668f4405b4c94af24da413100ac0090391cfa68669190e2266ee0","archive_size":42626,"archive_url":"https://extensions.blender.org/download/sha256:9334b15aef0668f4405b4c94af24da413100ac0090391cfa68669190e2266ee0/add-on-easyweight-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easyweight/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"set_smooth_group","schema_version":"1.0.0","name":"Set Smooth Group","version":"1.1.0","tagline":"Simplify setting smooth groups with sharp edges","archive_hash":"sha256:aaf35ea5fe6627cfbf550e508fb4f21de8a87029ec914be59d765fd793b8273b","archive_size":17228,"archive_url":"https://extensions.blender.org/download/sha256:aaf35ea5fe6627cfbf550e508fb4f21de8a87029ec914be59d765fd793b8273b/add-on-set-smooth-group-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/set-smooth-group/","maintainer":"VIktor-Kom","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"toggle_socket_visibility","schema_version":"1.0.0","name":"Toggle Socket Visibility","version":"1.0.0","tagline":"Control which node sockets are visible or not via panel/pop-up","archive_hash":"sha256:948e5bb472ec2fd75345e37139edccd83181925d756a2974a7f22b8beaafe00f","archive_size":7638,"archive_url":"https://extensions.blender.org/download/sha256:948e5bb472ec2fd75345e37139edccd83181925d756a2974a7f22b8beaafe00f/add-on-toggle-socket-visibility-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toggle-socket-visibility/","maintainer":"quackarooni","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"strange_attractors","schema_version":"1.0.0","name":"Strange Attractors","version":"2.1.0","tagline":"Add Strange Attractor curves","archive_hash":"sha256:466827116b5e4e4fa70a1b4d54597f207da22edb8b3eb693d0690df836738e06","archive_size":11456,"archive_url":"https://extensions.blender.org/download/sha256:466827116b5e4e4fa70a1b4d54597f207da22edb8b3eb693d0690df836738e06/add-on-strange-attractors-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/strange-attractors/","maintainer":"7bitretro","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"k_tools_view_sync","schema_version":"1.0.0","name":"K-Tools: Sync | Lock Viewport","version":"2.8.1","tagline":"Sync or Lock multiple viewports at once in real-time","archive_hash":"sha256:160d9135c53d5d5150671ec07ae181eea86b38bec05246b88fce791e08322956","archive_size":64885,"archive_url":"https://extensions.blender.org/download/sha256:160d9135c53d5d5150671ec07ae181eea86b38bec05246b88fce791e08322956/add-on-k-tools-view-sync-v2.8.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-view-sync/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"universal_multi_importer","schema_version":"1.0.0","name":"Universal Multi Importer","version":"2.4.2","tagline":"Batch Import many file formats at once, Batch process them","archive_hash":"sha256:a145cff633db3ece89da10b954898d397c44e9e61c74c392ccea1e801c23d234","archive_size":86464,"archive_url":"https://extensions.blender.org/download/sha256:a145cff633db3ece89da10b954898d397c44e9e61c74c392ccea1e801c23d234/add-on-universal-multi-importer-v2.4.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/universal-multi-importer/","maintainer":"Tilapiatsu","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Files from disk, save presets to disk"},"tags":["Import-Export","Pipeline"]},{"id":"BAM","schema_version":"1.0.0","name":"[BAM] AutoMat","version":"1.2.1","tagline":"Batch creation of materials from textures folder","archive_hash":"sha256:95fb5bf6be46b48fec1273025e31c522a09491b6d7503ab6343ed24bdcb5e649","archive_size":563501,"archive_url":"https://extensions.blender.org/download/sha256:95fb5bf6be46b48fec1273025e31c522a09491b6d7503ab6343ed24bdcb5e649/add-on-bam-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bam/","maintainer":"AlexeyHRDesign","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Import-Export"]},{"id":"action_to_scene_range","schema_version":"1.0.0","name":"Action to Scene Range","version":"1.7.0","tagline":"When switching Actions, automatically set the Scene Frame Range","archive_hash":"sha256:bf2cb52492569624d6f1a1a19f4fde207d1ad6a18eab4e8e548da0bc6ace6ecf","archive_size":2520,"archive_url":"https://extensions.blender.org/download/sha256:bf2cb52492569624d6f1a1a19f4fde207d1ad6a18eab4e8e548da0bc6ace6ecf/add-on-action-to-scene-range-v1.7.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/action-to-scene-range/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"face_set_operators","schema_version":"1.0.0","name":"Face Set Operators","version":"1.0.0","tagline":"Convert sculpt mode attributes into anything you need","archive_hash":"sha256:73cd9f9c8a1eca7c893947165c061ad38e8f7d189a4ef24e65e03f398826f5e6","archive_size":4650,"archive_url":"https://extensions.blender.org/download/sha256:73cd9f9c8a1eca7c893947165c061ad38e8f7d189a4ef24e65e03f398826f5e6/add-on-face-set-operators-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/face-set-operators/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt","Mesh"]},{"id":"my_best_pie_menu_ever","schema_version":"1.0.0","name":"My Best Pie Menu Ever","version":"2.9.1","tagline":"Quick access to the functions you need","archive_hash":"sha256:dc2b09cf7638d2fa82ebf504c9f76fc269978e6fd7d033d2b0a178fd1d727d6c","archive_size":84510,"archive_url":"https://extensions.blender.org/download/sha256:dc2b09cf7638d2fa82ebf504c9f76fc269978e6fd7d033d2b0a178fd1d727d6c/add-on-my-best-pie-menu-ever-v2.9.1.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/my-best-pie-menu-ever/","maintainer":"emptybraces","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FBX from/to disk"},"tags":["3D View","User Interface"]},{"id":"mmd_tools","schema_version":"1.0.0","name":"MMD Tools","version":"4.5.13","tagline":"Utility tools for MMD model editing","archive_hash":"sha256:261cec171596c79fd204f39cc1227ffada3ced73626f27b5f915fd9dda619a69","archive_size":802456,"archive_url":"https://extensions.blender.org/download/sha256:261cec171596c79fd204f39cc1227ffada3ced73626f27b5f915fd9dda619a69/add-on-mmd-tools-v4.5.13.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mmd-tools/","maintainer":"MMD","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export PMX/PMD/VMD/VPD from/to disk"},"tags":["Camera","Import-Export","Material","Mesh","Object","Physics"]},{"id":"bioxelnodes","schema_version":"1.0.0","name":"Bioxel Nodes","version":"2.0.4","tagline":"For scientific volumetric data visualization in Blender","archive_hash":"sha256:79a309c013dea28a7f8e54b9a1772073d19bf57f85b4dce124776543fb6e8e77","archive_size":138587632,"archive_url":"https://extensions.blender.org/download/sha256:79a309c013dea28a7f8e54b9a1772073d19bf57f85b4dce124776543fb6e8e77/add-on-bioxelnodes-v2.0.4-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bioxelnodes/","maintainer":"icrdr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export volume data from/to disk"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Render","Import-Export"]},{"id":"molecularnodes","schema_version":"1.0.0","name":"Molecular Nodes","version":"4.5.12","tagline":"A toolbox for molecular import and animation in Blender","archive_hash":"sha256:d7523ae0233d3ec67215e5101fa60cae9e5ccf60bb224aa49ae1473e6136a3a4","archive_size":132599384,"archive_url":"https://extensions.blender.org/download/sha256:d7523ae0233d3ec67215e5101fa60cae9e5ccf60bb224aa49ae1473e6136a3a4/add-on-molecularnodes-v4.5.12-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/molecularnodes/","maintainer":"bradyajohnston","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk and caching downloads","network":"Downloading structural data from the PDB and AFPDB"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Import-Export"]},{"id":"io_scene_psk_psa","schema_version":"1.0.0","name":"Unreal PSK/PSA (.psk/.psa)","version":"9.1.2","tagline":"Import and export PSK and PSA files used in Unreal Engine","archive_hash":"sha256:a134bfa33f54804b9434149dea11472fc6ea43bb851a72d07df3511c843a4a4d","archive_size":80731,"archive_url":"https://extensions.blender.org/download/sha256:a134bfa33f54804b9434149dea11472fc6ea43bb851a72d07df3511c843a4a4d/add-on-io-scene-psk-psa-v9.1.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/io-scene-psk-psa/","maintainer":"darknation","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write PSK and PSA files from and to disk"},"tags":["Game Engine","Import-Export"]},{"id":"theme_Plasticity","schema_version":"1.0.0","name":"Plasticity","version":"2.0.0","tagline":"Theme Inspired By Plasticity app","archive_hash":"sha256:784ac771c1ae56b9382a09e8b99d5835033b36c095cda9afd28487f0695a0351","archive_size":6395,"archive_url":"https://extensions.blender.org/download/sha256:784ac771c1ae56b9382a09e8b99d5835033b36c095cda9afd28487f0695a0351/theme-theme-plasticity-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-plasticity/","maintainer":"SHEK","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast","Inspired By","Accessibility"]},{"id":"k_tools_visibility_check","schema_version":"1.0.0","name":"Visibility Check","version":"2.5.2","tagline":"Check for mismatched objects in viewport and render view","archive_hash":"sha256:c3af61e03cbe782d82b521d4b2d9eef50c98d6c25ffcb8984f8c8f439fc07913","archive_size":6511,"archive_url":"https://extensions.blender.org/download/sha256:c3af61e03cbe782d82b521d4b2d9eef50c98d6c25ffcb8984f8c8f439fc07913/add-on-k-tools-visibility-check-v2.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-visibility-check/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Render"]},{"id":"open_stage_blender_dmx","schema_version":"1.0.0","name":"DMX","version":"2.2.4","tagline":"Visualization & programming with GDTF&MVR","archive_hash":"sha256:96cd0cc92a446b37317170bbddd25bd6ec916c154ab3d3c9e14103fff8c79ce8","archive_size":2064675,"archive_url":"https://extensions.blender.org/download/sha256:96cd0cc92a446b37317170bbddd25bd6ec916c154ab3d3c9e14103fff8c79ce8/add-on-open-stage-blender-dmx-v2.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/open-stage-blender-dmx/","maintainer":"Sunova","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import GDTF devices. Import/Export MVR scenes and project data"}},{"id":"maze_generator","schema_version":"1.0.0","name":"Maze Generator","version":"0.3.1","tagline":"A Maze generator extension for Blender","archive_hash":"sha256:dd7cc3f38fb80df5ffafb6e3e70221469051bfcded84c78a784c320c0e3d15d1","archive_size":28418,"archive_url":"https://extensions.blender.org/download/sha256:dd7cc3f38fb80df5ffafb6e3e70221469051bfcded84c78a784c320c0e3d15d1/add-on-maze-generator-v0.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/maze-generator/","maintainer":"Leeroy-Majors","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"node_group_presets","schema_version":"1.0.0","name":"Node Group Presets","version":"0.8.0","tagline":"Save Node Group values as presets","archive_hash":"sha256:201454f4c0a32eed158502d13a0887141aaf4494647a22b4264802f94272b5a0","archive_size":27634,"archive_url":"https://extensions.blender.org/download/sha256:201454f4c0a32eed158502d13a0887141aaf4494647a22b4264802f94272b5a0/add-on-node-group-presets-v0.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-group-presets/","maintainer":"juaum","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copy/paste presets between nodedroups and across files"},"tags":["Geometry Nodes","Material","Node"]},{"id":"booltron","schema_version":"1.0.0","name":"Booltron","version":"3.3.3","tagline":"Super add-on for superfast booleans","archive_hash":"sha256:740c5b4965541f1e391be9d84a73aed98c28ae2e0b6a7db3a7f00f12c942661f","archive_size":48949,"archive_url":"https://extensions.blender.org/download/sha256:740c5b4965541f1e391be9d84a73aed98c28ae2e0b6a7db3a7f00f12c942661f/add-on-booltron-v3.3.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/booltron/","maintainer":"MikhailRachinskiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Object"]},{"id":"Dark_Pro","schema_version":"1.0.0","name":"Dark Pro","version":"2.0.3","tagline":"Just a little darker","archive_hash":"sha256:b5b0c094bcc136c5be57cf7cd413757cdc0e5673f865ab23574069dad94a5203","archive_size":5421,"archive_url":"https://extensions.blender.org/download/sha256:b5b0c094bcc136c5be57cf7cd413757cdc0e5673f865ab23574069dad94a5203/theme-dark-pro-v2.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-pro/","maintainer":"Mahdi.Shalchian","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"quick_groups","schema_version":"1.0.0","name":"Quick Groups (Instances)","version":"1.0.3","tagline":"Group objects with Ctrl+G using instances","archive_hash":"sha256:f9da4f1267c480b5fd252e2d61573e1ebbd3e4fafa723547b93f032d7292d01c","archive_size":6862,"archive_url":"https://extensions.blender.org/download/sha256:f9da4f1267c480b5fd252e2d61573e1ebbd3e4fafa723547b93f032d7292d01c/add-on-quick-groups-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-groups/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling"]},{"id":"t3d_gn_presets","schema_version":"1.0.0","name":"T3D GN Presets","version":"1.6.0","tagline":"A versatile collection of useful node groups for Geometry Nodes","archive_hash":"sha256:1b5e343d3b335b85caa7be2b9410b8218b777546638cdc5bce6e9f6e774e71cd","archive_size":835788,"archive_url":"https://extensions.blender.org/download/sha256:1b5e343d3b335b85caa7be2b9410b8218b777546638cdc5bce6e9f6e774e71cd/add-on-t3d-gn-presets-v1.6.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/t3d-gn-presets/","maintainer":"Tams_3d","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Append node-groups from source file"},"tags":["Geometry Nodes"]},{"id":"per_camera_resolution","schema_version":"1.0.0","name":"Per-Camera Resolution","version":"2.3.2","tagline":"Every camera should have its resolution","archive_hash":"sha256:48cecdfc004417c6d0dee452657d0822dd96ea3897e159d5544d9819f3e54b8f","archive_size":11199,"archive_url":"https://extensions.blender.org/download/sha256:48cecdfc004417c6d0dee452657d0822dd96ea3897e159d5544d9819f3e54b8f/add-on-per-camera-resolution-v2.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/per-camera-resolution/","maintainer":"pioverfour","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","Camera"]},{"id":"synchronize_workspaces","schema_version":"1.0.0","name":"Synchronize Workspaces","version":"1.14.0","tagline":"Synchronize 3D views between workspaces","archive_hash":"sha256:156bb74e7c8e77449d9da5dabb71ef00ad0286447e24968c41173e821ee714b5","archive_size":3974,"archive_url":"https://extensions.blender.org/download/sha256:156bb74e7c8e77449d9da5dabb71ef00ad0286447e24968c41173e821ee714b5/add-on-synchronize-workspaces-v1.14.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/synchronize-workspaces/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"grease_pencil_tool_wheel","schema_version":"1.0.0","name":"GP Tool Wheel","version":"1.0.11","tagline":"Extended pie menu for selecting Grease Pencil tools quickly","archive_hash":"sha256:c6c1c53b5f17791958cb92a02f38e9cbaf9e578226d0a615e06eeb8a3cb42ba6","archive_size":206402,"archive_url":"https://extensions.blender.org/download/sha256:c6c1c53b5f17791958cb92a02f38e9cbaf9e578226d0a615e06eeb8a3cb42ba6/add-on-grease-pencil-tool-wheel-v1.0.11.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grease-pencil-tool-wheel/","maintainer":"SietseB","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Grease Pencil"]},{"id":"commotion","schema_version":"1.0.0","name":"Commotion","version":"2.5.0","tagline":"Animation offset tools for motion graphics","archive_hash":"sha256:9554d7ccc6211c666991b03cd72b354173495dc8977320a70874694bf25179eb","archive_size":27868,"archive_url":"https://extensions.blender.org/download/sha256:9554d7ccc6211c666991b03cd72b354173495dc8977320a70874694bf25179eb/add-on-commotion-v2.5.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/commotion/","maintainer":"MikhailRachinskiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"find_bad_tracks","schema_version":"1.0.0","name":"Find Bad Tracks","version":"1.0.2","tagline":"Highlight motion tracks that move in suspicious directions","archive_hash":"sha256:b9f5373c3ca5119c4f14b9c11f0e92f2a29ff908bbd265803fef2a9d705c97b8","archive_size":25067,"archive_url":"https://extensions.blender.org/download/sha256:b9f5373c3ca5119c4f14b9c11f0e92f2a29ff908bbd265803fef2a9d705c97b8/add-on-find-bad-tracks-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/find-bad-tracks/","maintainer":"Walles","license":["SPDX:GPL-2.0-or-later"],"tags":["Tracking"]},{"id":"cloudrig","schema_version":"1.0.0","name":"CloudRig","version":"2.2.24","tagline":"Rig Generation & Rigging Workflow Tools","archive_hash":"sha256:73b0aae42d594b88520d49a54532aa8ad6ac0296cc1eb178f76ad0f08dbbf97e","archive_size":3402855,"archive_url":"https://extensions.blender.org/download/sha256:73b0aae42d594b88520d49a54532aa8ad6ac0296cc1eb178f76ad0f08dbbf97e/add-on-cloudrig-v2.2.24.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/cloudrig/","maintainer":"Blender Studio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load widgets/metarigs/preferences from disk","clipboard":"Copy/paste Bone Collections between armatures"},"tags":["Rigging"]},{"id":"theme_drcl","schema_version":"1.0.0","name":"drcl","version":"1.0.3","tagline":"A variation of Dracula dark theme","archive_hash":"sha256:bcb32cf5c1a0bafffdb7e2223b1f5eeedf272750227318ac65d0596748e00040","archive_size":4955,"archive_url":"https://extensions.blender.org/download/sha256:bcb32cf5c1a0bafffdb7e2223b1f5eeedf272750227318ac65d0596748e00040/theme-theme-drcl-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-drcl/","maintainer":"Sereda","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"YB_Animator_Tool","schema_version":"1.0.0","name":"YB Animator Tool","version":"1.1.3","tagline":"export grease pencil layers as keyframes and CSV","archive_hash":"sha256:7e06d55ad957752bfe87476860bd07b1d2c5609974f8a2e993975eb278768c1b","archive_size":5541,"archive_url":"https://extensions.blender.org/download/sha256:7e06d55ad957752bfe87476860bd07b1d2c5609974f8a2e993975eb278768c1b/add-on-yb-animator-tool-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/yb-animator-tool/","maintainer":"YB_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Output CSV and sequence diagram"},"tags":["Grease Pencil","Animation","User Interface"]},{"id":"keymesh","schema_version":"1.0.0","name":"Keymesh","version":"2.3.2","tagline":"Create stop-motion animations by sculpting frame-by-frame","archive_hash":"sha256:aa56eec60eee3053668594b2daf513e792d464a7593b3af6a90068f5a607ed2a","archive_size":42763,"archive_url":"https://extensions.blender.org/download/sha256:aa56eec60eee3053668594b2daf513e792d464a7593b3af6a90068f5a607ed2a/add-on-keymesh-v2.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keymesh/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Store generated pose preview images and/or load them from disk"},"tags":["Animation","Sculpt","Mesh"]},{"id":"node_annotator","schema_version":"1.0.0","name":"Node Annotator","version":"0.4.3","tagline":"Easily create good documentation of your node trees","archive_hash":"sha256:e283048c97db794f392755c44604cb95655cd73fabe7cb3f29add5d440b40411","archive_size":28712,"archive_url":"https://extensions.blender.org/download/sha256:e283048c97db794f392755c44604cb95655cd73fabe7cb3f29add5d440b40411/add-on-node-annotator-v0.4.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-annotator/","maintainer":"FrankFirsching","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"theme_ps","schema_version":"1.0.0","name":"PS","version":"1.1.3","tagline":"Adobe Photoshop inspired light theme","archive_hash":"sha256:1b69c3dabcffcdd76b87ed15724dd2db995821823b72bdea8946c0709854cbc2","archive_size":5663,"archive_url":"https://extensions.blender.org/download/sha256:1b69c3dabcffcdd76b87ed15724dd2db995821823b72bdea8946c0709854cbc2/theme-theme-ps-v1.1.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-ps/","maintainer":"Sereda","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By","Light"]},{"id":"toggle_language","schema_version":"1.0.0","name":"Toggle Language","version":"1.6.2","tagline":"One click to toggle UI between two languages","archive_hash":"sha256:67ea3fe811d72c81ad19bd1540b4cb0374446e69ae18a77b01a665d27f2da3fe","archive_size":31213,"archive_url":"https://extensions.blender.org/download/sha256:67ea3fe811d72c81ad19bd1540b4cb0374446e69ae18a77b01a665d27f2da3fe/add-on-toggle-language-v1.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toggle-language/","maintainer":"del1a8dc50179276c0","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"quick_lighting_environment","schema_version":"1.0.0","name":"QLE (Quick Lighting Environment)","version":"1.8.0","tagline":"Adds a Basic Lighting Setup to Your Blender Scene","archive_hash":"sha256:561863f28ac7d0df9e815a800796efaca126ad78cd23741ac28807f262031883","archive_size":105787,"archive_url":"https://extensions.blender.org/download/sha256:561863f28ac7d0df9e815a800796efaca126ad78cd23741ac28807f262031883/add-on-quick-lighting-environment-v1.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-lighting-environment/","maintainer":"don1138","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"SB_path_actions","schema_version":"1.0.0","name":"Path Actions","version":"2.8.0","tagline":"Open blend folder in OS explorer, and more","archive_hash":"sha256:91c1735d381921e54a17fedd9b81dc79c77735d9b4feb7e2b12df75a2ddd8d53","archive_size":42828,"archive_url":"https://extensions.blender.org/download/sha256:91c1735d381921e54a17fedd9b81dc79c77735d9b4feb7e2b12df75a2ddd8d53/add-on-sb-path-actions-v2.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sb-path-actions/","maintainer":"SamuelBernou","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Open folders, List Blend files","clipboard":"Copy path to files"},"tags":["System","Development"]},{"id":"print3d_toolbox","schema_version":"1.0.0","name":"3D Print Toolbox","version":"1.3.5","tagline":"Utilities for 3D printing","archive_hash":"sha256:0cb51b20599c3f69a2168e753b0e69c8577289ab198ae7c1498559f0e8d545c2","archive_size":148598,"archive_url":"https://extensions.blender.org/download/sha256:0cb51b20599c3f69a2168e753b0e69c8577289ab198ae7c1498559f0e8d545c2/add-on-print3d-toolbox-v1.3.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/print3d-toolbox/","maintainer":"MikhailRachinskiy","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export STL, PLY, OBJ files"},"tags":["Mesh"]},{"id":"green_olive","schema_version":"1.0.0","name":"Green Olive","version":"1.0.3","tagline":"A fine-tuned dark green theme","archive_hash":"sha256:c7544cc6ceb987628e3d7cbf49ac394cb9da92228673cebb1664aa2f0beb8cac","archive_size":5774,"archive_url":"https://extensions.blender.org/download/sha256:c7544cc6ceb987628e3d7cbf49ac394cb9da92228673cebb1664aa2f0beb8cac/theme-green-olive-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/green-olive/","maintainer":"Liuuzaki","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Accessibility"]},{"id":"fls_blcn","schema_version":"1.0.0","name":"Fast Language Switch","version":"0.0.5","tagline":"Fast change the language of the interface","archive_hash":"sha256:02aecb087b32a2863ac24729708022975fe431cf9a693c30ae706767758229e9","archive_size":2475,"archive_url":"https://extensions.blender.org/download/sha256:02aecb087b32a2863ac24729708022975fe431cf9a693c30ae706767758229e9/add-on-fls-blcn-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fls-blcn/","maintainer":"Kk","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"theme_xsi","schema_version":"1.0.0","name":"Softimage XSI","version":"5.0.0","tagline":"Community-made theme inspired by Softimage XSI","archive_hash":"sha256:ec047fc1185a8292f84a08d9a69a0d71483f9c53c88b74222dbf4449f6f10443","archive_size":6273,"archive_url":"https://extensions.blender.org/download/sha256:ec047fc1185a8292f84a08d9a69a0d71483f9c53c88b74222dbf4449f6f10443/theme-theme-xsi-v5.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-xsi/","maintainer":"RobWu","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By"]},{"id":"theme_white","schema_version":"1.0.0","name":"White","version":"1.0.1","tagline":"Community-made theme","archive_hash":"sha256:1f18c2b22d2a8f1b1ad3113eb3f972ef708bdc7a3e494df61779bf5d7d0689a0","archive_size":6242,"archive_url":"https://extensions.blender.org/download/sha256:1f18c2b22d2a8f1b1ad3113eb3f972ef708bdc7a3e494df61779bf5d7d0689a0/theme-theme-white-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-white/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","High Contrast"]},{"id":"theme_print_friendly","schema_version":"1.0.0","name":"Print Friendly","version":"2.0.0","tagline":"Community-made theme optimized for printing","archive_hash":"sha256:ec1e53309b01b0d1fd81a4aa72bd636ff411402fe9b56eb4126ef440f5f3ad24","archive_size":5585,"archive_url":"https://extensions.blender.org/download/sha256:ec1e53309b01b0d1fd81a4aa72bd636ff411402fe9b56eb4126ef440f5f3ad24/theme-theme-print-friendly-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-print-friendly/","maintainer":"JasonvanGumster","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","High Contrast"]},{"id":"theme_minimal_dark","schema_version":"1.0.0","name":"Minimal Dark","version":"3.1.2","tagline":"A flat dark theme for Blender","archive_hash":"sha256:b5814ca544a39e7c0b19d07523555e235d0efe856c74a4a912e784ecfaef419a","archive_size":7358,"archive_url":"https://extensions.blender.org/download/sha256:b5814ca544a39e7c0b19d07523555e235d0efe856c74a4a912e784ecfaef419a/theme-theme-minimal-dark-v3.1.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-minimal-dark/","maintainer":"jlampel","license":["SPDX:GPL-2.0-or-later"]},{"id":"theme_maya","schema_version":"1.0.0","name":"Maya","version":"2.0.0","tagline":"Community-made theme inspired by Maya","archive_hash":"sha256:6a6c6eac7b9aaf180bf8583d4c1d2f5b27e01a0581a5fa9782b9abd4a7c4ee1a","archive_size":5859,"archive_url":"https://extensions.blender.org/download/sha256:6a6c6eac7b9aaf180bf8583d4c1d2f5b27e01a0581a5fa9782b9abd4a7c4ee1a/theme-theme-maya-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-maya/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"theme_deep_grey","schema_version":"1.0.0","name":"Deep Grey","version":"2.0.5","tagline":"A comfortable medium dark theme for Blender","archive_hash":"sha256:a2c52a73fab56be425cd592f735d2909382ec53948b5da8b54f09e491870e7e6","archive_size":5595,"archive_url":"https://extensions.blender.org/download/sha256:a2c52a73fab56be425cd592f735d2909382ec53948b5da8b54f09e491870e7e6/theme-theme-deep-grey-v2.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-deep-grey/","maintainer":"TheRedWaxPolice","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"skinify_rig","schema_version":"1.0.0","name":"Skinify Rig","version":"0.11.2","tagline":"Creates a mesh object from selected bones","archive_hash":"sha256:26babe1f712c53b6e3a9de6da8a81a768548ed197d41716ed643a25469e3cf61","archive_size":6450,"archive_url":"https://extensions.blender.org/download/sha256:26babe1f712c53b6e3a9de6da8a81a768548ed197d41716ed643a25469e3cf61/add-on-skinify-rig-v0.11.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/skinify-rig/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"f2","schema_version":"1.0.0","name":"F2","version":"1.8.5","tagline":"Extends the 'Make Edge/Face' functionality","archive_hash":"sha256:dc8f19637a61c332b3eb937a6b86e2363511cbb29a9a22ea8571fe7d924ab05c","archive_size":5505,"archive_url":"https://extensions.blender.org/download/sha256:dc8f19637a61c332b3eb937a6b86e2363511cbb29a9a22ea8571fe7d924ab05c/add-on-f2-v1.8.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/f2/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"navigation","schema_version":"1.0.0","name":"3D Navigation","version":"1.3.0","tagline":"Navigate the 3D Viewport from the Sidebar","archive_hash":"sha256:4dab907f3eddb4ba96dfbb5c97f6f525e9cd0f4bfd45d9a21717a728954bf8ed","archive_size":3238,"archive_url":"https://extensions.blender.org/download/sha256:4dab907f3eddb4ba96dfbb5c97f6f525e9cd0f4bfd45d9a21717a728954bf8ed/add-on-navigation-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/navigation/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"amaranth","schema_version":"1.0.0","name":"Amaranth","version":"1.0.31","tagline":"A collection of tools to improve productivity","archive_hash":"sha256:ff9e36d3dbd9c556062449fb6943c55b0753a191a6a4f60a70a2d799411a28f3","archive_size":46492,"archive_url":"https://extensions.blender.org/download/sha256:ff9e36d3dbd9c556062449fb6943c55b0753a191a6a4f60a70a2d799411a28f3/add-on-amaranth-v1.0.31.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/amaranth/","maintainer":"pablovazquez","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Render","Compositing","User Interface","Scene","Lighting"]},{"id":"math_vis_console","schema_version":"1.0.0","name":"Math Vis (Console)","version":"0.2.2","tagline":"Display console defined mathutils variables in the 3D view","archive_hash":"sha256:72e30386a06a1b15500488a709951b085c18ff02bf95d07f126ac3e9ea3d470a","archive_size":6507,"archive_url":"https://extensions.blender.org/download/sha256:72e30386a06a1b15500488a709951b085c18ff02bf95d07f126ac3e9ea3d470a/add-on-math-vis-console-v0.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/math-vis-console/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View"]},{"id":"auto_mirror","schema_version":"1.0.0","name":"Auto Mirror","version":"2.5.4","tagline":"Super fast cutting and mirroring for mesh","archive_hash":"sha256:68c7785f641c91905b07b8122af6a0147834e9a7b77285966253b1f770f30cc7","archive_size":3571,"archive_url":"https://extensions.blender.org/download/sha256:68c7785f641c91905b07b8122af6a0147834e9a7b77285966253b1f770f30cc7/add-on-auto-mirror-v2.5.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-mirror/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"boltfactory","schema_version":"1.0.0","name":"BoltFactory","version":"0.7.1","tagline":"Add a bolt or nut","archive_hash":"sha256:b75f6f946b5c29f7a2122737da891917cd9c862e85b37daef82c662a348223b3","archive_size":35319,"archive_url":"https://extensions.blender.org/download/sha256:b75f6f946b5c29f7a2122737da891917cd9c862e85b37daef82c662a348223b3/add-on-boltfactory-v0.7.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/boltfactory/","maintainer":"Bolt Factory","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"snap_utilities_line","schema_version":"1.0.0","name":"Snap Line Tool","version":"6.8.1","tagline":"Extends Blender Snap controls","archive_hash":"sha256:8098ef55983b4192e2e711eb1c5542e93bb65996f973b2f5173bdd01093f1dbc","archive_size":32147,"archive_url":"https://extensions.blender.org/download/sha256:8098ef55983b4192e2e711eb1c5542e93bb65996f973b2f5173bdd01093f1dbc/add-on-snap-utilities-line-v6.8.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/snap-utilities-line/","maintainer":"mano-wii","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"looptools","schema_version":"1.0.0","name":"LoopTools","version":"4.7.7","tagline":"Mesh modelling toolkit. Several tools to aid modelling","archive_hash":"sha256:ff1ca3b3fff73094379da8b1fa2c1acbc9d88d26b7dfc73bb9de5941a6b50108","archive_size":30534,"archive_url":"https://extensions.blender.org/download/sha256:ff1ca3b3fff73094379da8b1fa2c1acbc9d88d26b7dfc73bb9de5941a6b50108/add-on-looptools-v4.7.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/looptools/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"node_arrange","schema_version":"1.0.0","name":"Node Arrange","version":"1.12.1","tagline":"Arrange node trees with one click","archive_hash":"sha256:ccce3db24525e89ab7c019a550bba1adbbe6bb5ccfc78a1957c484b8bd8d6c06","archive_size":1756301,"archive_url":"https://extensions.blender.org/download/sha256:ccce3db24525e89ab7c019a550bba1adbbe6bb5ccfc78a1957c484b8bd8d6c06/add-on-node-arrange-v1.12.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-arrange/","maintainer":"Leonardo-Pike-Excell","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"antlandscape","schema_version":"1.0.0","name":"A.N.T.Landscape","version":"0.2.0","tagline":"Another Noise Tool: Landscape and Displace","archive_hash":"sha256:230571bc14c50952f3af99b70fdb365cf0cee503382975dc38149407a5a4c8c0","archive_size":60899,"archive_url":"https://extensions.blender.org/download/sha256:230571bc14c50952f3af99b70fdb365cf0cee503382975dc38149407a5a4c8c0/add-on-antlandscape-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/antlandscape/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"material_library","schema_version":"1.0.0","name":"Material Library","version":"0.6.0","tagline":"Material Library VX","archive_hash":"sha256:baf00c107c5f938e6401cc9d30ab2226b2e1a9f8e92607335d19f1e4492e8019","archive_size":594898,"archive_url":"https://extensions.blender.org/download/sha256:baf00c107c5f938e6401cc9d30ab2226b2e1a9f8e92607335d19f1e4492e8019/add-on-material-library-v0.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/material-library/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Material"]},{"id":"copy_attributes_menu","schema_version":"1.0.0","name":"Copy Attributes Menu","version":"0.6.3","tagline":"Copy Attributes Menu","archive_hash":"sha256:990bac36be4c6a39c4506c84a689c5ec45e1a4b43995542cd0b058663f190478","archive_size":8270,"archive_url":"https://extensions.blender.org/download/sha256:990bac36be4c6a39c4506c84a689c5ec45e1a4b43995542cd0b058663f190478/add-on-copy-attributes-menu-v0.6.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-attributes-menu/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"material_utilities","schema_version":"1.0.0","name":"Material Utilities","version":"2.2.3","tagline":"Menu of material tools (assign, select..) in the 3D View","archive_hash":"sha256:35e3f516724b522930ca2defb78c8ef38949949aa7cc37b64be2d3522431b739","archive_size":16895,"archive_url":"https://extensions.blender.org/download/sha256:35e3f516724b522930ca2defb78c8ef38949949aa7cc37b64be2d3522431b739/add-on-material-utilities-v2.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/material-utilities/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Material"]},{"id":"edit_linked_library","schema_version":"1.0.0","name":"Edit Linked Library","version":"0.9.2","tagline":"Allows editing of objects, collections, and node groups lin . . ","archive_hash":"sha256:db6827e091da07209ffcff97ce271de8af2a8823619d25626472f6bf65ef5234","archive_size":3575,"archive_url":"https://extensions.blender.org/download/sha256:db6827e091da07209ffcff97ce271de8af2a8823619d25626472f6bf65ef5234/add-on-edit-linked-library-v0.9.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-linked-library/","maintainer":"JasonvanGumster","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"simplify_curves_plus","schema_version":"1.0.0","name":"Simplify Curves+","version":"1.1.3","tagline":"Simplify Curves: 3dview, Dopesheet, Graph","archive_hash":"sha256:57734eb8248818f3db18c2b934a9470b6ccd640066962c38918868ec93446851","archive_size":5943,"archive_url":"https://extensions.blender.org/download/sha256:57734eb8248818f3db18c2b934a9470b6ccd640066962c38918868ec93446851/add-on-simplify-curves-plus-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simplify-curves-plus/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"modifier_tools","schema_version":"1.0.0","name":"Modifier Tools","version":"0.2.7","tagline":"Modifiers Specials Show/Hide/Apply Selected","archive_hash":"sha256:68a98d3c992800dbb76d580835be0d4c023696d8fdcb41e590ec0c367876442a","archive_size":2718,"archive_url":"https://extensions.blender.org/download/sha256:68a98d3c992800dbb76d580835be0d4c023696d8fdcb41e590ec0c367876442a/add-on-modifier-tools-v0.2.7.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/modifier-tools/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"freestyle_svg_exporter","schema_version":"1.0.0","name":"Freestyle SVG Exporter","version":"1.0.0","tagline":"Exports Freestyle's stylized edges in SVG format","archive_hash":"sha256:d72191a8ca5847a38e6114d6e66aa07573191ef76b14bea192efe2759921b60b","archive_size":7691,"archive_url":"https://extensions.blender.org/download/sha256:d72191a8ca5847a38e6114d6e66aa07573191ef76b14bea192efe2759921b60b/add-on-freestyle-svg-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/freestyle-svg-exporter/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"extra_mesh_objects","schema_version":"1.0.0","name":"Extra Mesh Objects","version":"0.4.1","tagline":"Add extra mesh object types","archive_hash":"sha256:c85ce4bb2820d5af26b4dad66bf1a0fdeb4bfeffc668c5e4f098f1e416ed434b","archive_size":133442,"archive_url":"https://extensions.blender.org/download/sha256:c85ce4bb2820d5af26b4dad66bf1a0fdeb4bfeffc668c5e4f098f1e416ed434b/add-on-extra-mesh-objects-v0.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/extra-mesh-objects/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"export_paper_model","schema_version":"1.0.0","name":"Export Paper Model","version":"1.4.2","tagline":"Export printable net of a Mesh object","archive_hash":"sha256:0d49e1413b624fe9e86c1da10824dc8c1c28713a72ff72530550812dfbc56cba","archive_size":35606,"archive_url":"https://extensions.blender.org/download/sha256:0d49e1413b624fe9e86c1da10824dc8c1c28713a72ff72530550812dfbc56cba/add-on-export-paper-model-v1.4.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/export-paper-model/","maintainer":"AdamDominec","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export files to disk"},"tags":["Import-Export"]},{"id":"precision_drawing_tools_pdt","schema_version":"1.0.0","name":"Precision Drawing Tools (PDT)","version":"1.5.3","tagline":"Precision Drawing Tools for Accurate Modelling","archive_hash":"sha256:8e64e4ababc06e1a843eb72dd126c422bfb1117934dd4bdc480c2c6a76e37266","archive_size":49495,"archive_url":"https://extensions.blender.org/download/sha256:8e64e4ababc06e1a843eb72dd126c422bfb1117934dd4bdc480c2c6a76e37266/add-on-precision-drawing-tools-pdt-v1.5.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/precision-drawing-tools-pdt/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View"]},{"id":"extra_curve_objectes","schema_version":"1.0.0","name":"Extra Curve Objects","version":"0.2.0","tagline":"Add extra curve object types","archive_hash":"sha256:4ca91ce5563d094694b2c7f1fc9acece8b5ba8f5dd017a49f080e9cfa5553909","archive_size":52956,"archive_url":"https://extensions.blender.org/download/sha256:4ca91ce5563d094694b2c7f1fc9acece8b5ba8f5dd017a49f080e9cfa5553909/add-on-extra-curve-objectes-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/extra-curve-objectes/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"node_presets","schema_version":"1.0.0","name":"Node Presets","version":"1.1.0","tagline":"Add node groups directly to the node editors","archive_hash":"sha256:0b875c6c78c02bf6ab79cf82310a587cfc8dfe790aec158102a35dd22f1c8c04","archive_size":2398,"archive_url":"https://extensions.blender.org/download/sha256:0b875c6c78c02bf6ab79cf82310a587cfc8dfe790aec158102a35dd22f1c8c04/add-on-node-presets-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-presets/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Node"]},{"id":"copy_render_settings","schema_version":"1.0.0","name":"Copy Render Settings","version":"2.0.0","tagline":"Allows to copy a selection of render settings from current . . ","archive_hash":"sha256:dd7074aaddeb16d228f19ce98d3a45f641db108453af72ebb0e43c225bb162e0","archive_size":7786,"archive_url":"https://extensions.blender.org/download/sha256:dd7074aaddeb16d228f19ce98d3a45f641db108453af72ebb0e43c225bb162e0/add-on-copy-render-settings-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-render-settings/","maintainer":"mont29","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"tinycad_mesh_tools","schema_version":"1.0.0","name":"tinyCAD Mesh tools","version":"1.3.3","tagline":"tinyCAD Mesh tools Add-on","archive_hash":"sha256:a725746d79502e6519273f3b9d7a54f0350e15f6c391c36fc9c1288f75070bd6","archive_size":37134,"archive_url":"https://extensions.blender.org/download/sha256:a725746d79502e6519273f3b9d7a54f0350e15f6c391c36fc9c1288f75070bd6/add-on-tinycad-mesh-tools-v1.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tinycad-mesh-tools/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"collection_manager","schema_version":"1.0.0","name":"Collection Manager","version":"2.24.12","tagline":"Manage collections and their objects","archive_hash":"sha256:623eca06047acc9a548bb1a58b3eed2ab4357524826bfa2da8a95ace2c4f569a","archive_size":42507,"archive_url":"https://extensions.blender.org/download/sha256:623eca06047acc9a548bb1a58b3eed2ab4357524826bfa2da8a95ace2c4f569a/add-on-collection-manager-v2.24.12.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/collection-manager/","maintainer":"Imaginer","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"autodesk_3ds_format","schema_version":"1.0.0","name":"Autodesk 3D Studio (.3ds)","version":"3.0.1","tagline":"Import-Export 3DS scenes, objects, cameras, lights & animations","archive_hash":"sha256:3a9fad1b399b835401702b4d8ab2cff1bf818ce91299e105bc9e668b7e93e0d9","archive_size":208325,"archive_url":"https://extensions.blender.org/download/sha256:3a9fad1b399b835401702b4d8ab2cff1bf818ce91299e105bc9e668b7e93e0d9/add-on-autodesk-3ds-format-v3.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/autodesk-3ds-format/","maintainer":"NRGSille","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import-Export Autodesk 3DS files"},"tags":["Import-Export","Scene","Object","Camera","Lighting","Animation"]},{"id":"storypencil_storyboard_tools","schema_version":"1.0.0","name":"Storypencil - Storyboard Tools","version":"1.2.0","tagline":"Storyboard tools","archive_hash":"sha256:70b1115a622a4e7d5f29998a7c1acd7f9c1df2f384be025fd2b54e3d1ff9cac6","archive_size":20608,"archive_url":"https://extensions.blender.org/download/sha256:70b1115a622a4e7d5f29998a7c1acd7f9c1df2f384be025fd2b54e3d1ff9cac6/add-on-storypencil-storyboard-tools-v1.2.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/storypencil-storyboard-tools/","maintainer":"antoniov","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"object_color_rules","schema_version":"1.0.0","name":"Object Color Rules","version":"0.0.2","tagline":"Rules for assigning object color (for object & wireframe co . . ","archive_hash":"sha256:e23968a37905a932db8875ef9c9f3d29ca7af69ec2e87d4483ae54cb809d7cd5","archive_size":4057,"archive_url":"https://extensions.blender.org/download/sha256:e23968a37905a932db8875ef9c9f3d29ca7af69ec2e87d4483ae54cb809d7cd5/add-on-object-color-rules-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/object-color-rules/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"stored_views","schema_version":"1.0.0","name":"Stored Views","version":"0.4.0","tagline":"Save and restore views, pov, layers & display configs","archive_hash":"sha256:cec382a11ded631ee31b410725db78fe72e82c377a6077ee9bb7b5af1485e5f0","archive_size":24199,"archive_url":"https://extensions.blender.org/download/sha256:cec382a11ded631ee31b410725db78fe72e82c377a6077ee9bb7b5af1485e5f0/add-on-stored-views-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stored-views/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory where it stores/reads view presets"},"tags":["3D View"]},{"id":"cell_fracture","schema_version":"1.0.0","name":"Cell Fracture","version":"0.2.1","tagline":"Fractured Object Creation","archive_hash":"sha256:878bbd46e0c735da689101aeed9ebe99f18c0d8d0cbd2e9e17ed8cda6b264fb2","archive_size":9722,"archive_url":"https://extensions.blender.org/download/sha256:878bbd46e0c735da689101aeed9ebe99f18c0d8d0cbd2e9e17ed8cda6b264fb2/add-on-cell-fracture-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cell-fracture/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"import_autocad_dxf_format_dxf","schema_version":"1.0.0","name":"Import AutoCAD DXF Format (.dxf)","version":"0.9.10","tagline":"Import files in the Autocad DXF format (.dxf)","archive_hash":"sha256:bc82f6498e92bbcb637c330f2ed9df431fd193303ddd1fec88994c8e0d1924f3","archive_size":57092,"archive_url":"https://extensions.blender.org/download/sha256:bc82f6498e92bbcb637c330f2ed9df431fd193303ddd1fec88994c8e0d1924f3/add-on-import-autocad-dxf-format-dxf-v0.9.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-autocad-dxf-format-dxf/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory with .dxf files"},"tags":["Import-Export"]},{"id":"bool_tool","schema_version":"1.0.0","name":"Bool Tool","version":"2.1.0","tagline":"Quick Boolean operators and tools for hard surface modeling","archive_hash":"sha256:d3a282db25925d115dd1a7638aa28116f2f9198423b0afb6179e8127d59c06e1","archive_size":173035,"archive_url":"https://extensions.blender.org/download/sha256:d3a282db25925d115dd1a7638aa28116f2f9198423b0afb6179e8127d59c06e1/add-on-bool-tool-v2.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/bool-tool/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Object"]},{"id":"vdm_brush_baker","schema_version":"1.0.0","name":"VDM Brush Baker","version":"1.0.6","tagline":"Bake vector displacement brushes easily from a plane","archive_hash":"sha256:b704f4dca21c2e929b559d99896c18a373b0599a6ca11b45856d5106ec4d6419","archive_size":5781,"archive_url":"https://extensions.blender.org/download/sha256:b704f4dca21c2e929b559d99896c18a373b0599a6ca11b45856d5106ec4d6419/add-on-vdm-brush-baker-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vdm-brush-baker/","maintainer":"robin.hohni","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Add-on saves textures to disk"},"tags":["Bake","Sculpt"]},{"id":"add_camera_rigs","schema_version":"1.0.0","name":"Add Camera Rigs","version":"1.8.2","tagline":"Adds a Camera Rig with UI","archive_hash":"sha256:b06aa8048718bbea463fc430694b735fd69b934bf8811a02f6fd17d18a7c1f90","archive_size":13706,"archive_url":"https://extensions.blender.org/download/sha256:b06aa8048718bbea463fc430694b735fd69b934bf8811a02f6fd17d18a7c1f90/add-on-add-camera-rigs-v1.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-camera-rigs/","maintainer":"WayneDixon","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"ivygen","schema_version":"1.0.0","name":"IvyGen","version":"0.1.5","tagline":"Adds generated ivy to a mesh object starting at the 3D cursor","archive_hash":"sha256:7e60967a11cabacb9bca0128e65dcfb96cec8794a934bc7dc2e353ae720cff98","archive_size":7172,"archive_url":"https://extensions.blender.org/download/sha256:7e60967a11cabacb9bca0128e65dcfb96cec8794a934bc7dc2e353ae720cff98/add-on-ivygen-v0.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ivygen/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"measureit","schema_version":"1.0.0","name":"MeasureIt","version":"1.8.4","tagline":"Tools for measuring objects","archive_hash":"sha256:85b1836d97e5c2f0311afdf45cf9fd3cefa71bade074963864ce40ee15c26042","archive_size":28891,"archive_url":"https://extensions.blender.org/download/sha256:85b1836d97e5c2f0311afdf45cf9fd3cefa71bade074963864ce40ee15c26042/add-on-measureit-v1.8.4.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/measureit/","maintainer":"antoniov","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"tri_lighting","schema_version":"1.0.0","name":"Tri-lighting","version":"0.2.1","tagline":"Add 3 Point Lighting to Selected / Active Object","archive_hash":"sha256:91bd27546e4be010ed03eb732dcf04500086ba79278c7259ec0912c996b3b04b","archive_size":3531,"archive_url":"https://extensions.blender.org/download/sha256:91bd27546e4be010ed03eb732dcf04500086ba79278c7259ec0912c996b3b04b/add-on-tri-lighting-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tri-lighting/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"grease_pencil_tools","schema_version":"1.0.0","name":"Grease Pencil Tools","version":"2.2.5","tagline":"Extra tools for Grease Pencil","archive_hash":"sha256:31c799c76ca6fe883b56042b27b670ccaceab03294cd3f2d73292449ea95f287","archive_size":51990,"archive_url":"https://extensions.blender.org/download/sha256:31c799c76ca6fe883b56042b27b670ccaceab03294cd3f2d73292449ea95f287/add-on-grease-pencil-tools-v2.2.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/grease-pencil-tools/","maintainer":"SamuelBernou","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil","Object"]},{"id":"tissue","schema_version":"1.0.0","name":"Tissue","version":"0.3.71","tagline":"Tools for Computational Design","archive_hash":"sha256:e2da80e8dc35fa07bd63cc09c71511a8d2766f00bc1ae93ae1416710049b04ad","archive_size":113361,"archive_url":"https://extensions.blender.org/download/sha256:e2da80e8dc35fa07bd63cc09c71511a8d2766f00bc1ae93ae1416710049b04ad/add-on-tissue-v0.3.71.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tissue/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"icon_viewer","schema_version":"1.0.0","name":"Icon Viewer","version":"1.4.2","tagline":"Click an icon to copy its name to the clipboard","archive_hash":"sha256:f8f8edde289718bb022fcaeb8c2f0613730625af41cace80f3906d64779e64fc","archive_size":3814,"archive_url":"https://extensions.blender.org/download/sha256:f8f8edde289718bb022fcaeb8c2f0613730625af41cace80f3906d64779e64fc/add-on-icon-viewer-v1.4.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/icon-viewer/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Development"]},{"id":"magic_uv","schema_version":"1.0.0","name":"Magic UV","version":"6.7.1","tagline":"UV Toolset. See Add-ons Preferences for details","archive_hash":"sha256:09451ad3876aa1a1f693cdce4a5837e9a6c69cfc96cfc292ebc398a529d28571","archive_size":104347,"archive_url":"https://extensions.blender.org/download/sha256:09451ad3876aa1a1f693cdce4a5837e9a6c69cfc96cfc292ebc398a529d28571/add-on-magic-uv-v6.7.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/magic-uv/","maintainer":"nutti","license":["SPDX:GPL-2.0-or-later"],"tags":["UV"]},{"id":"export_autocad_dxf_format_dxf","schema_version":"1.0.0","name":"Export Autocad DXF Format (.dxf)","version":"2.2.4","tagline":"The script exports Blender geometry to DXF format r12 version","archive_hash":"sha256:eb49707876bcf472d440e89206252b90d8c7b9bf919ece6c59a8d7f1181199e7","archive_size":33206,"archive_url":"https://extensions.blender.org/download/sha256:eb49707876bcf472d440e89206252b90d8c7b9bf919ece6c59a8d7f1181199e7/add-on-export-autocad-dxf-format-dxf-v2.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-autocad-dxf-format-dxf/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory where it exports DXF file"},"tags":["Import-Export"]},{"id":"discombobulator","schema_version":"1.0.0","name":"Discombobulator","version":"0.1.0","tagline":"Add Discombobulator","archive_hash":"sha256:79b9763dd90ec7e7dd0f2b1a6dca0485145f9ac258787c6ba5fafb56d6b45d9d","archive_size":7864,"archive_url":"https://extensions.blender.org/download/sha256:79b9763dd90ec7e7dd0f2b1a6dca0485145f9ac258787c6ba5fafb56d6b45d9d/add-on-discombobulator-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/discombobulator/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"animall","schema_version":"1.0.0","name":"AnimAll","version":"0.14.0","tagline":"Animate mesh, lattice, curve and surface data","archive_hash":"sha256:85fcb80112f25a194891242708eb3bc8fdd02890b9a6d9fc83502e059e0d1f86","archive_size":8635,"archive_url":"https://extensions.blender.org/download/sha256:85fcb80112f25a194891242708eb3bc8fdd02890b9a6d9fc83502e059e0d1f86/add-on-animall-v0.14.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/animall/","maintainer":"AnimAll","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"blender_id_authentication","schema_version":"1.0.0","name":"Blender ID authentication","version":"2.1.3","tagline":"Stores your Blender ID credentials for usage with other add-ons","archive_hash":"sha256:c082141d5040e928d4691f2f00f020932e36b4a06500a210e06e4c2a014564d5","archive_size":11456,"archive_url":"https://extensions.blender.org/download/sha256:c082141d5040e928d4691f2f00f020932e36b4a06500a210e06e4c2a014564d5/add-on-blender-id-authentication-v2.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-id-authentication/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Requires access to id.blender.org to sync preferences"},"tags":["System"]},{"id":"edit_mesh_tools","schema_version":"1.0.0","name":"Edit Mesh Tools","version":"0.3.6","tagline":"Mesh modelling toolkit. Several tools to aid modelling","archive_hash":"sha256:af6440c98c5f64dbcd492e03d7e8772e3bacad92dfc92b5be8abadacc86e7ee0","archive_size":74410,"archive_url":"https://extensions.blender.org/download/sha256:af6440c98c5f64dbcd492e03d7e8772e3bacad92dfc92b5be8abadacc86e7ee0/add-on-edit-mesh-tools-v0.3.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-mesh-tools/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"viewport_pie_menus","schema_version":"1.0.0","name":"3D Viewport Pie Menus","version":"1.7.4","tagline":"Various pie menus to speed up your workflow","archive_hash":"sha256:2120e0002b06ee0aac364cb4e300a852ac8b2dadcaa0657eccd82915e8d98d55","archive_size":128248,"archive_url":"https://extensions.blender.org/download/sha256:2120e0002b06ee0aac364cb4e300a852ac8b2dadcaa0657eccd82915e8d98d55/add-on-viewport-pie-menus-v1.7.4.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/viewport-pie-menus/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To load brush icons from disk"},"tags":["User Interface"]},{"id":"bsurfaces_gpl_edition","schema_version":"1.0.0","name":"Bsurfaces GPL Edition","version":"1.8.4","tagline":"Modeling and retopology tool","archive_hash":"sha256:a521277138cf2bac92655e3e684f0714aafca25dd86fc5adc2e0f274df34dd6e","archive_size":31781,"archive_url":"https://extensions.blender.org/download/sha256:a521277138cf2bac92655e3e684f0714aafca25dd86fc5adc2e0f274df34dd6e/add-on-bsurfaces-gpl-edition-v1.8.4.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/bsurfaces-gpl-edition/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"curve_tools","schema_version":"1.0.0","name":"Curve Tools","version":"0.4.6","tagline":"Adds some functionality for bezier/nurbs curve/surface modeling","archive_hash":"sha256:af1e26d5e38c0c024598898e31e35373c978505a1942deb12588ef87ad85696f","archive_size":55633,"archive_url":"https://extensions.blender.org/download/sha256:af1e26d5e38c0c024598898e31e35373c978505a1942deb12588ef87ad85696f/add-on-curve-tools-v0.4.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/curve-tools/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"power_sequencer","schema_version":"1.0.0","name":"Power Sequencer","version":"2.0.4","tagline":"Video editing tools for content creators","archive_hash":"sha256:895f02298c1c616f4d115184e7d71de3b82a61aa95f3d524cceaedf3d3f1ff5a","archive_size":97495,"archive_url":"https://extensions.blender.org/download/sha256:895f02298c1c616f4d115184e7d71de3b82a61aa95f3d524cceaedf3d3f1ff5a/add-on-power-sequencer-v2.0.4.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/power-sequencer/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"dynamic_sky","schema_version":"1.0.0","name":"Dynamic Sky","version":"1.0.6","tagline":"Creates Dynamic Sky for Cycles","archive_hash":"sha256:2f8d1fc2e0c71287e42b4f91d52d270da8f4d7da8033305b2a1790f742fa374f","archive_size":4358,"archive_url":"https://extensions.blender.org/download/sha256:2f8d1fc2e0c71287e42b4f91d52d270da8f4d7da8033305b2a1790f742fa374f/add-on-dynamic-sky-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-sky/","maintainer":"Dynamic Sky","license":["SPDX:GPL-2.0-or-later"],"tags":["Lighting"]},{"id":"vrm","schema_version":"1.0.0","name":"VRM format","version":"4.4.0","tagline":"VRM import, export and editing capabilities","archive_hash":"sha256:83facc17c8ed2b3e450fef15bd11110946bd610c6ff7a01330b025a71de6788d","archive_size":1603506,"archive_url":"https://extensions.blender.org/download/sha256:83facc17c8ed2b3e450fef15bd11110946bd610c6ff7a01330b025a71de6788d/add-on-vrm-v4.4.0.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/vrm/","maintainer":"saturday06","license":["SPDX:MIT","SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export VRM from/to disk"},"tags":["Import-Export","Animation","Modeling","Material","Physics"]},{"id":"io_scene_max","schema_version":"1.0.0","name":"Import Autodesk MAX (.max)","version":"1.9.2","tagline":"Import 3DSMAX meshes & materials","archive_hash":"sha256:ae11b8903ca7fcab78cd1163305b80a268335894139f251a502da0476ef77b43","archive_size":92503,"archive_url":"https://extensions.blender.org/download/sha256:ae11b8903ca7fcab78cd1163305b80a268335894139f251a502da0476ef77b43/add-on-io-scene-max-v1.9.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-max/","maintainer":"NRGSille","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Autodesk MAX files"},"tags":["Import-Export","Mesh","Material"]},{"id":"sun_position","schema_version":"1.0.0","name":"Sun Position","version":"4.4.0","tagline":"Show the position of the Sun with objects or an environment","archive_hash":"sha256:b8a83c2ff04fad709687de51065faf6add52e824ec06fef22b4a95fe98955856","archive_size":26592,"archive_url":"https://extensions.blender.org/download/sha256:b8a83c2ff04fad709687de51065faf6add52e824ec06fef22b4a95fe98955856/add-on-sun-position-v4.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sun-position/","maintainer":"pioverfour","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"gruvbox_light","schema_version":"1.0.0","name":"Gruvbox Light","version":"1.7.0","tagline":"Gruvbox light theme","archive_hash":"sha256:0cf1134eacd9b4fe8b1cf336bdd8510fc984fd8c322427145a498982b0167664","archive_size":5434,"archive_url":"https://extensions.blender.org/download/sha256:0cf1134eacd9b4fe8b1cf336bdd8510fc984fd8c322427145a498982b0167664/theme-gruvbox-light-v1.7.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gruvbox-light/","maintainer":"Eleuth","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"gruvbox_dark","schema_version":"1.0.0","name":"Gruvbox Dark","version":"1.7.1","tagline":"Gruvbox dark theme","archive_hash":"sha256:54617fdf9c8a883c2425c9ccf3dbee6b745cb258b94e59776b932ef4b98289ae","archive_size":5232,"archive_url":"https://extensions.blender.org/download/sha256:54617fdf9c8a883c2425c9ccf3dbee6b745cb258b94e59776b932ef4b98289ae/theme-gruvbox-dark-v1.7.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gruvbox-dark/","maintainer":"Eleuth","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"phoenixart_fusion_theme","schema_version":"1.0.0","name":"PhoenixArt Fusion Theme","version":"4.0.3","tagline":"Based on Blackmagic Fusion Theme","archive_hash":"sha256:19029c154eba46e528b33dd7a18a3633507df051e0341358651a0030eedcd066","archive_size":6404,"archive_url":"https://extensions.blender.org/download/sha256:19029c154eba46e528b33dd7a18a3633507df051e0341358651a0030eedcd066/theme-phoenixart-fusion-theme-v4.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/phoenixart-fusion-theme/","maintainer":"phoenixart","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"alien_pink_theme","schema_version":"1.0.0","name":"Alien Pink","version":"6.0.0","tagline":"Stylish and vibrant theme designed specially for you","archive_hash":"sha256:cef37705d005e9f1ff988d0d620d646bfaac30532cb2d2fbce97885245906641","archive_size":6709,"archive_url":"https://extensions.blender.org/download/sha256:cef37705d005e9f1ff988d0d620d646bfaac30532cb2d2fbce97885245906641/theme-alien-pink-theme-v6.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/alien-pink-theme/","maintainer":"Alumx","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"copy_object_name_to_data","schema_version":"1.0.0","name":"Copy Object Name to Data","version":"1.1.1","tagline":"A simple operator to copy object names to object data","archive_hash":"sha256:686fd6616844730398773fa942ffc42bcc478622a1441b51c70ba28853274c03","archive_size":14363,"archive_url":"https://extensions.blender.org/download/sha256:686fd6616844730398773fa942ffc42bcc478622a1441b51c70ba28853274c03/add-on-copy-object-name-to-data-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-object-name-to-data/","maintainer":"Xury46","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","User Interface"]},{"id":"nd","schema_version":"1.0.0","name":"ND","version":"2.2.0","tagline":"Non-Destructive Modeling Toolkit","archive_hash":"sha256:71bc660afb8fb690e27389b7b729af6a5c1060833a8264f5c8cf52c034c7b411","archive_size":1137919,"archive_url":"https://extensions.blender.org/download/sha256:71bc660afb8fb690e27389b7b729af6a5c1060833a8264f5c8cf52c034c7b411/add-on-nd-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nd/","maintainer":"HugeMenace","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import built-in and custom assets"},"tags":["3D View","Lighting","Material","Modeling","Mesh","Object","Scene","UV"]},{"id":"io_export_after_effects","schema_version":"1.0.0","name":"Export: Adobe After Effects (.jsx)","version":"0.2.1","tagline":"Export cameras, images and empties to Adobe After Effects","archive_hash":"sha256:8c1caea017a582d3e9725fb2d96a17546a9877704d42676471097a59225049b4","archive_size":16102,"archive_url":"https://extensions.blender.org/download/sha256:8c1caea017a582d3e9725fb2d96a17546a9877704d42676471097a59225049b4/add-on-io-export-after-effects-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-export-after-effects/","maintainer":"Les Fées Spéciales","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Export JSX file to disk"},"tags":["Import-Export"]},{"id":"Bagapie","schema_version":"1.0.0","name":"Bagapie","version":"11.0.10","tagline":"50+ tools : Scattering, Ivy Gen, Random Array, Architecture","archive_hash":"sha256:2e55574dcb37ca4a86e1942317906f769e269d382d6a82d0b1330cfb94707c9c","archive_size":10833751,"archive_url":"https://extensions.blender.org/download/sha256:2e55574dcb37ca4a86e1942317906f769e269d382d6a82d0b1330cfb94707c9c/add-on-bagapie-v11.0.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bagapie/","maintainer":"Kiara_Bagattini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create, setup and add assets libraries","network":"Open web browser for documentation and tutorials"},"tags":["Modeling","Node"]},{"id":"y_projectionnode_form_camera_f1","schema_version":"1.0.0","name":"ProjectionNode from Camera","version":"1.3.0","tagline":"Creates a material specified in the Background Image of Camera","archive_hash":"sha256:6fc076e3124099bdad58988605f36ae44a27d2b65932aee2d0fc8b91aedf0d75","archive_size":9289,"archive_url":"https://extensions.blender.org/download/sha256:6fc076e3124099bdad58988605f36ae44a27d2b65932aee2d0fc8b91aedf0d75/add-on-y-projectionnode-form-camera-f1-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/y-projectionnode-form-camera-f1/","maintainer":"Yukimituki","license":["SPDX:GPL-2.0-or-later"],"tags":["Node","Material"]},{"id":"Shadow","schema_version":"1.0.0","name":"Shadow","version":"5.0.2","tagline":"Dark theme","archive_hash":"sha256:0325c737f887420efd31225df8a6d79c7645b4bff72dec4787605ed2d6fbf84b","archive_size":5744,"archive_url":"https://extensions.blender.org/download/sha256:0325c737f887420efd31225df8a6d79c7645b4bff72dec4787605ed2d6fbf84b/theme-shadow-v5.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/shadow/","maintainer":"--Shadow--","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"ucupaint","schema_version":"1.0.0","name":"Ucupaint","version":"2.4.8","tagline":"Layer based painting for Eevee and Cycles","archive_hash":"sha256:c81b5b3c80884e2ab402783d9f3432735d436e7eff9d189a8b9f14ac39169ccf","archive_size":2024427,"archive_url":"https://extensions.blender.org/download/sha256:c81b5b3c80884e2ab402783d9f3432735d436e7eff9d189a8b9f14ac39169ccf/add-on-ucupaint-v2.4.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ucupaint/","maintainer":"ucupumar","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access to filesystem for loading and saving images"},"tags":["Node","Material","Paint","Bake"]},{"id":"Industrial_AOV_Connector","schema_version":"1.0.0","name":"Industrial AOV Connector","version":"5.2.0","tagline":"Auto generate outputs for advanced compositing","archive_hash":"sha256:dcb04683854b49d2eb1a7ba27fcd2210b9bea7c3e371acb807b6e4657b5ee719","archive_size":219657,"archive_url":"https://extensions.blender.org/download/sha256:dcb04683854b49d2eb1a7ba27fcd2210b9bea7c3e371acb807b6e4657b5ee719/add-on-industrial-aov-connector-v5.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/industrial-aov-connector/","maintainer":"Roland-Vyens","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Delete Useless Default Renders button need this"},"tags":["Compositing","Import-Export","Pipeline","Render"]},{"id":"hdr_rotation","schema_version":"1.0.0","name":"Hdr Rotation","version":"1.0.7","tagline":"Rotation HDR by Shift+Right Drag in 3D View","archive_hash":"sha256:d78bada4fd2f4eb6cab6b30872006264b900ca91631b6a7ddc9a07111053fc68","archive_size":6585,"archive_url":"https://extensions.blender.org/download/sha256:d78bada4fd2f4eb6cab6b30872006264b900ca91631b6a7ddc9a07111053fc68/add-on-hdr-rotation-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hdr-rotation/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Render"]},{"id":"Dark_Purple_Green","schema_version":"1.0.0","name":"DarkPurpleGreen","version":"1.0.1","tagline":"Dark minimal neon theme","archive_hash":"sha256:ca96f25e8529fc306169b9a85a8e62826401ebb4bd26bd4eb4ff5bbec813e9d4","archive_size":5871,"archive_url":"https://extensions.blender.org/download/sha256:ca96f25e8529fc306169b9a85a8e62826401ebb4bd26bd4eb4ff5bbec813e9d4/theme-dark-purple-green-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-purple-green/","maintainer":"MSBH","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"node_editor_switcher","schema_version":"1.0.0","name":"Node Editor Switcher","version":"1.1.0","tagline":"Pie menu, shortcuts and buttons to switch between node editors","archive_hash":"sha256:2b7228d52b2d984301f9437453eafd0854c0547e15902e231640f2c6877a48e3","archive_size":2134,"archive_url":"https://extensions.blender.org/download/sha256:2b7228d52b2d984301f9437453eafd0854c0547e15902e231640f2c6877a48e3/add-on-node-editor-switcher-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-editor-switcher/","maintainer":"Victor-09","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Pipeline","User Interface"]},{"id":"Adapta_Nokto","schema_version":"1.0.0","name":"Adapta Nokto","version":"1.1.3","tagline":"Adapta Nokto theme","archive_hash":"sha256:42c3ec72557e2cb64a04370064b50047bf36904d186c438a040d636e53c40fb4","archive_size":5612,"archive_url":"https://extensions.blender.org/download/sha256:42c3ec72557e2cb64a04370064b50047bf36904d186c438a040d636e53c40fb4/theme-adapta-nokto-v1.1.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/adapta-nokto/","maintainer":"Cyrill-Vitkovskiy","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"browser_scroll_resize","schema_version":"1.0.0","name":"Browser Scroll Resize","version":"1.0.6","tagline":"Resize File Size Thumbnail on Browsers with Mouse Wheel","archive_hash":"sha256:d50bb8de1b5ef1b7a7b7f6567c2f15aec77c05d6fac04b443e5a2ff0107fbd94","archive_size":16676,"archive_url":"https://extensions.blender.org/download/sha256:d50bb8de1b5ef1b7a7b7f6567c2f15aec77c05d6fac04b443e5a2ff0107fbd94/add-on-browser-scroll-resize-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.3.1","website":"https://extensions.blender.org/add-ons/browser-scroll-resize/","maintainer":"Barrunterio","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"delete_line_shortcut","schema_version":"1.0.0","name":"Delete Line Shortcut","version":"1.2.2","tagline":"Shortcut to delete a line and copy its content","archive_hash":"sha256:e327da024c4d02910dc501b3c5a0445326654775e04750b9458fd7dc7153f7ab","archive_size":15764,"archive_url":"https://extensions.blender.org/download/sha256:e327da024c4d02910dc501b3c5a0445326654775e04750b9458fd7dc7153f7ab/add-on-delete-line-shortcut-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/delete-line-shortcut/","maintainer":"matej.zeman02","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Add-on can read and write to the system clipboard."},"tags":["User Interface","Text Editor"]},{"id":"keyframe_visibility","schema_version":"1.0.0","name":"Keyframe Visibility","version":"1.0.2","tagline":"Batch keyframe visibility for objects","archive_hash":"sha256:d34a97ea3d6f6776991474da0e4794e6c124ec9a0262abfe4aeef65e35670f84","archive_size":4295,"archive_url":"https://extensions.blender.org/download/sha256:d34a97ea3d6f6776991474da0e4794e6c124ec9a0262abfe4aeef65e35670f84/add-on-keyframe-visibility-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyframe-visibility/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","3D View"]},{"id":"midnight_blue_theme","schema_version":"1.0.0","name":"Midnight Blue","version":"1.0.1","tagline":"Blender blues after midnight","archive_hash":"sha256:8ab6dd7c85f7451cc8a7fe41dcb95b5a474a01f9a336a841e8f11e28555d9928","archive_size":5982,"archive_url":"https://extensions.blender.org/download/sha256:8ab6dd7c85f7451cc8a7fe41dcb95b5a474a01f9a336a841e8f11e28555d9928/theme-midnight-blue-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/midnight-blue-theme/","maintainer":"cmzw","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"bulk_asset_tools","schema_version":"1.0.0","name":"Bulk Asset Tools","version":"1.8.0","tagline":"Manage your asset libraries with ease","archive_hash":"sha256:fa483ef8a9e8dbd128af4397851224104c67104b87d087f569cbbadf83c3a278","archive_size":11314,"archive_url":"https://extensions.blender.org/download/sha256:fa483ef8a9e8dbd128af4397851224104c67104b87d087f569cbbadf83c3a278/add-on-bulk-asset-tools-v1.8.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bulk-asset-tools/","maintainer":"guitargeek","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Make changes to asset files"},"tags":["User Interface"]},{"id":"blender_path_maker","schema_version":"1.0.0","name":"Path Maker","version":"1.4.5","tagline":"Replaces custom tags in the Output Path","archive_hash":"sha256:1c222d219c83a66f87ab9f573d682c584de029ed23c7ef3b44f5f89f66a0d926","archive_size":4822,"archive_url":"https://extensions.blender.org/download/sha256:1c222d219c83a66f87ab9f573d682c584de029ed23c7ef3b44f5f89f66a0d926/add-on-blender-path-maker-v1.4.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-path-maker/","maintainer":"thornydre","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"SelectsAllIslandsUDIM","schema_version":"1.0.0","name":"Selects all UV islands on one UDIM","version":"1.2.0","tagline":"Highlighting UV-islands and faces of the corresponding UDIM","archive_hash":"sha256:3ead06399c6676eeb55ccd18d122a9d4fc7d1cba004290de7ddaaf9f8c5b930f","archive_size":3781,"archive_url":"https://extensions.blender.org/download/sha256:3ead06399c6676eeb55ccd18d122a9d4fc7d1cba004290de7ddaaf9f8c5b930f/add-on-selectsallislandsudim-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/selectsallislandsudim/","maintainer":"Ailex","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"lightpainter","schema_version":"1.0.0","name":"Light Painter","version":"1.5.10","tagline":"Do not place your lights, paint them","archive_hash":"sha256:01f5dfb34f1b19692b25b77b439b61432cbdd28cdd166dd1c83f308dd9086045","archive_size":109568,"archive_url":"https://extensions.blender.org/download/sha256:01f5dfb34f1b19692b25b77b439b61432cbdd28cdd166dd1c83f308dd9086045/add-on-lightpainter-v1.5.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lightpainter/","maintainer":"SMagnusson","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Lighting","Object"]},{"id":"ContextPie","schema_version":"1.0.0","name":"Context Pie","version":"0.9.51","tagline":"Context sensitive pie menu for a simple, fast workflow","archive_hash":"sha256:709e419e41eae0db0d6109ade42fe2220a9cbdefd5d7eed3462869fa76afc24e","archive_size":171087,"archive_url":"https://extensions.blender.org/download/sha256:709e419e41eae0db0d6109ade42fe2220a9cbdefd5d7eed3462869fa76afc24e/add-on-contextpie-v0.9.51.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/contextpie/","maintainer":"BastianLS","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View","UV"]},{"id":"orient_and_origin_to_selected","schema_version":"1.0.0","name":"Orient and Origin to Selected","version":"1.2.0","tagline":"Quickly manipulate the object origin","archive_hash":"sha256:f2f35569453161aa07e2d9c3ae6fe618538c6af7f659f910bb7bdfb8a4fc3521","archive_size":42615,"archive_url":"https://extensions.blender.org/download/sha256:f2f35569453161aa07e2d9c3ae6fe618538c6af7f659f910bb7bdfb8a4fc3521/add-on-orient-and-origin-to-selected-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/orient-and-origin-to-selected/","maintainer":"Orange Turbine","license":["SPDX:GPL-2.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"screencast_keys","schema_version":"1.0.0","name":"Screencast Keys","version":"4.2.2","tagline":"Display keys pressed in Blender","archive_hash":"sha256:dc9f079d49cf18058646a0d8c0efc88c2928554f6960cf1bff5fbabf6dd48bc4","archive_size":39054,"archive_url":"https://extensions.blender.org/download/sha256:dc9f079d49cf18058646a0d8c0efc88c2928554f6960cf1bff5fbabf6dd48bc4/add-on-screencast-keys-v4.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/screencast-keys/","maintainer":"nutti","license":["SPDX:GPL-3.0-or-later"],"tags":["System","User Interface"]},{"id":"Gold_Pro_Theme","schema_version":"1.0.0","name":"Gold Pro","version":"1.1.4","tagline":"Professional blender theme with Gold :)","archive_hash":"sha256:c74e7b313e8e3fc7abb1e1ef91af4a93dfcb61110e767cb9d720746798a64e5d","archive_size":5514,"archive_url":"https://extensions.blender.org/download/sha256:c74e7b313e8e3fc7abb1e1ef91af4a93dfcb61110e767cb9d720746798a64e5d/theme-gold-pro-theme-v1.1.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gold-pro-theme/","maintainer":"EmanuelFerro","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"lfs_camera_plane","schema_version":"1.0.0","name":"Camera Plane","version":"3.0.1","tagline":"Import images and stick them to the camera","archive_hash":"sha256:38ae1b667ba8ed24f14ba4fd1d8f2509dbb327b1b0c22ed17fbd4f7f3b250028","archive_size":17283,"archive_url":"https://extensions.blender.org/download/sha256:38ae1b667ba8ed24f14ba4fd1d8f2509dbb327b1b0c22ed17fbd4f7f3b250028/add-on-lfs-camera-plane-v3.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/lfs-camera-plane/","maintainer":"Les Fées Spéciales","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images from disk"},"tags":["3D View","Import-Export","Object","Camera"]},{"id":"Wireframe_Color_Tools","schema_version":"1.0.0","name":"Wireframe Color Tools","version":"1.0.0","tagline":"Change Object Colors based on different kinds of methods","archive_hash":"sha256:e1290c2cfb2b6ce2346f12679eed8f6cc2e522c90f40889e056e28f11f3832a9","archive_size":3122,"archive_url":"https://extensions.blender.org/download/sha256:e1290c2cfb2b6ce2346f12679eed8f6cc2e522c90f40889e056e28f11f3832a9/add-on-wireframe-color-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wireframe-color-tools/","maintainer":"Lumpengnom","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View","Material","Object"]},{"id":"neutral_grey","schema_version":"1.0.0","name":"Neutral Grey","version":"2.0.3","tagline":"A neutral grey theme for Blender","archive_hash":"sha256:d8b3c0b0c41cb7cc9a7ab555f6f7d7722bfab1756c62f85924aeb51edbb76454","archive_size":5558,"archive_url":"https://extensions.blender.org/download/sha256:d8b3c0b0c41cb7cc9a7ab555f6f7d7722bfab1756c62f85924aeb51edbb76454/theme-neutral-grey-v2.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/neutral-grey/","maintainer":"scopelma","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Accessibility"]},{"id":"deep_dark_sea","schema_version":"1.0.0","name":"Deep Dark Sea","version":"3.0.0","tagline":"Darker than the default dark","archive_hash":"sha256:59391a10f0750d676911eb3daf9e717504355033e9851de584d430e30c1c5298","archive_size":6219,"archive_url":"https://extensions.blender.org/download/sha256:59391a10f0750d676911eb3daf9e717504355033e9851de584d430e30c1c5298/theme-deep-dark-sea-v3.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/deep-dark-sea/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"border_buddy","schema_version":"1.0.0","name":"Border Buddy","version":"0.1.1","tagline":"Your buddy that helps to preserve borders","archive_hash":"sha256:1806735a0d626fabbda5d37bbb2ed03841da49abc956a18dddf9274875bffaf4","archive_size":2579,"archive_url":"https://extensions.blender.org/download/sha256:1806735a0d626fabbda5d37bbb2ed03841da49abc956a18dddf9274875bffaf4/add-on-border-buddy-v0.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/border-buddy/","maintainer":"SimonThommes","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"bake_shape_keys","schema_version":"1.0.0","name":"Bake Shape Keys","version":"1.4.0","tagline":"Feature-set for shape keys and shape key animations","archive_hash":"sha256:883e86f28541be0cd3e0a59abdc8fd0ea531d10186181d38cdaca590d17ee0dd","archive_size":14241,"archive_url":"https://extensions.blender.org/download/sha256:883e86f28541be0cd3e0a59abdc8fd0ea531d10186181d38cdaca590d17ee0dd/add-on-bake-shape-keys-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bake-shape-keys/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Mesh"]},{"id":"matalogue","schema_version":"1.0.0","name":"Matalogue","version":"1.5.1","tagline":"All your node trees in one list","archive_hash":"sha256:b1911aa0cbe55456ccd3c16a38aed01c687f205d5ca86c69903ef36aca7c90d9","archive_size":13431,"archive_url":"https://extensions.blender.org/download/sha256:b1911aa0cbe55456ccd3c16a38aed01c687f205d5ca86c69903ef36aca7c90d9/add-on-matalogue-v1.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/matalogue/","maintainer":"GregZaal","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"stack_node","schema_version":"1.0.0","name":"Stack","version":"1.0.4","tagline":"Layer blending node with blend modes, opacity, and masking","archive_hash":"sha256:bbaf8b4918680251d8f2966addaea0ec8d46e0fa0a4b92dd44d79bc93f7d831f","archive_size":23737,"archive_url":"https://extensions.blender.org/download/sha256:bbaf8b4918680251d8f2966addaea0ec8d46e0fa0a4b92dd44d79bc93f7d831f/add-on-stack-node-v1.0.4.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/stack-node/","maintainer":"NXSTYNATE","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"mat_helperr","schema_version":"1.0.0","name":"MAT Helper","version":"1.2.1","tagline":"Smart PBR texture importer for UModel .mat & .json exports","archive_hash":"sha256:3386ada34896c54c73e1cffe52a1de9fdedc5a475324ddbcd08b6fa60691b9b6","archive_size":4011,"archive_url":"https://extensions.blender.org/download/sha256:3386ada34896c54c73e1cffe52a1de9fdedc5a475324ddbcd08b6fa60691b9b6/add-on-mat-helperr-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mat-helperr/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Import-Export"]},{"id":"NieR_Automata_UI","schema_version":"1.0.0","name":"NieR_Automata_UI","version":"1.3.1","tagline":"Glory to Mankind","archive_hash":"sha256:423aac4916d63536601499ef6a0c8de8a2c296bc87d3aedadabd5400bfd51c76","archive_size":5829,"archive_url":"https://extensions.blender.org/download/sha256:423aac4916d63536601499ef6a0c8de8a2c296bc87d3aedadabd5400bfd51c76/theme-nier-automata-ui-v1.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/nier-automata-ui/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Colorful"]},{"id":"texops","schema_version":"1.0.0","name":"TexOps","version":"1.0.0","tagline":"Texture Conversion, Generation, and Manipulation Operations","archive_hash":"sha256:4cfbd79aabfde50762d0d555d7a795eec480b59333309062828345550d85abc9","archive_size":94059,"archive_url":"https://extensions.blender.org/download/sha256:4cfbd79aabfde50762d0d555d7a795eec480b59333309062828345550d85abc9/add-on-texops-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/texops/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint","Bake","Import-Export","User Interface"]},{"id":"preset_startup_manager","schema_version":"1.0.0","name":"Startup Preset Manager","version":"2.10.0","tagline":"Custom startup file creation / hot reloading","archive_hash":"sha256:09db3bb39ffa07a51635b7af748221c1b45c4fca6d49174d2a57366652609ca8","archive_size":4684,"archive_url":"https://extensions.blender.org/download/sha256:09db3bb39ffa07a51635b7af748221c1b45c4fca6d49174d2a57366652609ca8/add-on-preset-startup-manager-v2.10.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/preset-startup-manager/","maintainer":"Gruff-Wright","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline","Scene","System"]},{"id":"mass_keyframe","schema_version":"1.0.0","name":"Mass Keyframe","version":"1.1.8","tagline":"Keyframe properties better","archive_hash":"sha256:ac70facdf6a32075a6a00ce88dcd6ffee75597560080d154e60db3ded67a6b48","archive_size":386198,"archive_url":"https://extensions.blender.org/download/sha256:ac70facdf6a32075a6a00ce88dcd6ffee75597560080d154e60db3ded67a6b48/add-on-mass-keyframe-v1.1.8.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/mass-keyframe/","maintainer":"StratosDerg","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"geonode_to_shapekey","schema_version":"1.0.0","name":"Geonode To Shapekey","version":"1.2.0","tagline":"Convert geometry nodes to shapekeys. Useful for glTF export","archive_hash":"sha256:f4b3cd3f8cbb88efd704e56fbb15ddf6de088ae8c3e57e4b06091d0457fd7392","archive_size":4974,"archive_url":"https://extensions.blender.org/download/sha256:f4b3cd3f8cbb88efd704e56fbb15ddf6de088ae8c3e57e4b06091d0457fd7392/add-on-geonode-to-shapekey-v1.2.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/geonode-to-shapekey/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes","Pipeline"]},{"id":"dimensions_and_lines","schema_version":"1.0.0","name":"Dimensions and Lines","version":"1.1.0","tagline":"create technical drawings, dimensions and lines","archive_hash":"sha256:b2d368e76a9a41d82b65766fcbc002042ff3383ad40d8e8619ae88bf20d64c30","archive_size":75526,"archive_url":"https://extensions.blender.org/download/sha256:b2d368e76a9a41d82b65766fcbc002042ff3383ad40d8e8619ae88bf20d64c30/add-on-dimensions-and-lines-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dimensions-and-lines/","maintainer":"jan.holinka","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View","Mesh"]},{"id":"polyzamboni","schema_version":"1.0.0","name":"PolyZamboni","version":"1.3.1","tagline":"Papercraft in Blender","archive_hash":"sha256:ed4c89087f806c5517686cbea42db37b652fd0aa5489237de195f655b88e6894","archive_size":20562449,"archive_url":"https://extensions.blender.org/download/sha256:ed4c89087f806c5517686cbea42db37b652fd0aa5489237de195f655b88e6894/add-on-polyzamboni-v1.3.1-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/polyzamboni/","maintainer":"Anton-Florey","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export PDF/SVG to disk"},"platforms":["windows-x64"],"tags":["3D View","Import-Export"]},{"id":"textures_autosave","schema_version":"1.0.0","name":"Autosave Textures","version":"1.0.1","tagline":"Save all modified image textures on blendfile (auto-)save","archive_hash":"sha256:86990c248d92cb1c1c9fee66a3d5e9ec215017bc0cd45acefbf8645823bde938","archive_size":2642,"archive_url":"https://extensions.blender.org/download/sha256:86990c248d92cb1c1c9fee66a3d5e9ec215017bc0cd45acefbf8645823bde938/add-on-textures-autosave-v1.0.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/textures-autosave/","maintainer":"mont29","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write image files to disk"},"tags":["Pipeline","Paint"]},{"id":"csv_importer","schema_version":"1.0.0","name":"CSV Importer","version":"0.2.3","tagline":"import csv data to meshes in Blender","archive_hash":"sha256:f3f6b15df15381d0f7ba6a47f161b8552f6c850d5beda4e3471c5ae07a38812b","archive_size":53601988,"archive_url":"https://extensions.blender.org/download/sha256:f3f6b15df15381d0f7ba6a47f161b8552f6c850d5beda4e3471c5ae07a38812b/add-on-csv-importer-v0.2.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.5","website":"https://extensions.blender.org/add-ons/csv-importer/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Import-Export"]},{"id":"NLATools","schema_version":"1.0.0","name":"Merge NLA Strips","version":"1.2.0","tagline":"Combine selected NLA strips into one","archive_hash":"sha256:fb71b63b597aa5998c41387cb24ccb78fed7944a43e80418f959080090a4d276","archive_size":4416,"archive_url":"https://extensions.blender.org/download/sha256:fb71b63b597aa5998c41387cb24ccb78fed7944a43e80418f959080090a4d276/add-on-nlatools-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nlatools/","maintainer":"Likkez","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Bake"]},{"id":"Cake_Particles","schema_version":"1.0.0","name":"Cake_Particles","version":"5.0.0","tagline":"Bake particles simulation into keyframed animations","archive_hash":"sha256:f1c2e3f5f97bfa3432cc2fb85af35ca6cb05e4ecd7d6dd619522cc36aa80b42f","archive_size":9459,"archive_url":"https://extensions.blender.org/download/sha256:f1c2e3f5f97bfa3432cc2fb85af35ca6cb05e4ecd7d6dd619522cc36aa80b42f/add-on-cake-particles-v5.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cake-particles/","maintainer":"scaryplasmon","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Bake","Physics","Object"]},{"id":"Quick_Character_Selector","schema_version":"1.0.0","name":"Quick Character Selector","version":"1.1.0","tagline":"Seleccion rapida de armatures","archive_hash":"sha256:b1eee352e175dbb52f8c6298a00f15f0d28d1b396f341529a61b73654120fbad","archive_size":1581,"archive_url":"https://extensions.blender.org/download/sha256:b1eee352e175dbb52f8c6298a00f15f0d28d1b396f341529a61b73654120fbad/add-on-quick-character-selector-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-character-selector/","maintainer":"MatiasMartin","license":["SPDX:GPL-2.0-or-later"],"tags":["Object","Animation"]},{"id":"momo","schema_version":"1.0.0","name":"Momo Light","version":"5.0.6","tagline":"Momo Light - theme inspired by Modo","archive_hash":"sha256:c2db79e4c561c2e622d5320a0fa8ce635d92afd4143f6f9a37084fef068ce6f3","archive_size":6451,"archive_url":"https://extensions.blender.org/download/sha256:c2db79e4c561c2e622d5320a0fa8ce635d92afd4143f6f9a37084fef068ce6f3/theme-momo-v5.0.6.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/momo/","maintainer":"TimoShch","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By"]},{"id":"dynamic_context_menu","schema_version":"1.0.0","name":"Dynamic Context Menu","version":"1.9.4","tagline":"Object Mode Context Sensitive Spacebar Menu","archive_hash":"sha256:d5489ad11a246fcac650b86b3beb5137f1506a7d09092028acfbc86b8cdc90b5","archive_size":15679,"archive_url":"https://extensions.blender.org/download/sha256:d5489ad11a246fcac650b86b3beb5137f1506a7d09092028acfbc86b8cdc90b5/add-on-dynamic-context-menu-v1.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-context-menu/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["User Interface"]},{"id":"import_palettes","schema_version":"1.0.0","name":"Import Palettes","version":"1.0.5","tagline":"Import Palettes","archive_hash":"sha256:9874614269a5e890d25021308641083531d982fb8603c113090389f382bc4acd","archive_size":4151,"archive_url":"https://extensions.blender.org/download/sha256:9874614269a5e890d25021308641083531d982fb8603c113090389f382bc4acd/add-on-import-palettes-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-palettes/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory with color palette files"},"tags":["Import-Export"]},{"id":"open_linked","schema_version":"1.0.0","name":"Open Linked","version":"1.0.1","tagline":"Open linked blends from the Outliner","archive_hash":"sha256:699f9ce0e8f8cac5fa94fbfa0b7991a3d0511da33dfa84f83d0be7754ecb70c3","archive_size":40897,"archive_url":"https://extensions.blender.org/download/sha256:699f9ce0e8f8cac5fa94fbfa0b7991a3d0511da33dfa84f83d0be7754ecb70c3/add-on-open-linked-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/open-linked/","maintainer":"polygoniq","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Add-on expects to have access to filesytem."},"tags":["User Interface"]},{"id":"flexytrack","schema_version":"1.0.0","name":"FlexyTrack","version":"1.0.1","tagline":"Physics-free Damped Track rigging for bone chains","archive_hash":"sha256:59e2ae09758d87f47e9cbb3287de30a0ddca3bde0566ba8db5820c6fd0e5bd8f","archive_size":4695,"archive_url":"https://extensions.blender.org/download/sha256:59e2ae09758d87f47e9cbb3287de30a0ddca3bde0566ba8db5820c6fd0e5bd8f/add-on-flexytrack-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/flexytrack/","maintainer":"MignotGeorges","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"stop_motion_obj2","schema_version":"1.0.0","name":"OBJSequence","version":"1.0.5","tagline":"Import OBJ sequences as stop motion animation with caching","archive_hash":"sha256:37ca7d94886742f430f5ef0843d4138616544a2d3d4efe431040e2ff28a5de02","archive_size":10861,"archive_url":"https://extensions.blender.org/download/sha256:37ca7d94886742f430f5ef0843d4138616544a2d3d4efe431040e2ff28a5de02/add-on-stop-motion-obj2-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stop-motion-obj2/","maintainer":"Liam-Courtney","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read OBJ files from folders chosen by the user"}},{"id":"nodesync","schema_version":"1.0.0","name":"NodeSync","version":"1.3.1","tagline":"Git version control for your Geometry and Shader node trees","archive_hash":"sha256:717968e8be00804c33eee501889793f44a8fe6d23f82407675705fae7b78bae0","archive_size":55449,"archive_url":"https://extensions.blender.org/download/sha256:717968e8be00804c33eee501889793f44a8fe6d23f82407675705fae7b78bae0/add-on-nodesync-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nodesync/","maintainer":"Matias-1","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write node trees to disk and manage a local Git repo","network":"Push and pull node trees to/from a user-supplied Git remote"},"tags":["Node"]},{"id":"target_weld","schema_version":"1.0.0","name":"Target Weld","version":"1.1.9","tagline":"Merge vertices and edges","archive_hash":"sha256:db11de4d3d5df2d93c1f3c57aad0ac60a5c07a013bc192d8dd1783ceeb066ca1","archive_size":38324,"archive_url":"https://extensions.blender.org/download/sha256:db11de4d3d5df2d93c1f3c57aad0ac60a5c07a013bc192d8dd1783ceeb066ca1/add-on-target-weld-v1.1.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/target-weld/","maintainer":"KewlSheet","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"vmc_link","schema_version":"1.0.0","name":"VMC Link","version":"0.3.1","tagline":"VMC receiver for armature and shape keys","archive_hash":"sha256:faa31295a7a0fd825b1203675f90fe10daeb4101ef0941708dfe07ed94bdb2bf","archive_size":55528,"archive_url":"https://extensions.blender.org/download/sha256:faa31295a7a0fd825b1203675f90fe10daeb4101ef0941708dfe07ed94bdb2bf/add-on-vmc-link-v0.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vmc-link/","maintainer":"Internet-Addict","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Receive OSC / VMC motion data over UDP"},"tags":["System"]},{"id":"PinkPinkPink","schema_version":"1.0.0","name":"PinkPinkPink","version":"1.1.0","tagline":"Pink Blender Theme","archive_hash":"sha256:99e666d5352cc017b6e9813f448a16758204e1db707c40c2418eb0dbc7f99f09","archive_size":5254,"archive_url":"https://extensions.blender.org/download/sha256:99e666d5352cc017b6e9813f448a16758204e1db707c40c2418eb0dbc7f99f09/theme-pinkpinkpink-v1.1.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/pinkpinkpink/","maintainer":"Livbaire","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Colorful"]},{"id":"roreddos_theme","schema_version":"1.0.0","name":"RoReddosTheme","version":"1.0.1","tagline":"A clean, dark minimal theme with deep red accents","archive_hash":"sha256:c7b99319e2e9c63d79392a16ff1411a3514d4053c6996be06e4c27074eaf7514","archive_size":5908,"archive_url":"https://extensions.blender.org/download/sha256:c7b99319e2e9c63d79392a16ff1411a3514d4053c6996be06e4c27074eaf7514/theme-roreddos-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/roreddos-theme/","maintainer":"RoReddo","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"edge_length_measure","schema_version":"1.0.0","name":"Edge Length Measure","version":"1.0.0","tagline":"Measure mesh edge lengths in Object Mode","archive_hash":"sha256:1fb1319bf07728a6c8cd4478f28a8ebb03072f0f2f10a2f7392c8586bfb73a0e","archive_size":16761,"archive_url":"https://extensions.blender.org/download/sha256:1fb1319bf07728a6c8cd4478f28a8ebb03072f0f2f10a2f7392c8586bfb73a0e/add-on-edge-length-measure-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/edge-length-measure/","maintainer":"binary-angel","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Mesh","Modeling"]},{"id":"theme_CrimsonAttack","schema_version":"1.0.0","name":"Crimson Attack","version":"1.0.0","tagline":"A Red hue'd version of blue invasion","archive_hash":"sha256:c797984cfd094d88741f76100340a6885e11d0d815da2ad8d15676f99f3d620c","archive_size":6231,"archive_url":"https://extensions.blender.org/download/sha256:c797984cfd094d88741f76100340a6885e11d0d815da2ad8d15676f99f3d620c/theme-theme-crimsonattack-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-crimsonattack/","maintainer":"zaq","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful","Inspired By"]},{"id":"viewport_fps","schema_version":"1.0.0","name":"Viewport FPS","version":"1.0.2","tagline":"Displays frames per second in current 3D viewport","archive_hash":"sha256:842eed9027d319486dd87aa88e48af6ca0a1c3077b9639ddd5f66e0b050f269f","archive_size":3040,"archive_url":"https://extensions.blender.org/download/sha256:842eed9027d319486dd87aa88e48af6ca0a1c3077b9639ddd5f66e0b050f269f/add-on-viewport-fps-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-fps/","maintainer":"Pazelock","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface","System"]},{"id":"VibeyTM_Pro","schema_version":"1.0.0","name":"Vibey™ Pro","version":"0.0.1","tagline":"Visually exciting yet fully functional","archive_hash":"sha256:dad4cca29ed2bbf3aa50a4b11551bf7474d3d0b0f8c12be6f1e5f271f448af92","archive_size":18840,"archive_url":"https://extensions.blender.org/download/sha256:dad4cca29ed2bbf3aa50a4b11551bf7474d3d0b0f8c12be6f1e5f271f448af92/theme-vibeytm-pro-v0.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/vibeytm-pro/","maintainer":"Fedor-Rezhenov","license":["SPDX:GPL-3.0-or-later"]},{"id":"rendercue","schema_version":"1.0.0","name":"RenderCue","version":"1.1.3","tagline":"Sequence. Queue. Render","archive_hash":"sha256:97fbabec32217c2438adda789ab6ef8a5beac6b90ac06fae3def010b47d2ba2b","archive_size":52378,"archive_url":"https://extensions.blender.org/download/sha256:97fbabec32217c2438adda789ab6ef8a5beac6b90ac06fae3def010b47d2ba2b/add-on-rendercue-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rendercue/","maintainer":"UsamaSQ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save renders to user-defined directories","network":"Send render notifications via Webhooks"},"tags":["Render","Pipeline"]},{"id":"io_xnalara","schema_version":"1.0.0","name":"XPS Import/Export","version":"2.3.0","tagline":"Import-Export for XNALara/XPS files","archive_hash":"sha256:0e0197fcccb6a889f53fe48e7734cce58992766d5dded3c219495da76615702c","archive_size":173848,"archive_url":"https://extensions.blender.org/download/sha256:0e0197fcccb6a889f53fe48e7734cce58992766d5dded3c219495da76615702c/add-on-io-xnalara-v2.3.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/io-xnalara/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Pipeline"]},{"id":"Three_d_Cursor_Snap","schema_version":"1.0.0","name":"Three d Cursor Snap","version":"1.2.0","tagline":"Move 3d cursor like gizmo to snap vertex, edge and face","archive_hash":"sha256:5b7031eb3fdc8b85bb272c2483239741932434b3fe6403fc0eedaa2a64e9ef55","archive_size":3579,"archive_url":"https://extensions.blender.org/download/sha256:5b7031eb3fdc8b85bb272c2483239741932434b3fe6403fc0eedaa2a64e9ef55/add-on-three-d-cursor-snap-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/three-d-cursor-snap/","maintainer":"deepak756","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling","Mesh"]},{"id":"gzm_mod","schema_version":"1.0.0","name":"GZM 3D model format","version":"1.1.0","tagline":"Import-export 3D models for the GZM game","archive_hash":"sha256:b37590a0769e21e94c2f461faa83e2e54cbe22de6d0a1d45e64f97cd3270b6e9","archive_size":26696,"archive_url":"https://extensions.blender.org/download/sha256:b37590a0769e21e94c2f461faa83e2e54cbe22de6d0a1d45e64f97cd3270b6e9/add-on-gzm-mod-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gzm-mod/","maintainer":"777-tanks","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"batch_camera_render","schema_version":"1.0.0","name":"Batch Render Cameras","version":"2.2.1","tagline":"Render animations from multiple selected cameras","archive_hash":"sha256:13cf0fa7db66a4f29c64227622b6211f5d3816008b7aabf71b75e50893985832","archive_size":5224,"archive_url":"https://extensions.blender.org/download/sha256:13cf0fa7db66a4f29c64227622b6211f5d3816008b7aabf71b75e50893985832/add-on-batch-camera-render-v2.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-camera-render/","maintainer":"Mahdi.Shalchian","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create output folders for rendered frames"},"tags":["Render","Camera"]},{"id":"blur_hdri","schema_version":"1.0.0","name":"Blur HDRI","version":"0.0.10","tagline":"Blur HDRI Images by creating a new node with a Gaussian Blur","archive_hash":"sha256:8b4ac375baefb660a055d517b0554bc94c6338cb02beeaf13e0993a12ccdc2da","archive_size":7813271,"archive_url":"https://extensions.blender.org/download/sha256:8b4ac375baefb660a055d517b0554bc94c6338cb02beeaf13e0993a12ccdc2da/add-on-blur-hdri-v0.0.10-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/blur-hdri/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Material","Lighting"]},{"id":"node_editor_pro","schema_version":"1.0.0","name":"Node Editor Pro","version":"0.5.0","tagline":"Organize nodes with auto-layout, snap and cleanup","archive_hash":"sha256:ba6cd0cbb08dcfa05a99680f6c27a29ba090bf795bb057589372e3d9b08c3f7c","archive_size":4809,"archive_url":"https://extensions.blender.org/download/sha256:ba6cd0cbb08dcfa05a99680f6c27a29ba090bf795bb057589372e3d9b08c3f7c/add-on-node-editor-pro-v0.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-editor-pro/","maintainer":"the_visual_geek","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"data_scale","schema_version":"1.0.0","name":"ID Tools","version":"1.2.0","tagline":"Assortment of tools for the manipulation of data-blocks","archive_hash":"sha256:6aee14fa7c34487d34a4822ffacc829876382eccf7a8ae6382f84cdc9a61e646","archive_size":22974,"archive_url":"https://extensions.blender.org/download/sha256:6aee14fa7c34487d34a4822ffacc829876382eccf7a8ae6382f84cdc9a61e646/add-on-data-scale-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/data-scale/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Temporarily create .blend files to weigh them"},"tags":["Import-Export"]},{"id":"render_notifications_extension","schema_version":"1.0.0","name":"Render Notifications","version":"1.3.0","tagline":"Notifies you via Discord, desktop, or webhook on render events","archive_hash":"sha256:d434cf139c1797966ab6b7cd54181f46ab0b323f4f27995f2155260511985649","archive_size":5698228,"archive_url":"https://extensions.blender.org/download/sha256:d434cf139c1797966ab6b7cd54181f46ab0b323f4f27995f2155260511985649/add-on-render-notifications-extension-v1.3.0-windows-x64.zip","type":"add-on","blender_version_min":"4.3.2","website":"https://extensions.blender.org/add-ons/render-notifications-extension/","maintainer":"JimmyNoStar","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Needed to send notifications via webhooks and Discord"},"platforms":["windows-x64"],"tags":["Render","System"]},{"id":"anim_offset_pro","schema_version":"1.0.0","name":"Anim Offset Pro","version":"1.3.0","tagline":"Offset poses across animation keyframes","archive_hash":"sha256:dd1d412f81e9e875bfb4c58d445cd64f904953febf61f05417ca0cf86d7c0ecd","archive_size":5091,"archive_url":"https://extensions.blender.org/download/sha256:dd1d412f81e9e875bfb4c58d445cd64f904953febf61f05417ca0cf86d7c0ecd/add-on-anim-offset-pro-v1.3.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/anim-offset-pro/","maintainer":"Drika111.","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"shape_key_utilities_enhanced","schema_version":"1.0.0","name":"Shape Key & Vertex Groups Utilities Enhanced","version":"1.1.1","tagline":"Comprehensive shape key and vertex group management tools","archive_hash":"sha256:f7d756df3bb017b871d7057fb727e79ac98a5e235fc0fa0ad83c7cca78127527","archive_size":21006,"archive_url":"https://extensions.blender.org/download/sha256:f7d756df3bb017b871d7057fb727e79ac98a5e235fc0fa0ad83c7cca78127527/add-on-shape-key-utilities-enhanced-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/shape-key-utilities-enhanced/","maintainer":"LeafyBush7","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object","Modeling"]},{"id":"dynamic_render_border","schema_version":"1.0.0","name":"Dynamic Render Border","version":"1.0.1","tagline":"Addon to create dynamic render borders for animations","archive_hash":"sha256:b7ad62a75bfeb6066efe981c1afaec3a7e048d134903c2f50e0aea695b184986","archive_size":7352,"archive_url":"https://extensions.blender.org/download/sha256:b7ad62a75bfeb6066efe981c1afaec3a7e048d134903c2f50e0aea695b184986/add-on-dynamic-render-border-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-render-border/","maintainer":"tobiaskummer","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","Animation"]},{"id":"shapeFitter","schema_version":"1.0.0","name":"Shape Fitter","version":"1.3.1","tagline":"Fit primitive shapes to verticies","archive_hash":"sha256:b435b06bca5fb8895246639d92d03f3f62adb71b4cb656b3a1e85a08b241be58","archive_size":10853,"archive_url":"https://extensions.blender.org/download/sha256:b435b06bca5fb8895246639d92d03f3f62adb71b4cb656b3a1e85a08b241be58/add-on-shapefitter-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapefitter/","maintainer":"pfalkingham","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"trimmer","schema_version":"1.0.0","name":"Trimmer","version":"0.3.0","tagline":"Simplified texturing workflow for trim-sheets","archive_hash":"sha256:fd310ab53bf5e974d603924e68067671b23084859b99f2d6d52e878efb3ddff5","archive_size":12275,"archive_url":"https://extensions.blender.org/download/sha256:fd310ab53bf5e974d603924e68067671b23084859b99f2d6d52e878efb3ddff5/add-on-trimmer-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/trimmer/","maintainer":"LaXHeXLuX","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"extrude_along_path","schema_version":"1.0.0","name":"Extrude Along Path","version":"2.2.0","tagline":"Extrude or Rake profile geometry Along a defined Path","archive_hash":"sha256:5afb06c2fbffb81d72e4041aa2b56e04fc2ed0cd0fca7bbe12d57cd4abe73283","archive_size":15621,"archive_url":"https://extensions.blender.org/download/sha256:5afb06c2fbffb81d72e4041aa2b56e04fc2ed0cd0fca7bbe12d57cd4abe73283/add-on-extrude-along-path-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/extrude-along-path/","maintainer":"RobbieK","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"camera_viewer","schema_version":"1.0.0","name":"Camera Viewer","version":"1.1.4","tagline":"You can preview the camera view directly in the 3D viewport","archive_hash":"sha256:9545f50ff8d23fb6a1a6c1b1b0bc3e47f64be484d731091e81b7619a2b56fe79","archive_size":11337,"archive_url":"https://extensions.blender.org/download/sha256:9545f50ff8d23fb6a1a6c1b1b0bc3e47f64be484d731091e81b7619a2b56fe79/add-on-camera-viewer-v1.1.4.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/camera-viewer/","maintainer":"KENKEN","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"meshstats","schema_version":"1.0.0","name":"Meshstats","version":"1.3.2","tagline":"Mesh statistics","archive_hash":"sha256:54bbc62131198db4c4c7f3f74276ef835cf8719d3ea57598e8dfac3758652421","archive_size":55105,"archive_url":"https://extensions.blender.org/download/sha256:54bbc62131198db4c4c7f3f74276ef835cf8719d3ea57598e8dfac3758652421/add-on-meshstats-v1.3.2.zip","type":"add-on","blender_version_min":"4.2.2","website":"https://extensions.blender.org/add-ons/meshstats/","maintainer":"muhuk","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"requin_blue_theme","schema_version":"1.0.0","name":"Requin Blue","version":"1.2.0","tagline":"This is a Blender theme with a major blue color","archive_hash":"sha256:f9719297e08b25c93ad28a52aaed35103e3484588373d059096c87514dd7fa42","archive_size":6733,"archive_url":"https://extensions.blender.org/download/sha256:f9719297e08b25c93ad28a52aaed35103e3484588373d059096c87514dd7fa42/theme-requin-blue-theme-v1.2.0.zip","type":"theme","blender_version_min":"5.0.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/themes/requin-blue-theme/","maintainer":"MozzarellaARC","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"Auto_Sort_Collections","schema_version":"1.0.0","name":"Auto Sort Collections","version":"1.0.3","tagline":"Automatic organisation of collections","archive_hash":"sha256:6bf044c291ef9e6c9c7fd0fe6eb56c93e9f6925b81adab32f96bbbfd999739fb","archive_size":10344,"archive_url":"https://extensions.blender.org/download/sha256:6bf044c291ef9e6c9c7fd0fe6eb56c93e9f6925b81adab32f96bbbfd999739fb/add-on-auto-sort-collections-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-sort-collections/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene"]},{"id":"auto_dark_mode","schema_version":"1.0.0","name":"Auto Dark Mode","version":"3.0.0","tagline":"Automatically follow the system light/dark mode","archive_hash":"sha256:a1e8a5f58f1bbeed52f5afcb6ed5b36c45f1e3642419becf8f6472967963260b","archive_size":11993,"archive_url":"https://extensions.blender.org/download/sha256:a1e8a5f58f1bbeed52f5afcb6ed5b36c45f1e3642419becf8f6472967963260b/add-on-auto-dark-mode-v3.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-dark-mode/","maintainer":"dprice","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read installed themes"},"tags":["System","User Interface"]},{"id":"f1dg3t_blender_red","schema_version":"1.0.0","name":"F1dg3t Red","version":"1.1.0","tagline":"Perfect for Shadow State 2","archive_hash":"sha256:0288b146cc76cd0f5bbe25c87639a1a150e9298cf64c66eb7ae2f55d60953680","archive_size":6491,"archive_url":"https://extensions.blender.org/download/sha256:0288b146cc76cd0f5bbe25c87639a1a150e9298cf64c66eb7ae2f55d60953680/theme-f1dg3t-blender-red-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/f1dg3t-blender-red/","maintainer":"F1dg3t","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"blue_genes","schema_version":"1.0.0","name":"Blue Genes","version":"1.0.3","tagline":"Dark Blue, Readable Daily Driver","archive_hash":"sha256:dbd30beb266dff2448d87b8e592e1afce7330b5d79ec4c1ef7a4b3c3d1c9e61e","archive_size":5997,"archive_url":"https://extensions.blender.org/download/sha256:dbd30beb266dff2448d87b8e592e1afce7330b5d79ec4c1ef7a4b3c3d1c9e61e/theme-blue-genes-v1.0.3.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/blue-genes/","maintainer":"SpectralVectors","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"save_with_versioning","schema_version":"1.0.0","name":"Save with Versioning","version":"2.1.0","tagline":"Save incremental and use published files for asset linking","archive_hash":"sha256:7481617c63e770530f3e37d0d3519eaca1b3cd7589e21ddedc4f26912f50b6ff","archive_size":20710,"archive_url":"https://extensions.blender.org/download/sha256:7481617c63e770530f3e37d0d3519eaca1b3cd7589e21ddedc4f26912f50b6ff/add-on-save-with-versioning-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/save-with-versioning/","maintainer":"DShot92","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save .blend files"},"tags":["Pipeline"]},{"id":"is_key_free","schema_version":"1.0.0","name":"Is key Free","version":"1.1.3","tagline":"Find free shortcuts, inform about used and print a key list","archive_hash":"sha256:68b702bfc895175d2b3dad64880e2249e97b8f461510bf20e9ab6951fcc67d3a","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:68b702bfc895175d2b3dad64880e2249e97b8f461510bf20e9ab6951fcc67d3a/add-on-is-key-free-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/is-key-free/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Development"]},{"id":"archimesh","schema_version":"1.0.0","name":"Archimesh","version":"1.2.5","tagline":"Generate rooms, doors, windows, and other architecture objects","archive_hash":"sha256:44745a86dd472e296e06cd45c511e002a1105512a73009cb0018c87611d18d87","archive_size":323488,"archive_url":"https://extensions.blender.org/download/sha256:44745a86dd472e296e06cd45c511e002a1105512a73009cb0018c87611d18d87/add-on-archimesh-v1.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/archimesh/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"scatter_objects","schema_version":"1.0.0","name":"Scatter Objects","version":"0.2.0","tagline":"Distribute object instances on another object","archive_hash":"sha256:3fda488f56523b799e3937c802119f1da986391e193cb4d443177e6e132c764b","archive_size":6876,"archive_url":"https://extensions.blender.org/download/sha256:3fda488f56523b799e3937c802119f1da986391e193cb4d443177e6e132c764b/add-on-scatter-objects-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scatter-objects/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"sapling_tree_gen","schema_version":"1.0.0","name":"Sapling Tree Gen","version":"0.3.7","tagline":"Adds a parametric tree","archive_hash":"sha256:27a478262e1c86612a9c3daffe7f4dce2802f5bc2294033462e5adc6d9c0080f","archive_size":36296,"archive_url":"https://extensions.blender.org/download/sha256:27a478262e1c86612a9c3daffe7f4dce2802f5bc2294033462e5adc6d9c0080f/add-on-sapling-tree-gen-v0.3.7.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/sapling-tree-gen/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"node_group_utilities","schema_version":"1.0.0","name":"Node Group Utilities","version":"2.1.1","tagline":"Extra options and functions for node groups","archive_hash":"sha256:00fcf7000ecc7fc01b96293030269439cc6ef72809f5be80f806b7cb18afa4a5","archive_size":67952,"archive_url":"https://extensions.blender.org/download/sha256:00fcf7000ecc7fc01b96293030269439cc6ef72809f5be80f806b7cb18afa4a5/add-on-node-group-utilities-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-group-utilities/","maintainer":"Baraa-Khaled-Youssef","license":["SPDX:GPL-2.0-or-later"],"tags":["Node","Material"]},{"id":"flatterer","schema_version":"1.0.0","name":"Flatterer","version":"1.6.0","tagline":"Flat mesh to SVG exporter for laser cutters","archive_hash":"sha256:61241ed38f522af0152439c07d8654caf30a67e45f6b5298e8797061460a2559","archive_size":383844,"archive_url":"https://extensions.blender.org/download/sha256:61241ed38f522af0152439c07d8654caf30a67e45f6b5298e8797061460a2559/add-on-flatterer-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/flatterer/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export SVG files to disk"},"tags":["Import-Export"]},{"id":"pro_3d_dimension_tool","schema_version":"1.0.0","name":"Pro 3D Dimension Tool","version":"1.4.1","tagline":"Professional 3D dimensioning tool for Blender","archive_hash":"sha256:50647875cc65f7c5b8a19e4628bbdf433414d4955326b2faafdf43c05b0440f5","archive_size":22336,"archive_url":"https://extensions.blender.org/download/sha256:50647875cc65f7c5b8a19e4628bbdf433414d4955326b2faafdf43c05b0440f5/add-on-pro-3d-dimension-tool-v1.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pro-3d-dimension-tool/","maintainer":"DUONG-HOANG","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Modeling"]},{"id":"bombsquad_tools","schema_version":"1.0.0","name":"BombSquad Tools","version":"3.0.12","tagline":"Tools for creating BombSquad game assets","archive_hash":"sha256:0c5f2f5b01dd02165f9cb72b00f570636d75d62cbeed706bf10f90b4eff5cd00","archive_size":39147,"archive_url":"https://extensions.blender.org/download/sha256:0c5f2f5b01dd02165f9cb72b00f570636d75d62cbeed706bf10f90b4eff5cd00/add-on-bombsquad-tools-v3.0.12.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bombsquad-tools/","maintainer":"aryan02420","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export .bob, .cob, and .json files"},"tags":["Import-Export","Scene"]},{"id":"vertex_group_assistant","schema_version":"1.0.0","name":"Vertex Group Assistant","version":"1.0.2","tagline":"Simplifies clothing rigging for avatars","archive_hash":"sha256:a566528f6aad3e2971e874bad0c48e4094102f23ccb5ae92790b7803055d102c","archive_size":3846,"archive_url":"https://extensions.blender.org/download/sha256:a566528f6aad3e2971e874bad0c48e4094102f23ccb5ae92790b7803055d102c/add-on-vertex-group-assistant-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vertex-group-assistant/","maintainer":"Maro3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"blender_Run_Scripts_From_Folder","schema_version":"1.0.0","name":"Run Scripts From Folder","version":"0.0.7","tagline":"Execute script from Script Directiories","archive_hash":"sha256:cb458bdebbfcdb64b6a2262ca9fa83f7b23e062f39e305e6b95cc5b81d84cb47","archive_size":2464,"archive_url":"https://extensions.blender.org/download/sha256:cb458bdebbfcdb64b6a2262ca9fa83f7b23e062f39e305e6b95cc5b81d84cb47/add-on-blender-run-scripts-from-folder-v0.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-run-scripts-from-folder/","maintainer":"Alexander-Bicukow","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read .py files from disk"},"tags":["System"]},{"id":"convert_rotation_mode","schema_version":"1.0.0","name":"Convert Rotation Mode","version":"1.5.1","tagline":"Change rotation mode whilst preserving animation","archive_hash":"sha256:63ecb6db33c6cd21d98609286cfb3a780571cff3e5e8c6acb536cdb783fc3aec","archive_size":23134,"archive_url":"https://extensions.blender.org/download/sha256:63ecb6db33c6cd21d98609286cfb3a780571cff3e5e8c6acb536cdb783fc3aec/add-on-convert-rotation-mode-v1.5.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/convert-rotation-mode/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copy and paste bone transforms"},"tags":["Animation","3D View","Bake"]},{"id":"bdvd_SharpBlade","schema_version":"1.0.0","name":"Sharp Blade","version":"5.2.0","tagline":"Easy on the eyes, deep in the blue. Create freely","archive_hash":"sha256:b2b2199a00b52df8ad291b2625da12c478524e19c480cddc8ba04bbc46362e24","archive_size":5892,"archive_url":"https://extensions.blender.org/download/sha256:b2b2199a00b52df8ad291b2625da12c478524e19c480cddc8ba04bbc46362e24/theme-bdvd-sharpblade-v5.2.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/bdvd-sharpblade/","maintainer":"bdvd","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"dynamic_brush_menus","schema_version":"1.0.0","name":"Dynamic Brush Menus","version":"1.1.10","tagline":"Fast access to brushes & tools in Sculpt and Paint Modes","archive_hash":"sha256:ee971938173591236df0a08db5ebced525052b70fd0f69dbeae64598622fb400","archive_size":15222,"archive_url":"https://extensions.blender.org/download/sha256:ee971938173591236df0a08db5ebced525052b70fd0f69dbeae64598622fb400/add-on-dynamic-brush-menus-v1.1.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-brush-menus/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["User Interface"]},{"id":"visibility_handler","schema_version":"1.0.0","name":"Visibility handler","version":"1.1.3","tagline":"Copy visibility from viewport to render settings or vice versa","archive_hash":"sha256:44a76b38bbb79f925e0354bc1609856c500f0b1d084a14488516558f2c26219c","archive_size":8680,"archive_url":"https://extensions.blender.org/download/sha256:44a76b38bbb79f925e0354bc1609856c500f0b1d084a14488516558f2c26219c/add-on-visibility-handler-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/visibility-handler/","maintainer":"DanielBystedt","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"frutigeraero_orange","schema_version":"1.0.0","name":"Frutiger Aero Orange","version":"1.1.0","tagline":"The future we we're promised","archive_hash":"sha256:d4b57d63ab707be3edadbaa4f1c459a811dfea9012846f2bcc53b4692f8aaa61","archive_size":6374,"archive_url":"https://extensions.blender.org/download/sha256:d4b57d63ab707be3edadbaa4f1c459a811dfea9012846f2bcc53b4692f8aaa61/theme-frutigeraero-orange-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frutigeraero-orange/","maintainer":"Lightmare2000","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"blend_project_packer","schema_version":"1.0.0","name":"Blend Project Packer","version":"1.0.1","tagline":"Preflight and pack portable Blender projects","archive_hash":"sha256:31688f9ba88be0f22ac1828e148d889b1ed405078cea9345f8345db44c47394d","archive_size":152065,"archive_url":"https://extensions.blender.org/download/sha256:31688f9ba88be0f22ac1828e148d889b1ed405078cea9345f8345db44c47394d/add-on-blend-project-packer-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blend-project-packer/","maintainer":"JohnnyCake","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read scene assets and write portable folders or zip archives"},"tags":["Pipeline"]},{"id":"sculpting_planar_clo","schema_version":"1.0.0","name":"Planar Sculpting","version":"1.2.1","tagline":"Restores Classic Planar: Original Normal & Plane behavior","archive_hash":"sha256:6a056275993640de5422d8322304546ef23d8116d5c057e7a21ef9950f1d8578","archive_size":24699,"archive_url":"https://extensions.blender.org/download/sha256:6a056275993640de5422d8322304546ef23d8116d5c057e7a21ef9950f1d8578/add-on-sculpting-planar-clo-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpting-planar-clo/","maintainer":"clo1to5","license":["SPDX:GPL-3.0-or-later"]},{"id":"bagapaste","schema_version":"1.0.0","name":"BagaPaste","version":"1.0.3","tagline":"Paste clipboard images/URLs as planes or reference images","archive_hash":"sha256:9a306ef1bf9ebf07f6d7f2470655930ab2e00ac86cf1bd718b215ad3290f2569","archive_size":18406,"archive_url":"https://extensions.blender.org/download/sha256:9a306ef1bf9ebf07f6d7f2470655930ab2e00ac86cf1bd718b215ad3290f2569/add-on-bagapaste-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bagapaste/","maintainer":"Kiara_Bagattini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save clipboard or downloaded images to disk before importing","network":"Download images when the clipboard contains an HTTP/HTTPS URL","clipboard":"Read image/file/text data from the system clipboard"},"tags":["Import-Export","3D View"]},{"id":"image_sequence_to_mp4_video_converter","schema_version":"1.0.0","name":"Image Sequence to MP4 Video Converter","version":"1.0.3","tagline":"Convert image sequences to MP4 with custom resolution","archive_hash":"sha256:463d624dba76193ecf576cea46f8ea024372178e917036d0252b15fc7154f08d","archive_size":8152,"archive_url":"https://extensions.blender.org/download/sha256:463d624dba76193ecf576cea46f8ea024372178e917036d0252b15fc7154f08d/add-on-image-sequence-to-mp4-video-converter-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/image-sequence-to-mp4-video-converter/","maintainer":"Prince_Eagle","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"wfc_3d_generator","schema_version":"1.0.0","name":"WFC 3D Generator","version":"1.3.15","tagline":"Simple WFC 3D generator for procedural creation of objects","archive_hash":"sha256:f85fb64dee3a760872a6ef578fa5e7c2d31e27a68897ac6b8ff3418ec802c9b4","archive_size":71927,"archive_url":"https://extensions.blender.org/download/sha256:f85fb64dee3a760872a6ef578fa5e7c2d31e27a68897ac6b8ff3418ec802c9b4/add-on-wfc-3d-generator-v1.3.15.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wfc-3d-generator/","maintainer":"Jonny-B","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export constraints (JSON) from/to disk"},"tags":["Object","Modeling","Render","Game Engine"]},{"id":"expLODe","schema_version":"1.0.0","name":"expLODe","version":"1.0.2","tagline":"LOD automation script using Python and Blender","archive_hash":"sha256:e22b3e3e5986a89f0dc6febba53631b2e527fe759efe5745d3968f2053323c74","archive_size":22275,"archive_url":"https://extensions.blender.org/download/sha256:e22b3e3e5986a89f0dc6febba53631b2e527fe759efe5745d3968f2053323c74/add-on-explode-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/explode/","maintainer":"Rainma22","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FBX from/to disk"},"tags":["Import-Export"]},{"id":"SHIRAKUMO_rectangle_tools","schema_version":"1.0.0","name":"Rectangle Tools","version":"1.0.2","tagline":"Tools to more easily draw rectangles in edit mode","archive_hash":"sha256:16aa9da0c9d4eb8d0e7c9b94c1a1e1602a602c75109e2c8beeffb5648719ce9b","archive_size":7349,"archive_url":"https://extensions.blender.org/download/sha256:16aa9da0c9d4eb8d0e7c9b94c1a1e1602a602c75109e2c8beeffb5648719ce9b/add-on-shirakumo-rectangle-tools-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shirakumo-rectangle-tools/","maintainer":"shinmera","license":["SPDX:GPL-3.0-or-later","SPDX:Zlib"],"tags":["Modeling"]},{"id":"armature_deform_with_linked_groups","schema_version":"1.0.0","name":"Armature Deform with Linked Groups","version":"1.0.0","tagline":"Create an armature deformation using linked vertices","archive_hash":"sha256:1047c0266831c6a13fad2563b7e4e173338e13905b92be26f9ac48666eabc4b2","archive_size":4824,"archive_url":"https://extensions.blender.org/download/sha256:1047c0266831c6a13fad2563b7e4e173338e13905b92be26f9ac48666eabc4b2/add-on-armature-deform-with-linked-groups-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/armature-deform-with-linked-groups/","maintainer":"Suchaaver","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation","Mesh"]},{"id":"LinkageMarkingMenu","schema_version":"1.0.0","name":"Linkage Marking Menu","version":"1.0.5","tagline":"Customizable Marking Menu for Object and Edit modes","archive_hash":"sha256:30ab484d65284197c16c36b34413ebfbb48743700ecf1c39f361e9bb60f6cd4c","archive_size":18953,"archive_url":"https://extensions.blender.org/download/sha256:30ab484d65284197c16c36b34413ebfbb48743700ecf1c39f361e9bb60f6cd4c/add-on-linkagemarkingmenu-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/linkagemarkingmenu/","maintainer":"Linkage","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"eevee_projectors","schema_version":"1.0.0","name":"Eevee Projectors","version":"1.1.1","tagline":"Fake Projector lights in Eeve","archive_hash":"sha256:f43016da2aba44eeb36dbcadee9116495c46721e33580af67fa487ae7305749e","archive_size":285870,"archive_url":"https://extensions.blender.org/download/sha256:f43016da2aba44eeb36dbcadee9116495c46721e33580af67fa487ae7305749e/add-on-eevee-projectors-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/eevee-projectors/","maintainer":"F1dg3t","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting","Object"]},{"id":"align_tools","schema_version":"1.0.0","name":"Align Tools","version":"0.3.6","tagline":"Align Selected Objects to Active Object","archive_hash":"sha256:741ca75b391bda65d2dc22160b4f594b7d4ed9a8772dd055535b7c2c7eb9b9de","archive_size":6743,"archive_url":"https://extensions.blender.org/download/sha256:741ca75b391bda65d2dc22160b4f594b7d4ed9a8772dd055535b7c2c7eb9b9de/add-on-align-tools-v0.3.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/align-tools/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"RigFlex","schema_version":"1.0.0","name":"RigFlex","version":"4.2.1","tagline":"Simple Soft Body Simulation for Armatures","archive_hash":"sha256:c225c679634d5872fa6f6baf1e0bf513ececa90e8243cd30747fc825e743b064","archive_size":8750,"archive_url":"https://extensions.blender.org/download/sha256:c225c679634d5872fa6f6baf1e0bf513ececa90e8243cd30747fc825e743b064/add-on-rigflex-v4.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rigflex/","maintainer":"Nerk","license":["SPDX:GPL-2.0-or-later"],"tags":["Animation","Physics","Rigging"]},{"id":"FavoriteObjects","schema_version":"1.0.0","name":"Favorite Objects","version":"1.0.5","tagline":"Mark your favorite objects and select them from the Viewport","archive_hash":"sha256:88b3d6b72968ba21a2771608335635237bd9bb56338423aab049bd0a9e6e01c6","archive_size":5933,"archive_url":"https://extensions.blender.org/download/sha256:88b3d6b72968ba21a2771608335635237bd9bb56338423aab049bd0a9e6e01c6/add-on-favoriteobjects-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/favoriteobjects/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"property_chart","schema_version":"1.0.0","name":"Property Chart","version":"0.1.2","tagline":"Edit properties simultaneously for selected objects/sequencer","archive_hash":"sha256:9239bce660c04eb8a3a4bd5f5bca5f3291fb6ad13cee1cf2cca2386f00cda9ed","archive_size":2959,"archive_url":"https://extensions.blender.org/download/sha256:9239bce660c04eb8a3a4bd5f5bca5f3291fb6ad13cee1cf2cca2386f00cda9ed/add-on-property-chart-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/property-chart/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"gp_to_curves","schema_version":"1.0.0","name":"Grease Pencil to Curves","version":"0.4.5","tagline":"Quickly convert Grease Pencil strokes to simple curves and hair","archive_hash":"sha256:42d5a745d6c1f48a82610aa686c21ad41e2036bd9f8edd6c71dd0742034f6ad5","archive_size":6977,"archive_url":"https://extensions.blender.org/download/sha256:42d5a745d6c1f48a82610aa686c21ad41e2036bd9f8edd6c71dd0742034f6ad5/add-on-gp-to-curves-v0.4.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/gp-to-curves/","maintainer":"DadsCastle","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil","Add Curve","Modeling"]},{"id":"frutigeraero_green","schema_version":"1.0.0","name":"Frutiger Aero Green","version":"1.0.0","tagline":"The future we we're promised","archive_hash":"sha256:bd727fff80e17d0cb2b5bb7601db635ae9366f9455d1e337f3696708e7e7921c","archive_size":6419,"archive_url":"https://extensions.blender.org/download/sha256:bd727fff80e17d0cb2b5bb7601db635ae9366f9455d1e337f3696708e7e7921c/theme-frutigeraero-green-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frutigeraero-green/","maintainer":"Lightmare2000","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"randomizer","schema_version":"1.0.0","name":"Material Randomizer Pro","version":"1.10.0","tagline":"Material Randomization Tools","archive_hash":"sha256:8747ea7cad63a28ebba701b426f306ad6fc1bf8c66f7486c222a40120f902d46","archive_size":10795,"archive_url":"https://extensions.blender.org/download/sha256:8747ea7cad63a28ebba701b426f306ad6fc1bf8c66f7486c222a40120f902d46/add-on-randomizer-v1.10.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/randomizer/","maintainer":"lambdawalker","license":["SPDX:GPL-3.0-or-later"]},{"id":"Connecter","schema_version":"1.0.0","name":"Connecter","version":"0.6.20","tagline":"Streamlined Asset Management: Import & Export with Connecter DAM","archive_hash":"sha256:4aac3920620b8a259d6736a7f48668d44dd1a23fb8de2df3be0c51de2b799310","archive_size":392369,"archive_url":"https://extensions.blender.org/download/sha256:4aac3920620b8a259d6736a7f48668d44dd1a23fb8de2df3be0c51de2b799310/add-on-connecter-v0.6.20-windows-x64-windows-arm64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/connecter/","maintainer":"DesignConnected","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export blend files from/to disk"},"platforms":["windows-x64","windows-arm64"],"tags":["Import-Export"]},{"id":"render_multiple_instances","schema_version":"1.0.0","name":"Render Multiple Instances","version":"3.2.1","tagline":"Render animations and Flipbooks faster with multiple instances","archive_hash":"sha256:d4d4a14874541dcbf6cccf740ee21a142e9ae8a5b46bab532ba3822a0cc0c2dc","archive_size":8380,"archive_url":"https://extensions.blender.org/download/sha256:d4d4a14874541dcbf6cccf740ee21a142e9ae8a5b46bab532ba3822a0cc0c2dc/add-on-render-multiple-instances-v3.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-multiple-instances/","maintainer":"DShot92","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and read exports images"},"tags":["Render","Pipeline"]},{"id":"turnaround_camera","schema_version":"1.0.0","name":"Turnaround Camera","version":"0.3.0","tagline":"Add a camera rotation around selected object","archive_hash":"sha256:e9bfadd7d4d9e7dcfde9d0effa1815f9170561a81b63bee549b066c31aa48efa","archive_size":3237,"archive_url":"https://extensions.blender.org/download/sha256:e9bfadd7d4d9e7dcfde9d0effa1815f9170561a81b63bee549b066c31aa48efa/add-on-turnaround-camera-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/turnaround-camera/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Animation"]},{"id":"carver","schema_version":"1.0.0","name":"Carver","version":"1.2.3","tagline":"Multiple tools to carve or to create objects","archive_hash":"sha256:4c0b7c0c2906e09ee96fd2d5bb0d36f0be439a41f6f222ae48f38c317262ac3b","archive_size":29032,"archive_url":"https://extensions.blender.org/download/sha256:4c0b7c0c2906e09ee96fd2d5bb0d36f0be439a41f6f222ae48f38c317262ac3b/add-on-carver-v1.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/carver/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"soretro_5x","schema_version":"1.0.0","name":"So Retro 5X","version":"1.0.0","tagline":"Nostalgia theme by Strawberiie-Orea, 5.1 update by Ozbren","archive_hash":"sha256:c3c3e4950cb6f94d405527164e30b402fb57b4cf69c190e909e3243974438ab5","archive_size":5648,"archive_url":"https://extensions.blender.org/download/sha256:c3c3e4950cb6f94d405527164e30b402fb57b4cf69c190e909e3243974438ab5/theme-soretro-5x-v1.0.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/soretro-5x/","maintainer":"Ozbren","license":["SPDX:GPL-2.0-or-later"]},{"id":"LocUMan","schema_version":"1.0.0","name":"Local User Manual File URL","version":"0.0.1","tagline":"Override the user manual URL to use a local copy","archive_hash":"sha256:064f69ef467d7dc03f3deac2749191fb14fce3d52e02f1228d850984a1d4c09c","archive_size":7175,"archive_url":"https://extensions.blender.org/download/sha256:064f69ef467d7dc03f3deac2749191fb14fce3d52e02f1228d850984a1d4c09c/add-on-locuman-v0.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/locuman/","maintainer":"dupoxy","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Extract the user manual to disk","network":"Need to download the user manual","clipboard":"Copy and paste the expected folder path"},"tags":["User Interface","System"]},{"id":"Matcha_Latte_Theme","schema_version":"1.0.0","name":"Matcha_Latte_Theme","version":"1.0.1","tagline":"Green Tea and Cream Milk","archive_hash":"sha256:298cac82452e569ba0257b34740d683ee5ca5b4fcf822d811b9033864326657d","archive_size":5916,"archive_url":"https://extensions.blender.org/download/sha256:298cac82452e569ba0257b34740d683ee5ca5b4fcf822d811b9033864326657d/theme-matcha-latte-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/matcha-latte-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Colorful"]},{"id":"minislicer","schema_version":"1.0.0","name":"MiniSlicer","version":"1.2.1","tagline":"Slice and export .phz/.ctb files for Phrozen resin printers","archive_hash":"sha256:83dca8081ad6a22b24ca6adc8830d63c8dc2ecf02f71a9f13b1b64dfefbea8a2","archive_size":28018,"archive_url":"https://extensions.blender.org/download/sha256:83dca8081ad6a22b24ca6adc8830d63c8dc2ecf02f71a9f13b1b64dfefbea8a2/add-on-minislicer-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/minislicer/","maintainer":"Germán-Andrés-Soto-Castro","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write the exported printer file (.phz/.ctb)"},"tags":["Object"]},{"id":"layer_vertex_colors","schema_version":"1.0.0","name":"Layer Vertex Colors","version":"1.0.2","tagline":"Layered vertex color slot system","archive_hash":"sha256:cc1e24f182dfb40cbcf19176e993b2754ae2a034d7085bfffde1f204cbb032dd","archive_size":19283,"archive_url":"https://extensions.blender.org/download/sha256:cc1e24f182dfb40cbcf19176e993b2754ae2a034d7085bfffde1f204cbb032dd/add-on-layer-vertex-colors-v1.0.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/layer-vertex-colors/","maintainer":"xqfa","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write mesh attribute data for vertex color slots"}},{"id":"blendgrey","schema_version":"1.0.0","name":"BlendGrey","version":"1.1.0","tagline":"Color-neutral theme inspired by the iconic Blender 2.7 aesthetic","archive_hash":"sha256:9e3a226fd873baf7823ff49cd7619030d225275e6525836f7b5b080f13574653","archive_size":5859,"archive_url":"https://extensions.blender.org/download/sha256:9e3a226fd873baf7823ff49cd7619030d225275e6525836f7b5b080f13574653/theme-blendgrey-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blendgrey/","maintainer":"iamren","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"mesh_filters","schema_version":"1.0.0","name":"Mesh Filters","version":"1.0.1","tagline":"Combinable filter stack for mesh selection","archive_hash":"sha256:d62c17957450f676d7556e2da8865eac251076245a5ddc997867245e90fceacf","archive_size":5097,"archive_url":"https://extensions.blender.org/download/sha256:d62c17957450f676d7556e2da8865eac251076245a5ddc997867245e90fceacf/add-on-mesh-filters-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-filters/","maintainer":"Hartface","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"hair_net","schema_version":"1.0.0","name":"Hair Net","version":"1.0.0","tagline":"Converts mesh and curves into particle hair","archive_hash":"sha256:69a746f4c1d8766103b21af13679b3ee843dcf1e0aa396223d40071701327f16","archive_size":67446,"archive_url":"https://extensions.blender.org/download/sha256:69a746f4c1d8766103b21af13679b3ee843dcf1e0aa396223d40071701327f16/add-on-hair-net-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/hair-net/","maintainer":"Holo_X","license":["SPDX:GPL-3.0-or-later"],"tags":["Physics","Pipeline"]},{"id":"image_remap","schema_version":"1.0.0","name":"Image Remap Canvas","version":"0.2.0","tagline":"Extract perspective regions into a GPU canvas","archive_hash":"sha256:dbeb268e2ff39e8324f3ba8c22d14261cae0210b74a7b29990f5b7ce221aa42d","archive_size":34853,"archive_url":"https://extensions.blender.org/download/sha256:dbeb268e2ff39e8324f3ba8c22d14261cae0210b74a7b29990f5b7ce221aa42d/add-on-image-remap-v0.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/image-remap/","maintainer":"atticuslv","license":["SPDX:GPL-3.0-or-later"]},{"id":"hardflow","schema_version":"1.0.0","name":"Hardflow","version":"1.21.0","tagline":"Open source hard surface boolean modeling toolkit","archive_hash":"sha256:7840aadec9d0e02b31f6143712b63d784f59ad121f8cd1581ebfecbbb8d2297f","archive_size":256552,"archive_url":"https://extensions.blender.org/download/sha256:7840aadec9d0e02b31f6143712b63d784f59ad121f8cd1581ebfecbbb8d2297f/add-on-hardflow-v1.21.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hardflow/","maintainer":"ugulay","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"unity_style_walk_navigation","schema_version":"1.0.0","name":"Unity Style Walk Navigation","version":"1.2.0","tagline":"Unity-style right-click first-person walk navigation","archive_hash":"sha256:e83f4d3590d7b7ba7d5a4bac587dcec4543c77b0701c8302aceb1a1e6d94d10a","archive_size":23463,"archive_url":"https://extensions.blender.org/download/sha256:e83f4d3590d7b7ba7d5a4bac587dcec4543c77b0701c8302aceb1a1e6d94d10a/add-on-unity-style-walk-navigation-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unity-style-walk-navigation/","maintainer":"時の勇者","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"img2cube","schema_version":"1.0.0","name":"img2cube","version":"1.0.6","tagline":"Camera-match a photo from drawn lines, then drop 3D snap points","archive_hash":"sha256:442a8134679e1dd8443f052503872df57ea0b07aefd5dbb24ae1be3756803ab6","archive_size":28044,"archive_url":"https://extensions.blender.org/download/sha256:442a8134679e1dd8443f052503872df57ea0b07aefd5dbb24ae1be3756803ab6/add-on-img2cube-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/img2cube/","maintainer":"LongLiveTheCube","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","Modeling"]},{"id":"keyboardandmousetracker","schema_version":"1.0.0","name":"Keyboard and mouse tracker","version":"1.0.2","tagline":"Keyboard & mouse tracker","archive_hash":"sha256:9d6ada5db978016212c57fd7e1d34b364353cc2e545dc11abce12f16d1f624ef","archive_size":3761,"archive_url":"https://extensions.blender.org/download/sha256:9d6ada5db978016212c57fd7e1d34b364353cc2e545dc11abce12f16d1f624ef/add-on-keyboardandmousetracker-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyboardandmousetracker/","maintainer":"Stefan2814","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes"]},{"id":"cad2cube","schema_version":"1.0.0","name":"CAD2Cube — DXF Importer","version":"1.5.0","tagline":"Free DXF importer with layers, units and block instances","archive_hash":"sha256:60c32d9bfcc46fcaf9b415a82a793d8c1f4ac8fa3c98e380a74b9c18c3df6cb5","archive_size":2583424,"archive_url":"https://extensions.blender.org/download/sha256:60c32d9bfcc46fcaf9b415a82a793d8c1f4ac8fa3c98e380a74b9c18c3df6cb5/add-on-cad2cube-v1.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cad2cube/","maintainer":"LongLiveTheCube","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import DXF files from disk"},"tags":["Import-Export"]},{"id":"basic_cad_red","schema_version":"1.0.0","name":"Basic CAD - Red","version":"1.0.1","tagline":"A theme inspired by CAD programs","archive_hash":"sha256:87c05ed777a6c1fda4a4a1a7389b6d910c5339d934be62db38e1dfcf9deaa77b","archive_size":5926,"archive_url":"https://extensions.blender.org/download/sha256:87c05ed777a6c1fda4a4a1a7389b6d910c5339d934be62db38e1dfcf9deaa77b/theme-basic-cad-red-v1.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/basic-cad-red/","maintainer":"Bebo","license":["SPDX:GPL-3.0-or-later"]},{"id":"pcam_solver","schema_version":"1.0.0","name":"PCamSolver","version":"1.0.2","tagline":"Pseudo 3D camera and object solving from 2D movie clip tracks","archive_hash":"sha256:fb89e97a25718443bf2870ca60790f1f5731a6c7fdfc973e11bd65f4403d2448","archive_size":50205,"archive_url":"https://extensions.blender.org/download/sha256:fb89e97a25718443bf2870ca60790f1f5731a6c7fdfc973e11bd65f4403d2448/add-on-pcam-solver-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pcam-solver/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Camera"]},{"id":"arc_interface","schema_version":"1.0.0","name":"ARC Interface","version":"1.0.0","tagline":"Engineering inspired holographic interface","archive_hash":"sha256:6168eee8618fb27fa5f45354b6969da98124c9767010da25acb5dea929f48672","archive_size":6111,"archive_url":"https://extensions.blender.org/download/sha256:6168eee8618fb27fa5f45354b6969da98124c9767010da25acb5dea929f48672/theme-arc-interface-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/arc-interface/","maintainer":"The_Iron_Maker","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By","Colorful"]},{"id":"plague_inc_cure_theme","schema_version":"1.0.0","name":"Plague Inc. - Cure Theme","version":"1.0.0","tagline":"Very blue theme","archive_hash":"sha256:6794e252932390d33e0f22bd7b4a31ac20e1f5971ee4fb8be375c6d4fb596bec","archive_size":6078,"archive_url":"https://extensions.blender.org/download/sha256:6794e252932390d33e0f22bd7b4a31ac20e1f5971ee4fb8be375c6d4fb596bec/theme-plague-inc-cure-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/plague-inc-cure-theme/","maintainer":"Bebo","license":["SPDX:GPL-3.0-or-later"]},{"id":"yaha","schema_version":"1.0.0","name":"Y.A.H.A","version":"1.0.1","tagline":"Yet Another HDRI Addon","archive_hash":"sha256:5ead7ec1c36e1e9e2dff9a49c69a5faa79a0aebef8df00d61fe8dddf0dcde027","archive_size":41767,"archive_url":"https://extensions.blender.org/download/sha256:5ead7ec1c36e1e9e2dff9a49c69a5faa79a0aebef8df00d61fe8dddf0dcde027/add-on-yaha-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/yaha/","maintainer":"ArtinŌr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Scan local folders to generate thumbnails and map environments"},"tags":["Lighting","Scene"]},{"id":"omi_physics_body_gltf_extension","schema_version":"1.0.0","name":"OMI Physics Body glTF Extension","version":"1.6.5","tagline":"Export primitive collision shapes from Blender to Godot via glTF","archive_hash":"sha256:6e343473b15e4b9d32f53cad59ffa42ca2347a8dfdc457da2cd94112acf1527b","archive_size":16883,"archive_url":"https://extensions.blender.org/download/sha256:6e343473b15e4b9d32f53cad59ffa42ca2347a8dfdc457da2cd94112acf1527b/add-on-omi-physics-body-gltf-extension-v1.6.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/omi-physics-body-gltf-extension/","maintainer":"ZycaR","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export glTF, GLB and Blender files from/to disk"},"tags":["Import-Export"]},{"id":"arch_generator","schema_version":"1.0.0","name":"Arch Generator","version":"1.0.1","tagline":"Generate procedural architectural arches, pillars and structures","archive_hash":"sha256:b0a902ee3c0ff7b5360c3056bc9a084ba8e9d9f94882f68151abffb8df5abb4c","archive_size":15104,"archive_url":"https://extensions.blender.org/download/sha256:b0a902ee3c0ff7b5360c3056bc9a084ba8e9d9f94882f68151abffb8df5abb4c/add-on-arch-generator-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/arch-generator/","maintainer":"Aniruddhya-goswami","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Add Mesh"]},{"id":"blendtopo","schema_version":"1.0.0","name":"Blendtopo - Topology Optimization","version":"1.0.0","tagline":"SIMP topology optimization for solid mesh parts","archive_hash":"sha256:c65502117009b9bfe78b4351baa7bdb20ec3b98d2b4a8b4239b16aed538b320b","archive_size":1205804,"archive_url":"https://extensions.blender.org/download/sha256:c65502117009b9bfe78b4351baa7bdb20ec3b98d2b4a8b4239b16aed538b320b/add-on-blendtopo-v1.0.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blendtopo/","maintainer":"Blenderhead-engineer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Exchanges data with helper subprocesses during optimization"},"platforms":["windows-x64"],"tags":["Mesh","Physics"]},{"id":"exact_radius","schema_version":"1.0.0","name":"Exact Radius","version":"1.9.4","tagline":"Make selected vertex rings exact-radius circles, many at once","archive_hash":"sha256:f2c9ad957a7a3d408503649b9e559d0977dcc09ec2ef3f09dfc0cac2ef2dcd74","archive_size":25280,"archive_url":"https://extensions.blender.org/download/sha256:f2c9ad957a7a3d408503649b9e559d0977dcc09ec2ef3f09dfc0cac2ef2dcd74/add-on-exact-radius-v1.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/exact-radius/","maintainer":"Patrick-Tiefenbacher","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"helio","schema_version":"1.0.0","name":"Helio","version":"1.1.1","tagline":"Automatic lighting of the scene based on GPS, date and time","archive_hash":"sha256:a190743fc32fd7d3a1c4937b29405cf92fe717d2a3af8caa9b8928b1bc80f789","archive_size":431226,"archive_url":"https://extensions.blender.org/download/sha256:a190743fc32fd7d3a1c4937b29405cf92fe717d2a3af8caa9b8928b1bc80f789/add-on-helio-v1.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/helio/","maintainer":"Mikydosh","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"bay_area","schema_version":"1.0.0","name":"Bay Area","version":"1.0.0","tagline":"Red and gold theme for Blender 5","archive_hash":"sha256:64c54a905ead56013de315c78a5d0aff102aeeeffa0a846a8f293eb05c5285eb","archive_size":6539,"archive_url":"https://extensions.blender.org/download/sha256:64c54a905ead56013de315c78a5d0aff102aeeeffa0a846a8f293eb05c5285eb/theme-bay-area-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/bay-area/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"sculpt_pose_sync","schema_version":"1.0.0","name":"Sculpt Pose Sync","version":"34.0.0","tagline":"Dual-window workflow for symmetrical posed model sculpting","archive_hash":"sha256:1189b58caee8a175176fb2d64ea034c77043c3d669de8d6748bd067268d2bd73","archive_size":9052,"archive_url":"https://extensions.blender.org/download/sha256:1189b58caee8a175176fb2d64ea034c77043c3d669de8d6748bd067268d2bd73/add-on-sculpt-pose-sync-v34.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpt-pose-sync/","maintainer":"mamenr","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt"]},{"id":"refboard","schema_version":"1.0.0","name":"RefBoard","version":"1.5.2","tagline":"Arrange image references inside a dedicated node editor","archive_hash":"sha256:63e5ea6e313c58c5df1c575760256350310e93bcfe7a2b4d85744570026c1037","archive_size":3822996,"archive_url":"https://extensions.blender.org/download/sha256:63e5ea6e313c58c5df1c575760256350310e93bcfe7a2b4d85744570026c1037/add-on-refboard-v1.5.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/refboard/","maintainer":"MoseenkowAndrew","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load selected, dropped, or pasted images"},"platforms":["windows-x64"],"tags":["Node","User Interface"]},{"id":"node_exporter","schema_version":"1.0.0","name":"NodeExporter","version":"1.0.2","tagline":"Export node trees to a highly interactive HTML viewer","archive_hash":"sha256:406fd2baafbdb243d85ae258443657860e8c74fd60d0a218a0c16b865296b840","archive_size":20422,"archive_url":"https://extensions.blender.org/download/sha256:406fd2baafbdb243d85ae258443657860e8c74fd60d0a218a0c16b865296b840/add-on-node-exporter-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-exporter/","maintainer":"KrazyGFX","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"moldforge","schema_version":"1.0.0","name":"MoldForge","version":"0.25.7","tagline":"Generate printable silicone mold systems from a mesh","archive_hash":"sha256:b9ddc413ed9a7a3cb6ec17d47590d5b9e48b68ffb4799dec554e3701be3b9b69","archive_size":84605,"archive_url":"https://extensions.blender.org/download/sha256:b9ddc413ed9a7a3cb6ec17d47590d5b9e48b68ffb4799dec554e3701be3b9b69/add-on-moldforge-v0.25.7.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/moldforge/","maintainer":"Lyubomir-Todorov","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export the generated mold parts as STL files"},"tags":["Mesh","Modeling","Object"]},{"id":"black_acid","schema_version":"1.0.0","name":"Black Acid","version":"1.0.0","tagline":"Black and Neon Lime theme for Blender 5","archive_hash":"sha256:8d033728c864fff8f279bca2e415aedb37e65d1c39ed88a8033fbee23d2b7d3b","archive_size":6507,"archive_url":"https://extensions.blender.org/download/sha256:8d033728c864fff8f279bca2e415aedb37e65d1c39ed88a8033fbee23d2b7d3b/theme-black-acid-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/black-acid/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"mjolnir","schema_version":"1.0.0","name":"Mjolnir","version":"1.0.0","tagline":"Military green and yellow theme for Blender 5","archive_hash":"sha256:5f93901db3a668b013365b29a35d1e5c87b991a15f8d58be62250ee63f9ed9cb","archive_size":6566,"archive_url":"https://extensions.blender.org/download/sha256:5f93901db3a668b013365b29a35d1e5c87b991a15f8d58be62250ee63f9ed9cb/theme-mjolnir-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/mjolnir/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"unreal_viewport_navigation","schema_version":"1.0.0","name":"Unreal Viewport Navigation - WASD","version":"1.1.1","tagline":"Unreal-style RMB navigation with selectable movement keys","archive_hash":"sha256:877ce34f2da4a528ed1381459f4a72135ebb9807feb04d52f2266f1285e81aa9","archive_size":30777,"archive_url":"https://extensions.blender.org/download/sha256:877ce34f2da4a528ed1381459f4a72135ebb9807feb04d52f2266f1285e81aa9/add-on-unreal-viewport-navigation-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unreal-viewport-navigation/","maintainer":"Matsm-Studio","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"blendguard","schema_version":"1.0.0","name":"BlendGuard","version":"0.5.1","tagline":"See what a .blend will auto-run before you trust it","archive_hash":"sha256:20afde00350dd33eef7dce1624ec064427666e697865b33a826987811f364601","archive_size":30741,"archive_url":"https://extensions.blender.org/download/sha256:20afde00350dd33eef7dce1624ec064427666e697865b33a826987811f364601/add-on-blendguard-v0.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blendguard/","maintainer":"Arthur-Dutra","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read user-selected .blend files to inspect for scripts"},"tags":["Pipeline","System"]},{"id":"frutigeraero_blue","schema_version":"1.0.0","name":"Frutiger Aero Blue","version":"1.1.0","tagline":"The future we we're promised","archive_hash":"sha256:835904ec8da7c340003c65e2551266868439819628d76afb20888a9be27f6657","archive_size":6357,"archive_url":"https://extensions.blender.org/download/sha256:835904ec8da7c340003c65e2551266868439819628d76afb20888a9be27f6657/theme-frutigeraero-blue-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frutigeraero-blue/","maintainer":"Lightmare2000","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"novaskin_export","schema_version":"1.0.0","name":"NovaSkin Export","version":"1.4.2","tagline":"Export Minecraft scenes as re-skinnable browser wallpapers","archive_hash":"sha256:290a394150401c19260b1c21942185f344b909952d010979ce9742468e4f6956","archive_size":104675,"archive_url":"https://extensions.blender.org/download/sha256:290a394150401c19260b1c21942185f344b909952d010979ce9742468e4f6956/add-on-novaskin-export-v1.4.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/novaskin-export/","maintainer":"Saviski","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write the exported UV/mask/light files next to the .blend"},"tags":["Render","Pipeline"]},{"id":"prosit","schema_version":"1.0.0","name":"Prosit","version":"1.0.0","tagline":"Dark maroon and burnt orange theme for Blender 5","archive_hash":"sha256:fc1407e91787c03e8c2b6fea59d6302490a3c40b43e785c3574d7beb874e4c65","archive_size":6681,"archive_url":"https://extensions.blender.org/download/sha256:fc1407e91787c03e8c2b6fea59d6302490a3c40b43e785c3574d7beb874e4c65/theme-prosit-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/prosit/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"scientia","schema_version":"1.0.0","name":"Scientia","version":"1.0.0","tagline":"Dark red theme for Blender 5","archive_hash":"sha256:f185e1642d7a13f8ba860cb0986c4f0f4088e54c01aa8b0dce9a8eb4468f8372","archive_size":6717,"archive_url":"https://extensions.blender.org/download/sha256:f185e1642d7a13f8ba860cb0986c4f0f4088e54c01aa8b0dce9a8eb4468f8372/theme-scientia-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/scientia/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"camera_shift_sync","schema_version":"1.0.0","name":"Camera Shift Sync","version":"0.2.2","tagline":"Compose-preserving camera moves around a world-fixed target","archive_hash":"sha256:8b75bb5497577a1d0c7ac80c02841c726b14d684cab0058e216ededf9eed2fb6","archive_size":38104,"archive_url":"https://extensions.blender.org/download/sha256:8b75bb5497577a1d0c7ac80c02841c726b14d684cab0058e216ededf9eed2fb6/add-on-camera-shift-sync-v0.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camera-shift-sync/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"green_viz","schema_version":"1.0.0","name":"Green Viz","version":"1.0.4","tagline":"Dark green theme for Blender 5","archive_hash":"sha256:264334a9bb72b7b0e7b4e309624981067ad303b9c5ffeb75fb3e681d7bad92cf","archive_size":6858,"archive_url":"https://extensions.blender.org/download/sha256:264334a9bb72b7b0e7b4e309624981067ad303b9c5ffeb75fb3e681d7bad92cf/theme-green-viz-v1.0.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/green-viz/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"IMEBridge","schema_version":"1.0.0","name":"IMEBridge","version":"0.3.0","tagline":"Bridge native IME input into Blender text editing","archive_hash":"sha256:1459f18def25b75fb51718a98505a17f81e67aa36ed731ad0d07ed1a3e84e59c","archive_size":80971,"archive_url":"https://extensions.blender.org/download/sha256:1459f18def25b75fb51718a98505a17f81e67aa36ed731ad0d07ed1a3e84e59c/add-on-imebridge-v0.3.0-windows-x64-macos-arm64.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/imebridge/","maintainer":"Suenkanwei","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","macos-arm64"],"tags":["System","Text Editor","User Interface"]},{"id":"float_curve_css","schema_version":"1.0.0","name":"Float Curve CSS","version":"1.0.4","tagline":"Float Curve editing tools and Curve Profile to Float Curve","archive_hash":"sha256:24786037a42e779c64c6ad4abeb6c040abac518037fbe6fb4fb9b007ca60abc2","archive_size":11584,"archive_url":"https://extensions.blender.org/download/sha256:24786037a42e779c64c6ad4abeb6c040abac518037fbe6fb4fb9b007ca60abc2/add-on-float-curve-css-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/float-curve-css/","maintainer":"guillaume_bissieres","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"copy_pivot_from_active","schema_version":"1.0.0","name":"Copy Pivot From Active","version":"1.0.1","tagline":"Copy pivot offset from active mesh to other selected meshes","archive_hash":"sha256:ebce90935ee999756561ecca4290c45752d0910c789bf3a7ca5de47a9684a78e","archive_size":2334,"archive_url":"https://extensions.blender.org/download/sha256:ebce90935ee999756561ecca4290c45752d0910c789bf3a7ca5de47a9684a78e/add-on-copy-pivot-from-active-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-pivot-from-active/","maintainer":"6cto","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"flat_uv_mapper","schema_version":"1.0.0","name":"Flat UV Mapper","version":"1.1.0","tagline":"CSG-style planar face UV mapping with tile, offset and rotation","archive_hash":"sha256:4b502bfe25ae0417e2f9e7af697d2f7a83cd9194963679eb32c64b3c62be6b84","archive_size":64686,"archive_url":"https://extensions.blender.org/download/sha256:4b502bfe25ae0417e2f9e7af697d2f7a83cd9194963679eb32c64b3c62be6b84/add-on-flat-uv-mapper-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/flat-uv-mapper/","maintainer":"schemann","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"aiming_helper","schema_version":"1.0.0","name":"Aiming Helper","version":"1.0.1","tagline":"A visual helper for aligning sights","archive_hash":"sha256:9f79716709ca52fbaa55d25b4f006986c9277f8e934f1a8cba938124ec01a967","archive_size":5173,"archive_url":"https://extensions.blender.org/download/sha256:9f79716709ca52fbaa55d25b4f006986c9277f8e934f1a8cba938124ec01a967/add-on-aiming-helper-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/aiming-helper/","maintainer":"Hartface","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"render_pipeline_async","schema_version":"1.0.0","name":"End-to-End Render Pipeline","version":"1.0.0","tagline":"Event-driven automated 3D rendering and VSE video compilation","archive_hash":"sha256:7b8ac050603eac01cea8e1257bb33bfec88488c454750679d1cf03777c57740f","archive_size":18297,"archive_url":"https://extensions.blender.org/download/sha256:7b8ac050603eac01cea8e1257bb33bfec88488c454750679d1cf03777c57740f/add-on-render-pipeline-async-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-pipeline-async/","maintainer":"impatient0","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads rendered frames and writes compiled video files"},"tags":["Sequencer","Animation","Render"]},{"id":"EyeZenNight","schema_version":"1.0.0","name":"Eye Zen Night","version":"1.0.1","tagline":"A relaxing theme for night work","archive_hash":"sha256:39f3c851847e6a9e0bb62410b12056e070bf69ab41e17b74ad095f0c1bddd3b2","archive_size":5977,"archive_url":"https://extensions.blender.org/download/sha256:39f3c851847e6a9e0bb62410b12056e070bf69ab41e17b74ad095f0c1bddd3b2/theme-eyezennight-v1.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/eyezennight/","maintainer":"Sekuora","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Print"]},{"id":"VDB_Theme","schema_version":"1.0.0","name":"VDB Theme","version":"1.0.3","tagline":"Dark yellow accent theme","archive_hash":"sha256:be09bb9b911cf8cb6702dd99118f6bf0b255b2f3919fa9ca39c41eed4f8887f1","archive_size":5383,"archive_url":"https://extensions.blender.org/download/sha256:be09bb9b911cf8cb6702dd99118f6bf0b255b2f3919fa9ca39c41eed4f8887f1/theme-vdb-theme-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/vdb-theme/","maintainer":"Tibe-Van-den-Brande","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"marker_shortcuts","schema_version":"1.0.0","name":"Marker Shortcuts","version":"0.1.1","tagline":"Assign keyboard shortcuts to timeline markers","archive_hash":"sha256:3a0c19925ddb5cce77e3560617f5a3936a04f3c8c89e9dc5e839c71e3061e1c5","archive_size":8666,"archive_url":"https://extensions.blender.org/download/sha256:3a0c19925ddb5cce77e3560617f5a3936a04f3c8c89e9dc5e839c71e3061e1c5/add-on-marker-shortcuts-v0.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/marker-shortcuts/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"mandelbulb","schema_version":"1.0.0","name":"Mandelbulb Generator","version":"1.0.2","tagline":"Mandelbulb and Julia Fractal Generator","archive_hash":"sha256:c739e911c0a2362c3bde1ceeef932cbb19f6c024f6f8209fd172b04fd96a2d92","archive_size":8913,"archive_url":"https://extensions.blender.org/download/sha256:c739e911c0a2362c3bde1ceeef932cbb19f6c024f6f8209fd172b04fd96a2d92/add-on-mandelbulb-v1.0.2.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/mandelbulb/","maintainer":"Suussonic","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","Modeling"]},{"id":"viewport_scalebar","schema_version":"1.0.0","name":"Viewport Scale Bar","version":"1.2.1","tagline":"Cartographic scale bar overlay for the 3D Viewport","archive_hash":"sha256:719ba03403b9eb44145459d39426ad8df1def7749053ea0cb441adefeee78d65","archive_size":9798,"archive_url":"https://extensions.blender.org/download/sha256:719ba03403b9eb44145459d39426ad8df1def7749053ea0cb441adefeee78d65/add-on-viewport-scalebar-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-scalebar/","maintainer":"Renee-13","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"io_bugsnax","schema_version":"1.0.0","name":"Bugsnax Cache Importer/Exporter","version":"1.0.1","tagline":"Import/Export Bugsnax .xcache, .objcache, .daecache","archive_hash":"sha256:9231de5a4a99a5a4bf955e494ecad4946b91be50ee3237e6b793bfb2a8c5670d","archive_size":93176,"archive_url":"https://extensions.blender.org/download/sha256:9231de5a4a99a5a4bf955e494ecad4946b91be50ee3237e6b793bfb2a8c5670d/add-on-io-bugsnax-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-bugsnax/","maintainer":"SaintBaron","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"backup_modifiers","schema_version":"1.0.0","name":"Backup Modifiers","version":"1.0.4","tagline":"Apply modifiers with a backup. Easily switch to backup object","archive_hash":"sha256:6671ec4cf396c6a47967d0fa9d14936c1a47fd8f92c978add3abd5b4df1c3709","archive_size":3118,"archive_url":"https://extensions.blender.org/download/sha256:6671ec4cf396c6a47967d0fa9d14936c1a47fd8f92c978add3abd5b4df1c3709/add-on-backup-modifiers-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/backup-modifiers/","maintainer":"R4V3N","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"dark_highlights","schema_version":"1.0.0","name":"CGDive Dark with Area Highlights","version":"1.0.0","tagline":"A standard Dark Theme with area highlights and better panel","archive_hash":"sha256:3d29709eff4497fa06d8679ca14cbb42a972c85cd8355618e7d58463f4bb16b2","archive_size":5611,"archive_url":"https://extensions.blender.org/download/sha256:3d29709eff4497fa06d8679ca14cbb42a972c85cd8355618e7d58463f4bb16b2/theme-dark-highlights-v1.0.0.zip","type":"theme","blender_version_min":"4.4.0","website":"https://extensions.blender.org/themes/dark-highlights/","maintainer":"Todor-CGDive","license":["SPDX:GPL-2.0-or-later"]},{"id":"nukxon_vr_exporter","schema_version":"1.0.0","name":"Nukxon VR Exporter","version":"1.2.1","tagline":"Render VR cubemap tours and export .nukxon packages","archive_hash":"sha256:9d1b0d0e0048d71aaa02377a8097d5172189cf4deb82cab209d73217de613509","archive_size":27069,"archive_url":"https://extensions.blender.org/download/sha256:9d1b0d0e0048d71aaa02377a8097d5172189cf4deb82cab209d73217de613509/add-on-nukxon-vr-exporter-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nukxon-vr-exporter/","maintainer":"Nukxon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write .nukxon export bundle to user-chosen output folder"},"tags":["Render","Import-Export"]},{"id":"io_lottie_export","schema_version":"1.0.0","name":"Lottie Export","version":"0.1.3","tagline":"Export Grease Pencil animation to Lottie JSON / dotLottie / TGS","archive_hash":"sha256:79a424817d6e190bf720c7d76b472d863943689a18899bcaf3b68a0da12c3cd2","archive_size":31309,"archive_url":"https://extensions.blender.org/download/sha256:79a424817d6e190bf720c7d76b472d863943689a18899bcaf3b68a0da12c3cd2/add-on-io-lottie-export-v0.1.3.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/io-lottie-export/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"magic_wand","schema_version":"1.0.0","name":"Magic Wand","version":"0.0.4","tagline":"Topology-aware mesh selection","archive_hash":"sha256:e1888f95536d3e242e1f449a5fe6c7023df06469c8e27ebab353e8d3af71db8d","archive_size":15676,"archive_url":"https://extensions.blender.org/download/sha256:e1888f95536d3e242e1f449a5fe6c7023df06469c8e27ebab353e8d3af71db8d/add-on-magic-wand-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/magic-wand/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"dark_purple","schema_version":"1.0.0","name":"Dark Purple","version":"1.0.0","tagline":"Dark Purple gray style","archive_hash":"sha256:90289ec78324072453380e3446997ee1a8c3636d830a0bb4995532a883345796","archive_size":5323,"archive_url":"https://extensions.blender.org/download/sha256:90289ec78324072453380e3446997ee1a8c3636d830a0bb4995532a883345796/theme-dark-purple-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/dark-purple/","maintainer":"wans7.gumroad.com","license":["SPDX:GPL-3.0-or-later"]},{"id":"local_view_manager","schema_version":"1.0.0","name":"Local View Manager","version":"2.1.0","tagline":"Remove, add and recover to Local View from Outliner and Viewport","archive_hash":"sha256:0a3c4804ad861ca989400ba0b45ab06e2ab512a2f5c3101dddbbd3652d7d1266","archive_size":7078,"archive_url":"https://extensions.blender.org/download/sha256:0a3c4804ad861ca989400ba0b45ab06e2ab512a2f5c3101dddbbd3652d7d1266/add-on-local-view-manager-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/local-view-manager/","maintainer":"3DDinosaur","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"view_selected","schema_version":"1.0.0","name":"View Selected","version":"1.0.0","tagline":"Smart Selection View","archive_hash":"sha256:b6f6fa52bfb361fda7096424fabf5a58816dda0228fc0ffec6f3d54c2e4132ca","archive_size":4107,"archive_url":"https://extensions.blender.org/download/sha256:b6f6fa52bfb361fda7096424fabf5a58816dda0228fc0ffec6f3d54c2e4132ca/add-on-view-selected-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/view-selected/","maintainer":"wans7.gumroad.com","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"point_cloud_io","schema_version":"1.0.0","name":"Point Cloud I/O","version":"0.5.1","tagline":"Import and export E57, PLY, LAS, LAZ, PCD, XYZ, PTS files","archive_hash":"sha256:cdd313ea71b0c82ad66e06dcf659984cbad9567cbbad5fee78e948971cd61bc0","archive_size":22372470,"archive_url":"https://extensions.blender.org/download/sha256:cdd313ea71b0c82ad66e06dcf659984cbad9567cbbad5fee78e948971cd61bc0/add-on-point-cloud-io-v0.5.1.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/point-cloud-io/","maintainer":"StudioMedio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write point cloud files on disk"},"tags":["Import-Export"]},{"id":"frame_by_plane","schema_version":"1.0.0","name":"Frame By Plane","version":"6.1.1","tagline":"A better Image as Planes workflow for animation","archive_hash":"sha256:a399877c73d90c3af6ac74bbb28041160c17d495c45210ec1674111c836997cf","archive_size":8705695,"archive_url":"https://extensions.blender.org/download/sha256:a399877c73d90c3af6ac74bbb28041160c17d495c45210ec1674111c836997cf/add-on-frame-by-plane-v6.1.1-windows-x64.zip","type":"add-on","blender_version_min":"5.1.2","website":"https://extensions.blender.org/add-ons/frame-by-plane/","maintainer":"Alessandro-Pannoli","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read media and write layered/render cache files","clipboard":"Import media paths and copy diagnostic reports to the clipboard"},"platforms":["windows-x64"],"tags":["3D View","Animation"]},{"id":"slides_pro","schema_version":"1.0.0","name":"Slides","version":"1.6.2","tagline":"Create and play slide-based presentations in the 3D View","archive_hash":"sha256:7ac2d0fdf3e8c2c5b3f96df9aa0d9c5f24cc5ec965d060f756a52b7a339ebbf9","archive_size":10301,"archive_url":"https://extensions.blender.org/download/sha256:7ac2d0fdf3e8c2c5b3f96df9aa0d9c5f24cc5ec965d060f756a52b7a339ebbf9/add-on-slides-pro-v1.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/slides-pro/","maintainer":"Alessandro-Pannoli","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"Classic_But_Modern","schema_version":"1.0.0","name":"ClassicButModern","version":"1.0.0","tagline":"A Blender theme inspired by 2.8x releases of Blender","archive_hash":"sha256:85d552cb420bbee1c93c74cff3db87746783785d2d59d1ff9b9a06c622a54907","archive_size":5393,"archive_url":"https://extensions.blender.org/download/sha256:85d552cb420bbee1c93c74cff3db87746783785d2d59d1ff9b9a06c622a54907/theme-classic-but-modern-v1.0.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/classic-but-modern/","maintainer":"Neon-Hat","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"dji_proxy_switcher","schema_version":"1.0.0","name":"DJI Proxy Switcher","version":"2.1.1","tagline":"Replace LRF proxies with full-res MP4s instantly","archive_hash":"sha256:428feec54a98293aadfe5345a8d2a8905502f922d9696a268ab4900492916301","archive_size":2987,"archive_url":"https://extensions.blender.org/download/sha256:428feec54a98293aadfe5345a8d2a8905502f922d9696a268ab4900492916301/add-on-dji-proxy-switcher-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dji-proxy-switcher/","maintainer":"aflynneastwood","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"siemen_lens_blender_autoaov","schema_version":"1.0.0","name":"AutoAOV","version":"2.1.5","tagline":"Automatically create an AOV structure for exporting","archive_hash":"sha256:2f290ce770220139450ece59048e9fd5ed7e37f0ed1ef1209da58646a1eece3e","archive_size":14417,"archive_url":"https://extensions.blender.org/download/sha256:2f290ce770220139450ece59048e9fd5ed7e37f0ed1ef1209da58646a1eece3e/add-on-siemen-lens-blender-autoaov-v2.1.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/siemen-lens-blender-autoaov/","maintainer":"Siemen-Lens","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Uses Files permission to create folders and export camera"},"tags":["Render","Compositing","Node","Pipeline","Lighting"]},{"id":"Lightsaber_VFX","schema_version":"1.0.0","name":"Lightsaber VFX","version":"1.0.2","tagline":"Super simple lightsaber VFX setup for Blender","archive_hash":"sha256:c36b38b4f94b420f67e2ab73c7807babf3529fac3e4cf90abc1ee480faf12267","archive_size":52312,"archive_url":"https://extensions.blender.org/download/sha256:c36b38b4f94b420f67e2ab73c7807babf3529fac3e4cf90abc1ee480faf12267/add-on-lightsaber-vfx-v1.0.2.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/lightsaber-vfx/","maintainer":"Will-Hadfield-1","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write lightsaber preset files in user data folder"},"tags":["Compositing"]},{"id":"wittyming_color_palette","schema_version":"1.0.0","name":"Color Palette","version":"1.2.3","tagline":"Record and drag material node colors in the Shader Editor","archive_hash":"sha256:075775b465c832602804c7d3826a01b36d1207718105173260f73e6488f86454","archive_size":371079,"archive_url":"https://extensions.blender.org/download/sha256:075775b465c832602804c7d3826a01b36d1207718105173260f73e6488f86454/add-on-wittyming-color-palette-v1.2.3.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/wittyming-color-palette/","maintainer":"MingWitty","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"h4rb_scene_director","schema_version":"1.0.0","name":"Scene Director","version":"0.9.5","tagline":"Lighting, world, compositor layers and render planning","archive_hash":"sha256:9160866914a383bbe638718218394c88a76b12826cefcbc4db10ef279b8c3a70","archive_size":79029,"archive_url":"https://extensions.blender.org/download/sha256:9160866914a383bbe638718218394c88a76b12826cefcbc4db10ef279b8c3a70/add-on-h4rb-scene-director-v0.9.5.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/h4rb-scene-director/","maintainer":"Melih-Kayaci","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","Lighting","Compositing","Render"]},{"id":"theme_dictionary","schema_version":"1.0.0","name":"theme dictionary","version":"0.6.4","tagline":"theme recolor plugin that retrieves relevant options","archive_hash":"sha256:a6a4de727343fac8370d117afc7326501019f19ef7058e10c7971ce9e4d9271e","archive_size":43319,"archive_url":"https://extensions.blender.org/download/sha256:a6a4de727343fac8370d117afc7326501019f19ef7058e10c7971ce9e4d9271e/add-on-theme-dictionary-v0.6.4.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/theme-dictionary/","maintainer":"61+","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"vodi_white","schema_version":"1.0.0","name":"vodi white","version":"0.6.3","tagline":"Ice-feeling elegant white theme, simple and clean","archive_hash":"sha256:4d8cf55af97525b5fcbc10f2afe16f7bebfd6c740c1397b80d68d59f21beb9e2","archive_size":5256,"archive_url":"https://extensions.blender.org/download/sha256:4d8cf55af97525b5fcbc10f2afe16f7bebfd6c740c1397b80d68d59f21beb9e2/theme-vodi-white-v0.6.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/vodi-white/","maintainer":"61+","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"EVA_Unit_01","schema_version":"1.0.0","name":"EVA UNIT 01","version":"1.0.0","tagline":"Color theme inspired by Evangelion Unit-01 purple/green palette","archive_hash":"sha256:65ba4e362eae0a511cae31d10f0b2b587075a9f9d3b8f56005d399f885b7cd5a","archive_size":5944,"archive_url":"https://extensions.blender.org/download/sha256:65ba4e362eae0a511cae31d10f0b2b587075a9f9d3b8f56005d399f885b7cd5a/theme-eva-unit-01-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/eva-unit-01/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"boardtyper_3d","schema_version":"1.0.0","name":"Boardtyper 3D","version":"1.0.1","tagline":"Export Blender models to Tabletop Simulator JSON","archive_hash":"sha256:c11cbe753a7adb9a9274419e1eec0422492b24a1425d279b664a537a4fea7c04","archive_size":7316,"archive_url":"https://extensions.blender.org/download/sha256:c11cbe753a7adb9a9274419e1eec0422492b24a1425d279b664a537a4fea7c04/add-on-boardtyper-3d-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/boardtyper-3d/","maintainer":"Skarmuse","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export OBJ and JSON files to the local drive"},"tags":["Import-Export","Game Engine"]},{"id":"CryptoMatte_ID_Color","schema_version":"1.0.0","name":"CryptoMatte ID Color","version":"1.0.4","tagline":"Generate real time ID color compositor nodes using Cryptomatte","archive_hash":"sha256:10db2d4d2bfd31347770ccf8cb1a87e7dc7354cde610931f2e9a93a9c7618d26","archive_size":7710,"archive_url":"https://extensions.blender.org/download/sha256:10db2d4d2bfd31347770ccf8cb1a87e7dc7354cde610931f2e9a93a9c7618d26/add-on-cryptomatte-id-color-v1.0.4.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/cryptomatte-id-color/","maintainer":"61+","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing"]},{"id":"looking_glass_display_simulator","schema_version":"1.0.0","name":"Looking Glass Display Simulator","version":"1.0.0","tagline":"Simulate Looking Glass displays, create compatible quilts","archive_hash":"sha256:5df5a7704708f42ac229774678869b6c5876166e3f23357c3f1852fb26e0e2b2","archive_size":39179,"archive_url":"https://extensions.blender.org/download/sha256:5df5a7704708f42ac229774678869b6c5876166e3f23357c3f1852fb26e0e2b2/add-on-looking-glass-display-simulator-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/looking-glass-display-simulator/","maintainer":"Lukas-Vincenc","license":["SPDX:GPL-3.0-or-later"]},{"id":"copy_relative_transform","schema_version":"1.0.0","name":"Copy Relative Transform","version":"0.1.0","tagline":"Copy & paste transforms relative to the view or an object","archive_hash":"sha256:974552489bff1d37969269302e28019e18e930f703e902cc785552ea6b292e54","archive_size":3565,"archive_url":"https://extensions.blender.org/download/sha256:974552489bff1d37969269302e28019e18e930f703e902cc785552ea6b292e54/add-on-copy-relative-transform-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-relative-transform/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"jk3da_theme","schema_version":"1.0.0","name":"JK3DA Theme","version":"1.2.0","tagline":"Dark warm Blender theme with orange accent","archive_hash":"sha256:a4a6fd78e17a7f94988eeddf77b4eb134b9f9cfa091f1feb1798a3ee545ef4c9","archive_size":5512,"archive_url":"https://extensions.blender.org/download/sha256:a4a6fd78e17a7f94988eeddf77b4eb134b9f9cfa091f1feb1798a3ee545ef4c9/theme-jk3da-theme-v1.2.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/jk3da-theme/","maintainer":"Jonas-Kircher","license":["SPDX:GPL-3.0-or-later"]},{"id":"festivity_flow","schema_version":"1.0.0","name":"Flow","version":"1.3.2","tagline":"One-click procedural wavy bone chain animation","archive_hash":"sha256:393cf29b50cbfa7dfcce828789054525e010b1e86b81c19519205a5f53a032bb","archive_size":30629,"archive_url":"https://extensions.blender.org/download/sha256:393cf29b50cbfa7dfcce828789054525e010b1e86b81c19519205a5f53a032bb/add-on-festivity-flow-v1.3.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/festivity-flow/","maintainer":"festivity","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write preset files in the user scripts directory"},"tags":["Animation"]},{"id":"Dark_Comic_Theme","schema_version":"1.0.0","name":"Dark_Comic_Theme","version":"1.1.1","tagline":"Propaganda Poster","archive_hash":"sha256:0c152091197d76044b1495f7965e869f9aa3fe3644df364fa03cec34b661d554","archive_size":5783,"archive_url":"https://extensions.blender.org/download/sha256:0c152091197d76044b1495f7965e869f9aa3fe3644df364fa03cec34b661d554/theme-dark-comic-theme-v1.1.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-comic-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"speedzone","schema_version":"1.0.0","name":"SPEEDZONE","version":"1.2.0","tagline":"Create or Rescale Paths for Realistic Car Speeds","archive_hash":"sha256:4bb9950452578c1e7e33f7bb77bd534fd2f0c9fdabba7e0459429abd2ff471e0","archive_size":4092,"archive_url":"https://extensions.blender.org/download/sha256:4bb9950452578c1e7e33f7bb77bd534fd2f0c9fdabba7e0459429abd2ff471e0/add-on-speedzone-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/speedzone/","maintainer":"KGD","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load path data"},"tags":["Animation"]},{"id":"K3D_UV_Islands_Keeper","schema_version":"1.0.0","name":"K3D UV Islands Keeper","version":"1.1.2","tagline":"Multi-slot memory for UV island selections and transformations","archive_hash":"sha256:ff57d0839efc1c77fc4f2a7645ec37ffdcfb3a44ad0a2806200058506b8b421a","archive_size":3922,"archive_url":"https://extensions.blender.org/download/sha256:ff57d0839efc1c77fc4f2a7645ec37ffdcfb3a44ad0a2806200058506b8b421a/add-on-k3d-uv-islands-keeper-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k3d-uv-islands-keeper/","maintainer":"Manuel-SEILHES","license":["SPDX:GPL-3.0-or-later"]},{"id":"batchforge_batch_export","schema_version":"1.0.0","name":"BatchForge: Batch Export Tool","version":"2.8.0","tagline":"Batch export with origin control & multi-format support","archive_hash":"sha256:aeb59665434ea614b906fd2a2d950a8f6b0c5e42e99ca373c00aba01d1eedff8","archive_size":9967,"archive_url":"https://extensions.blender.org/download/sha256:aeb59665434ea614b906fd2a2d950a8f6b0c5e42e99ca373c00aba01d1eedff8/add-on-batchforge-batch-export-v2.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batchforge-batch-export/","maintainer":"mabaci","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Addon saves and loads files from disk"},"tags":["Import-Export"]},{"id":"deus_ex_md","schema_version":"1.0.0","name":"Deus Ex MD Theme","version":"1.0.0","tagline":"Inspired by Deus Ex HR/MD","archive_hash":"sha256:91d3fc0d5cd78cf2c3830e89789ce9b3d5a4793e1bbbca18e463b0f4635dfee5","archive_size":6032,"archive_url":"https://extensions.blender.org/download/sha256:91d3fc0d5cd78cf2c3830e89789ce9b3d5a4793e1bbbca18e463b0f4635dfee5/theme-deus-ex-md-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/deus-ex-md/","maintainer":"Andrei-Khrutskii","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"a3da_parser","schema_version":"1.0.0","name":"A3DA Parser","version":"1.0.21","tagline":"Import & export Project Diva A3DA animation files","archive_hash":"sha256:12b64807b1b2e96cc43d163e85f564d5cb20e811dc6ef72be6816b52f069de5c","archive_size":167740,"archive_url":"https://extensions.blender.org/download/sha256:12b64807b1b2e96cc43d163e85f564d5cb20e811dc6ef72be6816b52f069de5c/add-on-a3da-parser-v1.0.21.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/a3da-parser/","maintainer":"Hans_Xwh","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export Project Diva A3DA animation files"},"tags":["Import-Export"]},{"id":"sprite_sheet_generator","schema_version":"1.0.0","name":"Sprite Sheet Generator","version":"2.2.3","tagline":"Generate sprite sheets from animations with armature rotation","archive_hash":"sha256:21398e86234dc9672dca0d00881bd9d57a1a0f17d7d8444159e764d653c87474","archive_size":10668,"archive_url":"https://extensions.blender.org/download/sha256:21398e86234dc9672dca0d00881bd9d57a1a0f17d7d8444159e764d653c87474/add-on-sprite-sheet-generator-v2.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sprite-sheet-generator/","maintainer":"mabaci","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Addon saves and loads files from disk"},"tags":["Render","Pipeline","Game Engine"]},{"id":"attribute_baker","schema_version":"1.0.0","name":"Attribute Baker","version":"1.0.2","tagline":"Bake Geometry Nodes attributes to image textures via UV map","archive_hash":"sha256:6fa6d62b875b0270543d73992759dece3db2f156bc7b44b6ba4494154e71068d","archive_size":6945,"archive_url":"https://extensions.blender.org/download/sha256:6fa6d62b875b0270543d73992759dece3db2f156bc7b44b6ba4494154e71068d/add-on-attribute-baker-v1.0.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/attribute-baker/","maintainer":"ibotpl","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Saves baked images to the chosen output folder on disk"},"tags":["Render","UV","Geometry Nodes"]},{"id":"keychain_builder","schema_version":"1.0.0","name":"Keychain Builder","version":"1.1.3","tagline":"Generate 3D-printable keychains from text in one click","archive_hash":"sha256:52b1b204d589eef3de37b3cac7cfe1ace0c695d490cc14a37bf484b8f0041e38","archive_size":8317,"archive_url":"https://extensions.blender.org/download/sha256:52b1b204d589eef3de37b3cac7cfe1ace0c695d490cc14a37bf484b8f0041e38/add-on-keychain-builder-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keychain-builder/","maintainer":"Sergey-Kabanov","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"batch_asset_placer","schema_version":"1.0.0","name":"Batch Asset Placer","version":"1.0.1","tagline":"Adds selected assets from Asset Browser to 3D cursor","archive_hash":"sha256:9954ef60d304dd0d8f2a66ac1bf4ddb1a3ab56b7fe68b5c86c969df9cbba2126","archive_size":5307,"archive_url":"https://extensions.blender.org/download/sha256:9954ef60d304dd0d8f2a66ac1bf4ddb1a3ab56b7fe68b5c86c969df9cbba2126/add-on-batch-asset-placer-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/batch-asset-placer/","maintainer":"Andrey-Pestryakov","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"SimplyLoopy","schema_version":"1.0.0","name":"Simply Loopy","version":"1.2.0-G","tagline":"Simplify a mesh through edge loop collapse","archive_hash":"sha256:1f1e2ebf0343483d112f67612e98e69203ed23aaba1fe2a94ab81ef6b629180d","archive_size":16610,"archive_url":"https://extensions.blender.org/download/sha256:1f1e2ebf0343483d112f67612e98e69203ed23aaba1fe2a94ab81ef6b629180d/add-on-simplyloopy-v1.2.0-G.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simplyloopy/","maintainer":"Memm","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"import_e57","schema_version":"1.0.0","name":"E57 Point Cloud Importer","version":"1.0.1","tagline":"Import E57 point clouds natively","archive_hash":"sha256:dc45109fde3911c1331aabd40a6a62e5e05bf323ac6c223e1c741afa707d9bb5","archive_size":1147241,"archive_url":"https://extensions.blender.org/download/sha256:dc45109fde3911c1331aabd40a6a62e5e05bf323ac6c223e1c741afa707d9bb5/add-on-import-e57-v1.0.1-windows-x64.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/import-e57/","maintainer":"Quentin-Misslin","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"]},{"id":"Theme_Tamer","schema_version":"1.0.0","name":"Theme Tamer","version":"3.3.4","tagline":"Search, auto-group and batch-edit theme properties","archive_hash":"sha256:939353904b1d05b836b6b3c97017f1affc6506024e061a885d9ee287417a9a11","archive_size":24424,"archive_url":"https://extensions.blender.org/download/sha256:939353904b1d05b836b6b3c97017f1affc6506024e061a885d9ee287417a9a11/add-on-theme-tamer-v3.3.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/theme-tamer/","maintainer":"3DDinosaur","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"copy_to_autograph","schema_version":"1.0.0","name":"Copy to Autograph","version":"0.1.0","tagline":"Copy selected objects to clipboard in Autograph format (JSON)","archive_hash":"sha256:f897b6193f5cce483f7a68dee13c1e8beaf7b33dd895f5fe5215df6228c2d05e","archive_size":5444,"archive_url":"https://extensions.blender.org/download/sha256:f897b6193f5cce483f7a68dee13c1e8beaf7b33dd895f5fe5215df6228c2d05e/add-on-copy-to-autograph-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-to-autograph/","maintainer":"SergeyMetelskiy","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copying JSON formated data to clipboard"},"tags":["Import-Export"]},{"id":"Vikings_Midnight_Round_Theme","schema_version":"1.0.0","name":"Viking's Midnight Round","version":"1.1.0","tagline":"Original theme by Liam , ported by me","archive_hash":"sha256:49e1cb379125e47de200a96475f72734de11ba6bd034d3b4732a546b0349b38b","archive_size":5586,"archive_url":"https://extensions.blender.org/download/sha256:49e1cb379125e47de200a96475f72734de11ba6bd034d3b4732a546b0349b38b/theme-vikings-midnight-round-theme-v1.1.0.zip","type":"theme","blender_version_min":"5.1.1","website":"https://extensions.blender.org/themes/vikings-midnight-round-theme/","maintainer":"IyeViking","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"themeable_local_view","schema_version":"1.0.0","name":"Themeable Modes and Views","version":"0.2.0","tagline":"Themeable visual clues for modes, Local View and more","archive_hash":"sha256:dbdf37ca8cc3d3c4623fa2ee0d42b6fa566fb436895a8fcdb3f9dd6de6fc49c6","archive_size":6894,"archive_url":"https://extensions.blender.org/download/sha256:dbdf37ca8cc3d3c4623fa2ee0d42b6fa566fb436895a8fcdb3f9dd6de6fc49c6/add-on-themeable-local-view-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/themeable-local-view/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"y2k_futurism_theme","schema_version":"1.0.0","name":"Y2K Futurism Theme","version":"1.0.0","tagline":"A futuristic early-2000s inspired Blender UI theme","archive_hash":"sha256:99ab2d20ee9a5dc52bb6e80c9546b03f9fb3bc9cb286e6e51f04bd8da21fb6cb","archive_size":6450,"archive_url":"https://extensions.blender.org/download/sha256:99ab2d20ee9a5dc52bb6e80c9546b03f9fb3bc9cb286e6e51f04bd8da21fb6cb/theme-y2k-futurism-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/y2k-futurism-theme/","maintainer":"Igor-S-G-Barros","license":["SPDX:GPL-3.0-or-later"],"tags":["Colorful","Inspired By"]},{"id":"pixelsync_porter","schema_version":"1.0.0","name":"PixelSync Porter","version":"2.4.0","tagline":"Professional synchronization bridge for Blender settings","archive_hash":"sha256:0f54de5bfc110d08ca65297909936029ff09419d6f4eee5467803136a24193b9","archive_size":18724,"archive_url":"https://extensions.blender.org/download/sha256:0f54de5bfc110d08ca65297909936029ff09419d6f4eee5467803136a24193b9/add-on-pixelsync-porter-v2.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pixelsync-porter/","maintainer":"CYBER-KING","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write config files for exporting and importing settings"}},{"id":"unity_rig","schema_version":"1.0.0","name":"Unity Rig","version":"1.0.2","tagline":"Create Unity Humanoid-compatible rigs and convert Rigify rigs","archive_hash":"sha256:2c590237c1a824d5f8dafacf294fbb3bff8bea19ed2af3f32c39aee3233ea64f","archive_size":28072,"archive_url":"https://extensions.blender.org/download/sha256:2c590237c1a824d5f8dafacf294fbb3bff8bea19ed2af3f32c39aee3233ea64f/add-on-unity-rig-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unity-rig/","maintainer":"nixkuroi","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Import-Export"]},{"id":"import_gdsii","schema_version":"1.0.0","name":"GDSII Importer","version":"1.0.3","tagline":"GDSII importer with PDK layer stack support","archive_hash":"sha256:c9252550b3ba7b0b8b3098d58976942ff01e354371d047f9cfc2d10e35edafc1","archive_size":28877884,"archive_url":"https://extensions.blender.org/download/sha256:c9252550b3ba7b0b8b3098d58976942ff01e354371d047f9cfc2d10e35edafc1/add-on-import-gdsii-v1.0.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-gdsii/","maintainer":"dnltz","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"unit_to_pixel_converter","schema_version":"1.0.0","name":"Unit to pixel converter","version":"1.3.2","tagline":"Calculates render resolution from different measurement units","archive_hash":"sha256:6a7b6766d96781a1f04cef893f363b3123ced4da2c76a929280720ecb499b77b","archive_size":16645,"archive_url":"https://extensions.blender.org/download/sha256:6a7b6766d96781a1f04cef893f363b3123ced4da2c76a929280720ecb499b77b/add-on-unit-to-pixel-converter-v1.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unit-to-pixel-converter/","maintainer":"Viktor-Kamp","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"backdrop","schema_version":"1.0.0","name":"Backdrop","version":"3.6.0","tagline":"One click cyclorama","archive_hash":"sha256:a16c8f8e767bd5e2d434de35e8435e1e21f7e071ac37f1923a8e80bca6f2b986","archive_size":3014,"archive_url":"https://extensions.blender.org/download/sha256:a16c8f8e767bd5e2d434de35e8435e1e21f7e071ac37f1923a8e80bca6f2b986/add-on-backdrop-v3.6.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/backdrop/","maintainer":"Muzammil-Halimov","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"edgeflowdraw_extension","schema_version":"1.0.0","name":"EdgeFlowDraw","version":"2.1.2","tagline":"Draw path of quads; begin with edgeflow instead of block/point","archive_hash":"sha256:f0fda6af2998220922c02d6258c1c3ae4d792910ecd204c937cdc58925fd2223","archive_size":23442,"archive_url":"https://extensions.blender.org/download/sha256:f0fda6af2998220922c02d6258c1c3ae4d792910ecd204c937cdc58925fd2223/add-on-edgeflowdraw-extension-v2.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edgeflowdraw-extension/","maintainer":"David-Boudreau","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"render_commander","schema_version":"1.0.0","name":"Render Commander","version":"1.2.5","tagline":"Configure and export parallel render jobs and standalone scripts","archive_hash":"sha256:70ab38c8e95fe96933ade9f5f35d48ea45f3ad429e5100622af1a760f87aba72","archive_size":92160,"archive_url":"https://extensions.blender.org/download/sha256:70ab38c8e95fe96933ade9f5f35d48ea45f3ad429e5100622af1a760f87aba72/add-on-render-commander-v1.2.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/render-commander/","maintainer":"n4dirp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export script files and temp data","clipboard":"Add data paths from the clipboard"},"tags":["Render","Import-Export"]},{"id":"blink_bg","schema_version":"1.0.0","name":"Blink BG","version":"1.0.2","tagline":"Control camera BG image alpha/depth","archive_hash":"sha256:38fa18cb0ce4d891f3d270ed85e2c5fd029509d490102ddd05d0b1e7f689d2c3","archive_size":4327,"archive_url":"https://extensions.blender.org/download/sha256:38fa18cb0ce4d891f3d270ed85e2c5fd029509d490102ddd05d0b1e7f689d2c3/add-on-blink-bg-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blink-bg/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","3D View"]},{"id":"model_decompressor","schema_version":"1.0.0","name":"Compressed GLB Importer","version":"0.0.5","tagline":"Import Meshopt and quantized GLB models with standalone Python","archive_hash":"sha256:63497f21250f22fc7068f9787699551daa9683ded267b0e687be423e4c198cac","archive_size":41838,"archive_url":"https://extensions.blender.org/download/sha256:63497f21250f22fc7068f9787699551daa9683ded267b0e687be423e4c198cac/add-on-model-decompressor-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/model-decompressor/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"uvcp_addon","schema_version":"1.0.0","name":"UV Coordinate Palette","version":"1.0.0","tagline":"UV tool for storing coordinates of the 2D Cursor in a palette","archive_hash":"sha256:f4a3e5c38063a1a788323eedb14f49536bd9887b55839bc193ec6d48890d3150","archive_size":4498,"archive_url":"https://extensions.blender.org/download/sha256:f4a3e5c38063a1a788323eedb14f49536bd9887b55839bc193ec6d48890d3150/add-on-uvcp-addon-v1.0.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/uvcp-addon/","maintainer":"Oleksandr-Gubanov","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"dynamic_color_palette","schema_version":"1.0.0","name":"Dynamic Color Palette","version":"2.1.1","tagline":"Generate palette textures and assign colors via UV lookup","archive_hash":"sha256:7ae98a692d022f747a9aaa5e1ebcbbcc1e7d33d9d7ce68467793f2ca20179472","archive_size":65751,"archive_url":"https://extensions.blender.org/download/sha256:7ae98a692d022f747a9aaa5e1ebcbbcc1e7d33d9d7ce68467793f2ca20179472/add-on-dynamic-color-palette-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-color-palette/","maintainer":"fwdotcom","license":["SPDX:GPL-3.0-or-later"]},{"id":"blender2ue_rig_exporter","schema_version":"1.0.0","name":"Rig UE5 Exporter","version":"0.0.4","tagline":"Export rig to UE5","archive_hash":"sha256:8f9e355559d0ea035e097de7a34d12f416cd953a6063cc03ba8b855722a3c3e1","archive_size":17915,"archive_url":"https://extensions.blender.org/download/sha256:8f9e355559d0ea035e097de7a34d12f416cd953a6063cc03ba8b855722a3c3e1/add-on-blender2ue-rig-exporter-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender2ue-rig-exporter/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export STL, PLY, OBJ files"},"tags":["Import-Export"]},{"id":"uv_layers_tools_ult","schema_version":"1.0.0","name":"UV Layers Tools (ULT)","version":"1.2.0","tagline":"Batch UV layer management for Blender","archive_hash":"sha256:b906d776f4305664fa7a6a9a6dd3d19e20e392ee015a0c464fc6465edc67b2e0","archive_size":9977,"archive_url":"https://extensions.blender.org/download/sha256:b906d776f4305664fa7a6a9a6dd3d19e20e392ee015a0c464fc6465edc67b2e0/add-on-uv-layers-tools-ult-v1.2.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/uv-layers-tools-ult/","maintainer":"AbstracteurDeQuinteEssence","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","Mesh"]},{"id":"blendixserial","schema_version":"1.0.0","name":"blendixserial","version":"2.2.1","tagline":"Connect Blender to External Devices via Simple UART","archive_hash":"sha256:2fc077994af32dc2283b36b31d5b68aa022a27e92fabc013d414bfc4c06f5efc","archive_size":132688,"archive_url":"https://extensions.blender.org/download/sha256:2fc077994af32dc2283b36b31d5b68aa022a27e92fabc013d414bfc4c06f5efc/add-on-blendixserial-v2.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blendixserial/","maintainer":"Rurouni-Usman","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"nuke_camera_exporter","schema_version":"1.0.0","name":"Export to Nuke Script","version":"1.0.0","tagline":"Export cameras and empties to Nuke with exact matrix data","archive_hash":"sha256:aff488b5d0e3af9424f25247e187a46095f282a1b81004209d2c1c06a1c1754e","archive_size":2631,"archive_url":"https://extensions.blender.org/download/sha256:aff488b5d0e3af9424f25247e187a46095f282a1b81004209d2c1c06a1c1754e/add-on-nuke-camera-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nuke-camera-exporter/","maintainer":"Vicky_at_24fps","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"clamp_psx_dark","schema_version":"1.0.0","name":"Clamp PSX Dark","version":"1.0.0","tagline":"Retro PlayStation inspired dark theme for Blender 4.5","archive_hash":"sha256:49284abe0ed2ccfdfb9309386b7cfc2e33f644ca01b28939ccdf578b0be09fd3","archive_size":5757,"archive_url":"https://extensions.blender.org/download/sha256:49284abe0ed2ccfdfb9309386b7cfc2e33f644ca01b28939ccdf578b0be09fd3/theme-clamp-psx-dark-v1.0.0.zip","type":"theme","blender_version_min":"4.5.0","website":"https://extensions.blender.org/themes/clamp-psx-dark/","maintainer":"Gadzhimuslimov-Kamil-R","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"dynamic_rig_render_controls","schema_version":"1.0.0","name":"Dynamic List Manager","version":"1.2.0","tagline":"manages the visibility of mesh objects into Groups","archive_hash":"sha256:338f2d5cc283f940ed5feee9ba342aa0266a20c26a4640c43da239bf1f5fb1cc","archive_size":11081,"archive_url":"https://extensions.blender.org/download/sha256:338f2d5cc283f940ed5feee9ba342aa0266a20c26a4640c43da239bf1f5fb1cc/add-on-dynamic-rig-render-controls-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-rig-render-controls/","maintainer":"Eduardito_3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"psx_theme","schema_version":"1.0.0","name":"PS1 Classic","version":"2.0.2","tagline":"Retro PlayStation 1 inspired Blender theme","archive_hash":"sha256:7fa72c88d46ca2e952e8bd6aade1ed34e91b4d163ede5e6132337759ff716496","archive_size":5909,"archive_url":"https://extensions.blender.org/download/sha256:7fa72c88d46ca2e952e8bd6aade1ed34e91b4d163ede5e6132337759ff716496/theme-psx-theme-v2.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/psx-theme/","maintainer":"Fawkek","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By","Colorful"]},{"id":"depotkit","schema_version":"1.0.0","name":"DepotKit","version":"2.0.1","tagline":"Collect & organise all external assets in your .blend file","archive_hash":"sha256:0b7866ffd5f179a2d5f224093dec8580e54b8063e034240f7d0052aee130b199","archive_size":8376,"archive_url":"https://extensions.blender.org/download/sha256:0b7866ffd5f179a2d5f224093dec8580e54b8063e034240f7d0052aee130b199/add-on-depotkit-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/depotkit/","maintainer":"BHiMAX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads and writes texture files from disk"}},{"id":"io_mesh_threejs_objectloader","schema_version":"1.0.0","name":"three.js ObjectLoader","version":"1.0.1","tagline":"Import/Export three.js ObjectLoader JSON format 4+","archive_hash":"sha256:e0be2eff5d961f6095c52a3cabcde4b9f2bce0185c0126055e858310b89fd909","archive_size":12558,"archive_url":"https://extensions.blender.org/download/sha256:e0be2eff5d961f6095c52a3cabcde4b9f2bce0185c0126055e858310b89fd909/add-on-io-mesh-threejs-objectloader-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-mesh-threejs-objectloader/","maintainer":"crwde","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export JSON files to disk"},"tags":["Import-Export"]},{"id":"Studio_Mid","schema_version":"1.0.0","name":"Studio Mid","version":"2.3.5","tagline":"Consistent UI, sharp colors, comfortable contrast, 3 birght lvls","archive_hash":"sha256:aa6d95262ae48c8dc60d17cd7570061fd7da8b2ceb5118e9159f6a726ea71338","archive_size":5475,"archive_url":"https://extensions.blender.org/download/sha256:aa6d95262ae48c8dc60d17cd7570061fd7da8b2ceb5118e9159f6a726ea71338/theme-studio-mid-v2.3.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/studio-mid/","maintainer":"3DDinosaur","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"Studio_Light","schema_version":"1.0.0","name":"Studio Light","version":"2.3.6","tagline":"Consistent UI, sharp colors, comfortable contrast, 3 birght lvls","archive_hash":"sha256:b3c48be16ff02d36e8b1f73711fec9a5ba2b5b1a24f195b8278a90b00885042a","archive_size":5469,"archive_url":"https://extensions.blender.org/download/sha256:b3c48be16ff02d36e8b1f73711fec9a5ba2b5b1a24f195b8278a90b00885042a/theme-studio-light-v2.3.6.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/studio-light/","maintainer":"3DDinosaur","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"separate_by_collision","schema_version":"1.0.0","name":"Separate by Collision","version":"2.0.1","tagline":"Separate by loose parts, but parts are joined if they collide","archive_hash":"sha256:a484a8c03a93a95144070ce76736c106646c6b489f6e1e62eb30290e5df690c1","archive_size":745239,"archive_url":"https://extensions.blender.org/download/sha256:a484a8c03a93a95144070ce76736c106646c6b489f6e1e62eb30290e5df690c1/add-on-separate-by-collision-v2.0.1-linux-x64-windows-x64-macos-arm64-macos-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/separate-by-collision/","maintainer":"Hattiffnat","license":["SPDX:GPL-3.0-or-later"],"platforms":["linux-x64","windows-x64","macos-arm64","macos-x64"],"tags":["Mesh","Object"]},{"id":"pbr_lookdev","schema_version":"1.0.0","name":"PBR Lookdev","version":"4.2.1","tagline":"Layered PBR materials with masks, overlays and UDIM","archive_hash":"sha256:5d99211dcf113121d59c72ace5b8202c449c48ec45c8789e5e29db75e4685d09","archive_size":37047,"archive_url":"https://extensions.blender.org/download/sha256:5d99211dcf113121d59c72ace5b8202c449c48ec45c8789e5e29db75e4685d09/add-on-pbr-lookdev-v4.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pbr-lookdev/","maintainer":"BHiMAX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Texture path scanning and image loading"},"tags":["Material","Node","Render"]},{"id":"smart_mesh_cleaner_pro","schema_version":"1.0.0","name":"Smart Mesh Cleaner Pro","version":"3.5.1","tagline":"Professional cleanup tool with Smart Trash Bin & Restore","archive_hash":"sha256:394046bce0e5bd2704912578dafd9aa6f988c7a752908f6b6e0e56706f870567","archive_size":7537,"archive_url":"https://extensions.blender.org/download/sha256:394046bce0e5bd2704912578dafd9aa6f988c7a752908f6b6e0e56706f870567/add-on-smart-mesh-cleaner-pro-v3.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-mesh-cleaner-pro/","maintainer":"Igor-Garcia","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Scene"]},{"id":"Zbrush","schema_version":"1.0.0","name":"Zbrush","version":"1.0.0","tagline":"A Zbrush theme for Blender","archive_hash":"sha256:0c37a691759dbe938203acf0f09d372225b4daf7dac25389fbae27d0ba240fbb","archive_size":5659,"archive_url":"https://extensions.blender.org/download/sha256:0c37a691759dbe938203acf0f09d372225b4daf7dac25389fbae27d0ba240fbb/theme-zbrush-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/zbrush/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"nodot_names","schema_version":"1.0.0","name":"NoDot Names","version":"2.0.2","tagline":"Naming conventions, presets, validation","archive_hash":"sha256:2662bb0f9bd2380590683fae7db38935fc601c4c1beb0e543d1fd04ea154a192","archive_size":27903,"archive_url":"https://extensions.blender.org/download/sha256:2662bb0f9bd2380590683fae7db38935fc601c4c1beb0e543d1fd04ea154a192/add-on-nodot-names-v2.0.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/nodot-names/","maintainer":"Jordan-Moss","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline","Scene","Object"]},{"id":"gray_core_master_Wana","schema_version":"1.0.0","name":"灰核主控 (Gray Core Master)","version":"1.0.0","tagline":"gray dark theme for Blender","archive_hash":"sha256:98c1732221b159820e50556a191b5fae7dae004c3b4108aa24f501a68c7d2f1f","archive_size":6960,"archive_url":"https://extensions.blender.org/download/sha256:98c1732221b159820e50556a191b5fae7dae004c3b4108aa24f501a68c7d2f1f/theme-gray-core-master-wana-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gray-core-master-wana/","maintainer":"WA-w","license":["SPDX:GPL-3.0-or-later"]},{"id":"uvo_overlays","schema_version":"1.0.0","name":"UVO","version":"1.2.4","tagline":"Dynamic overlays for the UV Editor","archive_hash":"sha256:cc61784494cc166bd3a3783da290d0428ee61ccaa878ddd8d1ec64d1209e1e0f","archive_size":63718,"archive_url":"https://extensions.blender.org/download/sha256:cc61784494cc166bd3a3783da290d0428ee61ccaa878ddd8d1ec64d1209e1e0f/add-on-uvo-overlays-v1.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/uvo-overlays/","maintainer":"Dmytro-Zuievskyi","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","Modeling"]},{"id":"batch_exporter","schema_version":"1.0.0","name":"Monty Batch Exporter","version":"1.0.0","tagline":"Batch-export objects, collections, or scenes as individual files","archive_hash":"sha256:5260d4eb47b59d16ce96e69865e79c701a64226fff8b27d699876a2083a47823","archive_size":20852,"archive_url":"https://extensions.blender.org/download/sha256:5260d4eb47b59d16ce96e69865e79c701a64226fff8b27d699876a2083a47823/add-on-batch-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-exporter/","maintainer":"Diego-Montufar-Perez","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export files to disk"},"tags":["Import-Export","Pipeline"]},{"id":"AE_Flow_Dark","schema_version":"1.0.0","name":"AE_Flow_Dark","version":"1.0.0","tagline":"Dark Mood, 4thegoat","archive_hash":"sha256:d1c93ecd7eca84ba9cf379de2ffc7505e79d94f2f2018c7da7e128a4a6e5c6b1","archive_size":5775,"archive_url":"https://extensions.blender.org/download/sha256:d1c93ecd7eca84ba9cf379de2ffc7505e79d94f2f2018c7da7e128a4a6e5c6b1/theme-ae-flow-dark-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/ae-flow-dark/","maintainer":"Nois3G4te","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"propgon_uv_trim","schema_version":"1.0.0","name":"PropGon UV Trim","version":"2.1.3","tagline":"UV Trimsheet tools for layout, fitting and texel density","archive_hash":"sha256:3b413ab655498a4615f2dc8c9651f2514d67bbe072f7d4c8ae24f32bdc7ec3f1","archive_size":43502,"archive_url":"https://extensions.blender.org/download/sha256:3b413ab655498a4615f2dc8c9651f2514d67bbe072f7d4c8ae24f32bdc7ec3f1/add-on-propgon-uv-trim-v2.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/propgon-uv-trim/","maintainer":"PropGon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load TrimSheet presets and ID maps to disk"},"tags":["UV","Mesh"]},{"id":"goblend","schema_version":"1.0.0","name":"Goblend: Export to Godot","version":"2.1.0","tagline":"Highly customizable export of complex scenes to Godot","archive_hash":"sha256:0c0fffa33418f83bf5db8955da88c6a0b593c248056df1b74e2f81545b791d2a","archive_size":102398,"archive_url":"https://extensions.blender.org/download/sha256:0c0fffa33418f83bf5db8955da88c6a0b593c248056df1b74e2f81545b791d2a/add-on-goblend-v2.1.0.zip","type":"add-on","blender_version_min":"4.5.7","website":"https://extensions.blender.org/add-ons/goblend/","maintainer":"Togira","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export gltf, read Godot scene files, create textures"},"tags":["Game Engine","Import-Export"]},{"id":"image_dimensions_viewer","schema_version":"1.0.0","name":"Image Dimensions Viewer","version":"1.0.0","tagline":"Displays image dimensions in Node and Image Editors","archive_hash":"sha256:73f178f668da9da03c70738cdf09c249114e06f33c37bba37bfe8395130f15db","archive_size":4894,"archive_url":"https://extensions.blender.org/download/sha256:73f178f668da9da03c70738cdf09c249114e06f33c37bba37bfe8395130f15db/add-on-image-dimensions-viewer-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/image-dimensions-viewer/","maintainer":"Pazelock","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"Blender_Darker","schema_version":"1.0.0","name":"Darker","version":"1.0.1","tagline":"Blender Dark but well... darker","archive_hash":"sha256:5e356f36b12f0398c67cb3afc93a86d616e23d28f8c703f43e876f6f33c29107","archive_size":5572,"archive_url":"https://extensions.blender.org/download/sha256:5e356f36b12f0398c67cb3afc93a86d616e23d28f8c703f43e876f6f33c29107/theme-blender-darker-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blender-darker/","maintainer":"FlorianW","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"auto_paint_boundaries","schema_version":"1.0.0","name":"Auto Paint Boundaries","version":"1.1.1","tagline":"Paint cleanly inside smart, selection-limited regions","archive_hash":"sha256:5db1c2668d80db2e149ac3dd75fc2d15b7a6603e2da184468bd3588f29edb496","archive_size":14645,"archive_url":"https://extensions.blender.org/download/sha256:5db1c2668d80db2e149ac3dd75fc2d15b7a6603e2da184468bd3588f29edb496/add-on-auto-paint-boundaries-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-paint-boundaries/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"BRVLayers","schema_version":"1.0.0","name":"Batch Render View Layers","version":"1.2.3","tagline":"Batch Render View Layers","archive_hash":"sha256:63187cc826a44655a1f20a4647aacf7c6967bf7007b91ceeb7291725dff35f17","archive_size":4335,"archive_url":"https://extensions.blender.org/download/sha256:63187cc826a44655a1f20a4647aacf7c6967bf7007b91ceeb7291725dff35f17/add-on-brvlayers-v1.2.3.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/brvlayers/","maintainer":"chenkin123","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"sprocket_tools","schema_version":"1.0.0","name":"Sprocket Tools","version":"1.0.2","tagline":"Import and export Sprocket tank blueprints","archive_hash":"sha256:ede8a6a611179c585c1ad09cf5240fb1ea1cda37ecc994ce2c9817ef73f2758b","archive_size":392332,"archive_url":"https://extensions.blender.org/download/sha256:ede8a6a611179c585c1ad09cf5240fb1ea1cda37ecc994ce2c9817ef73f2758b/add-on-sprocket-tools-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sprocket-tools/","maintainer":"Brian-Marshall","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to import/export Sprocket blueprint data"},"tags":["Game Engine","Import-Export"]},{"id":"isometric_scene_setup","schema_version":"1.0.0","name":"Isometric Scene Setup","version":"1.0.1","tagline":"Isometric scene setup and 2D normal map rendering","archive_hash":"sha256:1e9dea02be61e0e956e7686afab62bd16494e620ace389f495cb7de2934bdda4","archive_size":5255,"archive_url":"https://extensions.blender.org/download/sha256:1e9dea02be61e0e956e7686afab62bd16494e620ace389f495cb7de2934bdda4/add-on-isometric-scene-setup-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/isometric-scene-setup/","maintainer":"RafaelPasquay","license":["SPDX:GPL-3.0-or-later","SPDX:MIT"],"tags":["Camera","Render","Scene"]},{"id":"stmap_exporter","schema_version":"1.0.0","name":"STMap Exporter","version":"1.1.0","tagline":"STMap Exporter for All Distortion Models","archive_hash":"sha256:19b8aaa06074c695d069c27288c0703b4f8d6be6046d4a4e663bcb18d94c4a61","archive_size":8942,"archive_url":"https://extensions.blender.org/download/sha256:19b8aaa06074c695d069c27288c0703b4f8d6be6046d4a4e663bcb18d94c4a61/add-on-stmap-exporter-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stmap-exporter/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Import-Export"]},{"id":"momentum","schema_version":"1.0.0","name":"Momentum","version":"1.0.1","tagline":"quickly add configurable follow-through to animations","archive_hash":"sha256:1d8f3e962baabeb2f028ae92952bc9f3fbffc0c390c2889859534dab616f7383","archive_size":16133,"archive_url":"https://extensions.blender.org/download/sha256:1d8f3e962baabeb2f028ae92952bc9f3fbffc0c390c2889859534dab616f7383/add-on-momentum-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/momentum/","maintainer":"Isaac-Burke","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"lily_lime_theme","schema_version":"1.0.0","name":"LiLy Lime","version":"1.0.0","tagline":"A fresh LiLy Lime-inspired light theme for Blender","archive_hash":"sha256:64af2baa0f398da24c045d1e33265dfcc174fc2e2df0c23dbbdfb10e331829bb","archive_size":9509,"archive_url":"https://extensions.blender.org/download/sha256:64af2baa0f398da24c045d1e33265dfcc174fc2e2df0c23dbbdfb10e331829bb/theme-lily-lime-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/lily-lime-theme/","maintainer":"Eridanus-Epsilon","license":["SPDX:MIT"],"tags":["Light","Colorful","Inspired By"]},{"id":"Solemn_Theme","schema_version":"1.0.0","name":"Solemn","version":"1.0.2","tagline":"A clean and dark theme","archive_hash":"sha256:0f7caef8efb90ffae3d103e127069a34b9e6672847248c06aaf86114aa24578f","archive_size":6767,"archive_url":"https://extensions.blender.org/download/sha256:0f7caef8efb90ffae3d103e127069a34b9e6672847248c06aaf86114aa24578f/theme-solemn-theme-v1.0.2.zip","type":"theme","blender_version_min":"5.0.1","website":"https://extensions.blender.org/themes/solemn-theme/","maintainer":"czod","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"Dark_Max_Pro","schema_version":"1.0.0","name":"Dark Max Pro","version":"1.0.0","tagline":"Pro Dark Max","archive_hash":"sha256:fbdab60a32fc45ac3a8de80366bea7dd8fb2903d315daf9714e496f7516f3f6e","archive_size":5433,"archive_url":"https://extensions.blender.org/download/sha256:fbdab60a32fc45ac3a8de80366bea7dd8fb2903d315daf9714e496f7516f3f6e/theme-dark-max-pro-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-max-pro/","maintainer":"PedroAmorim","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"object_reporter","schema_version":"1.0.0","name":"Object Reporter","version":"2.4.5","tagline":"Report, edit, select and export objects by custom properties","archive_hash":"sha256:7691ac2222aebcc83143312b391bb43f44683972a68d6216a69b50d4eef7adfa","archive_size":71155,"archive_url":"https://extensions.blender.org/download/sha256:7691ac2222aebcc83143312b391bb43f44683972a68d6216a69b50d4eef7adfa/add-on-object-reporter-v2.4.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/object-reporter/","maintainer":"Justinas-Dudenas","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export object property reports to CSV files on disk"},"tags":["Object"]},{"id":"robotics_animation_bone_coordinate_exporter","schema_version":"1.0.0","name":"Robotics Animation Bone Coordinate Exporter","version":"1.1.0","tagline":"Export armature animation data for robotics use","archive_hash":"sha256:5f4923122596a5f4b5e504883d816a490813c643f8125f35ad67f841653a6bea","archive_size":1886,"archive_url":"https://extensions.blender.org/download/sha256:5f4923122596a5f4b5e504883d816a490813c643f8125f35ad67f841653a6bea/add-on-robotics-animation-bone-coordinate-exporter-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/robotics-animation-bone-coordinate-exporter/","maintainer":"Kiran-Kumawat","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Import-Export","Rigging"]},{"id":"frame_range_renderer","schema_version":"1.0.0","name":"Frame Range Renderer","version":"1.0.0","tagline":"Render specific frames or frame ranges from the Output panel","archive_hash":"sha256:36b5912e8efd5943a737161e6076a0fc4c5dd0aa949bb60850dd6d1e45d2da53","archive_size":8126,"archive_url":"https://extensions.blender.org/download/sha256:36b5912e8efd5943a737161e6076a0fc4c5dd0aa949bb60850dd6d1e45d2da53/add-on-frame-range-renderer-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/frame-range-renderer/","maintainer":"AndreasResch","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Writes output images to disk"}},{"id":"soleshapper","schema_version":"1.0.0","name":"SoleShapper","version":"2.0.1","tagline":"Procedural shoe sole designer with noise deformation","archive_hash":"sha256:3724521212c5bf026c78f3dccef1cee697355dceac3847de85350f9cdf8d3ae7","archive_size":23584,"archive_url":"https://extensions.blender.org/download/sha256:3724521212c5bf026c78f3dccef1cee697355dceac3847de85350f9cdf8d3ae7/add-on-soleshapper-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/soleshapper/","maintainer":"David-Orrick","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import OBJ meshes and export STL or OBJ"},"tags":["Add Mesh"]},{"id":"tu_addon_id","schema_version":"1.0.0","name":"GeneradorMapsPbr","version":"1.0.0","tagline":"Make texture metallic,specular,Roughtness,NormalMap,Height","archive_hash":"sha256:0b37d42af8905161a45836f5c1be098f1f22b9b171f46995b3c9828791ebe37b","archive_size":6065,"archive_url":"https://extensions.blender.org/download/sha256:0b37d42af8905161a45836f5c1be098f1f22b9b171f46995b3c9828791ebe37b/add-on-tu-addon-id-v1.0.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/tu-addon-id/","maintainer":"Fran-Dominguez-Leiva-2","license":["SPDX:GPL-3.0-or-later"]},{"id":"doblux_geometry_node_group_execute","schema_version":"1.0.0","name":"DOBLUX Button to execute Geometry Node Group","version":"1.1.1","tagline":"one-click execution of any open Geometry Node group","archive_hash":"sha256:2975816a00a2d28d2f8cb8f9ba6c7598208d07ce1e72e6795c847847b4495344","archive_size":2014,"archive_url":"https://extensions.blender.org/download/sha256:2975816a00a2d28d2f8cb8f9ba6c7598208d07ce1e72e6795c847847b4495344/add-on-doblux-geometry-node-group-execute-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/doblux-geometry-node-group-execute/","maintainer":"Dan-Oak","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes","User Interface"]},{"id":"soundPlanes","schema_version":"1.0.0","name":"Sound Planes","version":"1.0.0","tagline":"Auto-Add Sounds To The Sequencer Using Planes","archive_hash":"sha256:3bb89caa2ad1864541e5240df8bae3646656d6507ba6fd1f230ca74dcb684e58","archive_size":13414,"archive_url":"https://extensions.blender.org/download/sha256:3bb89caa2ad1864541e5240df8bae3646656d6507ba6fd1f230ca74dcb684e58/add-on-soundplanes-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/soundplanes/","maintainer":"nifi","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"Crunchyroll_Dark","schema_version":"1.0.0","name":"Crunchyroll Dark","version":"1.0.0","tagline":"A Crunchyroll theme for Blender","archive_hash":"sha256:c8ce1657172ae7e855e8820d924070caab3bfeedb20a47fc12ec2abbbed17c55","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:c8ce1657172ae7e855e8820d924070caab3bfeedb20a47fc12ec2abbbed17c55/theme-crunchyroll-dark-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/crunchyroll-dark/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"Dark_Pro_Max_Theme","schema_version":"1.0.0","name":"Dark_Pro_Max_Theme","version":"1.2.8","tagline":"Dark Default Alternative","archive_hash":"sha256:7a31b13a26e03506646f10c7e9380037cbf1089e13f284e4afe88b2474023396","archive_size":5770,"archive_url":"https://extensions.blender.org/download/sha256:7a31b13a26e03506646f10c7e9380037cbf1089e13f284e4afe88b2474023396/theme-dark-pro-max-theme-v1.2.8.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-pro-max-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"output_setup_helper","schema_version":"1.0.0","name":"Output Setup Helper","version":"5.0.1","tagline":"Auto setup render outputs and denoising for multi-pass renders","archive_hash":"sha256:2ae18a2f31ec11e134586c3dfae4df83732dbc5c42a39171a04ab3f6c4f2c848","archive_size":4450,"archive_url":"https://extensions.blender.org/download/sha256:2ae18a2f31ec11e134586c3dfae4df83732dbc5c42a39171a04ab3f6c4f2c848/add-on-output-setup-helper-v5.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/output-setup-helper/","maintainer":"lukas.remis","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Render","Pipeline"]},{"id":"reflex_potentials","schema_version":"1.0.0","name":"Reflex Potentials","version":"1.0.3","tagline":"Reflex Potentials","archive_hash":"sha256:f41f8e3805cf75f8cb732dc24733ab839f5b7d633d136bcc59f40635245b1890","archive_size":35482,"archive_url":"https://extensions.blender.org/download/sha256:f41f8e3805cf75f8cb732dc24733ab839f5b7d633d136bcc59f40635245b1890/add-on-reflex-potentials-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/reflex-potentials/","maintainer":"dartmeadow","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"Blueprint_Theme","schema_version":"1.0.0","name":"Blueprint_Theme","version":"1.1.1","tagline":"True Blueprint Color","archive_hash":"sha256:68dace53d5dd2863817b293c4699b80605089b529f0b8e47a8b906dfa70b3303","archive_size":5717,"archive_url":"https://extensions.blender.org/download/sha256:68dace53d5dd2863817b293c4699b80605089b529f0b8e47a8b906dfa70b3303/theme-blueprint-theme-v1.1.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blueprint-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"Nostalgia_2bit_UI","schema_version":"1.0.0","name":"Nostalgia_2bit_UI","version":"1.3.5","tagline":"Light Default Alternative","archive_hash":"sha256:cf2c1641d730debc8a62ed8922f03a5107d0d841e8da47573f074d6778c5bd95","archive_size":5675,"archive_url":"https://extensions.blender.org/download/sha256:cf2c1641d730debc8a62ed8922f03a5107d0d841e8da47573f074d6778c5bd95/theme-nostalgia-2bit-ui-v1.3.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/nostalgia-2bit-ui/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"BLeQ_Extension","schema_version":"1.0.0","name":"BLeQ","version":"1.0.5","tagline":"Renderqueue / 3DHomePage / Hardwaremonitor / Tools","archive_hash":"sha256:286cefdc0eaeabc2e348c1e26ac7c5eaec9946603e3570aa5382a1704132c0ac","archive_size":35304,"archive_url":"https://extensions.blender.org/download/sha256:286cefdc0eaeabc2e348c1e26ac7c5eaec9946603e3570aa5382a1704132c0ac/add-on-bleq-extension-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bleq-extension/","maintainer":"Christian-Makarski","license":["SPDX:GPL-3.0-or-later"]},{"id":"driver_copy_io","schema_version":"1.0.0","name":"Driver Copy IO","version":"2.1.1","tagline":"Copy/Paste drivers via JSON using full path","archive_hash":"sha256:58a88728287093155bb2f61c7a7e526c2923c0889872d4613bf2db867dba207d","archive_size":21147,"archive_url":"https://extensions.blender.org/download/sha256:58a88728287093155bb2f61c7a7e526c2923c0889872d4613bf2db867dba207d/add-on-driver-copy-io-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/driver-copy-io/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"mockup_screenshoter","schema_version":"1.0.0","name":"Mockup Screenshoter","version":"0.9.1","tagline":"Capture your screen to make mockups in Penpot","archive_hash":"sha256:16c2d787b49297921eebec6f3bebf1727606c435f1053f6ed6eab55280bbd96e","archive_size":6437,"archive_url":"https://extensions.blender.org/download/sha256:16c2d787b49297921eebec6f3bebf1727606c435f1053f6ed6eab55280bbd96e/add-on-mockup-screenshoter-v0.9.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mockup-screenshoter/","maintainer":"Blender","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create temporary folder for the screen captures","clipboard":"Copy Penpot-ready json into the clipboard"},"tags":["Development"]},{"id":"b3d_ui_langloop","schema_version":"1.0.0","name":"B3D UI Language Loop","version":"1.0.3","tagline":"Quickly cycle Blender interface languages with a shortcut","archive_hash":"sha256:63bf8c9073919e21a7eb49b352d02a54f71057cfe26adce7f9d2337ac9a0b866","archive_size":6240,"archive_url":"https://extensions.blender.org/download/sha256:63bf8c9073919e21a7eb49b352d02a54f71057cfe26adce7f9d2337ac9a0b866/add-on-b3d-ui-langloop-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b3d-ui-langloop/","maintainer":"楊景貴","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"tree_clipper","schema_version":"1.0.0","name":"Tree Clipper","version":"0.1.7","tagline":"Export and import Blender node trees as JSON","archive_hash":"sha256:8823fccc495530e1739705e86eff7f6015aa00d8fd36df7d044233dc897ca641","archive_size":54864,"archive_url":"https://extensions.blender.org/download/sha256:8823fccc495530e1739705e86eff7f6015aa00d8fd36df7d044233dc897ca641/add-on-tree-clipper-v0.1.7.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/tree-clipper/","maintainer":"Lars-Helge-Scheel","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Node"]},{"id":"shapingrecorder","schema_version":"1.0.0","name":"Shaping Recorder","version":"0.7.5","tagline":"Record mesh shaping and viewport moves, replay interpolated","archive_hash":"sha256:a10c5e07c373447ad896741da47cc8a4fc831852c2f09261b57c120f2f8c3596","archive_size":38248,"archive_url":"https://extensions.blender.org/download/sha256:a10c5e07c373447ad896741da47cc8a4fc831852c2f09261b57c120f2f8c3596/add-on-shapingrecorder-v0.7.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapingrecorder/","maintainer":"darkstarrd","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write image sequences"},"tags":["Modeling"]},{"id":"reforge","schema_version":"1.0.0","name":"Reforge","version":"0.5.2","tagline":"Reforge Blender scenes into Defold assets","archive_hash":"sha256:15bd625739050ad3a4b3641ebdebfac6298330c02dee5d0b1bc08eb96b47f811","archive_size":16167,"archive_url":"https://extensions.blender.org/download/sha256:15bd625739050ad3a4b3641ebdebfac6298330c02dee5d0b1bc08eb96b47f811/add-on-reforge-v0.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/reforge/","maintainer":"Alexander-Bulatov","license":["SPDX:GPL-3.0-or-later"]},{"id":"comparable","schema_version":"1.0.0","name":"Comparable","version":"1.0.2","tagline":"Compare two objects or collections in one click","archive_hash":"sha256:b72d64fdb22b697a07806b75fcf932348475e326fc38b27d9230ddc0aae2116d","archive_size":3981,"archive_url":"https://extensions.blender.org/download/sha256:b72d64fdb22b697a07806b75fcf932348475e326fc38b27d9230ddc0aae2116d/add-on-comparable-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/comparable/","maintainer":"ffuthoni","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"screenwriter","schema_version":"1.0.0","name":"Screenwriter","version":"1.0.0","tagline":"Screenplay formatting and syncing tools for Blender","archive_hash":"sha256:ea16e42750bde882d4e1ceed7a74d55e020bb52bed06816615f9d5e162f6c2c6","archive_size":7307,"archive_url":"https://extensions.blender.org/download/sha256:ea16e42750bde882d4e1ceed7a74d55e020bb52bed06816615f9d5e162f6c2c6/add-on-screenwriter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/screenwriter/","maintainer":"zhengyang237","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing .fountain files"}},{"id":"image_zoom_overlay","schema_version":"1.0.0","name":"Image Zoom Overlay","version":"1.0.0","tagline":"Display zoom level in Image Editor with quick presets","archive_hash":"sha256:96407335647d7191ba1522818bd6f5b9e15be10fd896c50a18a5330e4d09e154","archive_size":2896,"archive_url":"https://extensions.blender.org/download/sha256:96407335647d7191ba1522818bd6f5b9e15be10fd896c50a18a5330e4d09e154/add-on-image-zoom-overlay-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/image-zoom-overlay/","maintainer":"pikok85","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access to image editor display settings"},"tags":["User Interface"]},{"id":"pataz_notes","schema_version":"1.0.0","name":"Pataz Notes","version":"5.2.2","tagline":"Anotate your blend files","archive_hash":"sha256:31cdd963b15c269ff819321251870c4ea106ee40a6ae5a681e5db3867ddb5ba9","archive_size":4889,"archive_url":"https://extensions.blender.org/download/sha256:31cdd963b15c269ff819321251870c4ea106ee40a6ae5a681e5db3867ddb5ba9/add-on-pataz-notes-v5.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pataz-notes/","maintainer":"zanqdo","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"omoospace","schema_version":"1.0.0","name":"Omoospace","version":"0.2.7","tagline":"Manage your blender projects in omoospace's way","archive_hash":"sha256:c3b8ce14f38794ad2424bc3f15b598f702f857543ab23bfcf5969da3979e0240","archive_size":1792082,"archive_url":"https://extensions.blender.org/download/sha256:c3b8ce14f38794ad2424bc3f15b598f702f857543ab23bfcf5969da3979e0240/add-on-omoospace-v0.2.7-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/omoospace/","maintainer":"icrdr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Manage your blender files"},"platforms":["windows-x64"],"tags":["Pipeline"]},{"id":"export_curve_to_json","schema_version":"1.0.0","name":"Export Curve To Json","version":"1.0.2","tagline":"File import/export for curves with JSON","archive_hash":"sha256:3646464bdf053849db751b2222790836064e5e268c70ef559f89bacde467c115","archive_size":18907,"archive_url":"https://extensions.blender.org/download/sha256:3646464bdf053849db751b2222790836064e5e268c70ef559f89bacde467c115/add-on-export-curve-to-json-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-curve-to-json/","maintainer":"Quint-Vrolijk","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"sculpting_extra_meshes_curve","schema_version":"1.0.0","name":"Sculpting Extra Meshes + Curve","version":"1.3.0","tagline":"Add primitives, join, boolean, mirror while in Sculpt Mode","archive_hash":"sha256:5b0c372464b0ca743651f1ffa4682f0c4ce322be119d3df59e3d71854ddbf3cf","archive_size":4205,"archive_url":"https://extensions.blender.org/download/sha256:5b0c372464b0ca743651f1ffa4682f0c4ce322be119d3df59e3d71854ddbf3cf/add-on-sculpting-extra-meshes-curve-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpting-extra-meshes-curve/","maintainer":"pixldg","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt"]},{"id":"global_custom_properties","schema_version":"1.0.0","name":"Global Custom Properties","version":"1.0.0","tagline":"Reusable Custom Properties on Objects and Collections","archive_hash":"sha256:9775ca35a3b7fb12a8c36dcbde85c8497a0ddd8938ec180416d9f23d9907d128","archive_size":18782,"archive_url":"https://extensions.blender.org/download/sha256:9775ca35a3b7fb12a8c36dcbde85c8497a0ddd8938ec180416d9f23d9907d128/add-on-global-custom-properties-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/global-custom-properties/","maintainer":"1hue","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"curve_fillet_tool","schema_version":"1.0.0","name":"NURBS/Poly Fillet Tool","version":"1.0.0","tagline":"Fillet and 'unfillet' for paths","archive_hash":"sha256:07d671b719e336aba5192208baf4951d2db3cf161e56350c3fb405fb3b6b1df7","archive_size":17360,"archive_url":"https://extensions.blender.org/download/sha256:07d671b719e336aba5192208baf4951d2db3cf161e56350c3fb405fb3b6b1df7/add-on-curve-fillet-tool-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.5","website":"https://extensions.blender.org/add-ons/curve-fillet-tool/","maintainer":"zaphod","license":["SPDX:GPL-3.0-or-later"]},{"id":"time_stretch_sync","schema_version":"1.0.0","name":"Time Stretch Sync","version":"1.1.0","tagline":"Sync timeline range, playline and operators with timestretching","archive_hash":"sha256:347dd396d927096a9f8c361e79214b2a612a5ca8208274a667ee207195f5df4c","archive_size":13493,"archive_url":"https://extensions.blender.org/download/sha256:347dd396d927096a9f8c361e79214b2a612a5ca8208274a667ee207195f5df4c/add-on-time-stretch-sync-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/time-stretch-sync/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"render_subcollections","schema_version":"1.0.0","name":"Render Subcollections","version":"1.0.1","tagline":"Automatically renders subcollections one by one","archive_hash":"sha256:54f2c7f20d243d96a7575d8083e92de190a0ceb9149e3757491c82cad3833066","archive_size":3353,"archive_url":"https://extensions.blender.org/download/sha256:54f2c7f20d243d96a7575d8083e92de190a0ceb9149e3757491c82cad3833066/add-on-render-subcollections-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-subcollections/","maintainer":"Nico-Peters","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","Camera"]},{"id":"Dissolve2EdgeVertices","schema_version":"1.0.0","name":"Dissolve 2-Edge Vertices","version":"1.1.0","tagline":"Dissolve vertices with two edges to clean up mesh topology","archive_hash":"sha256:6bfec11aea3f67f68c75897824e690f2110b5a0a84f57b8c9681e1b46a60241a","archive_size":1920,"archive_url":"https://extensions.blender.org/download/sha256:6bfec11aea3f67f68c75897824e690f2110b5a0a84f57b8c9681e1b46a60241a/add-on-dissolve2edgevertices-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dissolve2edgevertices/","maintainer":"Jackal","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"beyond_channel_packer","schema_version":"1.0.0","name":"Beyond Channel Packer","version":"1.0.2","tagline":"Pack image channels (RGBA) in the Image Editor","archive_hash":"sha256:713e336af49bf826e91aead72025eadd114580927d24e33e0493583e187b7e77","archive_size":22143,"archive_url":"https://extensions.blender.org/download/sha256:713e336af49bf826e91aead72025eadd114580927d24e33e0493583e187b7e77/add-on-beyond-channel-packer-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.9.999","website":"https://extensions.blender.org/add-ons/beyond-channel-packer/","maintainer":"tyler.tofu","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","Paint"]},{"id":"keyboard_layout_emulation","schema_version":"1.0.0","name":"Keyboard Layout Emulation","version":"1.0.4","tagline":"Emulate QWERTY keyboard shortcuts on non-QWERTY keyboard layouts","archive_hash":"sha256:6a476fcb992f89ceb556fbade7f4b1a8d6a7ed3b1f2556f0452613a66a8a556c","archive_size":32244,"archive_url":"https://extensions.blender.org/download/sha256:6a476fcb992f89ceb556fbade7f4b1a8d6a7ed3b1f2556f0452613a66a8a556c/add-on-keyboard-layout-emulation-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyboard-layout-emulation/","maintainer":"endorh","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export keyboard layouts/add-on preferences"},"tags":["User Interface"]},{"id":"theme_elsyiun_like","schema_version":"1.0.0","name":"elsyiun like","version":"1.1.0","tagline":"A flat dark theme that is easy on the eyes","archive_hash":"sha256:698be24bb24b0957bd8ac858be0d019e4626c7ede5f06adc3de376a5f84d77d1","archive_size":5639,"archive_url":"https://extensions.blender.org/download/sha256:698be24bb24b0957bd8ac858be0d019e4626c7ede5f06adc3de376a5f84d77d1/theme-theme-elsyiun-like-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-elsyiun-like/","maintainer":"modekichi","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"viewport_navigation_display","schema_version":"1.0.0","name":"Viewport Navigation Display","version":"1.2.1","tagline":"Visualize and control other viewports from TOP view","archive_hash":"sha256:3764c677ad34d57510e22257ff61646ab4ec8a25d2599486588d2bf9ab2bba01","archive_size":44446,"archive_url":"https://extensions.blender.org/download/sha256:3764c677ad34d57510e22257ff61646ab4ec8a25d2599486588d2bf9ab2bba01/add-on-viewport-navigation-display-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-navigation-display/","maintainer":"Cristiano-Tosoni","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","User Interface"]},{"id":"quick_signs","schema_version":"1.0.0","name":"QuickSigns","version":"1.0.1","tagline":"Create 3D text signs with Google Fonts integration","archive_hash":"sha256:d24a17ff92d6a2bbcbc7767c5c4f0a92eee7c6a564e900db4fd993545f9d9959","archive_size":9089,"archive_url":"https://extensions.blender.org/download/sha256:d24a17ff92d6a2bbcbc7767c5c4f0a92eee7c6a564e900db4fd993545f9d9959/add-on-quick-signs-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-signs/","maintainer":"Marin-Brouwers","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write font files to local storage","network":"Access Google Fonts API for font search and download"},"tags":["Import-Export"]},{"id":"dy_pack_master","schema_version":"1.0.0","name":"dy Pack Master","version":"1.0.1","tagline":"Make Blender projects portable for render farms","archive_hash":"sha256:5e8694b0e3747a1ee4878161bb239392d2eeb7f97da21e3dd0cef0774137724f","archive_size":34845,"archive_url":"https://extensions.blender.org/download/sha256:5e8694b0e3747a1ee4878161bb239392d2eeb7f97da21e3dd0cef0774137724f/add-on-dy-pack-master-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dy-pack-master/","maintainer":"cdordelly","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Copies and localizes external assets to project directory"},"tags":["Pipeline","Import-Export","System"]},{"id":"cycles_bake_info","schema_version":"1.0.0","name":"Bake Info","version":"1.0.2","tagline":"fast bake checkup","archive_hash":"sha256:ac46bdb997c1f31bb513c45af62890576fcf93a8f6e4e4d115bc9298d3d914c5","archive_size":1581,"archive_url":"https://extensions.blender.org/download/sha256:ac46bdb997c1f31bb513c45af62890576fcf93a8f6e4e4d115bc9298d3d914c5/add-on-cycles-bake-info-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cycles-bake-info/","maintainer":"Chalouek-RGBit","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","User Interface"]},{"id":"quill","schema_version":"1.0.0","name":"Quill Import/Export","version":"1.6.0","tagline":"Import and export Quill VR illustrations and animations","archive_hash":"sha256:4ca095528de167ae98be7ebc886d8b7cd45a4279d6515e11e9d224d65d5cdfda","archive_size":57145,"archive_url":"https://extensions.blender.org/download/sha256:4ca095528de167ae98be7ebc886d8b7cd45a4279d6515e11e9d224d65d5cdfda/add-on-quill-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quill/","maintainer":"Joan-Charmant","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export Quill projects from/to disk"},"tags":["Import-Export"]},{"id":"splats","schema_version":"1.0.0","name":"Splats","version":"1.0.1","tagline":"Generate multi-view training data for Gaussian Splatting","archive_hash":"sha256:9171a58e9149ed9fe05a0bfc1c702a20e9055b51a36600664bc8ec19675229f2","archive_size":15856,"archive_url":"https://extensions.blender.org/download/sha256:9171a58e9149ed9fe05a0bfc1c702a20e9055b51a36600664bc8ec19675229f2/add-on-splats-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/splats/","maintainer":"Dev.Patel","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export PLY point clouds and render output files"},"tags":["Render","Camera"]},{"id":"export_curve_as_svg","schema_version":"1.0.0","name":"Export Curve as SVG","version":"1.0.0","tagline":"Export selected Bezier and Poly curves as SVG files","archive_hash":"sha256:1ab1dd210d80ff5c6d6fc5fc3b2bb481e571c28e736be2a028a5568ad2d6d990","archive_size":16937,"archive_url":"https://extensions.blender.org/download/sha256:1ab1dd210d80ff5c6d6fc5fc3b2bb481e571c28e736be2a028a5568ad2d6d990/add-on-export-curve-as-svg-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/export-curve-as-svg/","maintainer":"Gilberto.R","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"asset_library_tools","schema_version":"1.0.0","name":"Asset Library Tools","version":"1.0.0","tagline":"Filter assets by tags and catalogue backups for asset libraries","archive_hash":"sha256:b4984647ddd947e4d1cecf108759494135e2c2c4f6049d0125e89634163cdc37","archive_size":15607,"archive_url":"https://extensions.blender.org/download/sha256:b4984647ddd947e4d1cecf108759494135e2c2c4f6049d0125e89634163cdc37/add-on-asset-library-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/asset-library-tools/","maintainer":"Akhil_Alukkaran","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write tag indexes and catalogue backup files"},"tags":["System","User Interface","Pipeline"]},{"id":"redlix_theme","schema_version":"1.0.0","name":"Redlix Theme","version":"1.0.0","tagline":"Cooperative brutalist framework - retro-futuristic design system","archive_hash":"sha256:532550a1d2fda385ae83d56b42e3ac32e2cb3a5134ed92e488515515ef562ec8","archive_size":4968,"archive_url":"https://extensions.blender.org/download/sha256:532550a1d2fda385ae83d56b42e3ac32e2cb3a5134ed92e488515515ef562ec8/theme-redlix-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/redlix-theme/","maintainer":"redlix","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"ftw_flattening_toolset","schema_version":"1.0.0","name":"FTW Flattening Toolset","version":"2.0.0","tagline":"UV workflow: flattening, curve alignment, scaling, UV transfer","archive_hash":"sha256:65ae1e56ade1c60e2b996a508114b1444d51a333a52f2022f79715b62e57838a","archive_size":1176759,"archive_url":"https://extensions.blender.org/download/sha256:65ae1e56ade1c60e2b996a508114b1444d51a333a52f2022f79715b62e57838a/add-on-ftw-flattening-toolset-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/ftw-flattening-toolset/","maintainer":"FTW3DForge","license":["SPDX:GPL-3.0-or-later"]},{"id":"folded_paper_engine","schema_version":"1.0.0","name":"Folded Paper Engine","version":"1.0.11","tagline":"Define gameplay in Blender and play in Godot with a few clicks","archive_hash":"sha256:5ca30c78f45277f45ed8a808e9b191f515c2207e79e0c4f3acac2de3cb96155a","archive_size":14004,"archive_url":"https://extensions.blender.org/download/sha256:5ca30c78f45277f45ed8a808e9b191f515c2207e79e0c4f3acac2de3cb96155a/add-on-folded-paper-engine-v1.0.11.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/folded-paper-engine/","maintainer":"Papercraft-Games","license":["SPDX:GPL-3.0-or-later","SPDX:MIT"],"tags":["Import-Export","Game Engine","Pipeline"]},{"id":"spine_io","schema_version":"1.0.0","name":"Spine IO","version":"0.0.3","tagline":"Export bone-driven Spine 4.3 JSON files","archive_hash":"sha256:502a89baf7a6ff0517c018ea7b76dff9f65432437b3b8ba46a525c671344278e","archive_size":29815,"archive_url":"https://extensions.blender.org/download/sha256:502a89baf7a6ff0517c018ea7b76dff9f65432437b3b8ba46a525c671344278e/add-on-spine-io-v0.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/spine-io/","maintainer":"Digital-Art-Freedom","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read textures and write Spine JSON"},"tags":["Import-Export","Rigging","Animation"]},{"id":"camfree","schema_version":"1.0.0","name":"CamFree","version":"1.0.5","tagline":"Fly/Walk Navigation on Cameras with Constraints","archive_hash":"sha256:e5cdbf82af653ffcdd8c2cf598c5f965e47d3b69c86965fa9b085c68e4a43344","archive_size":2409,"archive_url":"https://extensions.blender.org/download/sha256:e5cdbf82af653ffcdd8c2cf598c5f965e47d3b69c86965fa9b085c68e4a43344/add-on-camfree-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camfree/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"sort_viewlayers_rmb","schema_version":"1.0.0","name":"RMB Sort View Layers Alphabetically in Outliner-Scenes","version":"0.0.2","tagline":"RMB Sort View Layers Alphabetically in Outliner-Scenes","archive_hash":"sha256:c42858f387228d7ec906bb1a5f8705345fc8cad07a4ba7399ab28ac6431034e0","archive_size":2908,"archive_url":"https://extensions.blender.org/download/sha256:c42858f387228d7ec906bb1a5f8705345fc8cad07a4ba7399ab28ac6431034e0/add-on-sort-viewlayers-rmb-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sort-viewlayers-rmb/","maintainer":"RobWu","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"voda_theme_cinnamon","schema_version":"1.0.0","name":"Cinnamon","version":"2.0.0","tagline":"Cinnamon-Orange themed Blender with a gradiented kick","archive_hash":"sha256:37cf32055dda8411ddadfbf84483f1345b652048cc16d0d2dbc795dd746f6849","archive_size":6616,"archive_url":"https://extensions.blender.org/download/sha256:37cf32055dda8411ddadfbf84483f1345b652048cc16d0d2dbc795dd746f6849/theme-voda-theme-cinnamon-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/voda-theme-cinnamon/","maintainer":"VaVo","license":["SPDX:CC0-1.0"]},{"id":"Black","schema_version":"1.0.0","name":"Black","version":"5.0.4","tagline":"A black theme, probably the blackest one","archive_hash":"sha256:3167d027740b8693d0a97af41ee0fbedfde3fc378c8900ddb43adf5935600f64","archive_size":5200,"archive_url":"https://extensions.blender.org/download/sha256:3167d027740b8693d0a97af41ee0fbedfde3fc378c8900ddb43adf5935600f64/theme-black-v5.0.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/black/","maintainer":"Gurra","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"root_maker","schema_version":"1.0.0","name":"RootMaker","version":"1.0.1","tagline":"Create root bone & bake into actions","archive_hash":"sha256:f8e66008152054ac78b47b34971c07a9bfd32ca9e9760e9ac831028a00a85cb3","archive_size":6592,"archive_url":"https://extensions.blender.org/download/sha256:f8e66008152054ac78b47b34971c07a9bfd32ca9e9760e9ac831028a00a85cb3/add-on-root-maker-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/root-maker/","maintainer":"manas-R.-Makde","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging","Bake"]},{"id":"MetahumanToManny","schema_version":"1.0.0","name":"MetahumanToManny","version":"1.3.0","tagline":"Clean up MetaHuman meshes and match them to UE5 Manny","archive_hash":"sha256:effdd535e6a830738e2a757ca2c250239c81f52f72b4711a2458e205d04b13b4","archive_size":21612,"archive_url":"https://extensions.blender.org/download/sha256:effdd535e6a830738e2a757ca2c250239c81f52f72b4711a2458e205d04b13b4/add-on-metahumantomanny-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/metahumantomanny/","maintainer":"hakan-erunsal","license":["SPDX:GPL-3.0-or-later"]},{"id":"import_png_palette","schema_version":"1.0.0","name":"Import PNG Palette","version":"1.0.2","tagline":"Import PNG images as color palettes for Blender","archive_hash":"sha256:3f4b526b1790cc37067789a1a1c46d51fc09bf466d397828627fd367e34a4ee4","archive_size":2035,"archive_url":"https://extensions.blender.org/download/sha256:3f4b526b1790cc37067789a1a1c46d51fc09bf466d397828627fd367e34a4ee4/add-on-import-png-palette-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-png-palette/","maintainer":"Ruuubick","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Paint"]},{"id":"momo_dark","schema_version":"1.0.0","name":"Momo Dark","version":"5.0.3","tagline":"Momo Dark - theme inspired by Modo","archive_hash":"sha256:1c3d772ddb40f65df60081d1682149b80fc86bc6283ec1699f164f84c8ef93dd","archive_size":6506,"archive_url":"https://extensions.blender.org/download/sha256:1c3d772ddb40f65df60081d1682149b80fc86bc6283ec1699f164f84c8ef93dd/theme-momo-dark-v5.0.3.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/momo-dark/","maintainer":"TimoShch","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"rss_theme_cyberpunk","schema_version":"1.0.0","name":"RedSavStudios: Cyberpunk","version":"0.5.5","tagline":"A dark blue cyberpunk-inspired theme with neon highlights","archive_hash":"sha256:9fc403b95ae68202e260f4cd7dba2359ad4e50ace0e4fcab020edacb5366435c","archive_size":5501,"archive_url":"https://extensions.blender.org/download/sha256:9fc403b95ae68202e260f4cd7dba2359ad4e50ace0e4fcab020edacb5366435c/theme-rss-theme-cyberpunk-v0.5.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/rss-theme-cyberpunk/","maintainer":"Reddraconi","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"rss_theme_nord","schema_version":"1.0.0","name":"RedSavStudios: Nord (Aurora)","version":"0.5.2","tagline":"Nord Theme With Aurora Accents","archive_hash":"sha256:0e8c6afd497618aef1fa42511aff6cfab32311c162b4f8f0d9291f59523cfd50","archive_size":5196,"archive_url":"https://extensions.blender.org/download/sha256:0e8c6afd497618aef1fa42511aff6cfab32311c162b4f8f0d9291f59523cfd50/theme-rss-theme-nord-v0.5.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/rss-theme-nord/","maintainer":"Reddraconi","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"randomize_noise_offset","schema_version":"1.0.0","name":"Randomize Noise Offset","version":"1.0.3","tagline":"Randomize Noise Offset for F-Curves","archive_hash":"sha256:538013b0bbec8281cf30abafee96389d0ad3664b48b733d9b3784b674e63a6e9","archive_size":2500,"archive_url":"https://extensions.blender.org/download/sha256:538013b0bbec8281cf30abafee96389d0ad3664b48b733d9b3784b674e63a6e9/add-on-randomize-noise-offset-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/randomize-noise-offset/","maintainer":"a.a.andrusenko","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"mirror_image","schema_version":"1.0.0","name":"Mirror Image","version":"1.0.0","tagline":"Applies mirroring to the active image","archive_hash":"sha256:12acdb21a3cd9f1e05202ae384499c80949d8ed3d352cd8a0ddfe70dcac21f46","archive_size":2540,"archive_url":"https://extensions.blender.org/download/sha256:12acdb21a3cd9f1e05202ae384499c80949d8ed3d352cd8a0ddfe70dcac21f46/add-on-mirror-image-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mirror-image/","maintainer":"R4V3N","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"toggle_orbit_method","schema_version":"1.0.0","name":"Toggle Orbit Method (Turntable / Trackball)","version":"1.0.0","tagline":"Quickly toggles between Turntable and Trackball orbit modes","archive_hash":"sha256:c22d1bfd2e9bb48344aae7cb61efa209a06174146e3f1b6436a638b3064019c4","archive_size":1369,"archive_url":"https://extensions.blender.org/download/sha256:c22d1bfd2e9bb48344aae7cb61efa209a06174146e3f1b6436a638b3064019c4/add-on-toggle-orbit-method-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toggle-orbit-method/","maintainer":"ArgelliKa","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"blender_vnf_exporter_extension","schema_version":"1.0.0","name":"VNF Export Extension","version":"1.0.0","tagline":"Export blender mesh to openscad vnf","archive_hash":"sha256:a5520b1cd82ed825022faadc413ba1db1dd8c9b8d16fafb7c198583ccbe6c23e","archive_size":14400,"archive_url":"https://extensions.blender.org/download/sha256:a5520b1cd82ed825022faadc413ba1db1dd8c9b8d16fafb7c198583ccbe6c23e/add-on-blender-vnf-exporter-extension-v1.0.0-windows-x64-linux-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-vnf-exporter-extension/","maintainer":"runerback","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export .scad to disk"},"platforms":["windows-x64","linux-x64"],"tags":["Import-Export"]},{"id":"vray_arena_setup","schema_version":"1.0.0","name":"Vray Arena Setup","version":"2.5.0","tagline":"Export VRay Cosmos assets, scene textures, and stage cube setup","archive_hash":"sha256:608feab71c8d9f0726372656513c23c24ebad88707929a9f3c89d85a64d6185f","archive_size":6050,"archive_url":"https://extensions.blender.org/download/sha256:608feab71c8d9f0726372656513c23c24ebad88707929a9f3c89d85a64d6185f/add-on-vray-arena-setup-v2.5.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/vray-arena-setup/","maintainer":"Darsh","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write project and resources directories"},"tags":["Import-Export","Material"]},{"id":"Minimal","schema_version":"1.0.0","name":"Minimal","version":"1.0.0","tagline":"Dark minimal theme","archive_hash":"sha256:5cfd4ece8439e754c284703a3b92e967094ac3c05e5a145738e911139b4238fb","archive_size":5620,"archive_url":"https://extensions.blender.org/download/sha256:5cfd4ece8439e754c284703a3b92e967094ac3c05e5a145738e911139b4238fb/theme-minimal-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/minimal/","maintainer":"A7medKhaled.me","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"auto_track_weights","schema_version":"1.0.0","name":"Auto Track Weights","version":"0.2.1","tagline":"Automatically adjust the weights of tracking markers","archive_hash":"sha256:90e5cf8f11558a00e14a383e30cda0fd9ca1d40bc76e514f8f42b7be3c67c6be","archive_size":2415,"archive_url":"https://extensions.blender.org/download/sha256:90e5cf8f11558a00e14a383e30cda0fd9ca1d40bc76e514f8f42b7be3c67c6be/add-on-auto-track-weights-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-track-weights/","maintainer":"david494","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Tracking"]},{"id":"batch_bone_constraints","schema_version":"1.0.0","name":"Batch Bone Constraints","version":"1.1.4","tagline":"Batch bone constraints to the selected multiple armatures","archive_hash":"sha256:a73d426532da74e03772365f62a32e85637622da7cfe4fb77f469923e13604ee","archive_size":6589,"archive_url":"https://extensions.blender.org/download/sha256:a73d426532da74e03772365f62a32e85637622da7cfe4fb77f469923e13604ee/add-on-batch-bone-constraints-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-bone-constraints/","maintainer":"distinctive-mark","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"theme_BlueInvasion","schema_version":"1.0.0","name":"Blue Invasion","version":"1.0.3-1","tagline":"A theme inspired by Winamp's blue invasion theme","archive_hash":"sha256:aaa50db52785b547c7902f7dea3808dbd06ba8a27b989b96de0640590a7863f2","archive_size":6165,"archive_url":"https://extensions.blender.org/download/sha256:aaa50db52785b547c7902f7dea3808dbd06ba8a27b989b96de0640590a7863f2/theme-theme-blueinvasion-v1.0.3-1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-blueinvasion/","maintainer":"zaq","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful","Inspired By"]},{"id":"trident","schema_version":"1.0.0","name":"TRIDENT","version":"0.2.1","tagline":"3D UMAP/t-SNE embeddings into Blender","archive_hash":"sha256:85c8367127d76c0c21514615439d0b4fdfdb08e3034f146ad890f6cf4d29c66a","archive_size":128117,"archive_url":"https://extensions.blender.org/download/sha256:85c8367127d76c0c21514615439d0b4fdfdb08e3034f146ad890f6cf4d29c66a/add-on-trident-v0.2.1-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/trident/","maintainer":"ccordi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write data files and build outputs"},"platforms":["windows-x64"],"tags":["3D View","Object"]},{"id":"FrameFlowBlender","schema_version":"1.0.0","name":"Frame Flow Beta","version":"1.4.1","tagline":"Advanced Node Frame Add-on for Blender","archive_hash":"sha256:24848e275ae2a587be4a8048afbc32f1b67e46ef0aba693ca65a34de20bc495f","archive_size":922364,"archive_url":"https://extensions.blender.org/download/sha256:24848e275ae2a587be4a8048afbc32f1b67e46ef0aba693ca65a34de20bc495f/add-on-frameflowblender-v1.4.1.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/frameflowblender/","maintainer":"abhi.01","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Text Editor"]},{"id":"pataz_thumbnail_toolz","schema_version":"1.0.0","name":"Pataz Thumbnail Toolz","version":"1.0.0","tagline":"Tools for managing asset thumbnails","archive_hash":"sha256:ef3ba866311125fd57ed6598dea3be8acc70608f3d95ff817d4c8444012774ac","archive_size":2763,"archive_url":"https://extensions.blender.org/download/sha256:ef3ba866311125fd57ed6598dea3be8acc70608f3d95ff817d4c8444012774ac/add-on-pataz-thumbnail-toolz-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pataz-thumbnail-toolz/","maintainer":"zanqdo","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load files from disk"},"tags":["Pipeline"]},{"id":"io_scene_jsbsim","schema_version":"1.0.0","name":"JSBSim Viewer","version":"0.2.3","tagline":"Import and visualize JSBSim FDM aircraft XML metrics","archive_hash":"sha256:3d97352d2c89e76944575b20004a05aeb07c771412a6ffda6b375f973b8dff5f","archive_size":6721,"archive_url":"https://extensions.blender.org/download/sha256:3d97352d2c89e76944575b20004a05aeb07c771412a6ffda6b375f973b8dff5f/add-on-io-scene-jsbsim-v0.2.3.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/io-scene-jsbsim/","maintainer":"RenanMsV","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"multi_adjust","schema_version":"1.0.0","name":"Multi Adjust","version":"1.0.1","tagline":"Edits properties of multiple things together","archive_hash":"sha256:b5717e7f3f3e02a8b55acea1caaa10c0aef618f992f9dc109510c1ee2de4abed","archive_size":9515,"archive_url":"https://extensions.blender.org/download/sha256:b5717e7f3f3e02a8b55acea1caaa10c0aef618f992f9dc109510c1ee2de4abed/add-on-multi-adjust-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/multi-adjust/","maintainer":"Brrainz","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"replace_with_copy","schema_version":"1.0.0","name":"Replace With Copy","version":"1.0.1","tagline":"Batch replace multiple objects with a template","archive_hash":"sha256:b1827d0b0ae7e87cce0f4e4ecf4ce8e861d14dc183d5bb387226167ef66fbabf","archive_size":4116,"archive_url":"https://extensions.blender.org/download/sha256:b1827d0b0ae7e87cce0f4e4ecf4ce8e861d14dc183d5bb387226167ef66fbabf/add-on-replace-with-copy-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/replace-with-copy/","maintainer":"Brrainz","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"sierpinski_triangle","schema_version":"1.0.0","name":"Sierpinski Triangle","version":"1.0.4","tagline":"This add-on creates Sierpinski triangles","archive_hash":"sha256:4f6badeb029f38d3680bec40b1a7a61aafd7b35487849a09875c844bd7e01b05","archive_size":4106,"archive_url":"https://extensions.blender.org/download/sha256:4f6badeb029f38d3680bec40b1a7a61aafd7b35487849a09875c844bd7e01b05/add-on-sierpinski-triangle-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sierpinski-triangle/","maintainer":"Jonny-B","license":["SPDX:GPL-3.0-or-later"]},{"id":"light_generator","schema_version":"1.0.0","name":"Light Generator","version":"1.2.0","tagline":"Generate lights with advanced distribution","archive_hash":"sha256:1b687666b01727e8e8c91ab7a06f03c641cd840d002bcb59714e73d8ba877a05","archive_size":5837,"archive_url":"https://extensions.blender.org/download/sha256:1b687666b01727e8e8c91ab7a06f03c641cd840d002bcb59714e73d8ba877a05/add-on-light-generator-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/light-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Lighting"]},{"id":"nfc_card_keychain_generator","schema_version":"1.0.0","name":"NFC Card and Keychain Generator","version":"1.2.3","tagline":"Generate customizable 3D-printable cards, tags, and keychains","archive_hash":"sha256:c2acb335a0bf0db5fe5ec7064021d8a2131c9bd409dabce8bf823a6c44529f7b","archive_size":513559,"archive_url":"https://extensions.blender.org/download/sha256:c2acb335a0bf0db5fe5ec7064021d8a2131c9bd409dabce8bf823a6c44529f7b/add-on-nfc-card-keychain-generator-v1.2.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/nfc-card-keychain-generator/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"For custom SVG import and file saving operations"},"tags":["Modeling","Object"]},{"id":"Physical_Motion_Blur","schema_version":"1.0.0","name":"Physical Motion Blur","version":"1.1.0","tagline":"Adds intuitive shutter speed and angle controls for motion blur","archive_hash":"sha256:b74e16e526349842371e5b688e7f95e4fbaf60284d413c025c30de5989a51438","archive_size":2605,"archive_url":"https://extensions.blender.org/download/sha256:b74e16e526349842371e5b688e7f95e4fbaf60284d413c025c30de5989a51438/add-on-physical-motion-blur-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/physical-motion-blur/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Render","Animation"]},{"id":"utility_materials","schema_version":"1.0.0","name":"Utility Materials","version":"1.1.5","tagline":"Industrial design theme in the Utility Materials universe","archive_hash":"sha256:1060b83f61823e30cac6147ad365e0e2532132ba85719a73fb8a881b1daee82f","archive_size":5294,"archive_url":"https://extensions.blender.org/download/sha256:1060b83f61823e30cac6147ad365e0e2532132ba85719a73fb8a881b1daee82f/theme-utility-materials-v1.1.5.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/utility-materials/","maintainer":"Utility-Materials","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"AddShaderAttribute","schema_version":"1.0.0","name":"Add Shader Attribute","version":"0.3.0","tagline":"Add attribute directly in shader nodetree","archive_hash":"sha256:94c6c429e385ec1bdd70aab48b4664b72ab7e4af3336b4acc96be2d3f4d02707","archive_size":2591,"archive_url":"https://extensions.blender.org/download/sha256:94c6c429e385ec1bdd70aab48b4664b72ab7e4af3336b4acc96be2d3f4d02707/add-on-addshaderattribute-v0.3.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/addshaderattribute/","maintainer":"atticuslv","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"all_objects_into_assets","schema_version":"1.0.0","name":"All Objects into Assets","version":"1.0.4","tagline":"Create collection assets and catalogs automatically","archive_hash":"sha256:10d9d4dfc45855e34afbec1e7fc88d8576ab201701abf0d4c5876eac65dd52a7","archive_size":9361,"archive_url":"https://extensions.blender.org/download/sha256:10d9d4dfc45855e34afbec1e7fc88d8576ab201701abf0d4c5876eac65dd52a7/add-on-all-objects-into-assets-v1.0.4.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/all-objects-into-assets/","maintainer":"StellArc","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write asset library catalogs file"}},{"id":"goldsrc_model_helper","schema_version":"1.0.0","name":"GS Model Helper","version":"2.2.0","tagline":"A set of tools for working with Goldsource models in Blender","archive_hash":"sha256:074531c7e337f1e88d36dfdec5ad2f698b8d18aa7e916008120c6105846b98df","archive_size":7626,"archive_url":"https://extensions.blender.org/download/sha256:074531c7e337f1e88d36dfdec5ad2f698b8d18aa7e916008120c6105846b98df/add-on-goldsrc-model-helper-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/goldsrc-model-helper/","maintainer":"DaKashi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to rename and clean up materials/textures"}},{"id":"pjavel_theme","schema_version":"1.0.0","name":"Pjavel Theme","version":"1.2.2","tagline":"Green accent theme","archive_hash":"sha256:b8a2a09aee65bdb1920d3f893f4f9b09b5373a79429fb65652f2c6a4a6eef94a","archive_size":18635,"archive_url":"https://extensions.blender.org/download/sha256:b8a2a09aee65bdb1920d3f893f4f9b09b5373a79429fb65652f2c6a4a6eef94a/theme-pjavel-theme-v1.2.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/pjavel-theme/","maintainer":"Zexyp","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"text_editor_for_development","schema_version":"1.0.0","name":"Text editor for Development","version":"1.0.7","tagline":"Text editor enhancements for add-on development","archive_hash":"sha256:132e0df040832a572a759c89205edf203a296822af651a7db49a3c99d1a1edf2","archive_size":340600,"archive_url":"https://extensions.blender.org/download/sha256:132e0df040832a572a759c89205edf203a296822af651a7db49a3c99d1a1edf2/add-on-text-editor-for-development-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/text-editor-for-development/","maintainer":"Martin-Lorentzon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Specify folder to preview for file-browsing/editing","network":"Clone remote Git repositories for add-on templates"},"tags":["Text Editor","Development"]},{"id":"bfds","schema_version":"1.0.0","name":"BFDS fire simulations","version":"7.0.0","tagline":"Create and manage NIST FDS fire simulations","archive_hash":"sha256:27de24b26775e38e30d5813ad436c3aaa8b38429728ebc191446eaa71491ccb6","archive_size":370951,"archive_url":"https://extensions.blender.org/download/sha256:27de24b26775e38e30d5813ad436c3aaa8b38429728ebc191446eaa71491ccb6/add-on-bfds-v7.0.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/bfds/","maintainer":"emanuele.gissi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FDS files from/to disk","network":"Display geographic positions, convert coordinates"},"tags":["Import-Export"]},{"id":"sciblend","schema_version":"1.0.0","name":"SciBlend","version":"1.1.2","tagline":"Scientific visualization tools for Blender","archive_hash":"sha256:a0ea43e82838e33a8fbd691bdabd3342242093dd484a1909d70e3bc024da554d","archive_size":143536802,"archive_url":"https://extensions.blender.org/download/sha256:a0ea43e82838e33a8fbd691bdabd3342242093dd484a1909d70e3bc024da554d/add-on-sciblend-v1.1.2-windows-x64.zip","type":"add-on","blender_version_min":"4.5.1","website":"https://extensions.blender.org/add-ons/sciblend/","maintainer":"José-Marín","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"navigation_puck_addon","schema_version":"1.0.0","name":"Navigation Puck Addon","version":"2.0.1","tagline":"Navigation Puck like in Sketchbook Pro","archive_hash":"sha256:d98ab22845578d43de090fbf37e306244853a5d0fd6baef835a7ed1c0c066b13","archive_size":145831,"archive_url":"https://extensions.blender.org/download/sha256:d98ab22845578d43de090fbf37e306244853a5d0fd6baef835a7ed1c0c066b13/add-on-navigation-puck-addon-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/navigation-puck-addon/","maintainer":"IliaVerpa","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View"]},{"id":"midicontroller","schema_version":"1.0.0","name":"MidiController","version":"0.1.7","tagline":"Control objects properties through midi","archive_hash":"sha256:635cc40eca6b181d6bbba19839ebf15fd006620056ed3344c7cc505079ea8127","archive_size":270990,"archive_url":"https://extensions.blender.org/download/sha256:635cc40eca6b181d6bbba19839ebf15fd006620056ed3344c7cc505079ea8127/add-on-midicontroller-v0.1.7-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/midicontroller/","maintainer":"Eldin-Zenderink","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["User Interface","Animation"]},{"id":"smart_transform","schema_version":"1.0.0","name":"Smart Transform","version":"1.0.2","tagline":"filter objects by size or transforms, and more tools","archive_hash":"sha256:7b4fa468f7ad58552ec1b6be1d2f2c3f0ed2bfe19da271042e38a661c4cfdd11","archive_size":2671,"archive_url":"https://extensions.blender.org/download/sha256:7b4fa468f7ad58552ec1b6be1d2f2c3f0ed2bfe19da271042e38a661c4cfdd11/add-on-smart-transform-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-transform/","maintainer":"Claz_Arts","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"animated_brush","schema_version":"1.0.0","name":"Animated Texture Brush","version":"1.0.2","tagline":"Randomly cycles image sequence texture while painting","archive_hash":"sha256:8903fadaf19661e63c6b7b60b805b2e11121e567ce9eb51f42f81b0aba76c7be","archive_size":2467,"archive_url":"https://extensions.blender.org/download/sha256:8903fadaf19661e63c6b7b60b805b2e11121e567ce9eb51f42f81b0aba76c7be/add-on-animated-brush-v1.0.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/animated-brush/","maintainer":"Kvendy","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"lod_gen","schema_version":"1.0.0","name":"LODGen","version":"0.0.5","tagline":"Generate LODs for Games in 3 Clicks or Less","archive_hash":"sha256:0f2ab6b571315bee02068eb61a0ff972c25beea69acf0d2f0aec8a0b8dcc5128","archive_size":15434,"archive_url":"https://extensions.blender.org/download/sha256:0f2ab6b571315bee02068eb61a0ff972c25beea69acf0d2f0aec8a0b8dcc5128/add-on-lod-gen-v0.0.5.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/lod-gen/","maintainer":"F1dg3t","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"LostSelection","schema_version":"1.0.0","name":"Lost Selection","version":"0.2.0","tagline":"Set of usefull extra selection operators","archive_hash":"sha256:b86837ae75d5de7867114f1a0b038fa522a5628bfcbc9073a4083570f857fcb4","archive_size":32205,"archive_url":"https://extensions.blender.org/download/sha256:b86837ae75d5de7867114f1a0b038fa522a5628bfcbc9073a4083570f857fcb4/add-on-lostselection-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lostselection/","maintainer":"niewinny","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Mesh"]},{"id":"reset_workspace","schema_version":"1.0.0","name":"Reset Workspace","version":"0.0.4","tagline":"Reset the user interface (with your startup file interface)","archive_hash":"sha256:35cef23e81719101cd3d7616c08d4804c419417c57abd7be68d11b296d1f9a32","archive_size":5093,"archive_url":"https://extensions.blender.org/download/sha256:35cef23e81719101cd3d7616c08d4804c419417c57abd7be68d11b296d1f9a32/add-on-reset-workspace-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/reset-workspace/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"edit_instanced_collection","schema_version":"1.0.0","name":"Edit Instanced Collection","version":"0.0.5","tagline":"Quickly find the instanced collection source","archive_hash":"sha256:82b58677725d9892cf2e272a657f498903a17aa057cb0a432dababc18f8db6e3","archive_size":6971,"archive_url":"https://extensions.blender.org/download/sha256:82b58677725d9892cf2e272a657f498903a17aa057cb0a432dababc18f8db6e3/add-on-edit-instanced-collection-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-instanced-collection/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","User Interface"]},{"id":"add_std_paper_size","schema_version":"1.0.0","name":"Add Std Paper-Format","version":"0.1.0","tagline":"Blender add-on to add planes with standardized paper formats","archive_hash":"sha256:d8699b5786b94d157a53a2322b82da1c49fcf833f42d36a3fd143d7d51796ed4","archive_size":19785,"archive_url":"https://extensions.blender.org/download/sha256:d8699b5786b94d157a53a2322b82da1c49fcf833f42d36a3fd143d7d51796ed4/add-on-add-std-paper-size-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-std-paper-size/","maintainer":"BsIngA","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"Blueprint_Film_Theme","schema_version":"1.0.0","name":"Blueprint_Film_Theme","version":"2.3.1","tagline":"Translucent Aqua","archive_hash":"sha256:a2c726fdbd2324ce3cde0db7958d97ff7235286c30ccad1bea50052075843c09","archive_size":5718,"archive_url":"https://extensions.blender.org/download/sha256:a2c726fdbd2324ce3cde0db7958d97ff7235286c30ccad1bea50052075843c09/theme-blueprint-film-theme-v2.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blueprint-film-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"pbsu_addon_3ds","schema_version":"1.0.0","name":"PBSU 3D Studio (.3ds)","version":"1.0.1","tagline":"Import/export 3DS scenes, objects, cameras, lights & anims","archive_hash":"sha256:347858569d753e688770e2f73c1d75b9787ccb69ce86e6fdbb08d06483a4814d","archive_size":42631,"archive_url":"https://extensions.blender.org/download/sha256:347858569d753e688770e2f73c1d75b9787ccb69ce86e6fdbb08d06483a4814d/add-on-pbsu-addon-3ds-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pbsu-addon-3ds/","maintainer":"Arturo-Cervantes","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export Autodesk 3DS files"},"tags":["Import-Export","Scene","Object","Camera","Lighting","Animation"]},{"id":"on_screen_numpad","schema_version":"1.0.0","name":"On-Screen Numpad","version":"1.2.1","tagline":"No need to leave the mouse to enter numbers","archive_hash":"sha256:4c16d0f6f007afdadcf931efbba4ae2d31924a3a9e13aeacf05531202de5b71d","archive_size":23277,"archive_url":"https://extensions.blender.org/download/sha256:4c16d0f6f007afdadcf931efbba4ae2d31924a3a9e13aeacf05531202de5b71d/add-on-on-screen-numpad-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/on-screen-numpad/","maintainer":"Pluglug","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"Sakura_Rig_GUI","schema_version":"1.0.0","name":"Sakura's Rig Interfaces","version":"3.1.0","tagline":"A control script for use with Sakura's Rigs","archive_hash":"sha256:98421bd610dd89103aa63177dd25a3bb04e8a71899ad0c93dcba026908e07bf0","archive_size":23119,"archive_url":"https://extensions.blender.org/download/sha256:98421bd610dd89103aa63177dd25a3bb04e8a71899ad0c93dcba026908e07bf0/add-on-sakura-rig-gui-v3.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sakura-rig-gui/","maintainer":"SakuraSedaia","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and Store Player Skin Information and Downloaded Rigs","network":"Download Minecraft Skin Information from minecraft.net"},"tags":["Rigging","User Interface"]},{"id":"EMU3BM","schema_version":"1.0.0","name":"Toggle Emulate 3 Button Mouse","version":"1.4.0","tagline":"Toggle Emulate 3 Button Mouse","archive_hash":"sha256:4403771643b6e2cae32cecd67a98fea219c3b89a72424207fc3c9640574d2593","archive_size":1343,"archive_url":"https://extensions.blender.org/download/sha256:4403771643b6e2cae32cecd67a98fea219c3b89a72424207fc3c9640574d2593/add-on-emu3bm-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/emu3bm/","maintainer":"chenkin123","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"BL_EasyCrop","schema_version":"1.0.0","name":"BL Easy Crop","version":"2.0.3","tagline":"Use handles for easy cropping in the Blender VSE Preview window","archive_hash":"sha256:f63200c2f634b927cc0ccf82af20aa4298f36f5f5bfbcfdfc85f20adf4a2d9da","archive_size":31082,"archive_url":"https://extensions.blender.org/download/sha256:f63200c2f634b927cc0ccf82af20aa4298f36f5f5bfbcfdfc85f20adf4a2d9da/add-on-bl-easycrop-v2.0.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bl-easycrop/","maintainer":"usrname0","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer","User Interface"]},{"id":"SHIRAKUMO_sf3_io","schema_version":"1.0.0","name":"Shirakumo SF3 IO","version":"1.1.0","tagline":"Export/Import support for Simple File Format Family (SF3) files","archive_hash":"sha256:ea929db922904ace800e75192ed57225db3c960f44e2d6b419bddb4041f2116c","archive_size":24064,"archive_url":"https://extensions.blender.org/download/sha256:ea929db922904ace800e75192ed57225db3c960f44e2d6b419bddb4041f2116c/add-on-shirakumo-sf3-io-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shirakumo-sf3-io/","maintainer":"shinmera","license":["SPDX:GPL-3.0-or-later","SPDX:Zlib"],"permissions":{"files":"Import/export SF3 from/to disk"},"tags":["Import-Export"]},{"id":"normalize_resize_handles","schema_version":"1.0.0","name":"Normalize and Resize Curve Handles","version":"1.0.1","tagline":"Normalize and resize all selected bezier curve handles","archive_hash":"sha256:38d20ad9da74d2f832b4d2cf7ecbe874dc208c2cfacf2f1849ac85aed7751b4a","archive_size":1537,"archive_url":"https://extensions.blender.org/download/sha256:38d20ad9da74d2f832b4d2cf7ecbe874dc208c2cfacf2f1849ac85aed7751b4a/add-on-normalize-resize-handles-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/normalize-resize-handles/","maintainer":"TomasCJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"FocalLengthTweaker","schema_version":"1.0.0","name":"Focal Length Tweaker","version":"1.0.2","tagline":"Control viewport and camera focal length with your mouse","archive_hash":"sha256:c6faa64e00e65b00eb736dd21fb52544e3fafe175b77a3bdae4f83753f9c8faa","archive_size":10089,"archive_url":"https://extensions.blender.org/download/sha256:c6faa64e00e65b00eb736dd21fb52544e3fafe175b77a3bdae4f83753f9c8faa/add-on-focallengthtweaker-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/focallengthtweaker/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","User Interface"]},{"id":"Zeratul_Theme","schema_version":"1.0.0","name":"Zeratul_Theme","version":"3.2.3","tagline":"Invisible Shadow Warrior","archive_hash":"sha256:cc44f2cfc8373ea9f9443472596ba1a9f049e71227d981d0eb92985ac6e83aa1","archive_size":5665,"archive_url":"https://extensions.blender.org/download/sha256:cc44f2cfc8373ea9f9443472596ba1a9f049e71227d981d0eb92985ac6e83aa1/theme-zeratul-theme-v3.2.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/zeratul-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"render_webhook","schema_version":"1.0.0","name":"Render Webhook","version":"1.0.2","tagline":"Sends a message after render events to a webhook","archive_hash":"sha256:38cc7b54f014a6cd7d3c2d6f4928372749fb2a57ffd1b87df4fbc34550c6ed58","archive_size":2567,"archive_url":"https://extensions.blender.org/download/sha256:38cc7b54f014a6cd7d3c2d6f4928372749fb2a57ffd1b87df4fbc34550c6ed58/add-on-render-webhook-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-webhook/","maintainer":"vignette","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Sending HTTP requests to provided webhook URL"},"tags":["Render","Pipeline"]},{"id":"Clip_Tools","schema_version":"1.0.0","name":"Clip Tools","version":"1.2.0","tagline":"Add a simple tool to the Movie Clip Editor","archive_hash":"sha256:593b3aed6333855d96a51a2372ccf82c8cd134531d72a0f7d6d95fcefa78a17a","archive_size":20301,"archive_url":"https://extensions.blender.org/download/sha256:593b3aed6333855d96a51a2372ccf82c8cd134531d72a0f7d6d95fcefa78a17a/add-on-clip-tools-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clip-tools/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Camera","3D View"]},{"id":"Merge_selected_cameras","schema_version":"1.0.0","name":"Merge Selected Cameras","version":"1.1.1","tagline":"Create one animated camera from your photogrammetry sequence","archive_hash":"sha256:37e9a6363b92571e6fd33f41edf887d72f63a4e64b6c0a9ca0c5014ea6a0b37d","archive_size":4219,"archive_url":"https://extensions.blender.org/download/sha256:37e9a6363b92571e6fd33f41edf887d72f63a4e64b6c0a9ca0c5014ea6a0b37d/add-on-merge-selected-cameras-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/merge-selected-cameras/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Tracking","3D View"]},{"id":"Scene_Duration_Display","schema_version":"1.0.0","name":"Scene Duration Display","version":"1.1.1","tagline":"Displays and syncs timeline duration. Set preview range with I/O","archive_hash":"sha256:ecb84336ac892b588d1fcbdb40da045ce82c73b4869630d9fec11d4cf872a940","archive_size":2361,"archive_url":"https://extensions.blender.org/download/sha256:ecb84336ac892b588d1fcbdb40da045ce82c73b4869630d9fec11d4cf872a940/add-on-scene-duration-display-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-duration-display/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Gray50","schema_version":"1.0.0","name":"Gray50","version":"1.0.8","tagline":"Remake of Blender3.3 light theme","archive_hash":"sha256:194eb5ea31c0aa3ea3f7da9085a33b09bf07ccae2ece90385bda3f773d052249","archive_size":6143,"archive_url":"https://extensions.blender.org/download/sha256:194eb5ea31c0aa3ea3f7da9085a33b09bf07ccae2ece90385bda3f773d052249/theme-gray50-v1.0.8.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gray50/","maintainer":"Nick2321","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"bl_reset_custom_properties","schema_version":"1.0.0","name":"Reset Custom Properties","version":"1.0.4","tagline":"Reset custom properties to their default values","archive_hash":"sha256:f616677a285d385eb5ae5b60791f7d33656fb6914326eac58ae1b3d069a533b4","archive_size":5646,"archive_url":"https://extensions.blender.org/download/sha256:f616677a285d385eb5ae5b60791f7d33656fb6914326eac58ae1b3d069a533b4/add-on-bl-reset-custom-properties-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bl-reset-custom-properties/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","3D View"]},{"id":"nla_batch_editor","schema_version":"1.0.0","name":"NLA Batch Editor","version":"1.1.0","tagline":"Batch editing for NLA Editor","archive_hash":"sha256:ab1e67b8b7f624dde678548ea94bf0378a597deccecd8745a14e130cd79770cd","archive_size":20602,"archive_url":"https://extensions.blender.org/download/sha256:ab1e67b8b7f624dde678548ea94bf0378a597deccecd8745a14e130cd79770cd/add-on-nla-batch-editor-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nla-batch-editor/","maintainer":"c4205m","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"io_import_build_map","schema_version":"1.0.0","name":"BUILD Map Importer","version":"1.4.1","tagline":"Import BUILD Engine maps as used in Duke Nukem 3D, Blood, etc","archive_hash":"sha256:d167ef8d1580c381dd1ef6378302b7918d493e67c7317be3fafaea9cf70d6c54","archive_size":57108,"archive_url":"https://extensions.blender.org/download/sha256:d167ef8d1580c381dd1ef6378302b7918d493e67c7317be3fafaea9cf70d6c54/add-on-io-import-build-map-v1.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-import-build-map/","maintainer":"Jens.Ne","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import .map files and textures from filesystem"},"tags":["Import-Export","Mesh","Material"]},{"id":"distribute_grease_pencil_strokes","schema_version":"1.0.0","name":"Align-Distribute Grease Pencil Strokes","version":"2.1.0","tagline":"Align-Distribute Grease Pencil strokes","archive_hash":"sha256:e8075d9b8af883ab77be48eb51d424acf51860f408970ec54393f29ec45f1ab2","archive_size":13284,"archive_url":"https://extensions.blender.org/download/sha256:e8075d9b8af883ab77be48eb51d424acf51860f408970ec54393f29ec45f1ab2/add-on-distribute-grease-pencil-strokes-v2.1.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/distribute-grease-pencil-strokes/","maintainer":"JohnNyquist","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil"]},{"id":"quantum_void_fluoamber","schema_version":"1.0.0","name":"Quantum Void FluoAmber","version":"1.0.2","tagline":"A monochromatic dark theme with accent","archive_hash":"sha256:6506841912f52525e1ae2d12d9ce2ac9316676f0bc7684374ab3847731dad70f","archive_size":3205,"archive_url":"https://extensions.blender.org/download/sha256:6506841912f52525e1ae2d12d9ce2ac9316676f0bc7684374ab3847731dad70f/theme-quantum-void-fluoamber-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/quantum-void-fluoamber/","maintainer":"Dimona-Patrick-243","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"blueprints","schema_version":"1.0.0","name":"Blueprints","version":"1.0.3","tagline":"Manage background images ","archive_hash":"sha256:f148d686256514f105c8dfe1b240b8c189b148b47ae426c485ae35ab7d77aaa9","archive_size":3264,"archive_url":"https://extensions.blender.org/download/sha256:f148d686256514f105c8dfe1b240b8c189b148b47ae426c485ae35ab7d77aaa9/add-on-blueprints-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blueprints/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"tracking_toolkit","schema_version":"1.0.0","name":"Tracking Toolkit","version":"2.0.3","tagline":"Use OpenXR trackers and devices directly in Blender","archive_hash":"sha256:8d264f25ac41fdc4d7f55df231fdf7066fb4fa3411b7618599e45da357723c7a","archive_size":23525930,"archive_url":"https://extensions.blender.org/download/sha256:8d264f25ac41fdc4d7f55df231fdf7066fb4fa3411b7618599e45da357723c7a/add-on-tracking-toolkit-v2.0.3-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/tracking-toolkit/","maintainer":"EthanPorcaro","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load custom shapes for tracker models"},"platforms":["windows-x64"],"tags":["Animation","Tracking"]},{"id":"batch_render_actions","schema_version":"1.0.0","name":"Batch Render Actions","version":"1.0.2","tagline":"Render each animation action to its own folder","archive_hash":"sha256:c91187783a22ac88e4847f57bc33f32f5d7954fb6564886839e9b44a4cd05cff","archive_size":2413,"archive_url":"https://extensions.blender.org/download/sha256:c91187783a22ac88e4847f57bc33f32f5d7954fb6564886839e9b44a4cd05cff/add-on-batch-render-actions-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-render-actions/","maintainer":"Padraig-O-Cinneide","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Render"]},{"id":"rmKit_uv","schema_version":"1.0.0","name":"rmKitUV","version":"2.0.0","tagline":"Collection of Tools","archive_hash":"sha256:cd75170fc5d652ba6e52a70939949480ea78a7417b7608e7c2d2c1fb48b3360e","archive_size":259364,"archive_url":"https://extensions.blender.org/download/sha256:cd75170fc5d652ba6e52a70939949480ea78a7417b7608e7c2d2c1fb48b3360e/add-on-rmkit-uv-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/rmkit-uv/","maintainer":"Timothee-Yeramian","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"read/write hotspots to disk"},"tags":["Mesh","UV","Material"]},{"id":"to_square","schema_version":"1.0.0","name":"To Square","version":"2.2.2","tagline":"Square the selection","archive_hash":"sha256:fe3f6130509d805540a80f0bab03e5bae0396de1f3bee2c08d3b84359b5baf43","archive_size":44067,"archive_url":"https://extensions.blender.org/download/sha256:fe3f6130509d805540a80f0bab03e5bae0396de1f3bee2c08d3b84359b5baf43/add-on-to-square-v2.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/to-square/","maintainer":"Jean-Yves-Grosbeau","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"dynamic_head_property_manager","schema_version":"1.0.0","name":"Dynamic Head Property Manager","version":"1.0.7","tagline":"Manage custom facial properties for Roblox Bundles","archive_hash":"sha256:ca7ee4063be416c9a82c1552a97efbf4227b4ce210826547e2b8cd164a418e5b","archive_size":26446,"archive_url":"https://extensions.blender.org/download/sha256:ca7ee4063be416c9a82c1552a97efbf4227b4ce210826547e2b8cd164a418e5b/add-on-dynamic-head-property-manager-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-head-property-manager/","maintainer":"Cloud-Guy","license":["SPDX:GPL-3.0-or-later"]},{"id":"enhanced_svg","schema_version":"1.0.0","name":"Enhanced SVG","version":"0.2.4","tagline":"Import SVG with accurate colors and path processing","archive_hash":"sha256:b705c2ef0296b215256fcefbe87325afd61b4e0888865971df466d5dcbd2345c","archive_size":4025920,"archive_url":"https://extensions.blender.org/download/sha256:b705c2ef0296b215256fcefbe87325afd61b4e0888865971df466d5dcbd2345c/add-on-enhanced-svg-v0.2.4-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/enhanced-svg/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"M2V","schema_version":"1.0.0","name":"MIDI To Visuals","version":"1.2.0","tagline":"With MIDI file as input create somes 3D animations in blender","archive_hash":"sha256:41df46ef9449fb6aa01515bbdc077007b472e024683bf1f62241fda5b7342ae1","archive_size":41169,"archive_url":"https://extensions.blender.org/download/sha256:41df46ef9449fb6aa01515bbdc077007b472e024683bf1f62241fda5b7342ae1/add-on-m2v-v1.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/m2v/","maintainer":"Patochun","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"separate_loose_plus","schema_version":"1.0.0","name":"Separate Loose Plus","version":"1.0.0","tagline":"Enhanced mesh separation tools with object tracking","archive_hash":"sha256:944ad096034743a6fef458b743b445f076abd55dd41698eb83f6d94d6085b7a5","archive_size":1973,"archive_url":"https://extensions.blender.org/download/sha256:944ad096034743a6fef458b743b445f076abd55dd41698eb83f6d94d6085b7a5/add-on-separate-loose-plus-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/separate-loose-plus/","maintainer":"RobbieK","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"bve_import_export","schema_version":"1.0.0","name":"BVE Import/Export","version":"5.1.3","tagline":"Import/Export DirectX X (.x) or Export CSV files for BVE/OpenBVE","archive_hash":"sha256:23092e0894371d7d2fdf638fec806a949100f719eb7d39f7be2a87d693add984","archive_size":22514,"archive_url":"https://extensions.blender.org/download/sha256:23092e0894371d7d2fdf638fec806a949100f719eb7d39f7be2a87d693add984/add-on-bve-import-export-v5.1.3.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/bve-import-export/","maintainer":"Kusaanko","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export model file from/to disk"},"tags":["Import-Export"]},{"id":"symple","schema_version":"1.0.0","name":"Symple (symmetry groups)","version":"0.1.2","tagline":"Create figures with spherical symmetry with ease","archive_hash":"sha256:d896c95bba01abaaf56f2c5f6c741c51b63ca097915427aa7ade2315094376c3","archive_size":29123,"archive_url":"https://extensions.blender.org/download/sha256:d896c95bba01abaaf56f2c5f6c741c51b63ca097915427aa7ade2315094376c3/add-on-symple-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/symple/","maintainer":"Martín-Torres-Valverde","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","Modeling","Object"]},{"id":"select_by_index","schema_version":"1.0.0","name":"Select By Index","version":"1.3.0","tagline":"Select all vertices, edges, or faces within an index range","archive_hash":"sha256:bd41c77ef889b5b84174a0cf88c41ebd6526046f82eb196fc9528ed43232e050","archive_size":3131,"archive_url":"https://extensions.blender.org/download/sha256:bd41c77ef889b5b84174a0cf88c41ebd6526046f82eb196fc9528ed43232e050/add-on-select-by-index-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/select-by-index/","maintainer":"Eric-Banker","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"blender_lut_exporter","schema_version":"1.0.0","name":"LUT Exporter and Importer","version":"2.0.1","tagline":"Converts adjustment layer into LUT .cube file and back","archive_hash":"sha256:7e0e7b2b951f02114cebb97c5c44ffeacb93b28278107b3ac87b9e5b6f064bcd","archive_size":5588,"archive_url":"https://extensions.blender.org/download/sha256:7e0e7b2b951f02114cebb97c5c44ffeacb93b28278107b3ac87b9e5b6f064bcd/add-on-blender-lut-exporter-v2.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/blender-lut-exporter/","maintainer":"ichlubna","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Sequencer"]},{"id":"arc_edge","schema_version":"1.0.0","name":"Arc Edge","version":"1.1.0","tagline":"Arc Edge","archive_hash":"sha256:2a3d3700534566d81d8202a795db594b1e36f407368276319a1141e67419bb4f","archive_size":10986,"archive_url":"https://extensions.blender.org/download/sha256:2a3d3700534566d81d8202a795db594b1e36f407368276319a1141e67419bb4f/add-on-arc-edge-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/arc-edge/","maintainer":"dartmeadow","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"Render_from_Terminal","schema_version":"1.0.0","name":"Render from Terminal","version":"0.1.5","tagline":"Create script to launch render from terminal","archive_hash":"sha256:4d6f2ccd813bb51a7082467919ea0b4bc95fd31d1df952747a00ed4e5fa7d0d3","archive_size":10030,"archive_url":"https://extensions.blender.org/download/sha256:4d6f2ccd813bb51a7082467919ea0b4bc95fd31d1df952747a00ed4e5fa7d0d3/add-on-render-from-terminal-v0.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-from-terminal/","maintainer":"nukkio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create script to render from terminal"},"tags":["Render","Pipeline"]},{"id":"Fabnodes","schema_version":"1.0.0","name":"Fabnodes","version":"0.0.3","tagline":"Generates G-Code from geometry node attributes","archive_hash":"sha256:ca120a678f58ef1c62a12dd4b1ac055d79d7cbdf76bf6f22b609224a62ac2281","archive_size":5343,"archive_url":"https://extensions.blender.org/download/sha256:ca120a678f58ef1c62a12dd4b1ac055d79d7cbdf76bf6f22b609224a62ac2281/add-on-fabnodes-v0.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fabnodes/","maintainer":"luigipacheco","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Geometry Nodes"]},{"id":"substance_textures_importer","schema_version":"1.0.0","name":"Substance Textures Importer","version":"7.2.0","tagline":"Import & autoassign images from 3D painting tools like Substance","archive_hash":"sha256:625b71a17605867443eb678fbe9a3f79653e01c45ed73573d957343fe868ebae","archive_size":35651,"archive_url":"https://extensions.blender.org/download/sha256:625b71a17605867443eb678fbe9a3f79653e01c45ed73573d957343fe868ebae/add-on-substance-textures-importer-v7.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/substance-textures-importer/","maintainer":"Cosmin_Planchon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images from disk & read/write customs presets"},"tags":["Material","Import-Export","Node"]},{"id":"slot_link","schema_version":"1.0.0","name":"Slot Link","version":"0.0.12","tagline":"Easily manage projects with multiple separate animations","archive_hash":"sha256:7bede09c490699c677996c84970e628839ca645be4127c90ebe9a849f31da92d","archive_size":62573,"archive_url":"https://extensions.blender.org/download/sha256:7bede09c490699c677996c84970e628839ca645be4127c90ebe9a849f31da92d/add-on-slot-link-v0.0.12.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/slot-link/","maintainer":"mars","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","User Interface","Import-Export"]},{"id":"mesh_planes_pro","schema_version":"1.0.0","name":"Mesh Planes Pro","version":"2.0.1","tagline":"Ultimate Background Removal for Faster, Seamless Renders","archive_hash":"sha256:5691d05b04840ede23b7116782821e73d1fd34364c1bda4a69d3daa923832d8b","archive_size":2471909,"archive_url":"https://extensions.blender.org/download/sha256:5691d05b04840ede23b7116782821e73d1fd34364c1bda4a69d3daa923832d8b/add-on-mesh-planes-pro-v2.0.1.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/mesh-planes-pro/","maintainer":"Prince_Eagle","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load node groups from blend file"},"tags":["Material","Node","Render","Mesh"]},{"id":"developer_utilities","schema_version":"1.0.0","name":"Developer Utilities","version":"1.1.0","tagline":"Make life of addon developers easier","archive_hash":"sha256:31a9dead337ef9cd554b62f096c7b056a7b182030d4adac874f2f04b4183479c","archive_size":9006,"archive_url":"https://extensions.blender.org/download/sha256:31a9dead337ef9cd554b62f096c7b056a7b182030d4adac874f2f04b4183479c/add-on-developer-utilities-v1.1.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/developer-utilities/","maintainer":"scorpion81","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Open source files of addons for editing"},"tags":["Development"]},{"id":"srtm_terrain_importer","schema_version":"1.0.0","name":"SRTM Terrain Importer","version":"1.0.5","tagline":"Import SRTM elevation data as accurate 3D terrain","archive_hash":"sha256:72299885ab8bb5623bd3643e4b918cf2e29c56fe6010ead0f55e61796498f454","archive_size":6645,"archive_url":"https://extensions.blender.org/download/sha256:72299885ab8bb5623bd3643e4b918cf2e29c56fe6010ead0f55e61796498f454/add-on-srtm-terrain-importer-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/srtm-terrain-importer/","maintainer":"NicolasPriniotakis","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import SRTM HGT files from disk"},"tags":["Import-Export"]},{"id":"Industrial_Light_AOV_Splitter","schema_version":"1.0.0","name":"Industrial Light AOV Splitter","version":"1.0.2","tagline":"Auto create better light aovs (diffuse_env, specular_env...)","archive_hash":"sha256:3ce1511db842081ca639c1f1bceea848ace8b389759e073611e6c2cc83f22b40","archive_size":9104,"archive_url":"https://extensions.blender.org/download/sha256:3ce1511db842081ca639c1f1bceea848ace8b389759e073611e6c2cc83f22b40/add-on-industrial-light-aov-splitter-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/industrial-light-aov-splitter/","maintainer":"Roland-Vyens","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Import-Export","Pipeline","Render"]},{"id":"servo_animation","schema_version":"1.0.0","name":"Servo Animation","version":"2.1.1","tagline":"Export your Blender animation to servo position values","archive_hash":"sha256:407fa6cac99b8ce6dcac652d729c71be13aafb4b930ecb00fba42ec5971189d4","archive_size":161106,"archive_url":"https://extensions.blender.org/download/sha256:407fa6cac99b8ce6dcac652d729c71be13aafb4b930ecb00fba42ec5971189d4/add-on-servo-animation-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/servo-animation/","maintainer":"timhendriks93","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Import-Export","Rigging"]},{"id":"ac_tools","schema_version":"1.0.0","name":"AC Tools","version":"0.1.6","tagline":"AC Tools for track modding","archive_hash":"sha256:6bd5108411d366836d9a49d4305bebdd0ea682ed4f15aac24303de5a67f5519a","archive_size":30826,"archive_url":"https://extensions.blender.org/download/sha256:6bd5108411d366836d9a49d4305bebdd0ea682ed4f15aac24303de5a67f5519a/add-on-ac-tools-v0.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ac-tools/","maintainer":"PhinDev","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FBX from/to disk, Manage track folders"},"tags":["Object"]},{"id":"img_alpha_to_bsdf","schema_version":"1.0.0","name":"Connect image alpha","version":"1.0.6","tagline":"Connecting image alpha to shader alpha","archive_hash":"sha256:a0d765b49e728e95012895af1bb54d12c3b4ac68ab649115685c8b4d9eb65e02","archive_size":2692,"archive_url":"https://extensions.blender.org/download/sha256:a0d765b49e728e95012895af1bb54d12c3b4ac68ab649115685c8b4d9eb65e02/add-on-img-alpha-to-bsdf-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/img-alpha-to-bsdf/","maintainer":"Snakyboopface","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface","Material"]},{"id":"link_parents","schema_version":"1.0.0","name":"Link Parents","version":"1.2.1","tagline":"Link objects parents & edit Parent Inverse Matrix in UI","archive_hash":"sha256:23a8fa704f6f5c9ae99e6bf5d8b1ac3dbc4d85b6800146f5a5c8679eb60e9395","archive_size":2883,"archive_url":"https://extensions.blender.org/download/sha256:23a8fa704f6f5c9ae99e6bf5d8b1ac3dbc4d85b6800146f5a5c8679eb60e9395/add-on-link-parents-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/link-parents/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Rigging","User Interface"]},{"id":"sco_buttobjects","schema_version":"1.0.0","name":"SCO ButtObjects","version":"2.0.10","tagline":"Easily align Objects in your scene by Active Object or 3D Cursor","archive_hash":"sha256:b2f693945760fe9aff223e41471064fce657661381c94ed6e7e1f43c3bc3e542","archive_size":138062,"archive_url":"https://extensions.blender.org/download/sha256:b2f693945760fe9aff223e41471064fce657661381c94ed6e7e1f43c3bc3e542/add-on-sco-buttobjects-v2.0.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sco-buttobjects/","maintainer":"BEAST_of_BURDEN","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"Grid_Layout","schema_version":"1.0.0","name":"Grid Layout","version":"1.5.8","tagline":"Tools to help layout your UV layout","archive_hash":"sha256:48d1b77f5dccd0f5c05ab05ac9455da0eab6f4b0c1a6cab089ad50f7f3686524","archive_size":30681,"archive_url":"https://extensions.blender.org/download/sha256:48d1b77f5dccd0f5c05ab05ac9455da0eab6f4b0c1a6cab089ad50f7f3686524/add-on-grid-layout-v1.5.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grid-layout/","maintainer":"Hodgson3d","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"b_palettes","schema_version":"1.0.0","name":"B Palettes","version":"1.1.0","tagline":"Import/Export Color Palettes","archive_hash":"sha256:59bdbb835628977b5fcd1c88f53fc0d340766f97ef2d2ed477be34d813c53ae6","archive_size":5538,"archive_url":"https://extensions.blender.org/download/sha256:59bdbb835628977b5fcd1c88f53fc0d340766f97ef2d2ed477be34d813c53ae6/add-on-b-palettes-v1.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/b-palettes/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory with color palette files"},"tags":["Import-Export"]},{"id":"Selected_Bones_To_Vertex_Group","schema_version":"1.0.0","name":"Selected_Bones_To_Vertex_Group","version":"1.0.1","tagline":"Add or delete selected bone to selected mesh","archive_hash":"sha256:e5e49539892d63b5b1ffb7108f7f6cca2884cc598010405d88b2009f40faa9b0","archive_size":2074,"archive_url":"https://extensions.blender.org/download/sha256:e5e49539892d63b5b1ffb7108f7f6cca2884cc598010405d88b2009f40faa9b0/add-on-selected-bones-to-vertex-group-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/selected-bones-to-vertex-group/","maintainer":"mochi_Lin","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"highlighter","schema_version":"1.0.0","name":"Highlighter","version":"0.1.0","tagline":"Syntax highlighting for text objects","archive_hash":"sha256:3fec762b7df4f2667d391a68a55a5b4c78c356d64855104b16d03af7802f3046","archive_size":1209500,"archive_url":"https://extensions.blender.org/download/sha256:3fec762b7df4f2667d391a68a55a5b4c78c356d64855104b16d03af7802f3046/add-on-highlighter-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/highlighter/","maintainer":"pioverfour","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve","Text Editor"]},{"id":"frame_focus","schema_version":"1.0.0","name":"Frame Focus","version":"2.0.1","tagline":"List All Frame Nodes And Focus Easily","archive_hash":"sha256:6b86148b65108e75bd979d3f7e65befe9afd032a9c5225fc75ac46aef7c027bc","archive_size":6600,"archive_url":"https://extensions.blender.org/download/sha256:6b86148b65108e75bd979d3f7e65befe9afd032a9c5225fc75ac46aef7c027bc/add-on-frame-focus-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/frame-focus/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"SelectModeKeymaps","schema_version":"1.0.0","name":"Select Mode Keymaps","version":"1.0.1","tagline":"Assign keymaps to toggle Object/Edit Mode and Select Modes","archive_hash":"sha256:2700fa8cc6cb035f7458c079b5e3561e9e93bf6a2e967c2f7ba5607db88fa573","archive_size":5772,"archive_url":"https://extensions.blender.org/download/sha256:2700fa8cc6cb035f7458c079b5e3561e9e93bf6a2e967c2f7ba5607db88fa573/add-on-selectmodekeymaps-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/selectmodekeymaps/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"skin_mesh_to_bone","schema_version":"1.0.0","name":"Skin Mesh To Bone","version":"1.0.2","tagline":"Skins selected meshes to a bone on the active armature","archive_hash":"sha256:f8e66dc89bd268aefc76ad3d05727f43f34ab9e043103d0443c061c72d707faf","archive_size":3048,"archive_url":"https://extensions.blender.org/download/sha256:f8e66dc89bd268aefc76ad3d05727f43f34ab9e043103d0443c061c72d707faf/add-on-skin-mesh-to-bone-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/skin-mesh-to-bone/","maintainer":"darknation","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"Faster_FBX_Exporter","schema_version":"1.0.0","name":"Faster FBX Exporter","version":"0.3.0","tagline":"Faster .fbx Exporter for Static Objects With Modifiers","archive_hash":"sha256:7f37c3dff44762c23cc42046599b19ff1154e708723c5850875d421eeca4ab1a","archive_size":139398,"archive_url":"https://extensions.blender.org/download/sha256:7f37c3dff44762c23cc42046599b19ff1154e708723c5850875d421eeca4ab1a/add-on-faster-fbx-exporter-v0.3.0.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/faster-fbx-exporter/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export .fbx files"},"tags":["Import-Export"]},{"id":"copyshapekeys","schema_version":"1.0.0","name":"ShapeKey Copy","version":"3.4.1","tagline":"Copy shapekeys from one mesh to another","archive_hash":"sha256:769278803ab26c411354aec6ded13c4017af8c85a8e9e23eba44434c1467d24b","archive_size":7196,"archive_url":"https://extensions.blender.org/download/sha256:769278803ab26c411354aec6ded13c4017af8c85a8e9e23eba44434c1467d24b/add-on-copyshapekeys-v3.4.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/copyshapekeys/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Animation"]},{"id":"Control_Render_Regions","schema_version":"1.0.0","name":"Control Render Regions","version":"1.0.12","tagline":"Manage renders in region","archive_hash":"sha256:e78ea3e3ee8ce9bfee2d4f8894f8338e338fc524f1eba8f3b03ce7fc06967c2d","archive_size":7059441,"archive_url":"https://extensions.blender.org/download/sha256:e78ea3e3ee8ce9bfee2d4f8894f8338e338fc524f1eba8f3b03ce7fc06967c2d/add-on-control-render-regions-v1.0.12-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/control-render-regions/","maintainer":"nukkio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create script to render from terminal and render regions"},"platforms":["windows-x64"],"tags":["Render","Pipeline"]},{"id":"nla_midi_copier","schema_version":"1.0.0","name":"NLA Midi Copier","version":"1.2.0","tagline":"NLA and Graph Editor tools for syncing animation to midi files","archive_hash":"sha256:4acdaac298dd38372982087e4cacfa908780bd4993be62204d9df9b194fc30b2","archive_size":115530,"archive_url":"https://extensions.blender.org/download/sha256:4acdaac298dd38372982087e4cacfa908780bd4993be62204d9df9b194fc30b2/add-on-nla-midi-copier-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nla-midi-copier/","maintainer":"Cornerback24","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read midi files from disk"},"tags":["Animation"]},{"id":"blender_mqo","schema_version":"1.0.0","name":"MQO (Metasequoia) Format File Importer/Exporter","version":"2.0.0","tagline":"Import/Export MQO format files","archive_hash":"sha256:986c8ad77c5e90ec3b63e5b7653a7966e97f0ada40b47416f6412c6e3afbd171","archive_size":21616,"archive_url":"https://extensions.blender.org/download/sha256:986c8ad77c5e90ec3b63e5b7653a7966e97f0ada40b47416f6412c6e3afbd171/add-on-blender-mqo-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-mqo/","maintainer":"nutti","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export MQO from/to disk"},"tags":["Import-Export"]},{"id":"twformats","schema_version":"1.0.0","name":"Teeworlds and DDNet Map import","version":"0.4.1","tagline":"Import Teeworlds and DDNet maps","archive_hash":"sha256:a4137b2d611a4cf25828c185a44fe21ffb370637fe8c02413681b372a8d463f5","archive_size":9592799,"archive_url":"https://extensions.blender.org/download/sha256:a4137b2d611a4cf25828c185a44fe21ffb370637fe8c02413681b372a8d463f5/add-on-twformats-v0.4.1-linux-x64-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/twformats/","maintainer":"Patiga","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export files from/to disk"},"platforms":["linux-x64","windows-x64"],"tags":["Import-Export"]},{"id":"Graphite_Mono_Theme","schema_version":"1.0.0","name":"Graphite_Mono_Theme","version":"3.4.1","tagline":"Bluish Undertone Metallic Gray","archive_hash":"sha256:1298074feeb7ae7d847985b7d024f3aa57d3f65a4fce1c93d9059b4854ecab34","archive_size":5836,"archive_url":"https://extensions.blender.org/download/sha256:1298074feeb7ae7d847985b7d024f3aa57d3f65a4fce1c93d9059b4854ecab34/theme-graphite-mono-theme-v3.4.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/graphite-mono-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"io_import_pixelart","schema_version":"1.0.0","name":"Import Pixel Art","version":"1.2.1","tagline":"Imports pixel art as colored cubes or squares for each pixel","archive_hash":"sha256:de95c730dc8ef2457d0ee54e90c95acfb3232a91bc6c7e6fa321c0bd9f33f4d1","archive_size":5860,"archive_url":"https://extensions.blender.org/download/sha256:de95c730dc8ef2457d0ee54e90c95acfb3232a91bc6c7e6fa321c0bd9f33f4d1/add-on-io-import-pixelart-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-import-pixelart/","maintainer":"bloody_albatross","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import pixel art from disk"},"tags":["Import-Export"]},{"id":"scene_workspaces","schema_version":"1.0.0","name":"Scene Workspaces","version":"1.1.1","tagline":"Filter and sort your workspaces, scene by scene","archive_hash":"sha256:7466088a97d7e6ed393001712fe09d88e13315c379e91458582a28a0e890ba0a","archive_size":8786,"archive_url":"https://extensions.blender.org/download/sha256:7466088a97d7e6ed393001712fe09d88e13315c379e91458582a28a0e890ba0a/add-on-scene-workspaces-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-workspaces/","maintainer":"Francesco-Bellini","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","System","User Interface"]},{"id":"aligning_horizontally_mini","schema_version":"1.0.0","name":"Aligning Horizontally Mini","version":"1.0.1","tagline":"Align selected objects in a customizable grid in the 3D viewport","archive_hash":"sha256:15eaa29ad5ba5afbc4ac5c3d63966ab75f89c85de7a8444359bdabee860d3f35","archive_size":3511,"archive_url":"https://extensions.blender.org/download/sha256:15eaa29ad5ba5afbc4ac5c3d63966ab75f89c85de7a8444359bdabee860d3f35/add-on-aligning-horizontally-mini-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/aligning-horizontally-mini/","maintainer":"Hydrocallis","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object"]},{"id":"lead_edge_maze_ash_creator","schema_version":"1.0.0","name":"Lead Edge Maze Ash Creator","version":"2.4.1","tagline":"Lead Edge Maze Ash","archive_hash":"sha256:003291b86247ce09847fd955f2f3fcc0433162af279eb1d262a35e0fd36fb541","archive_size":11149,"archive_url":"https://extensions.blender.org/download/sha256:003291b86247ce09847fd955f2f3fcc0433162af279eb1d262a35e0fd36fb541/add-on-lead-edge-maze-ash-creator-v2.4.1.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/lead-edge-maze-ash-creator/","maintainer":"dartmeadow","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"govietools","schema_version":"1.0.0","name":"Govie Tools","version":"1.0.22","tagline":"Optimize your model for use in the Govie Editor","archive_hash":"sha256:f62adf82bf5d385a783b432b015d7898a1599f8c37a7829639bd4bc9138ad0cc","archive_size":123377,"archive_url":"https://extensions.blender.org/download/sha256:f62adf82bf5d385a783b432b015d7898a1599f8c37a7829639bd4bc9138ad0cc/add-on-govietools-v1.0.22.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/govietools/","maintainer":"3D-Interaction-Technologies","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export GLB to disk"},"tags":["Scene","Import-Export"]},{"id":"microscopynodes","schema_version":"1.0.0","name":"Microscopy Nodes","version":"3.0.1","tagline":"Handling microscopy data in Blender, up to 5D volumes","archive_hash":"sha256:4c071429b7ed13f9331963e3239ed36fde67a9cd9bd393e0bd90be8dcf00469e","archive_size":52752110,"archive_url":"https://extensions.blender.org/download/sha256:4c071429b7ed13f9331963e3239ed36fde67a9cd9bd393e0bd90be8dcf00469e/add-on-microscopynodes-v3.0.1-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/microscopynodes/","maintainer":"Aafke-Gros","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk, writing to cache folder","network":"Loading OME-zarr files from the internet from a given URL"},"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"new_object_from_selected_geometry","schema_version":"1.0.0","name":"New Object From Selected Geometry","version":"1.0.2","tagline":"Creates a new object from the selected geometry in Edit mode","archive_hash":"sha256:c6ce3d5ff406b1cb933740ad87fff0d80debe984357fe92e6912a4f5a988b75f","archive_size":13392,"archive_url":"https://extensions.blender.org/download/sha256:c6ce3d5ff406b1cb933740ad87fff0d80debe984357fe92e6912a4f5a988b75f/add-on-new-object-from-selected-geometry-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/new-object-from-selected-geometry/","maintainer":"Giambattista-Caltabiano","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"Xromm_Tools","schema_version":"1.0.0","name":"XROMM toolkit","version":"0.9.8","tagline":"XROMM toolkit for Blender","archive_hash":"sha256:ea1375fc8caf9b991ea4e11992c0baeb999a97a2f73e3d691a5ed3bd3fcbde95","archive_size":35566,"archive_url":"https://extensions.blender.org/download/sha256:ea1375fc8caf9b991ea4e11992c0baeb999a97a2f73e3d691a5ed3bd3fcbde95/add-on-xromm-tools-v0.9.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/xromm-tools/","maintainer":"pfalkingham","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"io_scene_ase","schema_version":"1.0.0","name":"ASCII Scene Export (.ase)","version":"2.3.1","tagline":"Export .ase files used in Unreal Engine 1 & 2","archive_hash":"sha256:6706417e622364381e25d7277bdb66e981ddcddfe6b685464a7d3530a057d427","archive_size":16322,"archive_url":"https://extensions.blender.org/download/sha256:6706417e622364381e25d7277bdb66e981ddcddfe6b685464a7d3530a057d427/add-on-io-scene-ase-v2.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-ase/","maintainer":"darknation","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export .ase files to disk"},"tags":["Game Engine","Import-Export"]},{"id":"blender_magicavoxel","schema_version":"1.0.0","name":"MagicaVoxel VOX format","version":"1.6.0","tagline":"Importer addon for MagicaVoxel vox files","archive_hash":"sha256:12f75a437ac820604692717cc9325eb0c201f05af6b0b15031856f2d817dc8ef","archive_size":27187,"archive_url":"https://extensions.blender.org/download/sha256:12f75a437ac820604692717cc9325eb0c201f05af6b0b15031856f2d817dc8ef/add-on-blender-magicavoxel-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-magicavoxel/","maintainer":"AstrorEnales","license":["SPDX:GPL-3.0-or-later","SPDX:MIT"],"permissions":{"files":"Import VOX from disk"},"tags":["Import-Export"]},{"id":"odyssey_eobet_remix","schema_version":"1.0.0","name":"Odyssey eobet Remix","version":"2.0.1","tagline":"Theme highlighting the active object","archive_hash":"sha256:44250497cdad4efef753edd6470c5a7bd411e7b9a7d9828a6cb5d071d99bf743","archive_size":5970,"archive_url":"https://extensions.blender.org/download/sha256:44250497cdad4efef753edd6470c5a7bd411e7b9a7d9828a6cb5d071d99bf743/theme-odyssey-eobet-remix-v2.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/odyssey-eobet-remix/","maintainer":"eobet","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"PieMenu_Everywhere","schema_version":"1.0.0","name":"PieMenu Everywhere","version":"1.4.5","tagline":"Maximize your efficiency with PieMenu Everywhere","archive_hash":"sha256:1a79638d9774eef739be1adc281c65600c588f3915f7d9f6a20c2cbac8b07e84","archive_size":438388,"archive_url":"https://extensions.blender.org/download/sha256:1a79638d9774eef739be1adc281c65600c588f3915f7d9f6a20c2cbac8b07e84/add-on-piemenu-everywhere-v1.4.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/piemenu-everywhere/","maintainer":"DeathShot-747","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","Pipeline","3D View","Node"]},{"id":"Partybots_converter","schema_version":"1.0.0","name":"Partybots converter","version":"1.0.4","tagline":"This is a addon to build partybots maps","archive_hash":"sha256:c2c2e36e9997df032739b03d49854e547fa142684c193a7332d816e68d68ab00","archive_size":5333,"archive_url":"https://extensions.blender.org/download/sha256:c2c2e36e9997df032739b03d49854e547fa142684c193a7332d816e68d68ab00/add-on-partybots-converter-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/partybots-converter/","maintainer":"vuyghu2020","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"To write the compiled output to the clipbord"},"tags":["3D View","Object","Game Engine"]},{"id":"add_airfoil","schema_version":"1.0.0","name":"Add Airfoil","version":"2.0.0","tagline":"Import Airfoil Dat Files into Blender","archive_hash":"sha256:118dfa0e9d40af8486bea8e149e0db5518db051681aba4165d699df9868f73ae","archive_size":2356,"archive_url":"https://extensions.blender.org/download/sha256:118dfa0e9d40af8486bea8e149e0db5518db051681aba4165d699df9868f73ae/add-on-add-airfoil-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-airfoil/","maintainer":"Nerk","license":["SPDX:GPL-2.0-or-later"],"tags":["Import-Export","Mesh"]},{"id":"atomic_blender_cluster","schema_version":"1.0.0","name":"Atomic Blender Cluster","version":"1.0.0","tagline":"Creating atom clusters or nanoparticles in Blender","archive_hash":"sha256:77b6176aaf69f70917b353e0f5bf183f1f0ad4ff70cc4bf92d72471fe2647d18","archive_size":11917,"archive_url":"https://extensions.blender.org/download/sha256:77b6176aaf69f70917b353e0f5bf183f1f0ad4ff70cc4bf92d72471fe2647d18/add-on-atomic-blender-cluster-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/atomic-blender-cluster/","maintainer":"Blendphys","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"add_positive_cube","schema_version":"1.0.0","name":"Add Positive Cube","version":"1.1.0","tagline":"Adds a cube with its origin at the corner","archive_hash":"sha256:860bb8ffe1cce3f120ce334b0a6daba5d2d296c84fc12445839e96d288a541a2","archive_size":1913,"archive_url":"https://extensions.blender.org/download/sha256:860bb8ffe1cce3f120ce334b0a6daba5d2d296c84fc12445839e96d288a541a2/add-on-add-positive-cube-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-positive-cube/","maintainer":"jefftml","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","3D View"]},{"id":"theme_modo","schema_version":"1.0.0","name":"Modo","version":"2.0.0","tagline":"Community-made theme inspired by Modo","archive_hash":"sha256:b9021a0edcfc6e68474ae1bb6a8257bd83b766c97e17020f4db723ed403ebc0f","archive_size":5822,"archive_url":"https://extensions.blender.org/download/sha256:b9021a0edcfc6e68474ae1bb6a8257bd83b766c97e17020f4db723ed403ebc0f/theme-theme-modo-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-modo/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"stl_format_legacy","schema_version":"1.0.0","name":"STL format (legacy)","version":"1.1.4","tagline":"Import-Export STL files","archive_hash":"sha256:ae6e839285861f6e14022ea7b5b74a93760d2055d4cc43ea63fb1951918cc1e6","archive_size":7513,"archive_url":"https://extensions.blender.org/download/sha256:ae6e839285861f6e14022ea7b5b74a93760d2055d4cc43ea63fb1951918cc1e6/add-on-stl-format-legacy-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stl-format-legacy/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Add-on expects to have access to filesytem."},"tags":["Import-Export"]},{"id":"atomic_blender_pdb_xyz","schema_version":"1.0.0","name":"Atomic Blender PDB/XYZ","version":"1.9.1","tagline":"Importing atoms listed in PDB and XYZ files into Blender","archive_hash":"sha256:d8ec654a526001a29d0c4f7450b33d27ccc9c74fed9d665d8a8e61a052c1c268","archive_size":51000,"archive_url":"https://extensions.blender.org/download/sha256:d8ec654a526001a29d0c4f7450b33d27ccc9c74fed9d665d8a8e61a052c1c268/add-on-atomic-blender-pdb-xyz-v1.9.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/atomic-blender-pdb-xyz/","maintainer":"Blendphys","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Add-on expects to have access to filesytem."},"tags":["Import-Export"]},{"id":"geodesic_domes","schema_version":"1.0.0","name":"Geodesic Domes","version":"0.3.6","tagline":"Create geodesic dome type objects","archive_hash":"sha256:7ebd015a85ae9d7d93dcc8942b12da6b120949b550ef97d09b273388926118f0","archive_size":25222,"archive_url":"https://extensions.blender.org/download/sha256:7ebd015a85ae9d7d93dcc8942b12da6b120949b550ef97d09b273388926118f0/add-on-geodesic-domes-v0.3.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/geodesic-domes/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"ui_animation_render","schema_version":"1.0.0","name":"UI Animation Render","version":"0.1.0","tagline":"Render animations of the Blender UI","archive_hash":"sha256:4cc58957a66ebe8d6649a4d2028ad6217c67b78e121e5e73e62ef739bf85eb29","archive_size":2426,"archive_url":"https://extensions.blender.org/download/sha256:4cc58957a66ebe8d6649a4d2028ad6217c67b78e121e5e73e62ef739bf85eb29/add-on-ui-animation-render-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ui-animation-render/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"inset_straight_skeleton","schema_version":"1.0.0","name":"Inset Straight Skeleton","version":"1.1.0","tagline":"Make an inset inside selection using straight skeleton algo . . ","archive_hash":"sha256:1b7ac6364ed7bc8736a2fa5bd7da0f2c07a527a6b0a50aed4801671eddc5c553","archive_size":33199,"archive_url":"https://extensions.blender.org/download/sha256:1b7ac6364ed7bc8736a2fa5bd7da0f2c07a527a6b0a50aed4801671eddc5c553/add-on-inset-straight-skeleton-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/inset-straight-skeleton/","maintainer":"howardt","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"refine_tracking_solution","schema_version":"1.0.0","name":"Refine tracking solution","version":"1.1.6","tagline":"Refine motion solution by adjusting track weight","archive_hash":"sha256:d04ac43654a33c8c0a78c935479cefc4c052cae6092c565ef8bcefc412418a1f","archive_size":2210,"archive_url":"https://extensions.blender.org/download/sha256:d04ac43654a33c8c0a78c935479cefc4c052cae6092c565ef8bcefc412418a1f/add-on-refine-tracking-solution-v1.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/refine-tracking-solution/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Tracking"]},{"id":"assign_shape_keys","schema_version":"1.0.0","name":"Assign Shape Keys","version":"1.0.2","tagline":"Assigns one or more Bezier curves as shape keys to another . . ","archive_hash":"sha256:a4e428cf15b9d642308a6b1fab414544e2a061abb6758c78214c42889d0de7e1","archive_size":10143,"archive_url":"https://extensions.blender.org/download/sha256:a4e428cf15b9d642308a6b1fab414544e2a061abb6758c78214c42889d0de7e1/add-on-assign-shape-keys-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/assign-shape-keys/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"export_pointcache_formatpc2","schema_version":"1.0.0","name":"Export Pointcache Format(.pc2)","version":"1.1.4","tagline":"Export mesh Pointcache data (.pc2)","archive_hash":"sha256:5302170dc699eeaa9eb0528daba03574f99e178726cba33fda104885fd0f7805","archive_size":2683,"archive_url":"https://extensions.blender.org/download/sha256:5302170dc699eeaa9eb0528daba03574f99e178726cba33fda104885fd0f7805/add-on-export-pointcache-formatpc2-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-pointcache-formatpc2/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory where it exports .pc2 file"},"tags":["Import-Export"]},{"id":"corrective_shape_keys","schema_version":"1.0.0","name":"Corrective Shape Keys","version":"1.0.0","tagline":"Creates a corrective shape key for the current pose","archive_hash":"sha256:23c5d539e6623f6ea266d5ca43738db668191314263480e4400944b1ed04ff19","archive_size":4821,"archive_url":"https://extensions.blender.org/download/sha256:23c5d539e6623f6ea266d5ca43738db668191314263480e4400944b1ed04ff19/add-on-corrective-shape-keys-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/corrective-shape-keys/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Animation"]},{"id":"edit_operator_source","schema_version":"1.0.0","name":"Edit Operator Source","version":"1.2.4","tagline":"Opens source file of chosen operator or call locations","archive_hash":"sha256:d1d29b06f1e0fe08fe8fa5e8802d4b3a7680af75652ca3f5f2b5f98c8d167ebc","archive_size":2897,"archive_url":"https://extensions.blender.org/download/sha256:d1d29b06f1e0fe08fe8fa5e8802d4b3a7680af75652ca3f5f2b5f98c8d167ebc/add-on-edit-operator-source-v1.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-operator-source/","maintainer":"scorpion81","license":["SPDX:GPL-2.0-or-later"],"tags":["Development"]},{"id":"newtek_mdd_format","schema_version":"1.0.0","name":"NewTek MDD format","version":"1.0.3","tagline":"Import-Export MDD as mesh shape keys","archive_hash":"sha256:100f9d821900bd61ab16ffef061f9bde2162564f06ab01f07659e83cba142759","archive_size":4368,"archive_url":"https://extensions.blender.org/download/sha256:100f9d821900bd61ab16ffef061f9bde2162564f06ab01f07659e83cba142759/add-on-newtek-mdd-format-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/newtek-mdd-format/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory with MDD format files"},"tags":["Import-Export"]},{"id":"demo_mode","schema_version":"1.0.0","name":"Demo Mode","version":"1.0.0","tagline":"Demo mode lets you select multiple blend files and loop ove . . ","archive_hash":"sha256:d54b9643f49a26032c9bdb35050143a818f9d0db629435a9a78e8d17198dde62","archive_size":9071,"archive_url":"https://extensions.blender.org/download/sha256:d54b9643f49a26032c9bdb35050143a818f9d0db629435a9a78e8d17198dde62/add-on-demo-mode-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/demo-mode/","maintainer":"campbell","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"scene_information","schema_version":"1.0.0","name":"Scene Information","version":"0.3.1","tagline":"Show information about the .blend","archive_hash":"sha256:fdb4bfdbc9e07e2ab29404de0cbd8e746a09b271ec4359d2934063c30ff7afe6","archive_size":1816,"archive_url":"https://extensions.blender.org/download/sha256:fdb4bfdbc9e07e2ab29404de0cbd8e746a09b271ec4359d2934063c30ff7afe6/add-on-scene-information-v0.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-information/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"paint_palettes","schema_version":"1.0.0","name":"Paint Palettes","version":"0.9.4","tagline":"Palettes for color and weight paint modes","archive_hash":"sha256:8c144a176ec5f4bfc530a2847a6bbb460ddd6f10048226605da97ed51ef24321","archive_size":6133,"archive_url":"https://extensions.blender.org/download/sha256:8c144a176ec5f4bfc530a2847a6bbb460ddd6f10048226605da97ed51ef24321/add-on-paint-palettes-v0.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/paint-palettes/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Paint"]},{"id":"nuke_animation_format_chan","schema_version":"1.0.0","name":"Nuke Animation Format (.chan)","version":"1.0.0","tagline":"Import/Export object's animation with nuke","archive_hash":"sha256:9b6eed1f16c02a3ab7647f1f18160df19035a25c4a7fac6d05c70ea7a6de90c9","archive_size":4340,"archive_url":"https://extensions.blender.org/download/sha256:9b6eed1f16c02a3ab7647f1f18160df19035a25c4a7fac6d05c70ea7a6de90c9/add-on-nuke-animation-format-chan-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nuke-animation-format-chan/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Import-Export"]},{"id":"btracer","schema_version":"1.0.0","name":"BTracer","version":"1.2.4","tagline":"Tools for converting/animating objects/particles into curves","archive_hash":"sha256:5a29e1daf2b2a0d8e652c84c9b56c25b1f950d92c8a24b03de5b3aa9bdb98064","archive_size":17367,"archive_url":"https://extensions.blender.org/download/sha256:5a29e1daf2b2a0d8e652c84c9b56c25b1f950d92c8a24b03de5b3aa9bdb98064/add-on-btracer-v1.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/btracer/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"web3d_x3d_vrml2_format","schema_version":"1.0.0","name":"Web3D X3D/VRML2 format","version":"2.5.1","tagline":"Import-Export X3D, Import VRML2","archive_hash":"sha256:74bcf2cb912af4be5db550f9486b4a0470b4513ef61d4df07ba091edd1441604","archive_size":100153,"archive_url":"https://extensions.blender.org/download/sha256:74bcf2cb912af4be5db550f9486b4a0470b4513ef61d4df07ba091edd1441604/add-on-web3d-x3d-vrml2-format-v2.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/web3d-x3d-vrml2-format/","maintainer":"Bujus_Krachus","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to access files for import/export","network":"Required to download web resources for import"},"tags":["Import-Export"]},{"id":"export_camera_animation","schema_version":"1.0.0","name":"Export Camera Animation","version":"0.1.2","tagline":"Export Cameras & Markers to a Python script","archive_hash":"sha256:fae5cacd489f79872e1dd8cce0b5ad8080f6bdfdc4633133d069157ac3d790ed","archive_size":2057,"archive_url":"https://extensions.blender.org/download/sha256:fae5cacd489f79872e1dd8cce0b5ad8080f6bdfdc4633133d069157ac3d790ed/add-on-export-camera-animation-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-camera-animation/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory where it exports .py file"},"tags":["Import-Export"]},{"id":"cadbase_library","schema_version":"1.0.0","name":"CADBase Library","version":"0.3.0","tagline":"Add-on enables data sync with remote storage (cloud)","archive_hash":"sha256:395e335930e4537a2d742750f571c2dbf12c6a9475d2deb22bbe92bfe819f7be","archive_size":190158,"archive_url":"https://extensions.blender.org/download/sha256:395e335930e4537a2d742750f571c2dbf12c6a9475d2deb22bbe92bfe819f7be/add-on-cadbase-library-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cadbase-library/","maintainer":"mnnxp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export library data from/to disk","network":"Need to to sync library data with a remote server","clipboard":"Copy component link to clipboard"},"tags":["Import-Export"]},{"id":"forts_map","schema_version":"1.0.0","name":"Forts Map Importer","version":"1.0.1","tagline":"Import Forts Map","archive_hash":"sha256:4657348ef634c9404c900accbe3cbc7799952cb8416f5afd6f24939483de4b66","archive_size":4234,"archive_url":"https://extensions.blender.org/download/sha256:4657348ef634c9404c900accbe3cbc7799952cb8416f5afd6f24939483de4b66/add-on-forts-map-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/forts-map/","maintainer":"Gonnetz","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Import-Export"]},{"id":"democap_tools","schema_version":"1.0.0","name":"DEMoCap Tools","version":"1.8.1","tagline":"Tools for importing DEMoCap motion captures into Blender","archive_hash":"sha256:c007ea7eb409a3831edc0f4d62611c6e32c7a1320c0cfc2cafa4b9ac5b84025c","archive_size":116066,"archive_url":"https://extensions.blender.org/download/sha256:c007ea7eb409a3831edc0f4d62611c6e32c7a1320c0cfc2cafa4b9ac5b84025c/add-on-democap-tools-v1.8.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/democap-tools/","maintainer":"DragonDreams","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Loading motion capture files","network":"Connect to DEMoCap (Live Connection)"},"tags":["Import-Export","Animation"]},{"id":"dragengine_tools","schema_version":"1.0.0","name":"Drag[en]gine Import/Export","version":"1.29.1","tagline":"Import/Export Drag[en]gine Resources including helper tools","archive_hash":"sha256:b72e32bc0067170ec0865d3dc1eef9a487235043d566b286c85456f00189b14a","archive_size":115706,"archive_url":"https://extensions.blender.org/download/sha256:b72e32bc0067170ec0865d3dc1eef9a487235043d566b286c85456f00189b14a/add-on-dragengine-tools-v1.29.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dragengine-tools/","maintainer":"DragonDreams","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing/Exporting resources"},"tags":["Import-Export","3D View","Mesh","Object","Animation"]}],"version":"v1"} \ No newline at end of file +{"blocklist":[],"data":[{"id":"node_peek","schema_version":"1.0.0","name":"Node Peek","version":"0.4.2","tagline":"Live rendered thumbnail previews above shader nodes","archive_hash":"sha256:f28e65188bccfc31b9a8728c511525a1f28be6e2a409d3b26ae243d88e142322","archive_size":42441,"archive_url":"https://extensions.blender.org/download/sha256:f28e65188bccfc31b9a8728c511525a1f28be6e2a409d3b26ae243d88e142322/add-on-node-peek-v0.4.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-peek/","maintainer":"mlstr0m","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write temporary render results to the system temp directory"},"tags":["Node","Material"]},{"id":"yl_vertexcolforge","schema_version":"1.0.0","name":"YL VertexColForge","version":"1.2.0","tagline":"Vertex Color editing, previewing, and packing tools","archive_hash":"sha256:81ef94b163341e328a5a066656a3ae9affd9a0234da0b06dd88d99e77dd2187b","archive_size":309660,"archive_url":"https://extensions.blender.org/download/sha256:81ef94b163341e328a5a066656a3ae9affd9a0234da0b06dd88d99e77dd2187b/add-on-yl-vertexcolforge-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/yl-vertexcolforge/","maintainer":"YLIANG","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Paint"]},{"id":"texture_pipeline_studio","schema_version":"1.0.0","name":"Texture Pipeline Studio","version":"8.10.1","tagline":"Assign PBR textures from resolution folders and swap LODs","archive_hash":"sha256:c7abbaca62008937992ff078943973450173e9137651a5662933d68a1f6c4471","archive_size":9087,"archive_url":"https://extensions.blender.org/download/sha256:c7abbaca62008937992ff078943973450173e9137651a5662933d68a1f6c4471/add-on-texture-pipeline-studio-v8.10.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/texture-pipeline-studio/","maintainer":"Gihan-Maddumage","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read PBR texture images from user-selected folders on disk"},"tags":["Material","Pipeline","Node"]},{"id":"clothdrop_reborn","schema_version":"1.0.0","name":"ClothDrop Reborn","version":"2.0.3","tagline":"Single-click cloth simulation tool","archive_hash":"sha256:d14ee9a0178b6f644d1d3a4fc205e9502979f32707c8e656cf41d3b629c793ee","archive_size":9034,"archive_url":"https://extensions.blender.org/download/sha256:d14ee9a0178b6f644d1d3a4fc205e9502979f32707c8e656cf41d3b629c793ee/add-on-clothdrop-reborn-v2.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clothdrop-reborn/","maintainer":"Hartface","license":["SPDX:GPL-3.0-or-later"],"tags":["Physics"]},{"id":"nodemap","schema_version":"1.0.0","name":"Nodemap","version":"1.3.2","tagline":"Minimap overlay for the Node Editor","archive_hash":"sha256:bc6a53c36023401166b067ae988cf122aeb53705475f0427023288be76aab741","archive_size":38052,"archive_url":"https://extensions.blender.org/download/sha256:bc6a53c36023401166b067ae988cf122aeb53705475f0427023288be76aab741/add-on-nodemap-v1.3.2.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/nodemap/","maintainer":"n4dirp","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"rolllux","schema_version":"1.0.0","name":"RollLux","version":"5.5.5","tagline":"Perceptive Full-Auto Metering Lighting","archive_hash":"sha256:e191e2481666f740ce99354b3753e350a7e823f301db3416c5b9ba359ea8fb5d","archive_size":1503359,"archive_url":"https://extensions.blender.org/download/sha256:e191e2481666f740ce99354b3753e350a7e823f301db3416c5b9ba359ea8fb5d/add-on-rolllux-v5.5.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/rolllux/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later","SPDX:CC0-1.0"],"permissions":{"files":"Load reference lighting images from disk via the file picker"},"tags":["Lighting","Render"]},{"id":"stepper_reborn","schema_version":"1.0.0","name":"STEPper Reborn","version":"2.3.0","tagline":"CAD importer","archive_hash":"sha256:0cb79faecb04d45fdd06df6ac4b68695f84d8e917f188914d9c70670290bb1cc","archive_size":46347755,"archive_url":"https://extensions.blender.org/download/sha256:0cb79faecb04d45fdd06df6ac4b68695f84d8e917f188914d9c70670290bb1cc/add-on-stepper-reborn-v2.3.0-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/stepper-reborn/","maintainer":"RomainGuimbal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import STEP files"},"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"br3f","schema_version":"1.0.0","name":"R3F JSX/TSX Exporter","version":"0.1.1","tagline":"Export GLB + React Three Fiber JSX/TSX component in one click","archive_hash":"sha256:48480e1bb3c2417f53092e391ede6bb0d208a51b09f4993996826042eeaf8e19","archive_size":19149,"archive_url":"https://extensions.blender.org/download/sha256:48480e1bb3c2417f53092e391ede6bb0d208a51b09f4993996826042eeaf8e19/add-on-br3f-v0.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/br3f/","maintainer":"Tom-Heeley","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write the .glb and generated component to your project folders"},"tags":["Import-Export","Pipeline"]},{"id":"bas_relief","schema_version":"1.0.0","name":"Bas Relief","version":"1.1.0","tagline":"Create Bas Relief from images in Blender","archive_hash":"sha256:014fbc08414647cda8c79861d14a09a84359bee1f66e66c1e2121dfdc96698ee","archive_size":535796,"archive_url":"https://extensions.blender.org/download/sha256:014fbc08414647cda8c79861d14a09a84359bee1f66e66c1e2121dfdc96698ee/add-on-bas-relief-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bas-relief/","maintainer":"guillaume_bissieres","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Material"]},{"id":"step_importer","schema_version":"1.0.0","name":"STEP Importer","version":"1.1.1","tagline":"Import STEP files directly into Blender, no 3rd party needed","archive_hash":"sha256:a33bf598c355985cc8944dd9fa971f3ab82cba60c42a4de46c4b86e9bed79140","archive_size":16227264,"archive_url":"https://extensions.blender.org/download/sha256:a33bf598c355985cc8944dd9fa971f3ab82cba60c42a4de46c4b86e9bed79140/add-on-step-importer-v1.1.1-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/step-importer/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"Coffee_Theme","schema_version":"1.0.0","name":"Coffee_Theme","version":"1.0.0","tagline":"No fish inside I swear","archive_hash":"sha256:51bd918707723228bae23922611137998221f76e5467b85d7f0b091f5be7a0de","archive_size":6515,"archive_url":"https://extensions.blender.org/download/sha256:51bd918707723228bae23922611137998221f76e5467b85d7f0b091f5be7a0de/theme-coffee-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/coffee-theme/","maintainer":"Leo-Mb","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"unreal_viewport_navigation","schema_version":"1.0.0","name":"Unreal Viewport Navigation - WASD","version":"1.1.1","tagline":"Unreal-style RMB navigation with selectable movement keys","archive_hash":"sha256:877ce34f2da4a528ed1381459f4a72135ebb9807feb04d52f2266f1285e81aa9","archive_size":30777,"archive_url":"https://extensions.blender.org/download/sha256:877ce34f2da4a528ed1381459f4a72135ebb9807feb04d52f2266f1285e81aa9/add-on-unreal-viewport-navigation-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unreal-viewport-navigation/","maintainer":"Matsm-Studio","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"sculpt_stroke_replay","schema_version":"1.0.0","name":"Sculpt Stroke Replay","version":"0.1.6","tagline":"Replay the last sculpt stroke with adjustable strength","archive_hash":"sha256:1957be55fa391269b98bc583a6271e4f17fbc1836f484b50e62fea2319b90b0b","archive_size":3308,"archive_url":"https://extensions.blender.org/download/sha256:1957be55fa391269b98bc583a6271e4f17fbc1836f484b50e62fea2319b90b0b/add-on-sculpt-stroke-replay-v0.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpt-stroke-replay/","maintainer":"a.a.andrusenko","license":["SPDX:GPL-3.0-or-later"]},{"id":"easy_arrangement","schema_version":"1.0.0","name":"Easy Arrangement","version":"0.2.2","tagline":"Arrange objects linearly, stair-like or in circular patterns","archive_hash":"sha256:e576a758a39b09dbc2e613d2494dd58058b0325b20f5e3cbf76e21772cdc80b8","archive_size":8687,"archive_url":"https://extensions.blender.org/download/sha256:e576a758a39b09dbc2e613d2494dd58058b0325b20f5e3cbf76e21772cdc80b8/add-on-easy-arrangement-v0.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easy-arrangement/","maintainer":"mlico","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"image_editor_tools","schema_version":"1.0.0","name":"Image Editor Master [图像超级工具]","version":"0.3.8","tagline":"Super Image Toolbox (color, filters, texture optimization)","archive_hash":"sha256:8bd34ced888ecad71e1f764b3cdc491fed085bcadec8fb8d1a1887ee302d5de6","archive_size":167013,"archive_url":"https://extensions.blender.org/download/sha256:8bd34ced888ecad71e1f764b3cdc491fed085bcadec8fb8d1a1887ee302d5de6/add-on-image-editor-tools-v0.3.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/image-editor-tools/","maintainer":"RARA","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read image from disk","clipboard":"Copy image from clipboard"},"tags":["Paint","Compositing"]},{"id":"BAM_Decalit","schema_version":"1.0.0","name":"[BAM] Decalit","version":"1.1.2","tagline":"Fast mesh decal placement with normal snapping and Custom UI/UX","archive_hash":"sha256:278dd7df3126c39f20379a1f238056dbbfa4d96bb8d94286a11fa07ef76350d6","archive_size":2952928,"archive_url":"https://extensions.blender.org/download/sha256:278dd7df3126c39f20379a1f238056dbbfa4d96bb8d94286a11fa07ef76350d6/add-on-bam-decalit-v1.1.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bam-decalit/","maintainer":"AlexeyHRDesign","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load decal presets and generated preview images"},"tags":["Material"]},{"id":"fill_mesh","schema_version":"1.0.0","name":"Fill Mesh","version":"1.0.8","tagline":"An add-on to fix and fill holes on your meshes","archive_hash":"sha256:c5c630878528a38f6870459e7cb9b630105e14636e4137bed328d53ca16f729c","archive_size":7544,"archive_url":"https://extensions.blender.org/download/sha256:c5c630878528a38f6870459e7cb9b630105e14636e4137bed328d53ca16f729c/add-on-fill-mesh-v1.0.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fill-mesh/","maintainer":"guillaume_bissieres","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"editmode_dimensions","schema_version":"1.0.0","name":"Dimensions in Edit Mode","version":"1.0.1","tagline":"Live display and editing of selected geometry' dimensions","archive_hash":"sha256:acac5c3fbca92c18a8718a499f881814b3d13b73c0d815e63196b8d21f7265dd","archive_size":1776,"archive_url":"https://extensions.blender.org/download/sha256:acac5c3fbca92c18a8718a499f881814b3d13b73c0d815e63196b8d21f7265dd/add-on-editmode-dimensions-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/editmode-dimensions/","maintainer":"Matikos","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"camera_grid","schema_version":"1.0.0","name":"Camera Grid","version":"1.2.0","tagline":"Viewport camera grid overlay for quick camera switching","archive_hash":"sha256:f401ec200d3619d82c0445d00ded2da17c5cf0ee24404002605d89dadc0d865b","archive_size":23571,"archive_url":"https://extensions.blender.org/download/sha256:f401ec200d3619d82c0445d00ded2da17c5cf0ee24404002605d89dadc0d865b/add-on-camera-grid-v1.2.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/camera-grid/","maintainer":"n4dirp","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","User Interface"]},{"id":"object_lay_flat","schema_version":"1.0.0","name":"Lay Flat","version":"1.0.0","tagline":"Lays an object flat on the XY plane based on the selected face","archive_hash":"sha256:21c85c39e657827bcaf64637e8637cbd541ee8fabf27e8a85f6f2a29a014b43e","archive_size":3106,"archive_url":"https://extensions.blender.org/download/sha256:21c85c39e657827bcaf64637e8637cbd541ee8fabf27e8a85f6f2a29a014b43e/add-on-object-lay-flat-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/object-lay-flat/","maintainer":"Pavel-Karoukin","license":["SPDX:GPL-3.0-or-later"]},{"id":"yl_meshcheckhud","schema_version":"1.0.0","name":"YL MeshCheckHUD","version":"1.2.0","tagline":"Mesh check, heatmap, and live HUD tools for Blender","archive_hash":"sha256:b88f4a9621e1537f5fefa97835121405fdb4df8040a35c2bf752486d4ee63342","archive_size":139058,"archive_url":"https://extensions.blender.org/download/sha256:b88f4a9621e1537f5fefa97835121405fdb4df8040a35c2bf752486d4ee63342/add-on-yl-meshcheckhud-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/yl-meshcheckhud/","maintainer":"YLIANG","license":["SPDX:GPL-3.0-or-later"]},{"id":"cream_soda","schema_version":"1.0.0","name":"Cream Soda","version":"1.0.0","tagline":"A cream soda from Lawson","archive_hash":"sha256:989edfb1c8f02e525cdf673e8a3707e5ad9d65a86e9d879e11dca32b56bfea5c","archive_size":5011,"archive_url":"https://extensions.blender.org/download/sha256:989edfb1c8f02e525cdf673e8a3707e5ad9d65a86e9d879e11dca32b56bfea5c/theme-cream-soda-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cream-soda/","maintainer":"spoiledmilk","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"wiggle_bones","schema_version":"1.0.0","name":"Wiggle Bones","version":"1.1.1","tagline":"Refactor of Wiggle 2, fully fixed for Blender 5.0","archive_hash":"sha256:4e2393b90e12aa8e4690a3de92a705ccbec6ec8cee543da00d3c880bc54f7e3a","archive_size":27611,"archive_url":"https://extensions.blender.org/download/sha256:4e2393b90e12aa8e4690a3de92a705ccbec6ec8cee543da00d3c880bc54f7e3a/add-on-wiggle-bones-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/wiggle-bones/","maintainer":"Hans_Xwh","license":["SPDX:GPL-3.0-or-later"],"tags":["Physics"]},{"id":"import_psd_as_mesh_planes","schema_version":"1.0.0","name":"Import .PSD as Mesh Planes","version":"1.1.0","tagline":"Allows importing of .PSD files into mesh planes","archive_hash":"sha256:9b4c903e03a2e7064d1dbc78fed25c05dc0ef713e1e1ccb1c6acdbad1706bee0","archive_size":5255,"archive_url":"https://extensions.blender.org/download/sha256:9b4c903e03a2e7064d1dbc78fed25c05dc0ef713e1e1ccb1c6acdbad1706bee0/add-on-import-psd-as-mesh-planes-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-psd-as-mesh-planes/","maintainer":"byebyeLAN","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Mesh"]},{"id":"AdvancedAlignView","schema_version":"1.0.0","name":"Advanced Align View","version":"0.1.3","tagline":"Align 3D View to selected geometries for precise modeling","archive_hash":"sha256:cf28e02b52faace5d50f5303440c2671d4659f62fba33c1fa7d6feb729c9643d","archive_size":37803,"archive_url":"https://extensions.blender.org/download/sha256:cf28e02b52faace5d50f5303440c2671d4659f62fba33c1fa7d6feb729c9643d/add-on-advancedalignview-v0.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/advancedalignview/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View"]},{"id":"Flash_Light","schema_version":"1.0.0","name":"Flash Light","version":"1.0.3","tagline":"Light theme inspired by Macromedia Flash 8","archive_hash":"sha256:42f468a86c2aaeb4464188ae8a6e353394cd8735f7908faf68679cfa4b5ca87b","archive_size":5690,"archive_url":"https://extensions.blender.org/download/sha256:42f468a86c2aaeb4464188ae8a6e353394cd8735f7908faf68679cfa4b5ca87b/theme-flash-light-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/flash-light/","maintainer":"Spikysaurus","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"Retro3DSMAX","schema_version":"1.0.0","name":"3DSMAX 1996","version":"1.0.0","tagline":"Classic theme inspired by 3D Studio Max 2.5","archive_hash":"sha256:cba1539ab749888c06a6dd7bef361958cdce7ed9e6486b6e3d217ca276bb5247","archive_size":4832,"archive_url":"https://extensions.blender.org/download/sha256:cba1539ab749888c06a6dd7bef361958cdce7ed9e6486b6e3d217ca276bb5247/theme-retro3dsmax-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/retro3dsmax/","maintainer":"Philautia","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Light"]},{"id":"quicksnap","schema_version":"1.0.0","name":"QuickSnap","version":"1.5.1","tagline":"Quickly snap objects/vertices/curve points","archive_hash":"sha256:8fe5d7c52ccc682be2b67cd44caf38a655fa2d98edee341ae415a37083b22f25","archive_size":80845,"archive_url":"https://extensions.blender.org/download/sha256:8fe5d7c52ccc682be2b67cd44caf38a655fa2d98edee341ae415a37083b22f25/add-on-quicksnap-v1.5.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/quicksnap/","maintainer":"julienh","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Object"]},{"id":"struct_topo_opt","schema_version":"1.0.0","name":"Structural Topology Optimization","version":"0.4.3","tagline":"SIMP+OC structural topology optimization in the viewport","archive_hash":"sha256:0258ae4ac60e1a851ad1ec5339ae3b2e4a194ce76da6b8b696b02bd2ba7ef33b","archive_size":80648578,"archive_url":"https://extensions.blender.org/download/sha256:0258ae4ac60e1a851ad1ec5339ae3b2e4a194ce76da6b8b696b02bd2ba7ef33b/add-on-struct-topo-opt-v0.4.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/struct-topo-opt/","maintainer":"Emrgn.arch","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh","Physics"]},{"id":"quick_sidebar_switcher","schema_version":"1.0.0","name":"Quick Sidebar Switcher","version":"1.4.0","tagline":"Quickly switch between Side Panel tabs with a popup menu","archive_hash":"sha256:570682c3063e0bdaa71c08d59d0560f7d2dcd9131d7122cf07eada14d0e0ec2b","archive_size":9941,"archive_url":"https://extensions.blender.org/download/sha256:570682c3063e0bdaa71c08d59d0560f7d2dcd9131d7122cf07eada14d0e0ec2b/add-on-quick-sidebar-switcher-v1.4.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/quick-sidebar-switcher/","maintainer":"hyeffect55","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"timeline_audio_visualizer","schema_version":"1.0.0","name":"Timeline Audio Visualizer","version":"0.2.5","tagline":"Visualize audio waveforms inside Blender animation timelines","archive_hash":"sha256:758269dcc0bdd2fb0ada3ffbb32cfda7603e8592c77269a83aaab1c1998c4380","archive_size":22383,"archive_url":"https://extensions.blender.org/download/sha256:758269dcc0bdd2fb0ada3ffbb32cfda7603e8592c77269a83aaab1c1998c4380/add-on-timeline-audio-visualizer-v0.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/timeline-audio-visualizer/","maintainer":"qsOwOsp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read audio files for waveform generation"},"tags":["Animation","Sequencer"]},{"id":"mmgpy","schema_version":"1.0.0","name":"MMGpy - Mesh Remeshing","version":"0.16.2","tagline":"Adaptive surface remeshing via the MMG library","archive_hash":"sha256:da18b422985da4ddc2086ec9bd695d8ad8150edf5222f3c9bbae3a11a79cda66","archive_size":9515641,"archive_url":"https://extensions.blender.org/download/sha256:da18b422985da4ddc2086ec9bd695d8ad8150edf5222f3c9bbae3a11a79cda66/add-on-mmgpy-v0.16.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mmgpy/","maintainer":"kmarchais","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh","Modeling"]},{"id":"Multi_Files_Bookmark","schema_version":"1.0.0","name":"Multi Files Bookmark","version":"0.7.1","tagline":"Manage your projects as bookmarks in one Blender window","archive_hash":"sha256:1b9ef9c49159de40e897bd0907d8dfd95d09f1ad422dc926611e02ad37d86deb","archive_size":49098,"archive_url":"https://extensions.blender.org/download/sha256:1b9ef9c49159de40e897bd0907d8dfd95d09f1ad422dc926611e02ad37d86deb/add-on-multi-files-bookmark-v0.7.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/multi-files-bookmark/","maintainer":"61+","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"Star_Citizen","schema_version":"1.0.0","name":"STAR CITIZEN","version":"1.0.0","tagline":"A Star Citizen theme for Blender","archive_hash":"sha256:730b5dff1e0da25b0442e8eca33e50bdeb610e673c9fc66047312b1e67de3773","archive_size":5820,"archive_url":"https://extensions.blender.org/download/sha256:730b5dff1e0da25b0442e8eca33e50bdeb610e673c9fc66047312b1e67de3773/theme-star-citizen-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/star-citizen/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"dynamic_parent","schema_version":"1.0.0","name":"Dynamic Parent","version":"2.1.0","tagline":"Allows to create and disable an animated ChildOf constraint","archive_hash":"sha256:20d9580c52af76bb5449eb01c6a6f91bd6a406a34c2c7a54c9b967267aaa1d9a","archive_size":5922,"archive_url":"https://extensions.blender.org/download/sha256:20d9580c52af76bb5449eb01c6a6f91bd6a406a34c2c7a54c9b967267aaa1d9a/add-on-dynamic-parent-v2.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/dynamic-parent/","maintainer":"RomanVolodin","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"plague_inc_theme","schema_version":"1.0.0","name":"Plague Inc. Theme","version":"1.0.0","tagline":"Very red theme","archive_hash":"sha256:0772cf9646fb30d361e26a907a5321ab0d672b7944ce1f44a033d4b6ef43af35","archive_size":5933,"archive_url":"https://extensions.blender.org/download/sha256:0772cf9646fb30d361e26a907a5321ab0d672b7944ce1f44a033d4b6ef43af35/theme-plague-inc-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/plague-inc-theme/","maintainer":"Bebo","license":["SPDX:GPL-3.0-or-later"]},{"id":"quickpath_rknz","schema_version":"1.0.0","name":"QuickPath RKNZ","version":"2.2.0","tagline":"Quick motion path visualization for bones and objects","archive_hash":"sha256:abc7264e245313dbea1ecb6164d9bdf359c88bce798df5bc875dc92176fdf421","archive_size":44466,"archive_url":"https://extensions.blender.org/download/sha256:abc7264e245313dbea1ecb6164d9bdf359c88bce798df5bc875dc92176fdf421/add-on-quickpath-rknz-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quickpath-rknz/","maintainer":"Rikokenz","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"photo360_lab","schema_version":"1.0.0","name":"360 PhotoLab","version":"0.37.0","tagline":"Reframe equirectangular 360 photos with RET CIL and CLV previews","archive_hash":"sha256:eafa1747533049218ccbb291caed3ba4df5d39c8dcbccc039cee104647d65952","archive_size":19055,"archive_url":"https://extensions.blender.org/download/sha256:eafa1747533049218ccbb291caed3ba4df5d39c8dcbccc039cee104647d65952/add-on-photo360-lab-v0.37.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/photo360-lab/","maintainer":"Mattia-Fiorini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load local 360 images and LUT files and export images"},"tags":["Camera","Import-Export"]},{"id":"snapline","schema_version":"1.0.0","name":"Snapline","version":"2.0.0","tagline":"Snap and align your object faster than before","archive_hash":"sha256:2ffa56a35d0015ce5e78e4bc999740748095e9900fa10a48cb91d67248c03f1e","archive_size":16569,"archive_url":"https://extensions.blender.org/download/sha256:2ffa56a35d0015ce5e78e4bc999740748095e9900fa10a48cb91d67248c03f1e/add-on-snapline-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/snapline/","maintainer":"Berun","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object"]},{"id":"color_helper","schema_version":"1.0.0","name":"Color Helper","version":"0.8.0","tagline":"Palette and color workflow tools","archive_hash":"sha256:f1cae8296649f897b99a1dd916f045b71cd182988d1ae24f0836d38724268eb2","archive_size":64595,"archive_url":"https://extensions.blender.org/download/sha256:f1cae8296649f897b99a1dd916f045b71cd182988d1ae24f0836d38724268eb2/add-on-color-helper-v0.8.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/color-helper/","maintainer":"atticuslv","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export palette images and assets","clipboard":"Read image and color values from the clipboard"},"tags":["Material","Node","Paint"]},{"id":"wiggle_2","schema_version":"1.0.0","name":"Wiggle 2: RTX Edition","version":"2.2.7","tagline":" Instant Procedural Bone Physics for Any Rig","archive_hash":"sha256:e7d9cfb5b616da92c940f287829855ecfac590e30dd87ef0db240a24a8aa3a3c","archive_size":73896,"archive_url":"https://extensions.blender.org/download/sha256:e7d9cfb5b616da92c940f287829855ecfac590e30dd87ef0db240a24a8aa3a3c/add-on-wiggle-2-v2.2.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wiggle-2/","maintainer":"Chamiseul","license":["SPDX:GPL-3.0-or-later"]},{"id":"loopkut","schema_version":"1.0.0","name":"Loopkut","version":"1.3.3","tagline":"Preview inserted loop cuts at mouse position","archive_hash":"sha256:c2f64f526a9785ace0e9a565dae156f01b78e3c1d89241b36b6da0c361eb0606","archive_size":104576,"archive_url":"https://extensions.blender.org/download/sha256:c2f64f526a9785ace0e9a565dae156f01b78e3c1d89241b36b6da0c361eb0606/add-on-loopkut-v1.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/loopkut/","maintainer":"KewlSheet","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"symtrz","schema_version":"1.0.0","name":"SymTrz","version":"2.2.4","tagline":"Mirror And Symmetrize tools for 3D View","archive_hash":"sha256:565cac6a2300773bf7221881c913ea85e0fe3a8f3bc8483d34d75bb08f81074e","archive_size":14031,"archive_url":"https://extensions.blender.org/download/sha256:565cac6a2300773bf7221881c913ea85e0fe3a8f3bc8483d34d75bb08f81074e/add-on-symtrz-v2.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/symtrz/","maintainer":"Berun","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object"]},{"id":"batch_import_images_to_brushes","schema_version":"1.0.0","name":"Batch Import Images to Brushes","version":"1.0.1","tagline":"Import images as texture paint and sculpt brushes","archive_hash":"sha256:4be87504869ed8883f990ee8d2f58e31c99440ecfb293bb6df5b32d6799d2ec5","archive_size":4117,"archive_url":"https://extensions.blender.org/download/sha256:4be87504869ed8883f990ee8d2f58e31c99440ecfb293bb6df5b32d6799d2ec5/add-on-batch-import-images-to-brushes-v1.0.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/batch-import-images-to-brushes/","maintainer":"Raja-Muda","license":["SPDX:GPL-3.0-or-later"]},{"id":"fst_forgepolish","schema_version":"1.0.0","name":"FST ForgePolish","version":"1.2.0","tagline":"Hard surface polishing with optional volume preservation","archive_hash":"sha256:6df63aee40c379f3cb77f4590e2bbb37a378e8d41ea62db45d8457e8e67ed18b","archive_size":68597,"archive_url":"https://extensions.blender.org/download/sha256:6df63aee40c379f3cb77f4590e2bbb37a378e8d41ea62db45d8457e8e67ed18b/add-on-fst-forgepolish-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fst-forgepolish/","maintainer":"YLIANG","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"io_directx_x","schema_version":"1.0.0","name":"DirectX X Format (.x)","version":"1.3.1","tagline":"Import/Export DirectX .x","archive_hash":"sha256:e8e2d450c9c807c6ee104c5442ae0ef50bb88a8ee23f05acca4acd095a93c256","archive_size":116022,"archive_url":"https://extensions.blender.org/download/sha256:e8e2d450c9c807c6ee104c5442ae0ef50bb88a8ee23f05acca4acd095a93c256/add-on-io-directx-x-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-directx-x/","maintainer":"SaintBaron","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"omni_outset","schema_version":"1.0.0","name":"OmniOutset","version":"1.1.1","tagline":"Smart Face and Equidistant Edge Extrude","archive_hash":"sha256:1fde945aa66c913d9be4fecc614fb702e5c6856b4a87e629ca1d3a0f35d152e3","archive_size":9761,"archive_url":"https://extensions.blender.org/download/sha256:1fde945aa66c913d9be4fecc614fb702e5c6856b4a87e629ca1d3a0f35d152e3/add-on-omni-outset-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/omni-outset/","maintainer":"Alx_11","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"damped_track_chain","schema_version":"1.0.0","name":"Damped Track Chain","version":"1.0.2","tagline":"为骨骼链一键生成阻尼追踪约束/One-click bone chain constraints","archive_hash":"sha256:70af09ebe58cca42406322bec092d5f9dfa857436b0518ad5e071a43a7155aa0","archive_size":6101,"archive_url":"https://extensions.blender.org/download/sha256:70af09ebe58cca42406322bec092d5f9dfa857436b0518ad5e071a43a7155aa0/add-on-damped-track-chain-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/damped-track-chain/","maintainer":"shengmingu","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"blender_speed_curve","schema_version":"1.0.0","name":"Motion Style","version":"1.0.2","tagline":"AE-style easing sliders and F-Curve speed visualization","archive_hash":"sha256:4ae9d54a4e0f98159c979fba471646406574baa2b0809eef4db3e45d799d8d61","archive_size":6406,"archive_url":"https://extensions.blender.org/download/sha256:4ae9d54a4e0f98159c979fba471646406574baa2b0809eef4db3e45d799d8d61/add-on-blender-speed-curve-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-speed-curve/","maintainer":"Willy_Work","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"keymap_visualizer","schema_version":"1.0.0","name":"Keymap Visualizer","version":"1.0.1","tagline":"Visual keyboard-based keymap editor","archive_hash":"sha256:9276b55426937631b387d7bd2851d38eca184bbe68cdefb97ca08ccb4779c047","archive_size":202498,"archive_url":"https://extensions.blender.org/download/sha256:9276b55426937631b387d7bd2851d38eca184bbe68cdefb97ca08ccb4779c047/add-on-keymap-visualizer-v1.0.1.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/keymap-visualizer/","maintainer":"devanshutak25","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export keymap configurations and save/load presets to disk","clipboard":"Copy and paste keymap presets as JSON via the system clipboard"},"tags":["User Interface","System"]},{"id":"Evergreen_Theme","schema_version":"1.0.0","name":"Evergreen_Theme","version":"1.0.6","tagline":"Nature Verdure","archive_hash":"sha256:983a011e057339f40c8236faa5b0fa86d5b350c23921bc7fc7ee75da1a4725ba","archive_size":5918,"archive_url":"https://extensions.blender.org/download/sha256:983a011e057339f40c8236faa5b0fa86d5b350c23921bc7fc7ee75da1a4725ba/theme-evergreen-theme-v1.0.6.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/evergreen-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"eye_animation","schema_version":"1.0.0","name":"Eye Animation","version":"2.0.0","tagline":"Eye position and blinking tool with keyframe controls","archive_hash":"sha256:1b9dc1648e32ac9b7890904c7df6fdb6a029bbb1250bf79eaccda310b5d3d53e","archive_size":5308,"archive_url":"https://extensions.blender.org/download/sha256:1b9dc1648e32ac9b7890904c7df6fdb6a029bbb1250bf79eaccda310b5d3d53e/add-on-eye-animation-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/eye-animation/","maintainer":"Affe_mit_Waffe","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"pataz_auto_hide_overlays","schema_version":"1.0.0","name":"Pataz Auto Hide Overlays","version":"5.2.4","tagline":"Hides overlays during transform or playback","archive_hash":"sha256:08259ebf900d77725d07cadffa57f0191fca637043e2196ac57d97292c7e1032","archive_size":5410,"archive_url":"https://extensions.blender.org/download/sha256:08259ebf900d77725d07cadffa57f0191fca637043e2196ac57d97292c7e1032/add-on-pataz-auto-hide-overlays-v5.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pataz-auto-hide-overlays/","maintainer":"zanqdo","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"chunk_render","schema_version":"1.0.0","name":"Chunk Render","version":"1.1.6","tagline":"Tile-based rendering for render regions","archive_hash":"sha256:4f26cec46d8ac35687cee4d53a47db19a627d0134a962b2a20a879d32168d7c8","archive_size":40484,"archive_url":"https://extensions.blender.org/download/sha256:4f26cec46d8ac35687cee4d53a47db19a627d0134a962b2a20a879d32168d7c8/add-on-chunk-render-v1.1.6.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/chunk-render/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write tile images and temp files for tile merging"},"tags":["Render"]},{"id":"maze_generator_pro","schema_version":"1.0.0","name":"Maze Generator Pro","version":"1.0.9","tagline":"3D maze generator with presets, themes and physics","archive_hash":"sha256:5c793ce964b312ccbeb3f87f8adba62c31367b95756240b47ee95ddf848a020c","archive_size":34426,"archive_url":"https://extensions.blender.org/download/sha256:5c793ce964b312ccbeb3f87f8adba62c31367b95756240b47ee95ddf848a020c/add-on-maze-generator-pro-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/maze-generator-pro/","maintainer":"BasharatLeoGill","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"armature_to_mesh","schema_version":"1.0.0","name":"Armature to Mesh","version":"1.0.2","tagline":"Convert armature bones to a mesh","archive_hash":"sha256:1c3b0eefddab10ac0c3a5d2a5069193eb6d7ba45f8d2c99254335d1cd6dc57f7","archive_size":4719,"archive_url":"https://extensions.blender.org/download/sha256:1c3b0eefddab10ac0c3a5d2a5069193eb6d7ba45f8d2c99254335d1cd6dc57f7/add-on-armature-to-mesh-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/armature-to-mesh/","maintainer":"SamRog94","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Rigging"]},{"id":"bezier_curve_editor","schema_version":"1.0.0","name":"Bezier Curve Editor","version":"1.0.9","tagline":"An editor for editing and applying easing curves","archive_hash":"sha256:ab137f8214bff91a68c9f81521bf7ac231803a3c1278591ccdccc23aee6583fb","archive_size":37823,"archive_url":"https://extensions.blender.org/download/sha256:ab137f8214bff91a68c9f81521bf7ac231803a3c1278591ccdccc23aee6583fb/add-on-bezier-curve-editor-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bezier-curve-editor/","maintainer":"IcedDog","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","User Interface"]},{"id":"simple_camera_match","schema_version":"1.0.0","name":"Simple Camera Match","version":"1.1.3","tagline":"Simple Camera Match - Blender插件","archive_hash":"sha256:844a9f9fc1a194062072c47c239e71c79499b433dd6aa522e2f7bb96630ff849","archive_size":40810,"archive_url":"https://extensions.blender.org/download/sha256:844a9f9fc1a194062072c47c239e71c79499b433dd6aa522e2f7bb96630ff849/add-on-simple-camera-match-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-camera-match/","maintainer":"MingWitty","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","3D View","Scene"]},{"id":"cut_sym","schema_version":"1.0.0","name":"Cut Sym","version":"0.0.3","tagline":"Symmetrically cut mesh objects into two halves","archive_hash":"sha256:e7d6c45ec0e1b64bc1befa7bd9cc9ec57d3e9c6e9113f1b15760fd897d63b593","archive_size":5150,"archive_url":"https://extensions.blender.org/download/sha256:e7d6c45ec0e1b64bc1befa7bd9cc9ec57d3e9c6e9113f1b15760fd897d63b593/add-on-cut-sym-v0.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cut-sym/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"org_eridanus_emotion","schema_version":"1.0.0","name":"E Motion","version":"0.4.0","tagline":"Motion editing and curve manipulation","archive_hash":"sha256:4abfd5552386521577d9ee8905c57fc8ad427621c9853119b06c639032e636a8","archive_size":134027,"archive_url":"https://extensions.blender.org/download/sha256:4abfd5552386521577d9ee8905c57fc8ad427621c9853119b06c639032e636a8/add-on-org-eridanus-emotion-v0.4.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/org-eridanus-emotion/","maintainer":"Eridanus-Epsilon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write bezier presets, cache and trajectory data on disk"},"tags":["Animation","Rigging"]},{"id":"pin_solver","schema_version":"1.0.0","name":"PinSolver","version":"1.1.3","tagline":"Interactive camera alignment","archive_hash":"sha256:60c1c30085bad1dd877ab0fc96b2a5245b680782b8b6cb867952402c8f8c2160","archive_size":40111495,"archive_url":"https://extensions.blender.org/download/sha256:60c1c30085bad1dd877ab0fc96b2a5245b680782b8b6cb867952402c8f8c2160/add-on-pin-solver-v1.1.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pin-solver/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Tracking","Camera","3D View"]},{"id":"max","schema_version":"1.0.0","name":"Max","version":"2.1.0","tagline":"Theme inspired by Max","archive_hash":"sha256:8622e798a6f585258773580b255ef10e325da07c341460f55ebafe90aab5e15b","archive_size":5373,"archive_url":"https://extensions.blender.org/download/sha256:8622e798a6f585258773580b255ef10e325da07c341460f55ebafe90aab5e15b/theme-max-v2.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/max/","maintainer":"Dabidzhi","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"o_oo_math_controller","schema_version":"1.0.0","name":"Math Controller","version":"0.4.8","tagline":"Add math group node that acts according to written formulas","archive_hash":"sha256:f5f60ca30c53c4794c251b8eca14c48f6cfd8e9f12de81be63663c16cb761c4a","archive_size":31880,"archive_url":"https://extensions.blender.org/download/sha256:f5f60ca30c53c4794c251b8eca14c48f6cfd8e9f12de81be63663c16cb761c4a/add-on-o-oo-math-controller-v0.4.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/o-oo-math-controller/","maintainer":"o_oo_gote510","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"transform_tools_core_yiws","schema_version":"1.0.0","name":"Transform Tools Core","version":"0.9.7","tagline":"Advanced gizmo control & precision transformations for Blender","archive_hash":"sha256:b3df6889d59994f6562bc421f5be6b263fb3d9d2f6057cbd4aa92457a9b12a58","archive_size":23454,"archive_url":"https://extensions.blender.org/download/sha256:b3df6889d59994f6562bc421f5be6b263fb3d9d2f6057cbd4aa92457a9b12a58/add-on-transform-tools-core-yiws-v0.9.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/transform-tools-core-yiws/","maintainer":"yasser-idris","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"show_curve_length","schema_version":"1.0.0","name":"Show Curve Length","version":"1.0.0","tagline":"Shows the length of Curve Splines","archive_hash":"sha256:2c47eb86236963878ade7320ddeed43a7ba2939a77b4676f960b0752956ebe45","archive_size":8644,"archive_url":"https://extensions.blender.org/download/sha256:2c47eb86236963878ade7320ddeed43a7ba2939a77b4676f960b0752956ebe45/add-on-show-curve-length-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/show-curve-length/","maintainer":"Giambattista-Caltabiano","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"Decentraland_Theme","schema_version":"1.0.0","name":"Decentraland Theme","version":"1.0.0","tagline":"Deep black theme with Decentraland brand colors","archive_hash":"sha256:3e1165a4850e986bcafbaf888ac43e17b441a1a176ddf1f9406ff8443f6d9e64","archive_size":5681,"archive_url":"https://extensions.blender.org/download/sha256:3e1165a4850e986bcafbaf888ac43e17b441a1a176ddf1f9406ff8443f6d9e64/theme-decentraland-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/decentraland-theme/","maintainer":"Decentraland-Foundation","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"texture_manager","schema_version":"1.0.0","name":"Texture File Path Editor","version":"2.1.0","tagline":"Manage, relink, gather and inspect all texture paths","archive_hash":"sha256:6ebbfb82a808e721775ad42f9fb79005988083a0e9ed32b89c170c1a61abf567","archive_size":14000,"archive_url":"https://extensions.blender.org/download/sha256:6ebbfb82a808e721775ad42f9fb79005988083a0e9ed32b89c170c1a61abf567/add-on-texture-manager-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/texture-manager/","maintainer":"BHiMAX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads and writes texture files from disk"}},{"id":"xbox_controller_camera","schema_version":"1.0.0","name":"Xbox Controller Camera","version":"1.0.0","tagline":"Control the 3D viewport camera with an Xbox controller","archive_hash":"sha256:aedc77bf7fab0aeedfdd1fa5f89371b5a116e41d8e8f31b50cadce389f43a458","archive_size":7872,"archive_url":"https://extensions.blender.org/download/sha256:aedc77bf7fab0aeedfdd1fa5f89371b5a116e41d8e8f31b50cadce389f43a458/add-on-xbox-controller-camera-v1.0.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/xbox-controller-camera/","maintainer":"marie.marthenorman","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["3D View","Camera"]},{"id":"latex_text_generator","schema_version":"1.0.0","name":"LaTeX Text Generator","version":"1.1.0","tagline":"Generate customizable 3D text from LaTeX notation","archive_hash":"sha256:29b57fc18ffb92c2761f2cd697edbd20c2ac1fac2db0d2ac8fa20c5c9f6ff651","archive_size":862848,"archive_url":"https://extensions.blender.org/download/sha256:29b57fc18ffb92c2761f2cd697edbd20c2ac1fac2db0d2ac8fa20c5c9f6ff651/add-on-latex-text-generator-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/latex-text-generator/","maintainer":"katterkie","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import custom font files from disk"},"tags":["Add Curve"]},{"id":"arkit_blendshape_tools","schema_version":"1.0.0","name":"ARKit Blendshape Helper","version":"0.7.5","tagline":"Facilitate the process of working with ARKit blendshapes","archive_hash":"sha256:22564818659cfcbf43e77aaf7628d57c51c090ffcef98b9d44bd18b9e601ee1e","archive_size":6171,"archive_url":"https://extensions.blender.org/download/sha256:22564818659cfcbf43e77aaf7628d57c51c090ffcef98b9d44bd18b9e601ee1e/add-on-arkit-blendshape-tools-v0.7.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/arkit-blendshape-tools/","maintainer":"SummonAngelus","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"sculpt_mask_facesets_tools","schema_version":"1.0.0","name":"Sculpt Mask FaceSets Tools","version":"1.0.0","tagline":"This is a Blender sculpting support tools","archive_hash":"sha256:5846b16d90b6dcda0833a576e725ab8e8b3bbd4bd4d23adf51d4cde7eab409c1","archive_size":11172,"archive_url":"https://extensions.blender.org/download/sha256:5846b16d90b6dcda0833a576e725ab8e8b3bbd4bd4d23adf51d4cde7eab409c1/add-on-sculpt-mask-facesets-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/sculpt-mask-facesets-tools/","maintainer":"Seaway","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt"]},{"id":"decentraland_tools","schema_version":"1.0.0","name":"Decentraland Tools","version":"1.9.0","tagline":"Scenes, Wearables, and Emotes directly in Blender","archive_hash":"sha256:5f1b326cb0909b1041f1d397e6c2fc008088dc07cffda0ce21740273159d271f","archive_size":2320459,"archive_url":"https://extensions.blender.org/download/sha256:5f1b326cb0909b1041f1d397e6c2fc008088dc07cffda0ce21740273159d271f/add-on-decentraland-tools-v1.9.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/decentraland-tools/","maintainer":"Decentraland-Foundation","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export glTF files and Decentraland assets","network":"Open Decentraland documentation URLs in browser"},"tags":["Object","Import-Export"]},{"id":"dynamic_rig_ui","schema_version":"1.0.0","name":"Dynamic Rig UI","version":"1.0.1","tagline":"Dynamic Rig UI driven by bone collections and custom properties","archive_hash":"sha256:688fae94a0b2cfb8c55da4f0208f0aaa8c2d1d926e437c5334b0ef8df3dc39f7","archive_size":33793,"archive_url":"https://extensions.blender.org/download/sha256:688fae94a0b2cfb8c55da4f0208f0aaa8c2d1d926e437c5334b0ef8df3dc39f7/add-on-dynamic-rig-ui-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/dynamic-rig-ui/","maintainer":"Samy_Rodriguez","license":["SPDX:GPL-3.0-or-later"]},{"id":"two_point_ex","schema_version":"1.0.0","name":"Two Point Ex","version":"1.0.0","tagline":"A retro theme inspired by Blender 2.2x and before","archive_hash":"sha256:862589b1ae300cc5d200cdf9f952068e7532641704b058b3e1b6daf20cd55ba4","archive_size":5902,"archive_url":"https://extensions.blender.org/download/sha256:862589b1ae300cc5d200cdf9f952068e7532641704b058b3e1b6daf20cd55ba4/theme-two-point-ex-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/two-point-ex/","maintainer":"eyecandy","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Inspired By"]},{"id":"render_profiler","schema_version":"1.0.0","name":"Render Profiler","version":"0.9.4","tagline":"Profile and analyze Blender render/viewport performance","archive_hash":"sha256:b8c9f95f6d2bd70e6f93ecda2f391b6a39293b3dc06262706f54cbe4e610bbb8","archive_size":38861,"archive_url":"https://extensions.blender.org/download/sha256:b8c9f95f6d2bd70e6f93ecda2f391b6a39293b3dc06262706f54cbe4e610bbb8/add-on-render-profiler-v0.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-profiler/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","System"]},{"id":"gruvbox_green_theme","schema_version":"1.0.0","name":"Gruvbox Green Theme","version":"1.0.1","tagline":"A gruvbox theme that is using aqua / green as the primary color","archive_hash":"sha256:f557ec7c47635202c1a700091f1c35cb931aff8f7c5791200d988f9f3a30e85e","archive_size":6478,"archive_url":"https://extensions.blender.org/download/sha256:f557ec7c47635202c1a700091f1c35cb931aff8f7c5791200d988f9f3a30e85e/theme-gruvbox-green-theme-v1.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/gruvbox-green-theme/","maintainer":"Edin-Spiegel","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"storytools","schema_version":"1.0.0","name":"Storytools - Storyboard Tools","version":"3.3.2","tagline":"Set of tools for Storyboarding and 2D animation","archive_hash":"sha256:39e117d36abdcfe8580294db16bb9198ad1a81f49873c0a38e5752343e2e444b","archive_size":303524,"archive_url":"https://extensions.blender.org/download/sha256:39e117d36abdcfe8580294db16bb9198ad1a81f49873c0a38e5752343e2e444b/add-on-storytools-v3.3.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/storytools/","maintainer":"SamuelBernou","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Grease Pencil","3D View"]},{"id":"batch_texture_converter","schema_version":"1.0.0","name":"Batch Texture Converter","version":"1.1.1","tagline":"Bulk texture conversion with color space and alpha splitting","archive_hash":"sha256:20fc830262828a9fa0fc5225a0bc6b254153b1cd5ec2cd40137a20952d1d9917","archive_size":4410,"archive_url":"https://extensions.blender.org/download/sha256:20fc830262828a9fa0fc5225a0bc6b254153b1cd5ec2cd40137a20952d1d9917/add-on-batch-texture-converter-v1.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/batch-texture-converter/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write local files"},"tags":["Import-Export"]},{"id":"pseudo_rendering_farm","schema_version":"1.0.0","name":"Pseudo Rendering Farm","version":"1.1.1","tagline":"Spawns multiple background processes to render the current file","archive_hash":"sha256:27d5a2528514192c942d9f12f00ee9421df5d33f9ba4c17f4ad9287bbf8ab23f","archive_size":5695,"archive_url":"https://extensions.blender.org/download/sha256:27d5a2528514192c942d9f12f00ee9421df5d33f9ba4c17f4ad9287bbf8ab23f/add-on-pseudo-rendering-farm-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pseudo-rendering-farm/","maintainer":"mklimenko","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to manage output files and temporary benchmark data"},"tags":["Render"]},{"id":"home_builder_5","schema_version":"1.0.0","name":"Home Builder 5","version":"5.1.0","tagline":"Design interior spaces with parametric cabinets","archive_hash":"sha256:cac7209d15f87230ea980632dddf4f9deb885ff7cbc2711cf345bd660391c035","archive_size":24089015,"archive_url":"https://extensions.blender.org/download/sha256:cac7209d15f87230ea980632dddf4f9deb885ff7cbc2711cf345bd660391c035/add-on-home-builder-5-v5.1.0-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/home-builder-5/","maintainer":"AndrewPeel","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/load project files, export PDFs and layouts"},"platforms":["windows-x64"],"tags":["Add Mesh","Scene"]},{"id":"softviz_pro","schema_version":"1.0.0","name":"SoftViz Pro","version":"1.2.0","tagline":"GPU-accelerated heatmap visualizer for Proportional Editing","archive_hash":"sha256:3f84cef289f013863d16b9a80df390e0c24b5b9deb9c094e6f1749bbc9d946f9","archive_size":5456,"archive_url":"https://extensions.blender.org/download/sha256:3f84cef289f013863d16b9a80df390e0c24b5b9deb9c094e6f1749bbc9d946f9/add-on-softviz-pro-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/softviz-pro/","maintainer":"Niels-Couvreur","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","3D View"]},{"id":"theme_property_finder","schema_version":"1.0.0","name":"Theme Property Finder","version":"1.0.0","tagline":"Find and sync theme properties across all editors instantly","archive_hash":"sha256:7fd51c82c5dc21aca4e525cdbae5394c4415e7b44d036639ed33495fac94ef2d","archive_size":4442,"archive_url":"https://extensions.blender.org/download/sha256:7fd51c82c5dc21aca4e525cdbae5394c4415e7b44d036639ed33495fac94ef2d/add-on-theme-property-finder-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/theme-property-finder/","maintainer":"Nanomanpro","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"script_launcher","schema_version":"1.0.0","name":"Script Launcher","version":"1.2.2","tagline":"Manage and run Python scripts from multiple root folders","archive_hash":"sha256:581f512031bd2eced56563ecaaee2216ff54f9a37eb06552cb99086ec02191a2","archive_size":20482,"archive_url":"https://extensions.blender.org/download/sha256:581f512031bd2eced56563ecaaee2216ff54f9a37eb06552cb99086ec02191a2/add-on-script-launcher-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/script-launcher/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Development","Pipeline"]},{"id":"gp_select","schema_version":"1.0.0","name":"Gp Select","version":"1.8.0","tagline":"Grease Pencil,Cutout,Weight,rig,lattice,and Automation toolkit","archive_hash":"sha256:80756bd8e85836cab24a854e788d307cd0f14e2780cfe030567e5824bf80f158","archive_size":70610,"archive_url":"https://extensions.blender.org/download/sha256:80756bd8e85836cab24a854e788d307cd0f14e2780cfe030567e5824bf80f158/add-on-gp-select-v1.8.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/gp-select/","maintainer":"HissatsuClaw","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil","Rigging"]},{"id":"alias_repowered","schema_version":"1.0.0","name":"Alias Repowered","version":"1.0.0","tagline":"Classic theme inspired by Alias Poweranimator","archive_hash":"sha256:b2d913d82657c2b4f5e91eb61d5fe3ed131b2601234714a2b6aefc7adc91a525","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:b2d913d82657c2b4f5e91eb61d5fe3ed131b2601234714a2b6aefc7adc91a525/theme-alias-repowered-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/alias-repowered/","maintainer":"Tetrabunz","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Light"]},{"id":"shapekey_axis_control","schema_version":"1.0.0","name":"ShapeKey Axis Control","version":"4.0.44","tagline":"Control shape keys using a 2D Axis HUD Joystick","archive_hash":"sha256:f5fe28bb6402aa003e2fd238520d80d0ea850c34bb657b3761ef11e019838f3d","archive_size":27009,"archive_url":"https://extensions.blender.org/download/sha256:f5fe28bb6402aa003e2fd238520d80d0ea850c34bb657b3761ef11e019838f3d/add-on-shapekey-axis-control-v4.0.44.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapekey-axis-control/","maintainer":"Axnise","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"e_topology_smooth","schema_version":"1.0.0","name":"E Topology Smooth","version":"2.7.8","tagline":"Mesh topology smoothing with G0-G4 continuity analysis","archive_hash":"sha256:cd781bedfd0c453a40d1a3393b8a0a4ad5f7bb631de60dab2b9312974dedbd2d","archive_size":35864648,"archive_url":"https://extensions.blender.org/download/sha256:cd781bedfd0c453a40d1a3393b8a0a4ad5f7bb631de60dab2b9312974dedbd2d/add-on-e-topology-smooth-v2.7.8-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/e-topology-smooth/","maintainer":"Eridanus-Epsilon","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh","Modeling"]},{"id":"grease_mesh","schema_version":"1.0.0","name":"Grease Mesh","version":"1.0.8","tagline":"Easy toolbox for creating meshes from Grease Pencil","archive_hash":"sha256:3ef23bcfcd2cf46f1c9857c95875d6b2630668d694cc5910e4dea2aeacd1e2fd","archive_size":44826,"archive_url":"https://extensions.blender.org/download/sha256:3ef23bcfcd2cf46f1c9857c95875d6b2630668d694cc5910e4dea2aeacd1e2fd/add-on-grease-mesh-v1.0.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grease-mesh/","maintainer":"Tonis","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Grease Pencil","Modeling"]},{"id":"palette","schema_version":"1.0.0","name":"Palette","version":"1.1.5","tagline":"Load 600+ terminal palettes as complete Blender UI themes","archive_hash":"sha256:bf9563590e4eb6603e3d33bc4dd54bcc272dc3ed28bcd9bffb751e1ec337230c","archive_size":53305,"archive_url":"https://extensions.blender.org/download/sha256:bf9563590e4eb6603e3d33bc4dd54bcc272dc3ed28bcd9bffb751e1ec337230c/add-on-palette-v1.1.5.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/palette/","maintainer":"NXSTYNATE","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Caches themes locally","network":"Downloads color schemes from GitHub repositories"},"tags":["User Interface"]},{"id":"b_onion_skin","schema_version":"1.0.0","name":"B Onion Skin","version":"1.0.0","tagline":"Onion skinning for 3D animation","archive_hash":"sha256:6e976d6e74649431a61224918b7d505da2b5620419e3def201841386c1277fc9","archive_size":10458,"archive_url":"https://extensions.blender.org/download/sha256:6e976d6e74649431a61224918b7d505da2b5620419e3def201841386c1277fc9/add-on-b-onion-skin-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b-onion-skin/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"import_paint_brush","schema_version":"1.0.0","name":"Import Paint Brushes","version":"0.4.0","tagline":"Parsing several brush formats of painting software","archive_hash":"sha256:8757073919c0d49df138f4ebe5c4c126e4a68acdeb4622188637bfc1ca37abdf","archive_size":29373,"archive_url":"https://extensions.blender.org/download/sha256:8757073919c0d49df138f4ebe5c4c126e4a68acdeb4622188637bfc1ca37abdf/add-on-import-paint-brush-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-paint-brush/","maintainer":"chsh2","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import brush files from disk"},"tags":["Import-Export","Paint","Sculpt","Grease Pencil"]},{"id":"EyeZen","schema_version":"1.0.0","name":"Eye Zen","version":"1.0.5","tagline":"A Relaxing Theme","archive_hash":"sha256:3bf968a9f69ab54ab2e98366b8a5aa2e5e597730125885001422eb8a6718f888","archive_size":5732,"archive_url":"https://extensions.blender.org/download/sha256:3bf968a9f69ab54ab2e98366b8a5aa2e5e597730125885001422eb8a6718f888/theme-eyezen-v1.0.5.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/eyezen/","maintainer":"Sekuora","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Print"]},{"id":"sculpt_navigation","schema_version":"1.0.0","name":"Sculpt Navigation","version":"1.0.2","tagline":"ZBrush/3D-Coat style viewport navigation","archive_hash":"sha256:b9c5607fb3e7bf4d199efe55b4025172ec47e5c8e55997ae99ec4de5f11f3c36","archive_size":40766,"archive_url":"https://extensions.blender.org/download/sha256:b9c5607fb3e7bf4d199efe55b4025172ec47e5c8e55997ae99ec4de5f11f3c36/add-on-sculpt-navigation-v1.0.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/sculpt-navigation/","maintainer":"Cuzmic","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Sculpt"]},{"id":"texture_mixer","schema_version":"1.0.0","name":"Texture Mixer","version":"0.1.1","tagline":"Layer-based PBR mixing and texture management","archive_hash":"sha256:b32909cebb5fe5369de8344f38d6ee6f7aca7d8e75305ad168e0002fb2a5971b","archive_size":287099,"archive_url":"https://extensions.blender.org/download/sha256:b32909cebb5fe5369de8344f38d6ee6f7aca7d8e75305ad168e0002fb2a5971b/add-on-texture-mixer-v0.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/texture-mixer/","maintainer":"MoonRaider","license":["SPDX:GPL-3.0-or-later"]},{"id":"poly_copy_paste","schema_version":"1.0.0","name":"Poly Copy Paste","version":"1.1.1","tagline":"Copy / Cut / Paste polygons with Ctrl+C / Ctrl+X / Ctrl+V","archive_hash":"sha256:e6fd3da37dc17ea459a533dc81685044544a2d9dff27f32a8ce8b2aea64d3ad4","archive_size":3499,"archive_url":"https://extensions.blender.org/download/sha256:e6fd3da37dc17ea459a533dc81685044544a2d9dff27f32a8ce8b2aea64d3ad4/add-on-poly-copy-paste-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/poly-copy-paste/","maintainer":"Fisch_Tu","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"blender_source_theme","schema_version":"1.0.0","name":"Source","version":"1.0.0","tagline":"This is a Source Engine Based theme for Blender","archive_hash":"sha256:5a6aaaf773d46c437c98caef00c0dfede6a26d4b2ffdd0853fa099fdfe95ac49","archive_size":6684,"archive_url":"https://extensions.blender.org/download/sha256:5a6aaaf773d46c437c98caef00c0dfede6a26d4b2ffdd0853fa099fdfe95ac49/theme-blender-source-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blender-source-theme/","maintainer":"AeroBuoyancy.source","license":["SPDX:GPL-3.0-or-later"]},{"id":"delete_empty_nla_tracks","schema_version":"1.0.0","name":"NLA Empty Track Cleanup RKNZ","version":"1.2.1","tagline":"Quickly remove all empty NLA tracks","archive_hash":"sha256:7c6a978f237665af5d5e4e102cc2127b6fbfbe5caba16ba7f49f5623e29fd2cd","archive_size":14568,"archive_url":"https://extensions.blender.org/download/sha256:7c6a978f237665af5d5e4e102cc2127b6fbfbe5caba16ba7f49f5623e29fd2cd/add-on-delete-empty-nla-tracks-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/delete-empty-nla-tracks/","maintainer":"Rikokenz","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Cyberpunk_2077_UI","schema_version":"1.0.0","name":"Cyberpunk_2077_UI","version":"3.0.5","tagline":"Dark Crimson Futuristic Dystopian","archive_hash":"sha256:7fb2834a45fc41fd9f7f220be8be913e7af8cd4b0a9e71afdf1d5a31ea0fc851","archive_size":5652,"archive_url":"https://extensions.blender.org/download/sha256:7fb2834a45fc41fd9f7f220be8be913e7af8cd4b0a9e71afdf1d5a31ea0fc851/theme-cyberpunk-2077-ui-v3.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cyberpunk-2077-ui/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"smart_selection_propagation","schema_version":"1.0.0","name":"Smart Selection Propagation","version":"1.0.0","tagline":"Advanced topology-based selection of similar mesh elements","archive_hash":"sha256:e297789ec5d939ad212de504908c143b963108c3bc4c2b28f23a87fccab6da13","archive_size":6632,"archive_url":"https://extensions.blender.org/download/sha256:e297789ec5d939ad212de504908c143b963108c3bc4c2b28f23a87fccab6da13/add-on-smart-selection-propagation-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-selection-propagation/","maintainer":"atrxi","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling","3D View"]},{"id":"ROSE2_theme","schema_version":"1.0.0","name":"theme ROSE","version":"1.0.0","tagline":"Soft pink theme, dark","archive_hash":"sha256:22a391c485c6efc8c7d4dfe060ff17d177d47fcf205abaa0763fc474e609b640","archive_size":6432,"archive_url":"https://extensions.blender.org/download/sha256:22a391c485c6efc8c7d4dfe060ff17d177d47fcf205abaa0763fc474e609b640/theme-rose2-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/rose2-theme/","maintainer":"5Lunes","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"arknights_endfield_theme","schema_version":"1.0.0","name":"Arknights: Endfield","version":"1.0.1","tagline":"Theme inspired by Arknights: Endfield game UI","archive_hash":"sha256:8c151906dba63d9240bb2fa29b0024df03bfd516d5bc665d260d19b7e2de7d52","archive_size":5545,"archive_url":"https://extensions.blender.org/download/sha256:8c151906dba63d9240bb2fa29b0024df03bfd516d5bc665d260d19b7e2de7d52/theme-arknights-endfield-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/arknights-endfield-theme/","maintainer":"RAZUMNO","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"motion_sounds","schema_version":"1.0.0","name":"Motion Sounds","version":"0.9.0","tagline":"Add sounds to your animation based on motion events","archive_hash":"sha256:62f25e1acafc6b4af5389f1b9d4e685ef0cb44062b74bff00ff70e08109d90e0","archive_size":187022,"archive_url":"https://extensions.blender.org/download/sha256:62f25e1acafc6b4af5389f1b9d4e685ef0cb44062b74bff00ff70e08109d90e0/add-on-motion-sounds-v0.9.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/motion-sounds/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"fk_ik_snapping_tools","schema_version":"1.0.0","name":"FK/IK Snapping Tools","version":"1.0.0","tagline":"Seamlessly snap FK controls to IK and vice versa","archive_hash":"sha256:002108bd615d7e54428eac30c42e80215c917e61d904ddbd33da0eb3c84118f2","archive_size":3458,"archive_url":"https://extensions.blender.org/download/sha256:002108bd615d7e54428eac30c42e80215c917e61d904ddbd33da0eb3c84118f2/add-on-fk-ik-snapping-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fk-ik-snapping-tools/","maintainer":"atrxi","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"ThreeMF_io","schema_version":"1.0.0","name":"3MF Import/Export","version":"2.7.4","tagline":"Import and export 3D Manufacturing Format (3MF) files","archive_hash":"sha256:c7ae28365c5080ffc3969b6fe09ab5e91404a334d0a69e097f5aae446326c499","archive_size":348357,"archive_url":"https://extensions.blender.org/download/sha256:c7ae28365c5080ffc3969b6fe09ab5e91404a334d0a69e097f5aae446326c499/add-on-threemf-io-v2.7.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/threemf-io/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"For import and export of 3MF files"},"tags":["Import-Export"]},{"id":"modifier_manager","schema_version":"1.0.0","name":"Modifier Manager","version":"1.0.2","tagline":"Manage your modifiers from right click menu","archive_hash":"sha256:0e03355dba011e705ff220940779f32169080136f625866173e8a79077f87f29","archive_size":11707,"archive_url":"https://extensions.blender.org/download/sha256:0e03355dba011e705ff220940779f32169080136f625866173e8a79077f87f29/add-on-modifier-manager-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/modifier-manager/","maintainer":"KewlSheet","license":["SPDX:GPL-3.0-or-later"]},{"id":"SilhouetteToole","schema_version":"1.0.0","name":"SilhouetteToole","version":"1.9.3","tagline":"One-click viewport silhouette mode","archive_hash":"sha256:3d21f4e70cbc54a5ad89ce8169dcec502cad3d4d5a96c3cbd899ddee1ec82bc9","archive_size":2042,"archive_url":"https://extensions.blender.org/download/sha256:3d21f4e70cbc54a5ad89ce8169dcec502cad3d4d5a96c3cbd899ddee1ec82bc9/add-on-silhouettetoole-v1.9.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/silhouettetoole/","maintainer":"Quinzy","license":["SPDX:GPL-3.0-or-later"]},{"id":"tetrominode","schema_version":"1.0.0","name":"Tetrominode","version":"0.4.6","tagline":"Play Tetris in Blender using Geometry Nodes","archive_hash":"sha256:c0f2fdedf0d3999ac0734992540b50bda5a982a38503097fd9b6521186bced0a","archive_size":254981,"archive_url":"https://extensions.blender.org/download/sha256:c0f2fdedf0d3999ac0734992540b50bda5a982a38503097fd9b6521186bced0a/add-on-tetrominode-v0.4.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tetrominode/","maintainer":"darkstarrd","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Animation"]},{"id":"modular_tree","schema_version":"1.0.0","name":"Modular Tree","version":"5.5.2","tagline":"Procedural node based 3D tree generation","archive_hash":"sha256:3d7f199ef0d6ecb45286ebd89d2f606e64aa22a7f7c66c6fb051ad14fc41cf01","archive_size":3635450,"archive_url":"https://extensions.blender.org/download/sha256:3d7f199ef0d6ecb45286ebd89d2f606e64aa22a7f7c66c6fb051ad14fc41cf01/add-on-modular-tree-v5.5.2-windows-x64.zip","type":"add-on","blender_version_min":"4.3.1","website":"https://extensions.blender.org/add-ons/modular-tree/","maintainer":"Brandyn-Britton","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export pivot painter textures"},"platforms":["windows-x64"],"tags":["Mesh","Add Curve"]},{"id":"Expecto_Patronum_Theme","schema_version":"1.0.0","name":"Expecto_Patronum_Theme","version":"1.1.1","tagline":"Airy Guardian Spirit","archive_hash":"sha256:a9d20299f83a859cdb6c883f31d49b085808f8e24e11e675a7c47260243a7896","archive_size":5763,"archive_url":"https://extensions.blender.org/download/sha256:a9d20299f83a859cdb6c883f31d49b085808f8e24e11e675a7c47260243a7896/theme-expecto-patronum-theme-v1.1.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/expecto-patronum-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"oebs_icon_viewer","schema_version":"1.0.0","name":"OEBS Icon Viewer","version":"1.4.0","tagline":"Browse and Search Blender Icons","archive_hash":"sha256:4e795ee297e73aaec5f6e3c8409241de1854dc6e4b287b474b306f0e043a3042","archive_size":11719,"archive_url":"https://extensions.blender.org/download/sha256:4e795ee297e73aaec5f6e3c8409241de1854dc6e4b287b474b306f0e043a3042/add-on-oebs-icon-viewer-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/oebs-icon-viewer/","maintainer":"Eric-Mwangi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"To copy icon names to the clipboard"},"tags":["Development","System"]},{"id":"easeit","schema_version":"1.0.0","name":"Easeit","version":"1.0.1","tagline":"Quickly apply easing presets to animation keyframes","archive_hash":"sha256:beea61edf4d85ca09c8e7653f893bd9bef25e7aecb7324931522fa2312400c3f","archive_size":60285,"archive_url":"https://extensions.blender.org/download/sha256:beea61edf4d85ca09c8e7653f893bd9bef25e7aecb7324931522fa2312400c3f/add-on-easeit-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easeit/","maintainer":"AndyCuccaro","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"siemen_lens_blender_autotrack","schema_version":"1.0.0","name":"AutoTrack","version":"4.2.0","tagline":"Automatic 3D Tracking and Solving","archive_hash":"sha256:ef38ea45cd918ef704a8f0358c2013a13cc625eaa27e7f0b33d4382e531d1dfb","archive_size":70799,"archive_url":"https://extensions.blender.org/download/sha256:ef38ea45cd918ef704a8f0358c2013a13cc625eaa27e7f0b33d4382e531d1dfb/add-on-siemen-lens-blender-autotrack-v4.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/siemen-lens-blender-autotrack/","maintainer":"Siemen-Lens","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Animation","Compositing","3D View"]},{"id":"node_note","schema_version":"1.0.0","name":"Node Note/节点随记","version":"1.3.0","tagline":"Powerful node notes with text and images/强大的节点图文笔记工具","archive_hash":"sha256:10862308477beaf193562f2ccc6668133d26d9540c4937d59cb66ab22fe9e29d","archive_size":34076,"archive_url":"https://extensions.blender.org/download/sha256:10862308477beaf193562f2ccc6668133d26d9540c4937d59cb66ab22fe9e29d/add-on-node-note-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-note/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import image or use font from disk","clipboard":"Paste text/image from the clipboard and copy text to clipboard"},"tags":["Node"]},{"id":"local_view_collection","schema_version":"1.0.0","name":"Local View by collection","version":"1.0.2","tagline":"Quickly isolate into local view the objects of a collection","archive_hash":"sha256:6f3a2f1d0357b8a236ce46b7adc4e4676655eb65ce451b6bdbc5b2d0d2984de8","archive_size":6670,"archive_url":"https://extensions.blender.org/download/sha256:6f3a2f1d0357b8a236ce46b7adc4e4676655eb65ce451b6bdbc5b2d0d2984de8/add-on-local-view-collection-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/local-view-collection/","maintainer":"D3W3","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object","User Interface"]},{"id":"SimpleMIDI","schema_version":"1.0.0","name":"SimpleMIDI","version":"0.1.14","tagline":"Control object parameters through MIDI Input","archive_hash":"sha256:fb008d8f8788230800b85335d34f2c4e9d1ca4a6e1259b409bd54814690ee688","archive_size":537846,"archive_url":"https://extensions.blender.org/download/sha256:fb008d8f8788230800b85335d34f2c4e9d1ca4a6e1259b409bd54814690ee688/add-on-simplemidi-v0.1.14-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simplemidi/","maintainer":"yadu","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Imports and exports JSON for target maps"},"platforms":["windows-x64"],"tags":["User Interface","Animation"]},{"id":"theme_mockup","schema_version":"1.0.0","name":"Mockup","version":"1.0.0","tagline":"Mockups to use with the (low-fi) Design System components","archive_hash":"sha256:e3588ff217ac36cfab5f0046a6f305b6cd21005a3b6039564169ab070569674e","archive_size":5395,"archive_url":"https://extensions.blender.org/download/sha256:e3588ff217ac36cfab5f0046a6f305b6cd21005a3b6039564169ab070569674e/theme-theme-mockup-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-mockup/","maintainer":"Blender","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","High Contrast"]},{"id":"topology_doctor","schema_version":"1.0.0","name":"Topology Doctor","version":"1.0.0","tagline":"One-click topology analysis and repair assistant","archive_hash":"sha256:79c03ca9c72968c3badfb6ecd2e4aba1fbc6fd8818681c453ddc95ad1f4ad3dd","archive_size":16947,"archive_url":"https://extensions.blender.org/download/sha256:79c03ca9c72968c3badfb6ecd2e4aba1fbc6fd8818681c453ddc95ad1f4ad3dd/add-on-topology-doctor-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/topology-doctor/","maintainer":"Arman-Jangmiri","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Required to copy the topology analysis report text to clipboard"}},{"id":"mio3_flex","schema_version":"1.0.0","name":"Mio3 Flex","version":"1.0.4","tagline":"Reshape meshes into smooth freeform curves using paths","archive_hash":"sha256:bf945d9b3e16c43a7c073367785f0ec7e1fb274283ab31398dd8cd6b66334f05","archive_size":30030,"archive_url":"https://extensions.blender.org/download/sha256:bf945d9b3e16c43a7c073367785f0ec7e1fb274283ab31398dd8cd6b66334f05/add-on-mio3-flex-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mio3-flex/","maintainer":"mio","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"chordsong","schema_version":"1.0.0","name":"Chord Song","version":"1.2.4","tagline":"Vim-like key implementation for Blender","archive_hash":"sha256:ad6de38ea22b923eeb5ebf65d470efa091958d4a0ddcdb976bd6a364e7be149e","archive_size":222321,"archive_url":"https://extensions.blender.org/download/sha256:ad6de38ea22b923eeb5ebf65d470efa091958d4a0ddcdb976bd6a364e7be149e/add-on-chordsong-v1.2.4.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/chordsong/","maintainer":"Cyrill-Vitkovskiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Development"]},{"id":"hdri_lightbrush","schema_version":"1.0.0","name":"HDRI LightBrush","version":"1.0.1","tagline":"Paint HDRIs on 3D sphere for precise studio lighting control","archive_hash":"sha256:2dd62f9b14e0adbeb049c31a26e9b4c36230e6d57140b494c62d2f4d2ed8f5dc","archive_size":144003,"archive_url":"https://extensions.blender.org/download/sha256:2dd62f9b14e0adbeb049c31a26e9b4c36230e6d57140b494c62d2f4d2ed8f5dc/add-on-hdri-lightbrush-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hdri-lightbrush/","maintainer":"CadTamas","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export HDRI files (.exr, .hdr, .jpg, .png)"},"tags":["Lighting","Paint"]},{"id":"ghostview","schema_version":"1.0.0","name":"GhostView","version":"1.0.2","tagline":"Adjust Window Opacity","archive_hash":"sha256:5cdb7039cbed497381072c413152cc571e9a6d37e92364fd2331d864785c7cc2","archive_size":1997,"archive_url":"https://extensions.blender.org/download/sha256:5cdb7039cbed497381072c413152cc571e9a6d37e92364fd2331d864785c7cc2/add-on-ghostview-v1.0.2-windows-x64-windows-arm64-macos-x64-macos-arm64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ghostview/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","windows-arm64","macos-x64","macos-arm64"],"tags":["User Interface","System"]},{"id":"gamepadcontrol","schema_version":"1.0.0","name":"Gamepad Control","version":"0.1.2","tagline":"Use gamepads as input device to control Blender","archive_hash":"sha256:91cd1c62ff1c6f009b15f2058627ca927f91ccc237ad1cfd5b59af71bd04cc62","archive_size":4828055,"archive_url":"https://extensions.blender.org/download/sha256:91cd1c62ff1c6f009b15f2058627ca927f91ccc237ad1cfd5b59af71bd04cc62/add-on-gamepadcontrol-v0.1.2-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/gamepadcontrol/","maintainer":"Frank-Moelendoerp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export settings and controller modes"},"platforms":["windows-x64"],"tags":["System","User Interface"]},{"id":"LightNCreamy","schema_version":"1.0.0","name":"Light N Creamy","version":"1.0.0","tagline":"Modern light and creamy theme","archive_hash":"sha256:928d02674d7730a994fef538991896f42a3581c8ffe7d8cb5dfa60a1023a61f7","archive_size":3828,"archive_url":"https://extensions.blender.org/download/sha256:928d02674d7730a994fef538991896f42a3581c8ffe7d8cb5dfa60a1023a61f7/theme-lightncreamy-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/lightncreamy/","maintainer":"nova3D","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"majik_blender_edu_teacher","schema_version":"1.0.0","name":"Majik Blender Edu","version":"1.1.4","tagline":"Submission integrity tool for educators to verify students' work","archive_hash":"sha256:fc1007990be6653f524611f8c7f1daf8b043dcb0bc55d7fb103d26612786446f","archive_size":3743388,"archive_url":"https://extensions.blender.org/download/sha256:fc1007990be6653f524611f8c7f1daf8b043dcb0bc55d7fb103d26612786446f/add-on-majik-blender-edu-teacher-v1.1.4-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/majik-blender-edu-teacher/","maintainer":"Zelijah","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write keys and logs as JSON for integrity verification","network":"Access required for JSON file analysis"},"platforms":["windows-x64"],"tags":["Pipeline"]},{"id":"PivotTools","schema_version":"1.0.0","name":"Pivot Tools","version":"1.48.13","tagline":"Fast pivot placement with Auto Pick, BBox targets, Saved Pivots","archive_hash":"sha256:c4457381883495799f87d72226140492d101fecadb9f3021309503feb74438f8","archive_size":8530,"archive_url":"https://extensions.blender.org/download/sha256:c4457381883495799f87d72226140492d101fecadb9f3021309503feb74438f8/add-on-pivottools-v1.48.13.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/pivottools/","maintainer":"Quinzy","license":["SPDX:GPL-3.0-or-later"]},{"id":"geo_nodes_guide","schema_version":"1.0.0","name":"Geo Nodes Guide","version":"0.1.0","tagline":"Live documentation and examples for Geometry Nodes","archive_hash":"sha256:4b6c3a38e41845e4af3c48ac96f991023802ec6fb472fb27f1b70252141ed792","archive_size":93537,"archive_url":"https://extensions.blender.org/download/sha256:4b6c3a38e41845e4af3c48ac96f991023802ec6fb472fb27f1b70252141ed792/add-on-geo-nodes-guide-v0.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/geo-nodes-guide/","maintainer":"Addonyte","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface","Geometry Nodes"]},{"id":"linkforge","schema_version":"1.0.0","name":"LinkForge","version":"1.4.4","tagline":"Visual Designer to build and export URDF/XACRO robot models","archive_hash":"sha256:61312b73ce4cabd84e59244a404eaa838ea0818f00c4c94e7ec03d2dc93974c9","archive_size":600768,"archive_url":"https://extensions.blender.org/download/sha256:61312b73ce4cabd84e59244a404eaa838ea0818f00c4c94e7ec03d2dc93974c9/add-on-linkforge-v1.4.4-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/linkforge/","maintainer":"Arouna-Patouossa-Mounchili","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export URDF/XACRO files"},"platforms":["windows-x64"],"tags":["Import-Export","Rigging","Physics","Pipeline"]},{"id":"asset_shelf_shortcut_display","schema_version":"1.0.0","name":"Asset Shelf Shortcut Display","version":"1.0.0","tagline":"Adds a line with hotkey/shortcut of the asset in the shelf","archive_hash":"sha256:8eeb7d53d48732f8fe36fcb22dd4685718d47021f0fec383a35f1f3360a571ad","archive_size":2816,"archive_url":"https://extensions.blender.org/download/sha256:8eeb7d53d48732f8fe36fcb22dd4685718d47021f0fec383a35f1f3360a571ad/add-on-asset-shelf-shortcut-display-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/asset-shelf-shortcut-display/","maintainer":"The-Loose-Spirit","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"retarget","schema_version":"1.0.0","name":"Retarget","version":"5.1.1","tagline":"Retargeting, convert to Rigify, Action Manager, Animation tools","archive_hash":"sha256:1a4e6f379e6a9631b3c34a17d02cf9da9f2cd4b505067460932443a6aa950ed5","archive_size":228598,"archive_url":"https://extensions.blender.org/download/sha256:1a4e6f379e6a9631b3c34a17d02cf9da9f2cd4b505067460932443a6aa950ed5/add-on-retarget-v5.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/retarget/","maintainer":"KBS-DEV","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import FBX file from disk"},"tags":["Animation","Rigging"]},{"id":"lodify_optimizer","schema_version":"1.0.0","name":"LODify","version":"2.9.0","tagline":"Full-Scenario Perf Opt: Textures, Decimation & Viewport Mgmt","archive_hash":"sha256:55fbe2789e591ec0517cb12bcd437c75ec7a245b32356c714941ba2a997a4e62","archive_size":14089942,"archive_url":"https://extensions.blender.org/download/sha256:55fbe2789e591ec0517cb12bcd437c75ec7a245b32356c714941ba2a997a4e62/add-on-lodify-optimizer-v2.9.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lodify-optimizer/","maintainer":"小T_sune","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to read and write texture files for resizing"},"platforms":["windows-x64"],"tags":["Object"]},{"id":"red_velvet_theme","schema_version":"1.0.0","name":"Red Velvet Theme","version":"1.0.0","tagline":"A cosmic red cyberpunk-inspired theme","archive_hash":"sha256:befa1a1df17476ad63283489e5f0ec497a548aacde2889e337b4b390444f0ab7","archive_size":5449,"archive_url":"https://extensions.blender.org/download/sha256:befa1a1df17476ad63283489e5f0ec497a548aacde2889e337b4b390444f0ab7/theme-red-velvet-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/red-velvet-theme/","maintainer":"Thunder-Artist","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful","Inspired By"]},{"id":"Areas_by_Materials","schema_version":"1.0.0","name":"Areas by Materials","version":"1.6.0","tagline":"Displays information about areas of materials in selection","archive_hash":"sha256:55b3fb12411af2e76d28b97b666ec38f77cbad30ccc4d2830b075ec1224aa6c9","archive_size":3609,"archive_url":"https://extensions.blender.org/download/sha256:55b3fb12411af2e76d28b97b666ec38f77cbad30ccc4d2830b075ec1224aa6c9/add-on-areas-by-materials-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/areas-by-materials/","maintainer":"Justinas-Dudenas","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object","User Interface"]},{"id":"outliner_preview","schema_version":"1.0.0","name":"Outliner Model Preview","version":"1.1.7","tagline":"Preview selected model in the Outliner","archive_hash":"sha256:e1b1bff9fb17cd7823635cfa10829adf2debd1d1e8c23d900bcf94092bc9d43f","archive_size":40651,"archive_url":"https://extensions.blender.org/download/sha256:e1b1bff9fb17cd7823635cfa10829adf2debd1d1e8c23d900bcf94092bc9d43f/add-on-outliner-preview-v1.1.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/outliner-preview/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"ftw3dforge_image_projector","schema_version":"1.0.0","name":"FTW3DForge Image Projector","version":"2.1.0","tagline":"Project images onto 3D meshes with real-time preview and baking","archive_hash":"sha256:617174fdbacd5d088f727e257df211836bb8e56a8e133baf2e39ffa937ac8eaf","archive_size":16305,"archive_url":"https://extensions.blender.org/download/sha256:617174fdbacd5d088f727e257df211836bb8e56a8e133baf2e39ffa937ac8eaf/add-on-ftw3dforge-image-projector-v2.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/ftw3dforge-image-projector/","maintainer":"FTW3DForge","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images from disk"},"tags":["UV","Mesh","Import-Export","Material"]},{"id":"smart_box_select","schema_version":"1.0.0","name":"Smart Box Select","version":"1.0.2","tagline":"Box/Lasso select with object activation","archive_hash":"sha256:3256c8631f9fd181e54271f3779eccfa601f014ce7b69154bb283584049172aa","archive_size":3800,"archive_url":"https://extensions.blender.org/download/sha256:3256c8631f9fd181e54271f3779eccfa601f014ce7b69154bb283584049172aa/add-on-smart-box-select-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-box-select/","maintainer":"R4V3N","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View"]},{"id":"splashsurf_studio","schema_version":"1.0.0","name":"Splashsurf Studio","version":"1.0.1","tagline":"Surface reconstruction for particle-based fluid simulations","archive_hash":"sha256:86779180fe173ea75d43d3ff7cd72633b36444ed56b7412f5131f20f22696d9c","archive_size":2732095,"archive_url":"https://extensions.blender.org/download/sha256:86779180fe173ea75d43d3ff7cd72633b36444ed56b7412f5131f20f22696d9c/add-on-splashsurf-studio-v1.0.1-windows-x64.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/splashsurf-studio/","maintainer":"Fabian-Löschner","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Add Mesh","Mesh","Object"]},{"id":"global_copy_nodes","schema_version":"1.0.0","name":"Global Copy Nodes","version":"1.0.5","tagline":"Copy nodes across .blend projects","archive_hash":"sha256:64e8888b98b672b768e5a278c44a50912e2ed228472202306bfcf6fc37c7915e","archive_size":21986,"archive_url":"https://extensions.blender.org/download/sha256:64e8888b98b672b768e5a278c44a50912e2ed228472202306bfcf6fc37c7915e/add-on-global-copy-nodes-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/global-copy-nodes/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires reading & writing node copy buffer to disk"},"tags":["System","Node"]},{"id":"overscan_addon","schema_version":"1.0.0","name":"Overscan Addon","version":"1.1.1","tagline":"Adds Overscan to your renders","archive_hash":"sha256:3c95e0eb67926e0a9d4f546b139aca201d56da18403a021f4dbd4c2964a47ddb","archive_size":6772,"archive_url":"https://extensions.blender.org/download/sha256:3c95e0eb67926e0a9d4f546b139aca201d56da18403a021f4dbd4c2964a47ddb/add-on-overscan-addon-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/overscan-addon/","maintainer":"eknath-kambagiri","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"gizmo_resizer","schema_version":"1.0.0","name":"Gizmo Resizer","version":"2.3.0","tagline":"Resize viewport Gizmo with Numpad keys","archive_hash":"sha256:cbbda09ab73548d968c137beea34fe7bcf34d60ba1f2da6d1fda5f592c2faafe","archive_size":15888,"archive_url":"https://extensions.blender.org/download/sha256:cbbda09ab73548d968c137beea34fe7bcf34d60ba1f2da6d1fda5f592c2faafe/add-on-gizmo-resizer-v2.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gizmo-resizer/","maintainer":"CorentinBileau","license":["SPDX:GPL-3.0-or-later"]},{"id":"Mask_To_Vertex_Color_Pro","schema_version":"1.0.0","name":"MaskToVertexColorPro","version":"2.0.4","tagline":"Mask To VertexColor Pro Tools","archive_hash":"sha256:79eec742a3c6c6d91028f556dec034e26613e44bf3f612dc7ef3579a3a23460a","archive_size":30127,"archive_url":"https://extensions.blender.org/download/sha256:79eec742a3c6c6d91028f556dec034e26613e44bf3f612dc7ef3579a3a23460a/add-on-mask-to-vertex-color-pro-v2.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mask-to-vertex-color-pro/","maintainer":"墨泪MoLei_VFX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images are required as masks"},"tags":["Paint","Material"]},{"id":"b_guides","schema_version":"1.0.0","name":"B Guides","version":"1.0.1","tagline":"composition with guides and rulers for the VSE and 3D Viewport","archive_hash":"sha256:d6ca584e4e52414643f5da441ec87ccde6177e522a4bbce281f9861b67825f57","archive_size":24706,"archive_url":"https://extensions.blender.org/download/sha256:d6ca584e4e52414643f5da441ec87ccde6177e522a4bbce281f9861b67825f57/add-on-b-guides-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b-guides/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","Sequencer"]},{"id":"selection_mode_cycler","schema_version":"1.0.0","name":"Selection Mode Cycler","version":"1.1.0","tagline":"Cycles through mesh selection modes in Edit Mode","archive_hash":"sha256:80a605bad154cec84404fa1f3a5b9db50846912d98fe07b5d790a03843d4ba12","archive_size":1414,"archive_url":"https://extensions.blender.org/download/sha256:80a605bad154cec84404fa1f3a5b9db50846912d98fe07b5d790a03843d4ba12/add-on-selection-mode-cycler-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/selection-mode-cycler/","maintainer":"Lise-2","license":["SPDX:GPL-3.0-or-later"]},{"id":"colornova","schema_version":"1.0.0","name":"COLOR-NOVA // SPECTRAL UV | M-87","version":"1.0.3","tagline":"Essential UV contrast. Absolute clarity for professional focus","archive_hash":"sha256:94647bd18186a01fafa4fe7b7dbb1d530dbb6687929ee72a85f0b7d944652050","archive_size":6344,"archive_url":"https://extensions.blender.org/download/sha256:94647bd18186a01fafa4fe7b7dbb1d530dbb6687929ee72a85f0b7d944652050/theme-colornova-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/colornova/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By","High Contrast","Colorful"]},{"id":"select_similar_geometry","schema_version":"1.0.0","name":"Select Similar Geometry","version":"1.3.0","tagline":"Select objects by percentage of matching vertices","archive_hash":"sha256:549558b40ebcb9135cc6634abaedb5e7fffb8cd901fbc209543e484c79e05d21","archive_size":397646,"archive_url":"https://extensions.blender.org/download/sha256:549558b40ebcb9135cc6634abaedb5e7fffb8cd901fbc209543e484c79e05d21/add-on-select-similar-geometry-v1.3.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/select-similar-geometry/","maintainer":"JuanRomero","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"matgeo","schema_version":"1.0.0","name":"MatGeo","version":"1.0.0","tagline":"Convert Materials to Geometry Nodes","archive_hash":"sha256:8c636cfb2e778681acb09b8222e94284a2a90f5735a4344ab7f6cc3bb6272556","archive_size":9103,"archive_url":"https://extensions.blender.org/download/sha256:8c636cfb2e778681acb09b8222e94284a2a90f5735a4344ab7f6cc3bb6272556/add-on-matgeo-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/matgeo/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Geometry Nodes","Node"]},{"id":"Cross_Select","schema_version":"1.0.0","name":"Cross Select","version":"1.0.9","tagline":"Select scene objects similar like RHINO or CAD","archive_hash":"sha256:ccbb3398ed55e2eca34b16af8e2d6a449b01711f2f912960a62a708b9fd70f9d","archive_size":71100,"archive_url":"https://extensions.blender.org/download/sha256:ccbb3398ed55e2eca34b16af8e2d6a449b01711f2f912960a62a708b9fd70f9d/add-on-cross-select-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cross-select/","maintainer":"RARA","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","3D View","Scene","Node"]},{"id":"Dark_3d","schema_version":"1.0.0","name":"Dark 3d","version":"1.0.0","tagline":"Shaded Buttons","archive_hash":"sha256:85287c4f042cee529776e3307774d0c0084b76b6d1026a3eb4a526119cbe64ad","archive_size":6664,"archive_url":"https://extensions.blender.org/download/sha256:85287c4f042cee529776e3307774d0c0084b76b6d1026a3eb4a526119cbe64ad/theme-dark-3d-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-3d/","maintainer":"SammyTheBest","license":["SPDX:GPL-3.0-or-later"]},{"id":"bone_math","schema_version":"1.0.0","name":"Bone Math","version":"0.1.0","tagline":"Calculate pole angles, plus other bone related math","archive_hash":"sha256:bffa46d552cc35629cededdab661852c6cfaf195224693423343d36233f9be3c","archive_size":4795,"archive_url":"https://extensions.blender.org/download/sha256:bffa46d552cc35629cededdab661852c6cfaf195224693423343d36233f9be3c/add-on-bone-math-v0.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/bone-math/","maintainer":"Xury46","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"surface_diagnostics","schema_version":"1.0.0","name":"Surface Diagnostics","version":"1.4.3","tagline":"Set of tools for diagnosing surface quality","archive_hash":"sha256:962fd2c89467104fae0bf139c1118e079fa7ff65ae8fbf692c741e2ef6c0d103","archive_size":1241115,"archive_url":"https://extensions.blender.org/download/sha256:962fd2c89467104fae0bf139c1118e079fa7ff65ae8fbf692c741e2ef6c0d103/add-on-surface-diagnostics-v1.4.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/surface-diagnostics/","maintainer":"JLBöhm","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View","Geometry Nodes"]},{"id":"sprite_sheet_maker","schema_version":"1.0.0","name":"Sprite Sheet Maker","version":"5.2.3","tagline":"3D to 2D sprite sheet converter with optional pixelation","archive_hash":"sha256:0e4681811e2b54bc9e74cf1d559c75a577e399047432bf09f61c94966aa3e99b","archive_size":7200095,"archive_url":"https://extensions.blender.org/download/sha256:0e4681811e2b54bc9e74cf1d559c75a577e399047432bf09f61c94966aa3e99b/add-on-sprite-sheet-maker-v5.2.3-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/sprite-sheet-maker/","maintainer":"manas-R.-Makde","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Animation","Render"]},{"id":"gather_resources","schema_version":"1.0.0","name":"Gather Resources","version":"0.5.2","tagline":"Collect project media into a local folder","archive_hash":"sha256:455025f49d9ca76e33425cdceb6e30cbe7e1a2cfbb5b0537725c30e2d8257db3","archive_size":10373,"archive_url":"https://extensions.blender.org/download/sha256:455025f49d9ca76e33425cdceb6e30cbe7e1a2cfbb5b0537725c30e2d8257db3/add-on-gather-resources-v0.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gather-resources/","maintainer":"Digital-Art-Freedom","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read project media files and copy them into a local directory"},"tags":["System","Pipeline"]},{"id":"kanagawa","schema_version":"1.0.0","name":"Kanagawa","version":"1.0.2","tagline":"kanagawa.nvim for Blender","archive_hash":"sha256:a8812fbee1f25670d4d3dc9e272e197c99ce40597974cfdb0629ebf4de643004","archive_size":6255,"archive_url":"https://extensions.blender.org/download/sha256:a8812fbee1f25670d4d3dc9e272e197c99ce40597974cfdb0629ebf4de643004/theme-kanagawa-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/kanagawa/","maintainer":"timberlinefpv","license":["SPDX:GPL-3.0-or-later"]},{"id":"cam_tools","schema_version":"1.0.0","name":"Cam Tools","version":"1.2.0","tagline":"Streamlined camera workflow toolkit","archive_hash":"sha256:2523840757e3aef22f5680cace31401194841bddf828b50f4ecdadb810e26a4e","archive_size":17639,"archive_url":"https://extensions.blender.org/download/sha256:2523840757e3aef22f5680cace31401194841bddf828b50f4ecdadb810e26a4e/add-on-cam-tools-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cam-tools/","maintainer":"Akhil_Alukkaran","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"io_scene_owm","schema_version":"1.0.0","name":"OWM Import","version":"3.3.1","tagline":"Import files from the Overwatch extraction tools (DataTool)","archive_hash":"sha256:9b6e6a11ce333504f4a09cbb599e940216133f7007cdbd274f2decfe071d9445","archive_size":279836,"archive_url":"https://extensions.blender.org/download/sha256:9b6e6a11ce333504f4a09cbb599e940216133f7007cdbd274f2decfe071d9445/add-on-io-scene-owm-v3.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-owm/","maintainer":"overtools","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing files from disk"},"tags":["Import-Export"]},{"id":"windows_xp_theme","schema_version":"1.0.0","name":"Windows XP","version":"1.0.3","tagline":"A light theme directly inspired by Windows XP","archive_hash":"sha256:ca44d2ed04de48c14d142eb0104d9abc6591d41447559085622fca424530333e","archive_size":6738,"archive_url":"https://extensions.blender.org/download/sha256:ca44d2ed04de48c14d142eb0104d9abc6591d41447559085622fca424530333e/theme-windows-xp-theme-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/windows-xp-theme/","maintainer":"Alkalide","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Colorful","Inspired By"]},{"id":"ZZZ","schema_version":"1.0.0","name":"ZZZ Theme","version":"1.0.2","tagline":"High-contrast dark theme with Zenless Zone Zero's signature","archive_hash":"sha256:070fce74a8da3a56906da1289cc73afdfe42ab5409b9fbb0418e828653747d86","archive_size":5517,"archive_url":"https://extensions.blender.org/download/sha256:070fce74a8da3a56906da1289cc73afdfe42ab5409b9fbb0418e828653747d86/theme-zzz-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/zzz/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By","High Contrast"]},{"id":"Cyberpunk2077","schema_version":"1.0.0","name":"Cyberpunk 2077","version":"1.2.2","tagline":"A Cyberpunk 2077 theme for Blender","archive_hash":"sha256:ef1b9805013640d1b463f162ff694e152b05a5e6c715154af6b22593d64009ef","archive_size":5852,"archive_url":"https://extensions.blender.org/download/sha256:ef1b9805013640d1b463f162ff694e152b05a5e6c715154af6b22593d64009ef/theme-cyberpunk2077-v1.2.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cyberpunk2077/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"mintLavender","schema_version":"1.0.0","name":"Mint Lavender Chill","version":"1.0.4","tagline":"A Mint lavender theme for Blender with Lo-fi aesthetics","archive_hash":"sha256:f0f94cbdc8c430272abb6b7d0b94b94df7f70421eeeace7314e9c90d598053c5","archive_size":5405,"archive_url":"https://extensions.blender.org/download/sha256:f0f94cbdc8c430272abb6b7d0b94b94df7f70421eeeace7314e9c90d598053c5/theme-mintlavender-v1.0.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/mintlavender/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"sleek_navy","schema_version":"1.0.0","name":"Sleek Navy","version":"1.1.0","tagline":"A clean dark-blue Blender theme","archive_hash":"sha256:4db02ebc9e554c4d07fd7d31c7661062ed8920d7e8dcc471d241af1ece347cf9","archive_size":5549,"archive_url":"https://extensions.blender.org/download/sha256:4db02ebc9e554c4d07fd7d31c7661062ed8920d7e8dcc471d241af1ece347cf9/theme-sleek-navy-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/sleek-navy/","maintainer":"Martel6ix","license":["SPDX:MIT"]},{"id":"multirow","schema_version":"1.0.0","name":"Multirow","version":"1.0.1","tagline":"Text strips with line break","archive_hash":"sha256:c619e40e99055c804c1033d48d851f0415b75ad22a03b1a1922c8c93159317f1","archive_size":4445,"archive_url":"https://extensions.blender.org/download/sha256:c619e40e99055c804c1033d48d851f0415b75ad22a03b1a1922c8c93159317f1/add-on-multirow-v1.0.1.zip","type":"add-on","blender_version_min":"4.4.3","website":"https://extensions.blender.org/add-ons/multirow/","maintainer":"flakmoppen","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer","Text Editor","User Interface"]},{"id":"viewport_camera_positions","schema_version":"1.0.0","name":"Lutaya Viewport Camera","version":"1.0.1","tagline":"Save and switch between camera positions with orthographic views","archive_hash":"sha256:ede7461b4a2d43a0f6f97d17c5d27ef056bc55901608d83dcb46f6c0c832f71b","archive_size":4336,"archive_url":"https://extensions.blender.org/download/sha256:ede7461b4a2d43a0f6f97d17c5d27ef056bc55901608d83dcb46f6c0c832f71b/add-on-viewport-camera-positions-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-camera-positions/","maintainer":"3D_SHVYREV","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load camera position configurations"},"tags":["3D View","Camera"]},{"id":"sequence_loader","schema_version":"1.0.0","name":"Sequence Loader","version":"0.4.0","tagline":"Just-in-time loader for meshio-supported mesh file sequences","archive_hash":"sha256:20c6e8c30cd2c2aa4be1c56817a32562680841c20df0b7a6cff103d543f566ff","archive_size":629459,"archive_url":"https://extensions.blender.org/download/sha256:20c6e8c30cd2c2aa4be1c56817a32562680841c20df0b7a6cff103d543f566ff/add-on-sequence-loader-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sequence-loader/","maintainer":"Stefan-Jeske","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Core functionality to load files from disk"},"tags":["Import-Export"]},{"id":"Studio_Dark","schema_version":"1.0.0","name":"Studio Dark","version":"2.3.5","tagline":"Consistent UI, sharp colors, comfortable contrast, 3 birght lvls","archive_hash":"sha256:1cca72f14819c6b69e2f4c555680bde59a316390be13f5ce0fddd198c3b43d3a","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:1cca72f14819c6b69e2f4c555680bde59a316390be13f5ce0fddd198c3b43d3a/theme-studio-dark-v2.3.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/studio-dark/","maintainer":"3DDinosaur","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"khellstr_light","schema_version":"1.0.0","name":"khellstr light theme","version":"1.0.1","tagline":"Balanced Light Theme for Blender","archive_hash":"sha256:fd1b0e695748382dee2b796e33a2996b98e1573bcd67803e501538158730aefc","archive_size":6567,"archive_url":"https://extensions.blender.org/download/sha256:fd1b0e695748382dee2b796e33a2996b98e1573bcd67803e501538158730aefc/theme-khellstr-light-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/khellstr-light/","maintainer":"khellstr","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"automata_theme","schema_version":"1.0.0","name":"Automata","version":"2.0.0","tagline":"NieR inspired theme","archive_hash":"sha256:7999157fafef87293070f20c98d798e754bf156147cdc753687ffba29bb7a198","archive_size":5950,"archive_url":"https://extensions.blender.org/download/sha256:7999157fafef87293070f20c98d798e754bf156147cdc753687ffba29bb7a198/theme-automata-theme-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/automata-theme/","maintainer":"NSA-Cloud","license":["SPDX:GPL-3.0-or-later"]},{"id":"ani_offset","schema_version":"1.0.0","name":"Ani Offset","version":"3.2.2","tagline":"Propagate pose offsets across selected keyframes","archive_hash":"sha256:6bf4ed70b657094558e0f01616facd761d74d8e7d97b03a55e42cbeec3db3154","archive_size":3526,"archive_url":"https://extensions.blender.org/download/sha256:6bf4ed70b657094558e0f01616facd761d74d8e7d97b03a55e42cbeec3db3154/add-on-ani-offset-v3.2.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/ani-offset/","maintainer":"Drika111","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"asset_optimizer","schema_version":"1.0.0","name":"Game Asset Optimizer","version":"1.0.2","tagline":"Optimize 3D models for Unity and Unreal Engine workflows","archive_hash":"sha256:909b4c1e85e93f5c4aefbdd519d14e05a6435dbd5361301373c84c64c3f7fc2b","archive_size":19580,"archive_url":"https://extensions.blender.org/download/sha256:909b4c1e85e93f5c4aefbdd519d14e05a6435dbd5361301373c84c64c3f7fc2b/add-on-asset-optimizer-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/asset-optimizer/","maintainer":"Sudip-Soni","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export optimized assets for Unity and Unreal Engine"},"tags":["Modeling","Mesh","Pipeline"]},{"id":"k_tools_texture_map_loader","schema_version":"1.0.0","name":"K-Tools: Texture Map Loader","version":"1.5.0","tagline":" An easy way to load Texture Sets in your Shader Material","archive_hash":"sha256:397237f886853b05fb9da2dba1f3f03cd65c172f3b74da9ae227f8584feaca8f","archive_size":1112095,"archive_url":"https://extensions.blender.org/download/sha256:397237f886853b05fb9da2dba1f3f03cd65c172f3b74da9ae227f8584feaca8f/add-on-k-tools-texture-map-loader-v1.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-texture-map-loader/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load Node Groups from disk"},"tags":["Material"]},{"id":"turntable_camera","schema_version":"1.0.0","name":"Turntable Camera","version":"0.1.2","tagline":"Camera Turntable Setup","archive_hash":"sha256:fa20577f3c12d4b6dd05802b7aacf3dd8d433753fc19b3bb8da3adb23ac2b3c5","archive_size":17413,"archive_url":"https://extensions.blender.org/download/sha256:fa20577f3c12d4b6dd05802b7aacf3dd8d433753fc19b3bb8da3adb23ac2b3c5/add-on-turntable-camera-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/turntable-camera/","maintainer":"The_Missing_Field","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"copy_paste_nodes","schema_version":"1.0.0","name":"Copy/Paste Nodes","version":"0.1.6","tagline":"Copy nodes to and from the system clipboard as JSON","archive_hash":"sha256:3c09cea629616ed5c8ad8b4944a5c23eb4a9043931070bdff18ea19d630f5975","archive_size":10745,"archive_url":"https://extensions.blender.org/download/sha256:3c09cea629616ed5c8ad8b4944a5c23eb4a9043931070bdff18ea19d630f5975/add-on-copy-paste-nodes-v0.1.6.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/copy-paste-nodes/","maintainer":"david494","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copy and paste nodes to the clipboard"},"tags":["Node"]},{"id":"mixamo_rig","schema_version":"1.0.0","name":"Mixamo Rig","version":"1.2.2","tagline":"Generate a control rig from Mixamo Fbx skeleton","archive_hash":"sha256:5c59e419355b0b4b5014b7bbcbee4d9a4c38476b8225526e3c904a81b056a191","archive_size":179337,"archive_url":"https://extensions.blender.org/download/sha256:5c59e419355b0b4b5014b7bbcbee4d9a4c38476b8225526e3c904a81b056a191/add-on-mixamo-rig-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.5.999","website":"https://extensions.blender.org/add-ons/mixamo-rig/","maintainer":"tyler.tofu","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Rigging"]},{"id":"time_theme_switcher","schema_version":"1.0.0","name":"Time Theme Switcher","version":"1.0.0","tagline":"Switches between light and dark UI themes at scheduled times","archive_hash":"sha256:0f1d64ae1814f5b2110db105154b7c84343c39648f2196a6d7eeaee8bab95010","archive_size":18346,"archive_url":"https://extensions.blender.org/download/sha256:0f1d64ae1814f5b2110db105154b7c84343c39648f2196a6d7eeaee8bab95010/add-on-time-theme-switcher-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/time-theme-switcher/","maintainer":"CosmoMídias","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read existing themes from disk"},"tags":["User Interface"]},{"id":"img2mat_pro","schema_version":"1.0.0","name":"img2mat_pro","version":"2.0.0","tagline":"Image palettes, PMS matches, and material callouts","archive_hash":"sha256:b365c18e8c132ed1c31643ec6b1c29ccb5b6b3fd62ff911709fd73b5ac8740fe","archive_size":24619,"archive_url":"https://extensions.blender.org/download/sha256:b365c18e8c132ed1c31643ec6b1c29ccb5b6b3fd62ff911709fd73b5ac8740fe/add-on-img2mat-pro-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/img2mat-pro/","maintainer":"stevewarner","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","User Interface","Pipeline"]},{"id":"cad_helper","schema_version":"1.0.0","name":"CAD-Helper","version":"0.7.0","tagline":"Blender Extension to manage imported CAD assemblies","archive_hash":"sha256:f3b569a0cd29d9d96745422d302b1fb94d78c8415e0dffdc73315376f3849fc2","archive_size":44789,"archive_url":"https://extensions.blender.org/download/sha256:f3b569a0cd29d9d96745422d302b1fb94d78c8415e0dffdc73315376f3849fc2/add-on-cad-helper-v0.7.0-windows-x64-macos-arm64-linux-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/cad-helper/","maintainer":"BsIngA","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","macos-arm64","linux-x64"],"tags":["Object"]},{"id":"anim_reviewer","schema_version":"1.0.0","name":"Anim Reviewer","version":"1.1.0","tagline":"Enhance blender playblast capabilities for animation review","archive_hash":"sha256:c0a0fa57ace3f7b947b66c30eb0de9fc2d7ebd36c1915ff5ad96dfea46b7da12","archive_size":1336967,"archive_url":"https://extensions.blender.org/download/sha256:c0a0fa57ace3f7b947b66c30eb0de9fc2d7ebd36c1915ff5ad96dfea46b7da12/add-on-anim-reviewer-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/anim-reviewer/","maintainer":"FhyTan","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save playblast videos in specified output folder"},"tags":["3D View","Animation","Camera","Pipeline"]},{"id":"export_render_as_dng","schema_version":"1.0.0","name":"Export Render as DNG","version":"1.0.3","tagline":"Export renders and images as Bayer-style DNG files","archive_hash":"sha256:a02d2f10564dbcfa599731d957db4daf8573ceac47ba417a7900c0739792ce1a","archive_size":25964,"archive_url":"https://extensions.blender.org/download/sha256:a02d2f10564dbcfa599731d957db4daf8573ceac47ba417a7900c0739792ce1a/add-on-export-render-as-dng-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-render-as-dng/","maintainer":"FloBEAUG","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export DNG to disk"}},{"id":"Origin_move_like_maya","schema_version":"1.0.0","name":"Origin_move_like_maya (Press D)","version":"1.4.0","tagline":"Move pivot independently with snapping and gizmo like maya","archive_hash":"sha256:5e718aa81233aba65fd1aa186cb1588d551da1b21509fa373d75f11e29c17534","archive_size":3563,"archive_url":"https://extensions.blender.org/download/sha256:5e718aa81233aba65fd1aa186cb1588d551da1b21509fa373d75f11e29c17534/add-on-origin-move-like-maya-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/origin-move-like-maya/","maintainer":"deepak756","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling","Mesh"]},{"id":"printing_helper","schema_version":"1.0.0","name":"Printing Helper","version":"0.1.2","tagline":"Set the resolution required for printing more simply","archive_hash":"sha256:3c3a5ea8c40c1cf91c3102b5c7d690ef8ae38a6a562daf4f2200574c2faabeae","archive_size":12655,"archive_url":"https://extensions.blender.org/download/sha256:3c3a5ea8c40c1cf91c3102b5c7d690ef8ae38a6a562daf4f2200574c2faabeae/add-on-printing-helper-v0.1.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/printing-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","Camera"]},{"id":"bh_smart_sym","schema_version":"1.0.0","name":"BH Smart Sym","version":"1.1.2","tagline":"Interactive 3D arrows for quick face symmetrize","archive_hash":"sha256:3c7a058812319863f5137904f2403264b1bba372f5300c04f82ea5fa4dcdc636","archive_size":8737,"archive_url":"https://extensions.blender.org/download/sha256:3c7a058812319863f5137904f2403264b1bba372f5300c04f82ea5fa4dcdc636/add-on-bh-smart-sym-v1.1.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bh-smart-sym/","maintainer":"bogatyr4ik","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"camera_aspect_ratio_guides","schema_version":"1.0.0","name":"Camera Aspect Ratio Guides","version":"2.0.0","tagline":"Professional composition guides with safe areas","archive_hash":"sha256:50bae340eccf1df4cc77e0a2667e08f8ba9f7c894fce9c5854e0f0dd5b29c394","archive_size":11678,"archive_url":"https://extensions.blender.org/download/sha256:50bae340eccf1df4cc77e0a2667e08f8ba9f7c894fce9c5854e0f0dd5b29c394/add-on-camera-aspect-ratio-guides-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"5.5.0","website":"https://extensions.blender.org/add-ons/camera-aspect-ratio-guides/","maintainer":"Prince_Eagle","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Modify compositor nodes for render burn-in"},"tags":["Camera","Render","Compositing"]},{"id":"theme_GoldExperience","schema_version":"1.0.0","name":"Gold Experience","version":"1.0.1","tagline":"A theme if you really like yellow","archive_hash":"sha256:db35f8251ffa5d13b313a05f3032c11a991e2a1dfc786b8765db7351d2e54cdb","archive_size":5811,"archive_url":"https://extensions.blender.org/download/sha256:db35f8251ffa5d13b313a05f3032c11a991e2a1dfc786b8765db7351d2e54cdb/theme-theme-goldexperience-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-goldexperience/","maintainer":"lonku","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Colorful","Inspired By"]},{"id":"catppucin4blender","schema_version":"1.0.0","name":"Catppuccin Theme","version":"5.1.5","tagline":"Catppuccin for Blender","archive_hash":"sha256:07cfa54f72bd154b178e98d4dd49a722de9f35fe2c1104aa214c61116226a875","archive_size":7103,"archive_url":"https://extensions.blender.org/download/sha256:07cfa54f72bd154b178e98d4dd49a722de9f35fe2c1104aa214c61116226a875/theme-catppucin4blender-v5.1.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/catppucin4blender/","maintainer":"Albert-Bici","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark","Colorful"]},{"id":"camerafly","schema_version":"1.0.0","name":"Camerafly","version":"2.1.4","tagline":"Fly around with the Dolly Rig of the Camera Rigs Addon","archive_hash":"sha256:f4557b9a94427680ca9642e734b0b41b428c9b7575f114b31a751fbe6710affe","archive_size":22817,"archive_url":"https://extensions.blender.org/download/sha256:f4557b9a94427680ca9642e734b0b41b428c9b7575f114b31a751fbe6710affe/add-on-camerafly-v2.1.4-windows-x64-windows-arm64-macos-arm64-macos-x64-linux-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camerafly/","maintainer":"MichaelSchieber","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","windows-arm64","macos-arm64","macos-x64","linux-x64"],"tags":["Camera"]},{"id":"face_angle_analyzer","schema_version":"1.0.0","name":"Face Angle Analyzer","version":"8.9.4","tagline":"Measure and visualize face angles against global axes","archive_hash":"sha256:1baab0b6e6ccf88eae5596845af184a14c4fdaac57d192e1be37163aea553bb0","archive_size":6292,"archive_url":"https://extensions.blender.org/download/sha256:1baab0b6e6ccf88eae5596845af184a14c4fdaac57d192e1be37163aea553bb0/add-on-face-angle-analyzer-v8.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/face-angle-analyzer/","maintainer":"Astralis","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View"]},{"id":"rigi_all","schema_version":"1.0.0","name":"Rigi-All","version":"1.6.0","tagline":"Speeds up the Rigify process","archive_hash":"sha256:f8cc4ee95bbb5e9d028459e6f381e7f1255708c5d38b490cf9e754e5f269ecbd","archive_size":154196,"archive_url":"https://extensions.blender.org/download/sha256:f8cc4ee95bbb5e9d028459e6f381e7f1255708c5d38b490cf9e754e5f269ecbd/add-on-rigi-all-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rigi-all/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"Quick_Asset_Saver","schema_version":"1.0.0","name":"Quick Asset Manager","version":"2.1.1","tagline":"Quickly Create, Edit, Organize, or Delete your local asset files","archive_hash":"sha256:7cbe5007e7416b8c82a88ac167ad0193b86d75d291649538f838df240bb7f441","archive_size":80302,"archive_url":"https://extensions.blender.org/download/sha256:7cbe5007e7416b8c82a88ac167ad0193b86d75d291649538f838df240bb7f441/add-on-quick-asset-saver-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-asset-saver/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To read and write to asset library directories"},"tags":["User Interface","System"]},{"id":"bone_widget","schema_version":"1.0.0","name":"Bone Widget","version":"2.3.3","tagline":"Easily Create Bone Widgets","archive_hash":"sha256:782bc123b494fd568b4400735d59d279e23610c4d57a33b3052ceed893726970","archive_size":293994,"archive_url":"https://extensions.blender.org/download/sha256:782bc123b494fd568b4400735d59d279e23610c4d57a33b3052ceed893726970/add-on-bone-widget-v2.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-widget/","maintainer":"WayneDixon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export json and image files from/to disk"},"tags":["Rigging"]},{"id":"toothpaste","schema_version":"1.0.0","name":"ToothPaste (Paste SVGs)","version":"1.1.5","tagline":"Paste SVG from Clipboard as Grease Pencil or Curves","archive_hash":"sha256:ab122c6b6be19062da353b25e8339b847ee12d0c88ed8f39fb5463f52d9e2292","archive_size":122169,"archive_url":"https://extensions.blender.org/download/sha256:ab122c6b6be19062da353b25e8339b847ee12d0c88ed8f39fb5463f52d9e2292/add-on-toothpaste-v1.1.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/toothpaste/","maintainer":"Todor-Hlebarov","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import SVG assets and temporary files for text and image support","clipboard":"Paste SVG data from Clipboard"},"tags":["Grease Pencil","Import-Export"]},{"id":"Bone_Animation_Copy_Tool","schema_version":"1.0.0","name":"Bone Animation Copy Tool","version":"1.1.5","tagline":"Copy animation between armatures using bone constraints","archive_hash":"sha256:88a3155787f7257b4d696d7b84b8a64b68e8ac9f456c4bce79edd129b055a5f2","archive_size":9772,"archive_url":"https://extensions.blender.org/download/sha256:88a3155787f7257b4d696d7b84b8a64b68e8ac9f456c4bce79edd129b055a5f2/add-on-bone-animation-copy-tool-v1.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-animation-copy-tool/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"orbiter","schema_version":"1.0.0","name":"Orbiter","version":"1.1.0","tagline":"Orbit around objects in the viewport","archive_hash":"sha256:a50f42981a2273110cb9af1a508b0573f4e08b21f67bb76c5d91ec6ad4af680a","archive_size":3393,"archive_url":"https://extensions.blender.org/download/sha256:a50f42981a2273110cb9af1a508b0573f4e08b21f67bb76c5d91ec6ad4af680a/add-on-orbiter-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/orbiter/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"spline_generator","schema_version":"1.0.0","name":"Spline Generator","version":"1.0.3","tagline":"Generate parametric spline","archive_hash":"sha256:129cc2a92f5d127bd8d1c15f9766183a1fa25aaa69eda144ef27f47b50315145","archive_size":8307,"archive_url":"https://extensions.blender.org/download/sha256:129cc2a92f5d127bd8d1c15f9766183a1fa25aaa69eda144ef27f47b50315145/add-on-spline-generator-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/spline-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Add Curve"]},{"id":"beautiful_dream","schema_version":"1.0.0","name":"Beautiful Dream","version":"1.0.5","tagline":"This is a variant of Whispering Ripples","archive_hash":"sha256:1348acaf02e162299334e97c05d89a3ed1bfccd5f4263db5ec6d26f9affd55ee","archive_size":5857,"archive_url":"https://extensions.blender.org/download/sha256:1348acaf02e162299334e97c05d89a3ed1bfccd5f4263db5ec6d26f9affd55ee/theme-beautiful-dream-v1.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/beautiful-dream/","maintainer":"KBS-DEV","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"graph_generator","schema_version":"1.0.0","name":"Graph Generator","version":"1.2.2","tagline":"Generate graph between saved keyframes","archive_hash":"sha256:6f8a49aa275a16a70cd75db50d1bbecdc4dc4f0b9d6fd3173a10e7b8967cafe4","archive_size":9526,"archive_url":"https://extensions.blender.org/download/sha256:6f8a49aa275a16a70cd75db50d1bbecdc4dc4f0b9d6fd3173a10e7b8967cafe4/add-on-graph-generator-v1.2.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/graph-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"wisteria","schema_version":"1.0.0","name":"Wisteria","version":"1.0.1","tagline":"Gray with hints of purple","archive_hash":"sha256:d551b27cc0ee87125c02ecc9f22243bf0db7f8f7ffb64a70cca982ecc182a915","archive_size":5690,"archive_url":"https://extensions.blender.org/download/sha256:d551b27cc0ee87125c02ecc9f22243bf0db7f8f7ffb64a70cca982ecc182a915/theme-wisteria-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/wisteria/","maintainer":"cmzw","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"trajectory_anim","schema_version":"1.0.0","name":"Trajectory Anim","version":"1.3.0","tagline":"Animate quickly by drawing trajectory line","archive_hash":"sha256:2cea314d9a7d46e9da8d24d51c7c1f55326c42ef46917a3beecc66ed97bfae83","archive_size":45832,"archive_url":"https://extensions.blender.org/download/sha256:2cea314d9a7d46e9da8d24d51c7c1f55326c42ef46917a3beecc66ed97bfae83/add-on-trajectory-anim-v1.3.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/trajectory-anim/","maintainer":"trisnox","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Analysis_Toolkit","schema_version":"1.0.0","name":"Analysis Toolkit","version":"1.0.1","tagline":"Measurement calculations, illuminance, distance, speed, and more","archive_hash":"sha256:524de12e2a1cb0de369560e7e83aa2a47d45e2ccefdd628d941ebcd23d363823","archive_size":25910,"archive_url":"https://extensions.blender.org/download/sha256:524de12e2a1cb0de369560e7e83aa2a47d45e2ccefdd628d941ebcd23d363823/add-on-analysis-toolkit-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/analysis-toolkit/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","Lighting"]},{"id":"ns_toolkit_mesh_cleanup_pro","schema_version":"1.0.0","name":"NS Toolkit - Mesh Cleanup Pro","version":"1.0.1","tagline":"Professional mesh cleanup with topology visualization tools","archive_hash":"sha256:0d7fa13aae7b308929ffd16d4bfc84a9a8dce03fecfd7df152f4ee434646792e","archive_size":9410,"archive_url":"https://extensions.blender.org/download/sha256:0d7fa13aae7b308929ffd16d4bfc84a9a8dce03fecfd7df152f4ee434646792e/add-on-ns-toolkit-mesh-cleanup-pro-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ns-toolkit-mesh-cleanup-pro/","maintainer":"nandur","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"OLED","schema_version":"1.0.0","name":"OLED","version":"1.0.2","tagline":"OLED theme for Blender","archive_hash":"sha256:b339a87acdc222758ce501b57fe534e06154e3791aeba471c86b742138cf6cca","archive_size":5884,"archive_url":"https://extensions.blender.org/download/sha256:b339a87acdc222758ce501b57fe534e06154e3791aeba471c86b742138cf6cca/theme-oled-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/oled/","maintainer":"NARZ","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"CYNexusLX490","schema_version":"1.0.0","name":"CyanoNexus LX490","version":"1.0.1","tagline":"Stellar-grade Blender theme – tri-spectrum of CyanoNexus LX490","archive_hash":"sha256:8ea816a51657ede592156a97f26568ca0edcf6a1466e57d23947e0d1146899f9","archive_size":6218,"archive_url":"https://extensions.blender.org/download/sha256:8ea816a51657ede592156a97f26568ca0edcf6a1466e57d23947e0d1146899f9/theme-cynexuslx490-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cynexuslx490/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"editorbar","schema_version":"1.0.0","name":"EditorBar","version":"0.4.8","tagline":"Turn Outliner & Properties editors into a toggleable sidebar","archive_hash":"sha256:3cce7a702ba5d31f7f77f2d9bd64d335a1e134e53d2b29206b13476164edaa51","archive_size":25117,"archive_url":"https://extensions.blender.org/download/sha256:3cce7a702ba5d31f7f77f2d9bd64d335a1e134e53d2b29206b13476164edaa51/add-on-editorbar-v0.4.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/editorbar/","maintainer":"atetraxx","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"k_tools_render_preset_manager","schema_version":"1.0.0","name":"K-Tools: Render Preset Manager","version":"1.3.1","tagline":"Save and Load Blender's Settings","archive_hash":"sha256:c2e2224553c604028b4715cb84bdc726b5a60cd1bf375757c4a9ff51bbf459f0","archive_size":92218,"archive_url":"https://extensions.blender.org/download/sha256:c2e2224553c604028b4715cb84bdc726b5a60cd1bf375757c4a9ff51bbf459f0/add-on-k-tools-render-preset-manager-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-render-preset-manager/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export .JSON text files from/to disk"},"tags":["Render"]},{"id":"manage_file_paths","schema_version":"1.0.0","name":"Manage File Paths","version":"1.0.1","tagline":"A list of image file paths with indicators for missing files","archive_hash":"sha256:934b305fd815c3d3d82f26dbc1bf4a72fa5680df3941e261b42f6e5fe1f38906","archive_size":3273,"archive_url":"https://extensions.blender.org/download/sha256:934b305fd815c3d3d82f26dbc1bf4a72fa5680df3941e261b42f6e5fe1f38906/add-on-manage-file-paths-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/manage-file-paths/","maintainer":"GregZaal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Check if image files exist on disk"},"tags":["Material","System"]},{"id":"import_meshed_alpha","schema_version":"1.0.0","name":"Import Meshed Alpha","version":"1.0.2","tagline":"Transparency to Geometry","archive_hash":"sha256:e04d8dd1855ec6a1b081b37032241f6ef3519f11ff683e3e837e4b95e88e9924","archive_size":1809862,"archive_url":"https://extensions.blender.org/download/sha256:e04d8dd1855ec6a1b081b37032241f6ef3519f11ff683e3e837e4b95e88e9924/add-on-import-meshed-alpha-v1.0.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-meshed-alpha/","maintainer":"The_Missing_Field","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Image import"},"platforms":["windows-x64"],"tags":["Mesh","Material"]},{"id":"matcolex","schema_version":"1.0.0","name":"MatColeX","version":"1.7.8","tagline":"Collect, Organize, and Apply Shaders from Your 3D View","archive_hash":"sha256:6b742fd6b14bd16df4a9ff182d73d83b07a2fa6e34780e968114d867d2acb6d5","archive_size":9589,"archive_url":"https://extensions.blender.org/download/sha256:6b742fd6b14bd16df4a9ff182d73d83b07a2fa6e34780e968114d867d2acb6d5/add-on-matcolex-v1.7.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/matcolex/","maintainer":"budijozz","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","3D View","Modeling"]},{"id":"blender_dark_aero_theme","schema_version":"1.0.0","name":"Dark Aero","version":"1.0.0","tagline":"This is a Dark Aero Theme for Blender","archive_hash":"sha256:dd91b8fee851865a4e2441bb32cd44003acf85e919f128b477666b3cacbdf8ca","archive_size":7696,"archive_url":"https://extensions.blender.org/download/sha256:dd91b8fee851865a4e2441bb32cd44003acf85e919f128b477666b3cacbdf8ca/theme-blender-dark-aero-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/blender-dark-aero-theme/","maintainer":"AeroBuoyancy.source","license":["SPDX:GPL-3.0-or-later"]},{"id":"nurbs2mesh","schema_version":"1.0.0","name":"NURBS2Mesh","version":"1.0.3","tagline":"Auto-updating mesh copies from NURBS/Curves","archive_hash":"sha256:6c6d4c2a248679c2f5fbeb3227647baced5bbca6fd23df4e4b8a5b622dd61a35","archive_size":9718,"archive_url":"https://extensions.blender.org/download/sha256:6c6d4c2a248679c2f5fbeb3227647baced5bbca6fd23df4e4b8a5b622dd61a35/add-on-nurbs2mesh-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nurbs2mesh/","maintainer":"Brrainz","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"curve_generator","schema_version":"1.0.0","name":"Curve Generator","version":"1.2.1","tagline":"Generate float curves","archive_hash":"sha256:041ae75e03c1d0988b9c4cf0064654b26234b1dca3dbf8f2eea6307aa2b6adac","archive_size":6289,"archive_url":"https://extensions.blender.org/download/sha256:041ae75e03c1d0988b9c4cf0064654b26234b1dca3dbf8f2eea6307aa2b6adac/add-on-curve-generator-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/curve-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes","Add Curve"]},{"id":"true_roboanimator","schema_version":"1.0.0","name":"True RoboAnimator","version":"1.0.1","tagline":"Robot motion to wheel RPM with CSV export","archive_hash":"sha256:f7fd9db315107b46866da3bdafc33a5faf41bdf208f02f7a1dc4be162a415606","archive_size":18055,"archive_url":"https://extensions.blender.org/download/sha256:f7fd9db315107b46866da3bdafc33a5faf41bdf208f02f7a1dc4be162a415606/add-on-true-roboanimator-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/true-roboanimator/","maintainer":"danyal-sarfraz","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write CSV and animation data files"}},{"id":"MaterialHelper","schema_version":"1.0.0","name":"MaterialHelper","version":"1.4.8","tagline":"Make local asset manager your place to create powerful materials","archive_hash":"sha256:e00593caa244175bc415fdfa2dea1236810e0f434ab37c850d751a11fbed8052","archive_size":3926415,"archive_url":"https://extensions.blender.org/download/sha256:e00593caa244175bc415fdfa2dea1236810e0f434ab37c850d751a11fbed8052/add-on-materialhelper-v1.4.8.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/materialhelper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load preview material file/Access and modify asset catalog file"},"tags":["3D View","Material"]},{"id":"lutiy_timeline","schema_version":"1.0.0","name":"Lutiy Timeline","version":"1.0.1","tagline":"Save and switch between camera frame range","archive_hash":"sha256:7a10d287ecbbb955861d09ae436d12fa9e72f143bef625b1fb0e36dd1748e3bb","archive_size":3790,"archive_url":"https://extensions.blender.org/download/sha256:7a10d287ecbbb955861d09ae436d12fa9e72f143bef625b1fb0e36dd1748e3bb/add-on-lutiy-timeline-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lutiy-timeline/","maintainer":"3D_SHVYREV","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load preset configurations"},"tags":["Animation","Camera","Scene"]},{"id":"py_btn_box","schema_version":"1.0.0","name":"PyBtnBox","version":"5.1.0","tagline":"Use Button To Execute Script","archive_hash":"sha256:064fe1faa509be5bd44f5d0e9b11970e2035508156ba7b2860e8f434c459eeaf","archive_size":14035,"archive_url":"https://extensions.blender.org/download/sha256:064fe1faa509be5bd44f5d0e9b11970e2035508156ba7b2860e8f434c459eeaf/add-on-py-btn-box-v5.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/py-btn-box/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Need to sync button data from python/json files and folder"},"tags":["System"]},{"id":"mesh_attribute_utils","schema_version":"1.0.0","name":"Mesh Attribute Utils","version":"0.2.0","tagline":"Easily view and edit custom mesh attributes","archive_hash":"sha256:e62f38ee324ba6983ce8963358bc06a9570bca9da8ffa2f38f8f653c23365211","archive_size":8347,"archive_url":"https://extensions.blender.org/download/sha256:e62f38ee324ba6983ce8963358bc06a9570bca9da8ffa2f38f8f653c23365211/add-on-mesh-attribute-utils-v0.2.0.zip","type":"add-on","blender_version_min":"4.5.3","website":"https://extensions.blender.org/add-ons/mesh-attribute-utils/","maintainer":"Hannah-Pascal-Noël","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"theme_updater","schema_version":"1.0.0","name":"Theme Updater","version":"1.0.0","tagline":"Update themes from 4.5 LTS to 5.0","archive_hash":"sha256:b376af83f16f0b089690d87a2b8d1dfaeeaa11578ac9a9ff8214d5e4a0308a21","archive_size":5066,"archive_url":"https://extensions.blender.org/download/sha256:b376af83f16f0b089690d87a2b8d1dfaeeaa11578ac9a9ff8214d5e4a0308a21/add-on-theme-updater-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/theme-updater/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"rotor","schema_version":"1.0.0","name":"rotor","version":"2.2.0","tagline":"rotor","archive_hash":"sha256:14c0f05a311c5e60513de355274e7aada4e449b1831e530de0e82e1d9572bc62","archive_size":71356,"archive_url":"https://extensions.blender.org/download/sha256:14c0f05a311c5e60513de355274e7aada4e449b1831e530de0e82e1d9572bc62/add-on-rotor-v2.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/rotor/","maintainer":"niewinny","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View","Mesh"]},{"id":"Blockout","schema_version":"1.0.0","name":"Blockout","version":"1.5.1","tagline":"Blockout","archive_hash":"sha256:7de7d28e969c5fce5feb9589185f8c8f042cc09e1d41e23f640b936e6dc76ed6","archive_size":179732,"archive_url":"https://extensions.blender.org/download/sha256:7de7d28e969c5fce5feb9589185f8c8f042cc09e1d41e23f640b936e6dc76ed6/add-on-blockout-v1.5.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/blockout/","maintainer":"niewinny","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing node group from disk"},"tags":["Modeling","3D View","Mesh"]},{"id":"geo_bake_batch","schema_version":"1.0.0","name":"Geo Bake Batch","version":"0.0.1","tagline":"Batch tools for Geometry Nodes baking","archive_hash":"sha256:5390dc3576d9fefecd1d048d62041e10f3534e29de64d8ede8c19c63db18bf39","archive_size":2570,"archive_url":"https://extensions.blender.org/download/sha256:5390dc3576d9fefecd1d048d62041e10f3534e29de64d8ede8c19c63db18bf39/add-on-geo-bake-batch-v0.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/geo-bake-batch/","maintainer":"Artyom-Pankratov","license":["SPDX:GPL-3.0-or-later"]},{"id":"restart","schema_version":"1.0.0","name":"Restart","version":"1.0.2","tagline":"Restart Blender","archive_hash":"sha256:35f410b9964af45d4c5becb8048e29e417a485bc371d26e23700ccd5fbba409c","archive_size":2824,"archive_url":"https://extensions.blender.org/download/sha256:35f410b9964af45d4c5becb8048e29e417a485bc371d26e23700ccd5fbba409c/add-on-restart-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/restart/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"camera_sensor_database","schema_version":"1.0.0","name":"Camera Sensor Database","version":"1.0.1","tagline":"Provides a database of camera sensors to choose from in Blender","archive_hash":"sha256:32004b0e9484005e64f5679b470706fc1fb051ee083e7636860edcd2c1d8acd9","archive_size":18406,"archive_url":"https://extensions.blender.org/download/sha256:32004b0e9484005e64f5679b470706fc1fb051ee083e7636860edcd2c1d8acd9/add-on-camera-sensor-database-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camera-sensor-database/","maintainer":"Manuel-Houben","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To save the sensor database locally","network":"To download the latest sensor database"},"tags":["Camera"]},{"id":"collection_switcher","schema_version":"1.0.0","name":"Collection Switcher","version":"1.4.0","tagline":"Switch visibility between sub-collections in switchers","archive_hash":"sha256:dbdfecad5e8051a1bd8a8005200ff91c37dab4fb3ffc489d66859be1454519e9","archive_size":1124111,"archive_url":"https://extensions.blender.org/download/sha256:dbdfecad5e8051a1bd8a8005200ff91c37dab4fb3ffc489d66859be1454519e9/add-on-collection-switcher-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/collection-switcher/","maintainer":"Valentin-Komkov","license":["SPDX:GPL-3.0-or-later"]},{"id":"stb_section_toolbox","schema_version":"1.0.0","name":"Section Toolbox","version":"0.0.2","tagline":"Parametric section box and planar cuts with SVG DXF export","archive_hash":"sha256:93dd3b52321132a6c44cfdf0a738628fc156fba3d06d5f8d57fd2f189447f3f7","archive_size":30173,"archive_url":"https://extensions.blender.org/download/sha256:93dd3b52321132a6c44cfdf0a738628fc156fba3d06d5f8d57fd2f189447f3f7/add-on-stb-section-toolbox-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stb-section-toolbox/","maintainer":"Victor-Calixto","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export SVG and DXF to disk"},"tags":["Modeling","Mesh","Import-Export","Object"]},{"id":"uv_maps_plus","schema_version":"1.0.0","name":"UV Maps+","version":"2026.1.2","tagline":"Reorder UV Maps, Copy/Paste UVs, and exceed the 8-map limit","archive_hash":"sha256:a85d5e6b619544489c39c0b6208a5012907877f0a8c71931d5f9bae813e0e318","archive_size":18036,"archive_url":"https://extensions.blender.org/download/sha256:a85d5e6b619544489c39c0b6208a5012907877f0a8c71931d5f9bae813e0e318/add-on-uv-maps-plus-v2026.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/uv-maps-plus/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","User Interface"]},{"id":"parallax_node","schema_version":"1.0.0","name":"Parallax Node","version":"1.1.3","tagline":"Adds parallax node for shader nodes","archive_hash":"sha256:6f196f5aeb175b28c1d5cd0b4b674c8b2c2ae394bef5dfe6f87bf6687ca4e821","archive_size":12716,"archive_url":"https://extensions.blender.org/download/sha256:6f196f5aeb175b28c1d5cd0b4b674c8b2c2ae394bef5dfe6f87bf6687ca4e821/add-on-parallax-node-v1.1.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/parallax-node/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"easy_driver","schema_version":"1.0.0","name":"Easy Driver","version":"1.5.2","tagline":"Technical rigging made easier","archive_hash":"sha256:85709b0be7bef891c778484d8182caf4869b32767cf28ab95275d17a219a0d55","archive_size":40933,"archive_url":"https://extensions.blender.org/download/sha256:85709b0be7bef891c778484d8182caf4869b32767cf28ab95275d17a219a0d55/add-on-easy-driver-v1.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easy-driver/","maintainer":"NeoEmberArt","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"hifi_builder","schema_version":"1.0.0","name":"HiFi Architecture Builder v4.5.8","version":"4.5.8","tagline":"One-click architecture, and game engine prep tool","archive_hash":"sha256:509a885bee9c0a8c9949a3f0899dbcd8e4b26c6aa08b7d5b7d20ec2e88404cd5","archive_size":101569,"archive_url":"https://extensions.blender.org/download/sha256:509a885bee9c0a8c9949a3f0899dbcd8e4b26c6aa08b7d5b7d20ec2e88404cd5/add-on-hifi-builder-v4.5.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hifi-builder/","maintainer":"Malik-Nomi","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","Modeling","Game Engine","Animation"]},{"id":"secondary_language","schema_version":"1.0.0","name":"Secondary Language","version":"1.1.0","tagline":"Quickly switch to secondary language","archive_hash":"sha256:f4fca123ca687c2b2977fdcef6157718d47d4bae15970ff3e90064948abd6049","archive_size":3939,"archive_url":"https://extensions.blender.org/download/sha256:f4fca123ca687c2b2977fdcef6157718d47d4bae15970ff3e90064948abd6049/add-on-secondary-language-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/secondary-language/","maintainer":"mdlt7z","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"driver_helper","schema_version":"1.0.0","name":"DriverHelper","version":"1.0.1","tagline":"Helps generate driver formulas in the Shape Keys panel","archive_hash":"sha256:5e6937bfd83777793ecc35c0c52351bd45ff842d76fe5914f2c5df9f609d3149","archive_size":2152,"archive_url":"https://extensions.blender.org/download/sha256:5e6937bfd83777793ecc35c0c52351bd45ff842d76fe5914f2c5df9f609d3149/add-on-driver-helper-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/driver-helper/","maintainer":"Zakmen150","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"format_rename","schema_version":"1.0.0","name":"Format Rename","version":"0.0.6","tagline":"Format Rename","archive_hash":"sha256:389000c6503f93d27a2506860690573d1155ada0571d834420da1b1bd11ba5ee","archive_size":19668,"archive_url":"https://extensions.blender.org/download/sha256:389000c6503f93d27a2506860690573d1155ada0571d834420da1b1bd11ba5ee/add-on-format-rename-v0.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/format-rename/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"NieR_Automata","schema_version":"1.0.0","name":"YorHa - Operator","version":"1.1.0","tagline":"A Dark Version Of Nier Automata Ui inspired by YorHa-Operator","archive_hash":"sha256:37142058b557023d2d7bd00556c7ddaa53effadc124d7a8576a76383b98c39a1","archive_size":5484,"archive_url":"https://extensions.blender.org/download/sha256:37142058b557023d2d7bd00556c7ddaa53effadc124d7a8576a76383b98c39a1/theme-nier-automata-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/nier-automata/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"layer_comp","schema_version":"1.0.0","name":"LayerComp","version":"1.1.9","tagline":"Layer-based compositing tool, similar to After Effects","archive_hash":"sha256:08a66a76ed4d82825968d5b8c7a5276ca37e51929d801ad666ea78f9d9a0c0f1","archive_size":554503,"archive_url":"https://extensions.blender.org/download/sha256:08a66a76ed4d82825968d5b8c7a5276ca37e51929d801ad666ea78f9d9a0c0f1/add-on-layer-comp-v1.1.9.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/layer-comp/","maintainer":"KENKEN","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export Blend file from/to disk"},"tags":["Compositing","Node","Render"]},{"id":"select_123","schema_version":"1.0.0","name":"123 Select","version":"1.0.0","tagline":"Switch vertex edge face in Object Mode","archive_hash":"sha256:d2e9f6103ae21032457a7446e69d0739db1ec7484ed632f43e528ace040fed69","archive_size":2138,"archive_url":"https://extensions.blender.org/download/sha256:d2e9f6103ae21032457a7446e69d0739db1ec7484ed632f43e528ace040fed69/add-on-select-123-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/select-123/","maintainer":"Fisch_Tu","license":["SPDX:GPL-3.0-or-later"]},{"id":"ramp_generator","schema_version":"1.0.0","name":"Ramp Generator","version":"1.4.3","tagline":"Generate color ramps","archive_hash":"sha256:66bdec66a8260ec4bdf3341d059ff5e99d34b24a9e67f53c4897b1a27675a38c","archive_size":3932,"archive_url":"https://extensions.blender.org/download/sha256:66bdec66a8260ec4bdf3341d059ff5e99d34b24a9e67f53c4897b1a27675a38c/add-on-ramp-generator-v1.4.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ramp-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes","Compositing"]},{"id":"Timelapse_extension","schema_version":"1.0.0","name":"Timelapse","version":"1.0.1","tagline":"Take timed screenshots inside Blender","archive_hash":"sha256:c222a4fdd80114eeac3d556b9c4934f9f38382e25c00115fad1ebed9097474d1","archive_size":3049,"archive_url":"https://extensions.blender.org/download/sha256:c222a4fdd80114eeac3d556b9c4934f9f38382e25c00115fad1ebed9097474d1/add-on-timelapse-extension-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.1","website":"https://extensions.blender.org/add-ons/timelapse-extension/","maintainer":"Silky-Renders","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export png/jpeg to disk"},"tags":["System"]},{"id":"blender_frutiger_aero_theme","schema_version":"1.0.0","name":"Frutiger Aero","version":"1.1.3","tagline":"This is a Frutiger Aero Theme for Blender","archive_hash":"sha256:55211f98e8097958a59f34af945f4a16ce490025f4b50c8edf939aa53b009f11","archive_size":6989,"archive_url":"https://extensions.blender.org/download/sha256:55211f98e8097958a59f34af945f4a16ce490025f4b50c8edf939aa53b009f11/theme-blender-frutiger-aero-theme-v1.1.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blender-frutiger-aero-theme/","maintainer":"AeroBuoyancy.source","license":["SPDX:GPL-3.0-or-later"]},{"id":"markcam","schema_version":"1.0.0","name":"MarkCam","version":"2.5.0","tagline":"Quick camera-from-view + timeline marker tools","archive_hash":"sha256:e77094449c22c6b3d97280fb4b95ee456fd16c9677c14e2fd36aaf3c5fd4cebd","archive_size":6762,"archive_url":"https://extensions.blender.org/download/sha256:e77094449c22c6b3d97280fb4b95ee456fd16c9677c14e2fd36aaf3c5fd4cebd/add-on-markcam-v2.5.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/markcam/","maintainer":"SomRender","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Animation"]},{"id":"Work_n_rose","schema_version":"1.0.0","name":"Work_n_rose","version":"1.5.0","tagline":"Dark Mood, 4thegoat","archive_hash":"sha256:6c1622ccf5e23b713a6eed923ebf8b771ec8cdd18d42ec54f9f6cc0b032a0122","archive_size":6148,"archive_url":"https://extensions.blender.org/download/sha256:6c1622ccf5e23b713a6eed923ebf8b771ec8cdd18d42ec54f9f6cc0b032a0122/theme-work-n-rose-v1.5.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/work-n-rose/","maintainer":"Nois3G4te","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"stroke_material_display","schema_version":"1.0.0","name":"Stroke Material Display","version":"1.0.1","tagline":"Display material names of selected Grease Pencil strokes","archive_hash":"sha256:807cb0171624b4fbb0960fd3f2ad455bb4611fd9fbd90b3c52cef01107019317","archive_size":3088,"archive_url":"https://extensions.blender.org/download/sha256:807cb0171624b4fbb0960fd3f2ad455bb4611fd9fbd90b3c52cef01107019317/add-on-stroke-material-display-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/stroke-material-display/","maintainer":"JohnNyquist","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil"]},{"id":"spa_sequencer","schema_version":"1.0.0","name":"SPArk Sequencer","version":"0.1.6","tagline":"Toolset to improve the sequence workflow in Blender","archive_hash":"sha256:2f9ea5309e0f0778d775c896b2b575fadaab20df993c7d453c11704697180b1a","archive_size":73645,"archive_url":"https://extensions.blender.org/download/sha256:2f9ea5309e0f0778d775c896b2b575fadaab20df993c7d453c11704697180b1a/add-on-spa-sequencer-v0.1.6.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/spa-sequencer/","maintainer":"TinyNick","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"compositor_file_output_replacer","schema_version":"1.0.0","name":"Compositor File Output Replacer","version":"1.3.0","tagline":"Find and replace text in File Output node paths","archive_hash":"sha256:fc5ba89eb189670904813d758c2913c22ed3e66f830fc0ba01333ce8c46c8757","archive_size":3158,"archive_url":"https://extensions.blender.org/download/sha256:fc5ba89eb189670904813d758c2913c22ed3e66f830fc0ba01333ce8c46c8757/add-on-compositor-file-output-replacer-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/compositor-file-output-replacer/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Node"]},{"id":"miunau_slcamera","schema_version":"1.0.0","name":"Second Life-style camera","version":"1.0.4","tagline":"Second Life-style camera with ALT (option)/CTRL/SHIFT keys","archive_hash":"sha256:e52827160361d2ea0b1c7cdf8603879df1b604dada91e2535d0a17abfe5a8e06","archive_size":19907,"archive_url":"https://extensions.blender.org/download/sha256:e52827160361d2ea0b1c7cdf8603879df1b604dada91e2535d0a17abfe5a8e06/add-on-miunau-slcamera-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/miunau-slcamera/","maintainer":"miunau","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"render_notifications_extension","schema_version":"1.0.0","name":"Render Notifications","version":"1.3.0","tagline":"Notifies you via Discord, desktop, or webhook on render events","archive_hash":"sha256:d434cf139c1797966ab6b7cd54181f46ab0b323f4f27995f2155260511985649","archive_size":5698228,"archive_url":"https://extensions.blender.org/download/sha256:d434cf139c1797966ab6b7cd54181f46ab0b323f4f27995f2155260511985649/add-on-render-notifications-extension-v1.3.0-windows-x64.zip","type":"add-on","blender_version_min":"4.3.2","website":"https://extensions.blender.org/add-ons/render-notifications-extension/","maintainer":"JimmyNoStar","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Needed to send notifications via webhooks and Discord"},"platforms":["windows-x64"],"tags":["Render","System"]},{"id":"blue_archive_theme","schema_version":"1.0.0","name":"Blue Archive","version":"1.2.1","tagline":"Theme inspired by Blue Archive game UI","archive_hash":"sha256:b8049642276b5da71a498c9433a46b628ec154b050fa27c5e06fe6236b0f1b31","archive_size":5159,"archive_url":"https://extensions.blender.org/download/sha256:b8049642276b5da71a498c9433a46b628ec154b050fa27c5e06fe6236b0f1b31/theme-blue-archive-theme-v1.2.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blue-archive-theme/","maintainer":"RAZUMNO","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Inspired By"]},{"id":"toolhub","schema_version":"1.0.0","name":"Tool Hub","version":"1.0.2","tagline":"This add-on searches and pins in a pie-menu","archive_hash":"sha256:cbf1d344e714f273a7e97607576712141e3c7fb7b8c0eea5c17b51072c913ed2","archive_size":26285,"archive_url":"https://extensions.blender.org/download/sha256:cbf1d344e714f273a7e97607576712141e3c7fb7b8c0eea5c17b51072c913ed2/add-on-toolhub-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toolhub/","maintainer":"Mr.Bir","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"attrio_csv","schema_version":"1.0.0","name":"Attrio CSV","version":"1.0.1","tagline":"Bake and read back Evaluated Dependency Graph Data as CSV","archive_hash":"sha256:1091d651c2b57d2ce9cc7c3b5037a0e2892f568db65e67ffcf57ced8c355cf68","archive_size":161895,"archive_url":"https://extensions.blender.org/download/sha256:1091d651c2b57d2ce9cc7c3b5037a0e2892f568db65e67ffcf57ced8c355cf68/add-on-attrio-csv-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/attrio-csv/","maintainer":"sharpened","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Bake","Geometry Nodes"]},{"id":"use_for_rendering_plus","schema_version":"1.0.0","name":"View Layer Plus","version":"1.2.5","tagline":"Seamlessly extend View Layers management","archive_hash":"sha256:b31aaf82ee670ea35a0933557a29c6f6d898af0324a38c4ad221c0030345fb25","archive_size":63199,"archive_url":"https://extensions.blender.org/download/sha256:b31aaf82ee670ea35a0933557a29c6f6d898af0324a38c4ad221c0030345fb25/add-on-use-for-rendering-plus-v1.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/use-for-rendering-plus/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","User Interface"]},{"id":"essential_brush_saver","schema_version":"1.0.0","name":"Essential Brush Saver","version":"1.1.3","tagline":"Automatically save and load essential brush settings","archive_hash":"sha256:c83987bf62b92a0890d9aeae3bcf7b4c31df7d38d6b1991b10a61610f50738a0","archive_size":6069,"archive_url":"https://extensions.blender.org/download/sha256:c83987bf62b92a0890d9aeae3bcf7b4c31df7d38d6b1991b10a61610f50738a0/add-on-essential-brush-saver-v1.1.3.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/essential-brush-saver/","maintainer":"emptybraces","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/Load configuration data JSON file to/from disk"},"tags":["Paint","Sculpt","System"]},{"id":"space_colonization_tree_generator","schema_version":"1.0.0","name":"Space colonization tree generator","version":"1.0.0","tagline":"A simple add-on which uses the space colonization approach","archive_hash":"sha256:4b3ed3c3d2ff48e8bd3eec520098e42d24937f4167ed3fd9210a870369a9ef83","archive_size":6781,"archive_url":"https://extensions.blender.org/download/sha256:4b3ed3c3d2ff48e8bd3eec520098e42d24937f4167ed3fd9210a870369a9ef83/add-on-space-colonization-tree-generator-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/space-colonization-tree-generator/","maintainer":"LS","license":["SPDX:GPL-3.0-or-later"]},{"id":"bake_instance_animation","schema_version":"1.0.0","name":"Bake Instance Animation (烘焙几何节点实例动画)","version":"1.0.3","tagline":"Bake geometry nodes instance animation to keyframe animation","archive_hash":"sha256:eea61c5dfe87559ead85806327ea8dcf1c3c9a8e650d35650a6b624f82a94ad4","archive_size":8497,"archive_url":"https://extensions.blender.org/download/sha256:eea61c5dfe87559ead85806327ea8dcf1c3c9a8e650d35650a6b624f82a94ad4/add-on-bake-instance-animation-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bake-instance-animation/","maintainer":"ChyiZ_","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"Candymouse","schema_version":"1.0.0","name":"Candymouse","version":"1.1.2","tagline":"A neutral grey theme with colorful accents","archive_hash":"sha256:d58ec79f4882ab7cd7c1ee527c0df326b1866fd1e6ee9bbe3a424765ce2c48d8","archive_size":5846,"archive_url":"https://extensions.blender.org/download/sha256:d58ec79f4882ab7cd7c1ee527c0df326b1866fd1e6ee9bbe3a424765ce2c48d8/theme-candymouse-v1.1.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/candymouse/","maintainer":"milomouse","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"shiva_img2mat","schema_version":"1.0.0","name":"Image to Mat","version":"1.0.0","tagline":"Generate material from image","archive_hash":"sha256:70a119b9df99d6521deed569f4b68765af8bfeb23b5045f6eacc7e24ffb940b8","archive_size":3150,"archive_url":"https://extensions.blender.org/download/sha256:70a119b9df99d6521deed569f4b68765af8bfeb23b5045f6eacc7e24ffb940b8/add-on-shiva-img2mat-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shiva-img2mat/","maintainer":"SHIVA","license":["SPDX:GPL-3.0-or-later"]},{"id":"easy_tree","schema_version":"1.0.0","name":"Easy Tree","version":"1.0.1","tagline":"Create one-click procedural trees","archive_hash":"sha256:9ba32029650173c303037155c629dd85953699dbd8e62bd5e71da6927c84a4ff","archive_size":17712727,"archive_url":"https://extensions.blender.org/download/sha256:9ba32029650173c303037155c629dd85953699dbd8e62bd5e71da6927c84a4ff/add-on-easy-tree-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/easy-tree/","maintainer":"Jacob-Johnston","license":["SPDX:GPL-3.0-or-later"]},{"id":"wheel_o_matic","schema_version":"1.0.0","name":"Wheel-O-Matic","version":"1.0.2","tagline":"Automatic wheel rotation in any direction","archive_hash":"sha256:b1bbffe18d262809b768ff28f1491a0141c71c45ff5789338d737706ee9b29db","archive_size":20178,"archive_url":"https://extensions.blender.org/download/sha256:b1bbffe18d262809b768ff28f1491a0141c71c45ff5789338d737706ee9b29db/add-on-wheel-o-matic-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wheel-o-matic/","maintainer":"TechArtToolBox","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"blender_game_tools","schema_version":"1.0.0","name":"Game Tools","version":"0.3.2","tagline":"Game Tools","archive_hash":"sha256:5c62770748af9a4cf620e642b98716e63392012ca9e6a6436b47b5cd3d38f66e","archive_size":249307,"archive_url":"https://extensions.blender.org/download/sha256:5c62770748af9a4cf620e642b98716e63392012ca9e6a6436b47b5cd3d38f66e/add-on-blender-game-tools-v0.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-game-tools/","maintainer":"Cremuss","license":["SPDX:GPL-3.0-or-later"],"tags":["Bake","UV","Mesh","Pipeline"]},{"id":"keyframe_selected","schema_version":"1.0.0","name":"Keyframe selected","version":"1.3.3","tagline":"Insert or delete keyframes on selected items","archive_hash":"sha256:cfb13e15f9a4bfe2155bba29b9a2f0da5a585ffdd4e96ada00c47083ec1ca0ca","archive_size":6059,"archive_url":"https://extensions.blender.org/download/sha256:cfb13e15f9a4bfe2155bba29b9a2f0da5a585ffdd4e96ada00c47083ec1ca0ca/add-on-keyframe-selected-v1.3.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/keyframe-selected/","maintainer":"xbodya13","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"i32_the_mandelbrot_set","schema_version":"1.0.0","name":"i32 the Mandelbrot Set","version":"1.0.3","tagline":"The Mandelbrot set using only Integer Math and Bit Math Nodes","archive_hash":"sha256:db3afe337e319b0a42ca1d4731c281924be16a7f583eb4f9f9ea27d9e9f81947","archive_size":46805,"archive_url":"https://extensions.blender.org/download/sha256:db3afe337e319b0a42ca1d4731c281924be16a7f583eb4f9f9ea27d9e9f81947/add-on-i32-the-mandelbrot-set-v1.0.3.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/i32-the-mandelbrot-set/","maintainer":"Osipenkov+Art","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes"]},{"id":"node_tree_screenshot","schema_version":"1.0.0","name":"Node Tree Screenshot","version":"1.1.1","tagline":"Screenshot utility for large node trees","archive_hash":"sha256:fc9713b92bebdc4c88b0ded0666306c45dea3e28621f0b9a0e89133033df8d56","archive_size":18742702,"archive_url":"https://extensions.blender.org/download/sha256:fc9713b92bebdc4c88b0ded0666306c45dea3e28621f0b9a0e89133033df8d56/add-on-node-tree-screenshot-v1.1.1-windows-x64-macos-arm64-linux-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/node-tree-screenshot/","maintainer":"LukasTönne","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","macos-arm64","linux-x64"],"tags":["Node"]},{"id":"visual_limits","schema_version":"1.0.0","name":"Visual limits","version":"1.3.2","tagline":"This addon shows rigid body constraint limits in viewport","archive_hash":"sha256:fcb0ca388657a7fe0d2ce862ce5fdaa178c75160ce74e775981bdecc72a2509e","archive_size":2710,"archive_url":"https://extensions.blender.org/download/sha256:fcb0ca388657a7fe0d2ce862ce5fdaa178c75160ce74e775981bdecc72a2509e/add-on-visual-limits-v1.3.2.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/visual-limits/","maintainer":"xbodya13","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"auto_sync_object_data_names","schema_version":"1.0.0","name":"Auto Sync Object Data Names","version":"1.0.0","tagline":"Automatically sync object and data names","archive_hash":"sha256:6da30fc3031f193cbac124155168d944dd62b674ede4465becc262d61288c8ab","archive_size":19044,"archive_url":"https://extensions.blender.org/download/sha256:6da30fc3031f193cbac124155168d944dd62b674ede4465becc262d61288c8ab/add-on-auto-sync-object-data-names-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-sync-object-data-names/","maintainer":"GeeDoubleU","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Pipeline"]},{"id":"Tracker2Nuke","schema_version":"1.0.0","name":"Tracker to Nuke","version":"1.1.0","tagline":"Instantly export Blender tracking data to a Nuke Tracker node","archive_hash":"sha256:b937c0ddfdd9cdea2e22332b540bd2bf7dbd9bd3a9b6dcb2366930a73818029d","archive_size":5120,"archive_url":"https://extensions.blender.org/download/sha256:b937c0ddfdd9cdea2e22332b540bd2bf7dbd9bd3a9b6dcb2366930a73818029d/add-on-tracker2nuke-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tracker2nuke/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Import-Export"]},{"id":"polychase","schema_version":"1.0.0","name":"Polychase","version":"0.0.14","tagline":"Mesh Based Motion Tracking in Blender","archive_hash":"sha256:e687a1b30e20971951176d5ad136acd6f945904f9e0d1054043f506e3c1bc9d0","archive_size":6053241,"archive_url":"https://extensions.blender.org/download/sha256:e687a1b30e20971951176d5ad136acd6f945904f9e0d1054043f506e3c1bc9d0/add-on-polychase-v0.0.14-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/polychase/","maintainer":"theartful","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write optical flow database to disk"},"platforms":["windows-x64"],"tags":["Animation","Tracking"]},{"id":"Bone_Aligner","schema_version":"1.0.0","name":"Bone Aligner","version":"1.1.4","tagline":"Quickly align two bones","archive_hash":"sha256:bc842ad69c28089a444998780860f6755b140c8819ff92caebff935ec4180af8","archive_size":2841,"archive_url":"https://extensions.blender.org/download/sha256:bc842ad69c28089a444998780860f6755b140c8819ff92caebff935ec4180af8/add-on-bone-aligner-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-aligner/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"perfectly_normal","schema_version":"1.0.0","name":"Perfectly Normal","version":"0.0.2","tagline":"Manipulate face-corner normals as mesh components","archive_hash":"sha256:e52b80edcba7441d962ececa8db61da530d401f694670d9c03b463347334ce56","archive_size":159727,"archive_url":"https://extensions.blender.org/download/sha256:e52b80edcba7441d962ececa8db61da530d401f694670d9c03b463347334ce56/add-on-perfectly-normal-v0.0.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/perfectly-normal/","maintainer":"Seth-Adam-Trowbridge","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write asset resources from/to disk"},"tags":["Mesh","Modeling","Geometry Nodes"]},{"id":"beantextures","schema_version":"1.0.0","name":"Beantextures","version":"1.1.0","tagline":"Addon to help with 2D texture-based animations","archive_hash":"sha256:3273b6d7045724c0e4e1ea3c98924ee1831e5fd2712eb69391fb2f50d465fa59","archive_size":23669,"archive_url":"https://extensions.blender.org/download/sha256:3273b6d7045724c0e4e1ea3c98924ee1831e5fd2712eb69391fb2f50d465fa59/add-on-beantextures-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/beantextures/","maintainer":"daringcuteseal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import image textures to generated node group"},"tags":["Animation","Node","Rigging"]},{"id":"SmartScene_Toolkit","schema_version":"1.0.0","name":"SmartScene Toolkit","version":"1.4.0","tagline":"Toolkit for smarter parent, hierarchy, mirror operations","archive_hash":"sha256:135648cb28a6598c932adf8b34ef4652026f71e57f0dd2b7e352b88d5dc19b60","archive_size":14746,"archive_url":"https://extensions.blender.org/download/sha256:135648cb28a6598c932adf8b34ef4652026f71e57f0dd2b7e352b88d5dc19b60/add-on-smartscene-toolkit-v1.4.0.zip","type":"add-on","blender_version_min":"4.4.3","website":"https://extensions.blender.org/add-ons/smartscene-toolkit/","maintainer":"Marcus997","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Scene"]},{"id":"Blackboard_Theme","schema_version":"1.0.0","name":"Blackboard_Theme","version":"2.3.1","tagline":"Chalk on Dark","archive_hash":"sha256:6f8e586e447e1846cd5cf6bc11b2b209d6513279844149581a1fd5c835d36aee","archive_size":5716,"archive_url":"https://extensions.blender.org/download/sha256:6f8e586e447e1846cd5cf6bc11b2b209d6513279844149581a1fd5c835d36aee/theme-blackboard-theme-v2.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blackboard-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"surfacepsycho","schema_version":"1.0.0","name":"Surface Psycho","version":"0.9.7","tagline":"Precision Surface Design","archive_hash":"sha256:9451d01e5b72005bdd492d45572d01bdfc496f0e64bdd63a84c49603986bcde1","archive_size":51716083,"archive_url":"https://extensions.blender.org/download/sha256:9451d01e5b72005bdd492d45572d01bdfc496f0e64bdd63a84c49603986bcde1/add-on-surfacepsycho-v0.9.7-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/surfacepsycho/","maintainer":"RomainGuimbal","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export CAD files"},"platforms":["windows-x64"],"tags":["Modeling","Import-Export","Geometry Nodes","Add Curve"]},{"id":"sync_material_viewport_color","schema_version":"1.0.0","name":"Sync Material Viewport Color","version":"1.0.2","tagline":"Sets diffuse color, metallic and roughness for viewport display","archive_hash":"sha256:1e6302ca53e77ca3163ef07be912988880d13574b20cec5d5fb3735c4eac9cc9","archive_size":7318,"archive_url":"https://extensions.blender.org/download/sha256:1e6302ca53e77ca3163ef07be912988880d13574b20cec5d5fb3735c4eac9cc9/add-on-sync-material-viewport-color-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sync-material-viewport-color/","maintainer":"Qiu-Feng","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Material"]},{"id":"Dim_Fog","schema_version":"1.0.0","name":"Dim Fog","version":"2.0.0","tagline":"Moody & Cozy theme","archive_hash":"sha256:442ee419c1f5439af9cb9643ed06c5ce7461ef565622854ec754642ef45b885c","archive_size":5195,"archive_url":"https://extensions.blender.org/download/sha256:442ee419c1f5439af9cb9643ed06c5ce7461ef565622854ec754642ef45b885c/theme-dim-fog-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dim-fog/","maintainer":"huleeb","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"ccnc_animation_objects","schema_version":"1.0.0","name":"CCNCAnimationObjects","version":"1.2.3","tagline":"CNC simulation object editor with camera and spark effects","archive_hash":"sha256:51d61dc81125b537f01f25da6b52a6ba1ba694e9c83ef6d1f3a97b47af051d82","archive_size":85342,"archive_url":"https://extensions.blender.org/download/sha256:51d61dc81125b537f01f25da6b52a6ba1ba694e9c83ef6d1f3a97b47af051d82/add-on-ccnc-animation-objects-v1.2.3.zip","type":"add-on","blender_version_min":"4.4.3","website":"https://extensions.blender.org/add-ons/ccnc-animation-objects/","maintainer":"Bitsqueezer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export CSV files"},"tags":["Modeling","Animation","Camera"]},{"id":"VAT","schema_version":"1.0.0","name":"Vertex Animation Texture Addon (VAT)","version":"1.0.1","tagline":"Tools for vertex animation textures in Blender","archive_hash":"sha256:5fb62160f6e6642150e74bc02421cd46c338a96d85e28e3e48f6baaad1bfb065","archive_size":8592,"archive_url":"https://extensions.blender.org/download/sha256:5fb62160f6e6642150e74bc02421cd46c338a96d85e28e3e48f6baaad1bfb065/add-on-vat-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vat/","maintainer":"Flement","license":["SPDX:GPL-3.0-or-later"]},{"id":"VCS","schema_version":"1.0.0","name":"Vertex Color Selector","version":"1.0.9","tagline":"VertexColor Select tool","archive_hash":"sha256:0dd54c9febb5b08d20d9db9797384130169c552db74563214f6f7a589e1555f4","archive_size":8745,"archive_url":"https://extensions.blender.org/download/sha256:0dd54c9febb5b08d20d9db9797384130169c552db74563214f6f7a589e1555f4/add-on-vcs-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vcs/","maintainer":"D31","license":["SPDX:GPL-3.0-or-later"]},{"id":"script_manager_pro","schema_version":"1.0.0","name":"Script Manager Pro","version":"0.0.3","tagline":"Manage and run Python scripts with one-click access","archive_hash":"sha256:005a3e75a2bee8f30718c1773d05533e8112101254d7103f56f0dce3c6e12fff","archive_size":3129,"archive_url":"https://extensions.blender.org/download/sha256:005a3e75a2bee8f30718c1773d05533e8112101254d7103f56f0dce3c6e12fff/add-on-script-manager-pro-v0.0.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/script-manager-pro/","maintainer":"CemilBerk","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads and writes script metadata to a JSON file"}},{"id":"anim_auto_offset","schema_version":"1.0.0","name":"Animation Auto Offset","version":"1.3.3","tagline":"Update all keyframes relatively on transform changes","archive_hash":"sha256:ecc8d313128cc14480d90c40ab5558eab2fded25757f242ddddc4d5a14cd64e1","archive_size":15402,"archive_url":"https://extensions.blender.org/download/sha256:ecc8d313128cc14480d90c40ab5558eab2fded25757f242ddddc4d5a14cd64e1/add-on-anim-auto-offset-v1.3.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/anim-auto-offset/","maintainer":"Marek-Zając","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"auto_wrinkle_map","schema_version":"1.0.0","name":"Auto Wrinkle Map","version":"0.0.7","tagline":"Helps you to create wrinkle maps driven from bones in one click","archive_hash":"sha256:342a46d212aef292c92e9f751b4cd1f97ccaa677acc8e1cdc1ce23f638ef198a","archive_size":10763,"archive_url":"https://extensions.blender.org/download/sha256:342a46d212aef292c92e9f751b4cd1f97ccaa677acc8e1cdc1ce23f638ef198a/add-on-auto-wrinkle-map-v0.0.7.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/auto-wrinkle-map/","maintainer":"Hattiffnat","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Material","Node","Animation"]},{"id":"node_void_keeper","schema_version":"1.0.0","name":"NodeVoidKeeper","version":"1.0.1","tagline":"Keeps your nodes centered at the origin, so you can't lose them","archive_hash":"sha256:a6ac8d276fc301e317c45b4c5ec55672266fb11e0cb2a82f7436c106db8e053d","archive_size":15610,"archive_url":"https://extensions.blender.org/download/sha256:a6ac8d276fc301e317c45b4c5ec55672266fb11e0cb2a82f7436c106db8e053d/add-on-node-void-keeper-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-void-keeper/","maintainer":"MagnumVD","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"autocam","schema_version":"1.0.0","name":"AutoCam","version":"2.0.6","tagline":"Intuitive camera tools, built for artists","archive_hash":"sha256:375b428c576948a9f8a9311e64c4f4109aa41fec3c1b76b8c79a1b67685b2132","archive_size":67410,"archive_url":"https://extensions.blender.org/download/sha256:375b428c576948a9f8a9311e64c4f4109aa41fec3c1b76b8c79a1b67685b2132/add-on-autocam-v2.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/autocam/","maintainer":"RenderRides","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Animation","Rigging","Render","Add Curve"]},{"id":"additional_batch_rename","schema_version":"1.0.0","name":"Additional Batch Rename","version":"1.1.1","tagline":"Additional batch rename operators","archive_hash":"sha256:c8cbfda2e658806b84e437759fdce84053abfd16266dbd29e5b89a074a305c11","archive_size":15993,"archive_url":"https://extensions.blender.org/download/sha256:c8cbfda2e658806b84e437759fdce84053abfd16266dbd29e5b89a074a305c11/add-on-additional-batch-rename-v1.1.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/additional-batch-rename/","maintainer":"Endertainer007","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","Object"]},{"id":"proceduraltiles","schema_version":"1.0.0","name":"Procedural Tiles","version":"0.0.4","tagline":"A library of shader nodes. +100 NEW NODES","archive_hash":"sha256:4c6040e0c5654c066fa66f48321857d44e26ca1726d3c8c70cd04050cb6efc30","archive_size":4261663,"archive_url":"https://extensions.blender.org/download/sha256:4c6040e0c5654c066fa66f48321857d44e26ca1726d3c8c70cd04050cb6efc30/add-on-proceduraltiles-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/proceduraltiles/","maintainer":"Aisun-Tang","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Material"]},{"id":"simple_gcode_importer","schema_version":"1.0.0","name":"Simple Gcode Importer","version":"1.1.1","tagline":"Import Gcode to blender as paths","archive_hash":"sha256:aa644b0c5f1cb47878c08bddc029da401e9e357c5e82c4b254801e57897c8f29","archive_size":2397,"archive_url":"https://extensions.blender.org/download/sha256:aa644b0c5f1cb47878c08bddc029da401e9e357c5e82c4b254801e57897c8f29/add-on-simple-gcode-importer-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-gcode-importer/","maintainer":"kmnunley","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Pipeline"]},{"id":"controller_link","schema_version":"1.0.0","name":"Controller Link","version":"1.0.1","tagline":"Use a gamepad as input","archive_hash":"sha256:cf2ef139dc3a07eb2185b91e19586bedaaa684d101fe03449d080262e2fe3c8f","archive_size":16281033,"archive_url":"https://extensions.blender.org/download/sha256:cf2ef139dc3a07eb2185b91e19586bedaaa684d101fe03449d080262e2fe3c8f/add-on-controller-link-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/controller-link/","maintainer":"globglob3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"glare_node_controller","schema_version":"1.0.0","name":"Glare Node Controller","version":"2.3.3","tagline":"panel to control Glare","archive_hash":"sha256:e9a4d48813add31c7f4c04198f4ebfba47dc88be90f4f828762e8ae2c3445d68","archive_size":3563,"archive_url":"https://extensions.blender.org/download/sha256:e9a4d48813add31c7f4c04198f4ebfba47dc88be90f4f828762e8ae2c3445d68/add-on-glare-node-controller-v2.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/glare-node-controller/","maintainer":"darkstarrd","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Render"]},{"id":"dragonff","schema_version":"1.0.0","name":"DragonFF","version":"1.1.0","tagline":"Add-on to edit RenderWare Formats (.dff, .txd, .col)","archive_hash":"sha256:08df6ba49bc85ea983e1661c1151d3ea2b03d7764e815cc85ffce8af31b8267e","archive_size":225580,"archive_url":"https://extensions.blender.org/download/sha256:08df6ba49bc85ea983e1661c1151d3ea2b03d7764e815cc85ffce8af31b8267e/add-on-dragonff-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dragonff/","maintainer":"Parik","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export DFF/TXD/COL/IPL/IDE from/to disk"},"tags":["Import-Export","3D View","Mesh","Material"]},{"id":"maya_pivot","schema_version":"1.0.0","name":"Maya Pivot","version":"1.0.0","tagline":"Implements a Maya-like pivot system in Blender","archive_hash":"sha256:14893b7a7fdef8ffd4ebb538f770b38257c020ca9a02b39d5f3a49dc674083e2","archive_size":16036,"archive_url":"https://extensions.blender.org/download/sha256:14893b7a7fdef8ffd4ebb538f770b38257c020ca9a02b39d5f3a49dc674083e2/add-on-maya-pivot-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/maya-pivot/","maintainer":"Zinkenite","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling","Mesh"]},{"id":"Blueprint_Paper_Theme","schema_version":"1.0.0","name":"Blueprint_Paper_Theme","version":"2.3.1","tagline":"Technical Drawing","archive_hash":"sha256:26176f60d47e6e14d43ae0404d10ba688ee8336478d6b44402855ca2de760d5e","archive_size":5758,"archive_url":"https://extensions.blender.org/download/sha256:26176f60d47e6e14d43ae0404d10ba688ee8336478d6b44402855ca2de760d5e/theme-blueprint-paper-theme-v2.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blueprint-paper-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"color_grid_texture_gen","schema_version":"1.0.0","name":"Color Grid Texture Generator","version":"0.1.2","tagline":"Generate customizable color grid textures","archive_hash":"sha256:f5e0ad6b318cca21a773d071af6df303b1d4ec419bdd514e086aca95bc510a9f","archive_size":28692,"archive_url":"https://extensions.blender.org/download/sha256:f5e0ad6b318cca21a773d071af6df303b1d4ec419bdd514e086aca95bc510a9f/add-on-color-grid-texture-gen-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/color-grid-texture-gen/","maintainer":"andersmmg","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Read Coolors URL from clipboard"},"tags":["Material","UV"]},{"id":"BL_FastStart","schema_version":"1.0.0","name":"BL Fast Start (MP4/MOV)","version":"1.9.4","tagline":"A checkbox to add a 'Fast Start' copy of MP4/MOV renders","archive_hash":"sha256:6816f8d0815101c8ffdc93530e012e6e770dfc8ffc9b5ac441ae57eb74407694","archive_size":22865,"archive_url":"https://extensions.blender.org/download/sha256:6816f8d0815101c8ffdc93530e012e6e770dfc8ffc9b5ac441ae57eb74407694/add-on-bl-faststart-v1.9.4.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bl-faststart/","maintainer":"usrname0","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","User Interface"]},{"id":"jiggle_physics","schema_version":"1.0.0","name":"Jiggle Physics","version":"4.5.2","tagline":"Add stretchy jiggle physics to your Blender rigs","archive_hash":"sha256:26daa9b47b41a1f18aa38c4103f7127c906698ad56e4f9f090e6092f83212239","archive_size":32913,"archive_url":"https://extensions.blender.org/download/sha256:26daa9b47b41a1f18aa38c4103f7127c906698ad56e4f9f090e6092f83212239/add-on-jiggle-physics-v4.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/jiggle-physics/","maintainer":"naelstrof","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"paws_bakery","schema_version":"1.0.0","name":"PAWS: Bakery","version":"0.5.1","tagline":"Texture Baking tools for Game-Ready pipeline by Pawsgineer","archive_hash":"sha256:3a9a2d5d563d38ff8fd3b76fec281213da773425995b2c5b79c7e69f35e17ad0","archive_size":165829,"archive_url":"https://extensions.blender.org/download/sha256:3a9a2d5d563d38ff8fd3b76fec281213da773425995b2c5b79c7e69f35e17ad0/add-on-paws-bakery-v0.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/paws-bakery/","maintainer":"Steve-Paws","license":["SPDX:GPL-3.0-or-later"],"tags":["Bake","Pipeline","Material"]},{"id":"MakePlanarFacesPlus","schema_version":"1.0.0","name":"Make Planar Faces Plus","version":"1.1.0","tagline":"Powerful Make Planar Faces Operator","archive_hash":"sha256:de63571b8ee2edafff87ba9bc95a71495cdc15f61c8b8b16d9d5ee01fac65fe4","archive_size":258249,"archive_url":"https://extensions.blender.org/download/sha256:de63571b8ee2edafff87ba9bc95a71495cdc15f61c8b8b16d9d5ee01fac65fe4/add-on-makeplanarfacesplus-v1.1.0-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/makeplanarfacesplus/","maintainer":"Anton-Florey","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Mesh"]},{"id":"shape_key_mirror_plus","schema_version":"1.0.0","name":"Shape Key Mirror Plus","version":"1.9.0","tagline":"Mirror shape key deltas across symmetric axes","archive_hash":"sha256:e67a7c722d2ad02a4c1fd5e9d99498193d0e1d604c86f20a45dd44ca5863b339","archive_size":17431,"archive_url":"https://extensions.blender.org/download/sha256:e67a7c722d2ad02a4c1fd5e9d99498193d0e1d604c86f20a45dd44ca5863b339/add-on-shape-key-mirror-plus-v1.9.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shape-key-mirror-plus/","maintainer":"Ciyorie","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"marchingcube","schema_version":"1.0.0","name":"Marching Cube","version":"0.3.0","tagline":"Generate iso-surface meshes using the Marching Cubes algorithm","archive_hash":"sha256:4a372e364622fa0539b87f9522bbd60c58e6e06e3e2dc32d725c10707343db18","archive_size":41468991,"archive_url":"https://extensions.blender.org/download/sha256:4a372e364622fa0539b87f9522bbd60c58e6e06e3e2dc32d725c10707343db18/add-on-marchingcube-v0.3.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/marchingcube/","maintainer":"Thomas-Berger","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Add Mesh"]},{"id":"terrainmixer","schema_version":"1.0.0","name":"Terrain Mixer","version":"3.1.3","tagline":"Easy to use shader-based terrain generator for Cycles","archive_hash":"sha256:802d22cc5d7dbce0221d3399bc23b8f96799ba5c66421d7261016bd64d5800ac","archive_size":66614047,"archive_url":"https://extensions.blender.org/download/sha256:802d22cc5d7dbce0221d3399bc23b8f96799ba5c66421d7261016bd64d5800ac/add-on-terrainmixer-v3.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/terrainmixer/","maintainer":"zets","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Easily replace default image files with your own","network":"Documentation and tutorials available online"},"tags":["Add Mesh","Bake","Material"]},{"id":"vectart_animation","schema_version":"1.0.0","name":"Vectart Animation","version":"1.1.4","tagline":"Animation tools for VectArt curves and objects","archive_hash":"sha256:d35ccba3d1fc4ca478edbebdc2620409071d1ebbb4e70d02218a5e15a06972eb","archive_size":22398,"archive_url":"https://extensions.blender.org/download/sha256:d35ccba3d1fc4ca478edbebdc2620409071d1ebbb4e70d02218a5e15a06972eb/add-on-vectart-animation-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vectart-animation/","maintainer":"Dimona-Patrick-243","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Viewport_stabilizer","schema_version":"1.0.0","name":"Viewport stabilizer","version":"1.0.2","tagline":"Stabilise 3d point on your screen","archive_hash":"sha256:ddb4f4e4d410fa18b27f934bcce9abcd451c8b494cccccd32f1de206926b9cd1","archive_size":5207,"archive_url":"https://extensions.blender.org/download/sha256:ddb4f4e4d410fa18b27f934bcce9abcd451c8b494cccccd32f1de206926b9cd1/add-on-viewport-stabilizer-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-stabilizer/","maintainer":"Yaroslav_Yushk","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Tracking"]},{"id":"multiple_camera_render","schema_version":"1.0.0","name":"Multiple Camera Render","version":"4.4.0","tagline":"Sequential rendering from multiple cameras","archive_hash":"sha256:2f475eeea55812da815c61c925b92cd8301733ab82a0fbb8e4e2c4dffaa1e441","archive_size":135372,"archive_url":"https://extensions.blender.org/download/sha256:2f475eeea55812da815c61c925b92cd8301733ab82a0fbb8e4e2c4dffaa1e441/add-on-multiple-camera-render-v4.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/multiple-camera-render/","maintainer":"ivan-perevala","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Writing execution log files inside extension directory"},"tags":["Render","Animation","Camera","3D View"]},{"id":"set_vertex_distance","schema_version":"1.0.0","name":"Set Vertex Distance","version":"2.0.0","tagline":"Set vertex distance single vertex or connected component","archive_hash":"sha256:b7ef6995d2f2953d1b6af31b947e4f47d1194f1cf775bb6c8c23a1343b1dbed7","archive_size":3128,"archive_url":"https://extensions.blender.org/download/sha256:b7ef6995d2f2953d1b6af31b947e4f47d1194f1cf775bb6c8c23a1343b1dbed7/add-on-set-vertex-distance-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/set-vertex-distance/","maintainer":"alicoskun","license":["SPDX:GPL-3.0-or-later"]},{"id":"modifer_stack_manager","schema_version":"1.0.0","name":"Modifier Stack Manager","version":"1.4.0","tagline":"A UI List implementation for Blender's modifier stack","archive_hash":"sha256:9da5047863bb70c7c86ea0ea77976c1562fef3c98dbc672e8ea81ab05fb85138","archive_size":6635,"archive_url":"https://extensions.blender.org/download/sha256:9da5047863bb70c7c86ea0ea77976c1562fef3c98dbc672e8ea81ab05fb85138/add-on-modifer-stack-manager-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/modifer-stack-manager/","maintainer":"salaivv","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","User Interface"]},{"id":"cloud_midnight_teal","schema_version":"1.0.0","name":"Cloud Guy's Theme","version":"1.0.3","tagline":"Custom theme made by me and a friend","archive_hash":"sha256:410cbdebbcb43282fbe2d27956a41eb2158a33f158e97418997f275a435c5816","archive_size":5920,"archive_url":"https://extensions.blender.org/download/sha256:410cbdebbcb43282fbe2d27956a41eb2158a33f158e97418997f275a435c5816/theme-cloud-midnight-teal-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/cloud-midnight-teal/","maintainer":"Cloud-Guy","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"Cad_measure_extension","schema_version":"1.0.0","name":"Cad_Dimensions","version":"2.0.0","tagline":"Extension for a new measuring system","archive_hash":"sha256:fdc1a528d7808c897d7cf3469b09921a5b29174cfa6293400f82a1cd0eb65efb","archive_size":251303,"archive_url":"https://extensions.blender.org/download/sha256:fdc1a528d7808c897d7cf3469b09921a5b29174cfa6293400f82a1cd0eb65efb/add-on-cad-measure-extension-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cad-measure-extension/","maintainer":"Mr.Nobody3d","license":["SPDX:GPL-3.0-or-later"]},{"id":"Bbrush","schema_version":"1.0.0","name":"Bbrush","version":"1.5.1","tagline":"Sculpting using only a pen and keyboard","archive_hash":"sha256:2501fc16046f53c0d5eadb046baaa1fc5203c30650b8bf642139d12bec040f55","archive_size":544191,"archive_url":"https://extensions.blender.org/download/sha256:2501fc16046f53c0d5eadb046baaa1fc5203c30650b8bf642139d12bec040f55/add-on-bbrush-v1.5.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bbrush/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"View navigation texture load"},"tags":["Sculpt"]},{"id":"acreplay_importer","schema_version":"1.0.0","name":"AC Replay Importer","version":"0.3.0","tagline":"Animate your cars using Assetto Corsa replays","archive_hash":"sha256:4d91f27fa56cd998c9b2b8ee421d537627413a2dd0d98358ce8a0260fb5b00da","archive_size":8688,"archive_url":"https://extensions.blender.org/download/sha256:4d91f27fa56cd998c9b2b8ee421d537627413a2dd0d98358ce8a0260fb5b00da/add-on-acreplay-importer-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/acreplay-importer/","maintainer":"abchouhan","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import CSV from disk"},"tags":["Animation"]},{"id":"better_bend","schema_version":"1.0.0","name":"Better Bend","version":"1.1.0","tagline":"Cinema 4D-style deformers for Blender","archive_hash":"sha256:a7ce330e85d172706da357cd6291d96663c1a1386c758bcb41a1eb7aa41d1a91","archive_size":4729,"archive_url":"https://extensions.blender.org/download/sha256:a7ce330e85d172706da357cd6291d96663c1a1386c758bcb41a1eb7aa41d1a91/add-on-better-bend-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/better-bend/","maintainer":"Lije.Morgan","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"capture_thumbnails_from_viewport","schema_version":"1.0.0","name":"Asset Browser: Capture Thumbnail from Viewport","version":"1.0.3","tagline":"Add new thumbnails for you asset based on the current viewport","archive_hash":"sha256:116dd46abed00a8bbe841a48a5872c48905a79f90a09c8a472c30aa0f13c48f6","archive_size":1759,"archive_url":"https://extensions.blender.org/download/sha256:116dd46abed00a8bbe841a48a5872c48905a79f90a09c8a472c30aa0f13c48f6/add-on-capture-thumbnails-from-viewport-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/capture-thumbnails-from-viewport/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create a .png in temp folder"},"tags":["Pipeline"]},{"id":"skin_weights_copypaster","schema_version":"1.0.0","name":"Skin Weights Copypaster","version":"0.3.3","tagline":"Copies skin weights from one vertex to selection","archive_hash":"sha256:16d5bcface65447e03e57a4cd169d64b200df2e4ac88a9e7290dbc5e3d9324b3","archive_size":16850,"archive_url":"https://extensions.blender.org/download/sha256:16d5bcface65447e03e57a4cd169d64b200df2e4ac88a9e7290dbc5e3d9324b3/add-on-skin-weights-copypaster-v0.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/skin-weights-copypaster/","maintainer":"Ihor-Spasivskyi","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"MAD","schema_version":"1.0.0","name":"MAD (Microphone Audio Driver)","version":"0.1.6","tagline":"Use your Microphone as an Animation Driver in Blender","archive_hash":"sha256:fd2c01fb744c526daa1d1a4020d315cbf2568bd18460d528a3dfb0a4daf3232b","archive_size":663187,"archive_url":"https://extensions.blender.org/download/sha256:fd2c01fb744c526daa1d1a4020d315cbf2568bd18460d528a3dfb0a4daf3232b/add-on-mad-v0.1.6-windows-x64-windows-arm64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mad/","maintainer":"F1dg3t","license":["SPDX:GPL-3.0-or-later"],"permissions":{"microphone":"Capture audio input for real-time animation"},"platforms":["windows-x64","windows-arm64"],"tags":["Rigging","Animation"]},{"id":"iocgpoly_lip_sync","schema_version":"1.0.0","name":"Lip Sync","version":"2.3.2","tagline":"Automatic lip sync for your Blender models","archive_hash":"sha256:8c761c89173c714eee0114471ed8f13c99b09a811ec11d7dbbce72a9599024a3","archive_size":37476376,"archive_url":"https://extensions.blender.org/download/sha256:8c761c89173c714eee0114471ed8f13c99b09a811ec11d7dbbce72a9599024a3/add-on-iocgpoly-lip-sync-v2.3.2-windows-x64.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/iocgpoly-lip-sync/","maintainer":"Charley3D","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Models / Extract libs to disk","network":"Need to download Voices Models to enable lip sync"},"platforms":["windows-x64"],"tags":["Animation","Sequencer"]},{"id":"FakeBones","schema_version":"1.0.0","name":"FakeBones","version":"1.0.7","tagline":"enhance armature visualization","archive_hash":"sha256:1c766ee1bf8f385f3f87169b37b3c2447d5620c59a090ff413da6ee6cd30aed1","archive_size":4158,"archive_url":"https://extensions.blender.org/download/sha256:1c766ee1bf8f385f3f87169b37b3c2447d5620c59a090ff413da6ee6cd30aed1/add-on-fakebones-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fakebones/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Steam","schema_version":"1.0.0","name":"Steam","version":"3.0.3","tagline":"Inspired by the old Steam UI. ","archive_hash":"sha256:9982ed52c45db941e0203689374d2942ed6207dc11f65fe12a8062123dcadf7f","archive_size":5495,"archive_url":"https://extensions.blender.org/download/sha256:9982ed52c45db941e0203689374d2942ed6207dc11f65fe12a8062123dcadf7f/theme-steam-v3.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/steam/","maintainer":"ArtinŌr","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By"]},{"id":"AnimCurveSorter","schema_version":"1.0.0","name":"Anim Curve Sorter","version":"1.0.2","tagline":"Easily organise your animation curves","archive_hash":"sha256:2952fa50ce39cdff182259c7041e4a276a7524a73813d2adc75f448c3afa1721","archive_size":17382,"archive_url":"https://extensions.blender.org/download/sha256:2952fa50ce39cdff182259c7041e4a276a7524a73813d2adc75f448c3afa1721/add-on-animcurvesorter-v1.0.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/animcurvesorter/","maintainer":"Duncan-Readle","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"ccustomnodes","schema_version":"1.0.0","name":"Object Utility Nodes","version":"1.0.4","tagline":"Custom nodes in new node editor","archive_hash":"sha256:17ae56da737287d2b7ba7c350d5c6697fef15227c45deb45ce46b8abfad81180","archive_size":7115868,"archive_url":"https://extensions.blender.org/download/sha256:17ae56da737287d2b7ba7c350d5c6697fef15227c45deb45ce46b8abfad81180/add-on-ccustomnodes-v1.0.4-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ccustomnodes/","maintainer":"Bitsqueezer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save colorwheel pictures from/to temp folder"},"platforms":["windows-x64"],"tags":["Node"]},{"id":"easymesh_batch_exporter","schema_version":"1.0.0","name":"EasyMesh Batch Exporter","version":"1.6.2","tagline":"Streamlined mesh export for game development workflows","archive_hash":"sha256:874bb4a47f6664fd1a77a3ea9fc887d3907d7a662cc85342a299e0fbad4cf9b2","archive_size":80528,"archive_url":"https://extensions.blender.org/download/sha256:874bb4a47f6664fd1a77a3ea9fc887d3907d7a662cc85342a299e0fbad4cf9b2/add-on-easymesh-batch-exporter-v1.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easymesh-batch-exporter/","maintainer":"spec-arte","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export mesh files to the specified directory"},"tags":["Import-Export"]},{"id":"SuperDuperBatchExporter","schema_version":"1.0.0","name":"Super Duper Batch Exporter","version":"2.8.2","tagline":"One click export to multiple files","archive_hash":"sha256:78bf2172083f1cd455aee1d709c0d5a33170dbc5734c5959ca6cd5059bbc8a51","archive_size":30522,"archive_url":"https://extensions.blender.org/download/sha256:78bf2172083f1cd455aee1d709c0d5a33170dbc5734c5959ca6cd5059bbc8a51/add-on-superduperbatchexporter-v2.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/superduperbatchexporter/","maintainer":"BastianLS","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export files to disk & create subdirectories in output directory"},"tags":["Import-Export"]},{"id":"measure_and_scale","schema_version":"1.0.0","name":"Measure and Scale","version":"1.1.6","tagline":"Measure and Scale object uniformaly","archive_hash":"sha256:b62e9e246a90461e15f2a8c74fca1afea39f7364793e284ac73b14b21b23f7e5","archive_size":9679,"archive_url":"https://extensions.blender.org/download/sha256:b62e9e246a90461e15f2a8c74fca1afea39f7364793e284ac73b14b21b23f7e5/add-on-measure-and-scale-v1.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/measure-and-scale/","maintainer":"Belaid-ZIANE","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"Enhanced_Top_Bar","schema_version":"1.0.0","name":"Enhanced Top Bar","version":"1.0.4","tagline":"Easy access to your ViewLayers rendering properties","archive_hash":"sha256:6cafc46869812bea3791ae4a8c67205e4d88da53f8123826710da58d688150c5","archive_size":6863,"archive_url":"https://extensions.blender.org/download/sha256:6cafc46869812bea3791ae4a8c67205e4d88da53f8123826710da58d688150c5/add-on-enhanced-top-bar-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/enhanced-top-bar/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"Mesh2Rig","schema_version":"1.0.0","name":"Mesh2Rig","version":"2.5.0","tagline":"Transfer simulation, shape keys and other to rig animation","archive_hash":"sha256:5c8623854ee991516160767ee929f214a96e367fa416266866479d133652674a","archive_size":16675,"archive_url":"https://extensions.blender.org/download/sha256:5c8623854ee991516160767ee929f214a96e367fa416266866479d133652674a/add-on-mesh2rig-v2.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh2rig/","maintainer":"3DemFX","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation","Bake","Game Engine","Pipeline"]},{"id":"Individual_Camera_Properties","schema_version":"1.0.0","name":"Individual Camera Properties","version":"1.0.1","tagline":"Resolution, Scene and Render properties for each camera instance","archive_hash":"sha256:c035744e1b619829607ce767b7f7e3dc97985bb412de7216793f34a3109e8b0d","archive_size":78843,"archive_url":"https://extensions.blender.org/download/sha256:c035744e1b619829607ce767b7f7e3dc97985bb412de7216793f34a3109e8b0d/add-on-individual-camera-properties-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/individual-camera-properties/","maintainer":"Alexander-Bicukow","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To save and write presets files to disk"},"tags":["Camera"]},{"id":"VSE_SRT_Subtitle_Importer_4_2_extension","schema_version":"1.0.0","name":"SRT Subtitle Importer/Exporter","version":"2.0.0","tagline":"Import/Export SRT subtitle files to/from VSE strips","archive_hash":"sha256:53f5b2f01d444edd210bcee5b14b751807cd855e1f8a4a83423e49c9c6e0fe64","archive_size":7448,"archive_url":"https://extensions.blender.org/download/sha256:53f5b2f01d444edd210bcee5b14b751807cd855e1f8a4a83423e49c9c6e0fe64/add-on-vse-srt-subtitle-importer-4-2-extension-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/vse-srt-subtitle-importer-4-2-extension/","maintainer":"PoYakong","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"DorchaLiath","schema_version":"1.0.0","name":"Dorcha Liath","version":"5.0.1","tagline":"Dark Grey","archive_hash":"sha256:aba960fe244b919144407a104c23e98037803095bc2856c08c8aef58ffaf326d","archive_size":5206,"archive_url":"https://extensions.blender.org/download/sha256:aba960fe244b919144407a104c23e98037803095bc2856c08c8aef58ffaf326d/theme-dorchaliath-v5.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dorchaliath/","maintainer":"rory-fly","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"QuickCatalogs","schema_version":"1.0.0","name":"Quick Catalogs ( Asset Browser )","version":"1.0.2","tagline":"Make Asset Catalogs from selected Collections","archive_hash":"sha256:417f58839a3f7e90e31733319d75e4317e9415926fd379e605bc54bb61b5a540","archive_size":2677,"archive_url":"https://extensions.blender.org/download/sha256:417f58839a3f7e90e31733319d75e4317e9415926fd379e605bc54bb61b5a540/add-on-quickcatalogs-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quickcatalogs/","maintainer":"justOniL","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"import_export_skin_weights","schema_version":"1.0.0","name":"Import Export Skin Weights","version":"1.0.1","tagline":"Import and export skin weights for Blender","archive_hash":"sha256:248b74f7b176819621f0cd33276070b1ad22c2112f80bfc628045dfea16f6412","archive_size":16987,"archive_url":"https://extensions.blender.org/download/sha256:248b74f7b176819621f0cd33276070b1ad22c2112f80bfc628045dfea16f6412/add-on-import-export-skin-weights-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-export-skin-weights/","maintainer":"Nguyen-Phuc-Nguyen","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Import-Export"]},{"id":"menace","schema_version":"1.0.0","name":"Menace","version":"2.0.0","tagline":"The official HugeMenace theme for Blender","archive_hash":"sha256:ecbb9abc2836fe097c57fe9a5212dcc1fc9a80e62a932e477cf3509922f4cd3d","archive_size":5448,"archive_url":"https://extensions.blender.org/download/sha256:ecbb9abc2836fe097c57fe9a5212dcc1fc9a80e62a932e477cf3509922f4cd3d/theme-menace-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/menace/","maintainer":"HugeMenace","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"solid_boot","schema_version":"1.0.0","name":"Solid Boot","version":"1.1.0","tagline":"3D Views loaded in Solid Mode rather Material Preview","archive_hash":"sha256:97801936f20f108a733fff22fb754a65b4f6af115b0e070a999df4fa66de80fa","archive_size":15759,"archive_url":"https://extensions.blender.org/download/sha256:97801936f20f108a733fff22fb754a65b4f6af115b0e070a999df4fa66de80fa/add-on-solid-boot-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/solid-boot/","maintainer":"CosmoMídias","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"neon_nexus","schema_version":"1.0.0","name":"Neon Nexus","version":"2.0.0","tagline":"A futuristic neon theme for Blender","archive_hash":"sha256:ec0e4a9ff5bfe79411d7dd3ece3e9cb3efad2c28e612c8135733e072b0ae9849","archive_size":6238,"archive_url":"https://extensions.blender.org/download/sha256:ec0e4a9ff5bfe79411d7dd3ece3e9cb3efad2c28e612c8135733e072b0ae9849/theme-neon-nexus-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/neon-nexus/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"SaveSelection","schema_version":"1.0.0","name":"Save Selection","version":"1.0.5","tagline":"Save selected objects in Blender Format","archive_hash":"sha256:615594aed9531a69fb49db5f928888886812f5ed83a63974a694a21f0e8f769e","archive_size":3694,"archive_url":"https://extensions.blender.org/download/sha256:615594aed9531a69fb49db5f928888886812f5ed83a63974a694a21f0e8f769e/add-on-saveselection-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/saveselection/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"grey_orange","schema_version":"1.0.0","name":"Grey Orange","version":"3.0.2","tagline":"Dark neutral grey theme with orange accents","archive_hash":"sha256:2ec8fdf114eb1122ce48f9c5ced7e91284f606987db1dbaa14087bac316e059a","archive_size":6653,"archive_url":"https://extensions.blender.org/download/sha256:2ec8fdf114eb1122ce48f9c5ced7e91284f606987db1dbaa14087bac316e059a/theme-grey-orange-v3.0.2.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/grey-orange/","maintainer":"TimoShch","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"Neutro_Laranja","schema_version":"1.0.0","name":"Neutro Laranja","version":"3.0.0","tagline":"This is another extension","archive_hash":"sha256:84b584efded84667d8dfb689775d9b528f41658c6a6d68e2b8f6af342e32bc00","archive_size":7421,"archive_url":"https://extensions.blender.org/download/sha256:84b584efded84667d8dfb689775d9b528f41658c6a6d68e2b8f6af342e32bc00/theme-neutro-laranja-v3.0.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/neutro-laranja/","maintainer":"Push","license":["SPDX:GPL-3.0-or-later"],"tags":["Accessibility","Light"]},{"id":"quickj","schema_version":"1.0.0","name":"Quick J ( Connect Vertex Path )","version":"1.2.0","tagline":"Quickly connect vertices under the cursor","archive_hash":"sha256:4c7a02ff221bd957d9d8be2cadf5519a2bc68adb9ca7960abb5bbe246dab1905","archive_size":2524,"archive_url":"https://extensions.blender.org/download/sha256:4c7a02ff221bd957d9d8be2cadf5519a2bc68adb9ca7960abb5bbe246dab1905/add-on-quickj-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quickj/","maintainer":"justOniL","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"Batch_Material_Helper","schema_version":"1.0.0","name":"Batch Material Helper","version":"1.0.6","tagline":"Helps you quickly modify materials","archive_hash":"sha256:ce7f2ea29bd087f1f26e882133fd0ebf5212ed14fa547fa6c6bf4288f0d38ca5","archive_size":4099,"archive_url":"https://extensions.blender.org/download/sha256:ce7f2ea29bd087f1f26e882133fd0ebf5212ed14fa547fa6c6bf4288f0d38ca5/add-on-batch-material-helper-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-material-helper/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Material"]},{"id":"UV_Flatten_Tool","schema_version":"1.0.0","name":"UV_Flatten_Tool","version":"1.0.7","tagline":"Flatten mesh to active UV coordinates and store as shape key","archive_hash":"sha256:ab3b58a97af9c8c1e7d329be2869bca7c4a714e6d57abf7aa37c80c47a82f16b","archive_size":2774,"archive_url":"https://extensions.blender.org/download/sha256:ab3b58a97af9c8c1e7d329be2869bca7c4a714e6d57abf7aa37c80c47a82f16b/add-on-uv-flatten-tool-v1.0.7.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/uv-flatten-tool/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"fractal_family","schema_version":"1.0.0","name":"Fractal Family","version":"1.1.6","tagline":"Create fractal curves with ease using complex integer lattices","archive_hash":"sha256:9b6497b8c5234dd27036654f8dbc1f2807466695ee6bc69aefcc3e30fdb6b570","archive_size":16744,"archive_url":"https://extensions.blender.org/download/sha256:9b6497b8c5234dd27036654f8dbc1f2807466695ee6bc69aefcc3e30fdb6b570/add-on-fractal-family-v1.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fractal-family/","maintainer":"imare32","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"apply_modifiers_with_shape_keys","schema_version":"1.0.0","name":"Apply modifier with shape keys","version":"1.0.4","tagline":"Applies modifiers on objects even if they have shape keys","archive_hash":"sha256:063ae9bfae007c27e2ba34b3d0a990a6bb68d923af828b1d06510c95972881ab","archive_size":19128,"archive_url":"https://extensions.blender.org/download/sha256:063ae9bfae007c27e2ba34b3d0a990a6bb68d923af828b1d06510c95972881ab/add-on-apply-modifiers-with-shape-keys-v1.0.4.zip","type":"add-on","blender_version_min":"4.3.2","website":"https://extensions.blender.org/add-ons/apply-modifiers-with-shape-keys/","maintainer":"Orange Turbine","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Modeling","Rigging"]},{"id":"animation_transform_offset","schema_version":"1.0.0","name":"Animation Transform Offset","version":"1.0.0","tagline":"Transform objects and offset their animations in one go","archive_hash":"sha256:8b5beb3a69b3a1923a4be6dfbd5089b9cca27fdaa23b035d43508c479dbf58fc","archive_size":15793,"archive_url":"https://extensions.blender.org/download/sha256:8b5beb3a69b3a1923a4be6dfbd5089b9cca27fdaa23b035d43508c479dbf58fc/add-on-animation-transform-offset-v1.0.0.zip","type":"add-on","blender_version_min":"4.3.2","website":"https://extensions.blender.org/add-ons/animation-transform-offset/","maintainer":"softyoda","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"theme_2000","schema_version":"1.0.0","name":"Theme 2000","version":"1.1.2","tagline":"Inspired by Windows XP, MS office 2007, Sims","archive_hash":"sha256:bf408b6600cddfacf2a9ecfb3b14352153cee68629e1a0ae6e581451f696169a","archive_size":5758,"archive_url":"https://extensions.blender.org/download/sha256:bf408b6600cddfacf2a9ecfb3b14352153cee68629e1a0ae6e581451f696169a/theme-theme-2000-v1.1.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-2000/","maintainer":"danil_orlow","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"multi_user","schema_version":"1.0.0","name":"Multiuser","version":"0.7.4","tagline":"Enable real-time collaborative workflow inside blender","archive_hash":"sha256:8d3be85891043e403cda5da0f527cb1daf9f3480d753beac683a551abc6fdfef","archive_size":2558933,"archive_url":"https://extensions.blender.org/download/sha256:8d3be85891043e403cda5da0f527cb1daf9f3480d753beac683a551abc6fdfef/add-on-multi-user-v0.7.4-windows-x64.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/multi-user/","maintainer":"slumber","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Need to sync scene data to server"},"platforms":["windows-x64"]},{"id":"references_overlays","schema_version":"1.0.0","name":"References Overlays","version":"2.3.2","tagline":"PureRef for Blender. You can add references in the 3D Viewport","archive_hash":"sha256:b849d80c20d6b50dcc5a4228f1aedc1bbc38edf2b18f78422f803c18bc2860a3","archive_size":14178245,"archive_url":"https://extensions.blender.org/download/sha256:b849d80c20d6b50dcc5a4228f1aedc1bbc38edf2b18f78422f803c18bc2860a3/add-on-references-overlays-v2.3.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/references-overlays/","maintainer":"KENKEN","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import BMP/TIFF/PNG/JPG/JPEG/GIF/MP4/WEBM from/to disk","clipboard":"Paste image from the Clipboard"},"platforms":["windows-x64"],"tags":["3D View","User Interface"]},{"id":"altview","schema_version":"1.0.0","name":"AltView","version":"1.0.1","tagline":"Switch views + lock/unlock rotation","archive_hash":"sha256:ea3678752e8e16cf258ae1eb0a2e0701ca228ae523a0163f8d0dbf030546cb60","archive_size":4561,"archive_url":"https://extensions.blender.org/download/sha256:ea3678752e8e16cf258ae1eb0a2e0701ca228ae523a0163f8d0dbf030546cb60/add-on-altview-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.5","website":"https://extensions.blender.org/add-ons/altview/","maintainer":"Iurii-Tiuzhin","license":["SPDX:GPL-3.0-or-later"]},{"id":"remove_static_fcurves","schema_version":"1.0.0","name":"Remove Static FCurves","version":"0.4.0","tagline":"Clean up animation channels that have no data","archive_hash":"sha256:3cd0f3e31abab7e43f94fe836167b818f5e9de0f62563c635abbf2da976b120d","archive_size":6729,"archive_url":"https://extensions.blender.org/download/sha256:3cd0f3e31abab7e43f94fe836167b818f5e9de0f62563c635abbf2da976b120d/add-on-remove-static-fcurves-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/remove-static-fcurves/","maintainer":"lokimckay","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"PlaceHelper","schema_version":"1.0.0","name":"Place Helper","version":"2.0.0","tagline":"Place, align and scatter objects with ease","archive_hash":"sha256:b716a8028e846db794aff472e96b475f2593082b898355a46502d3cc03013544","archive_size":99170,"archive_url":"https://extensions.blender.org/download/sha256:b716a8028e846db794aff472e96b475f2593082b898355a46502d3cc03013544/add-on-placehelper-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/placehelper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object"]},{"id":"headsup_warnings","schema_version":"1.0.0","name":"HeadsUp Warnings","version":"1.1.0","tagline":"Display UI warnings to avoid and resolve common mistakes","archive_hash":"sha256:d4d30ca6d12c48a3bfe4873687817d28351c1eb17768db0687f999f96c880880","archive_size":33611,"archive_url":"https://extensions.blender.org/download/sha256:d4d30ca6d12c48a3bfe4873687817d28351c1eb17768db0687f999f96c880880/add-on-headsup-warnings-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/headsup-warnings/","maintainer":"ManuelLuellau","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Check filepaths to validate if Textures are missing"},"tags":["3D View","Compositing","Render"]},{"id":"unlooped","schema_version":"1.0.0","name":"Unlooped","version":"1.0.1","tagline":"Prevent Blender from looping scene playback","archive_hash":"sha256:a254b5faa77745aa3ec6fbd93cfc02d6933dcc20cd4e9f9fe6c853f937b733f4","archive_size":14253,"archive_url":"https://extensions.blender.org/download/sha256:a254b5faa77745aa3ec6fbd93cfc02d6933dcc20cd4e9f9fe6c853f937b733f4/add-on-unlooped-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unlooped/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Blend95","schema_version":"1.0.0","name":"Blend95","version":"1.0.0","tagline":"90s, xp, old","archive_hash":"sha256:fe107f25135c986dc75a83ac02114a31ef88628683ac3b58dc2a12341621aa7e","archive_size":5999,"archive_url":"https://extensions.blender.org/download/sha256:fe107f25135c986dc75a83ac02114a31ef88628683ac3b58dc2a12341621aa7e/theme-blend95-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","blender_version_max":"10.0.0","website":"https://extensions.blender.org/themes/blend95/","maintainer":"romanasdf1","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"Quick_Studio_Light","schema_version":"1.0.0","name":"Quick Studio Light","version":"1.1.9","tagline":"Simple and fast lighting with improved selection","archive_hash":"sha256:878f79ee310be191098c731ee907a9eb8bf2086800af7f659543e7501a0cc7af","archive_size":90483,"archive_url":"https://extensions.blender.org/download/sha256:878f79ee310be191098c731ee907a9eb8bf2086800af7f659543e7501a0cc7af/add-on-quick-studio-light-v1.1.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-studio-light/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting","3D View"]},{"id":"typst_importer","schema_version":"1.0.0","name":"Typst Importer","version":"0.3.7","tagline":"Render mathematical equations and code blocks","archive_hash":"sha256:3fd01a8fa572bcceb910bfe3eb931058220822da8bcb721c5bc8ba4c4260cff7","archive_size":35882774,"archive_url":"https://extensions.blender.org/download/sha256:3fd01a8fa572bcceb910bfe3eb931058220822da8bcb721c5bc8ba4c4260cff7/add-on-typst-importer-v0.3.7-windows-x64.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/typst-importer/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Import-Export"]},{"id":"node_align","schema_version":"1.0.0","name":"Node Align(节点对齐)","version":"3.2.6","tagline":"Shift+Q|Ctrl+Q Pie menu-Align Nodes in Multiple Ways(多种方式对齐节点)","archive_hash":"sha256:eab7487c2e0925279ef8184ac6e611bf88c4a9f964a5fc72f6f5b9bf7c959403","archive_size":23687,"archive_url":"https://extensions.blender.org/download/sha256:eab7487c2e0925279ef8184ac6e611bf88c4a9f964a5fc72f6f5b9bf7c959403/add-on-node-align-v3.2.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-align/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"gp_tween","schema_version":"1.0.0","name":"GP Tween (c)","version":"2.4.0","tagline":"Quick Grease Pencil Tweening","archive_hash":"sha256:c5990e9a2ae583535ea2179e225effa84ea7e11a8870cd3c390dc75773116e25","archive_size":169988,"archive_url":"https://extensions.blender.org/download/sha256:c5990e9a2ae583535ea2179e225effa84ea7e11a8870cd3c390dc75773116e25/add-on-gp-tween-v2.4.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/gp-tween/","maintainer":"cosmosmythos","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write GP Tween nodegroup asset from/to disk","clipboard":"Copy and Paste GP Tween nodegroup"},"tags":["Grease Pencil","Animation","Geometry Nodes"]},{"id":"time_tracker","schema_version":"1.0.0","name":"Time Tracker","version":"0.2.4","tagline":"This extension tracks your time spent in blend files","archive_hash":"sha256:69178cd1c0f07232a68f85724b0f76e005d221c18a0e466619f49ac957bd87b9","archive_size":23923,"archive_url":"https://extensions.blender.org/download/sha256:69178cd1c0f07232a68f85724b0f76e005d221c18a0e466619f49ac957bd87b9/add-on-time-tracker-v0.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/time-tracker/","maintainer":"PhinDev","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save timing data to disk"},"tags":["System"]},{"id":"simple_audio_visualizer","schema_version":"1.0.0","name":"Simple Audio Visualizer","version":"1.2.0","tagline":"Creates a simple audio visualizer","archive_hash":"sha256:311d38d93b5734290ea4e3cb8d5f8ddc8a757ea4376bcf8fa56d183daed76190","archive_size":6391,"archive_url":"https://extensions.blender.org/download/sha256:311d38d93b5734290ea4e3cb8d5f8ddc8a757ea4376bcf8fa56d183daed76190/add-on-simple-audio-visualizer-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-audio-visualizer/","maintainer":"Polyfjord","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import audio from disk"},"tags":["Animation"]},{"id":"easy_clouds","schema_version":"1.0.0","name":"Easy Clouds","version":"2.2.0","tagline":"Procedural clouds that are easy to customize","archive_hash":"sha256:98f8d4ca22c8e8a0ec85e0ad98f0d681fedd8c7f346766a8fb53aa69207eb2fd","archive_size":10614,"archive_url":"https://extensions.blender.org/download/sha256:98f8d4ca22c8e8a0ec85e0ad98f0d681fedd8c7f346766a8fb53aa69207eb2fd/add-on-easy-clouds-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easy-clouds/","maintainer":"LunarKitten","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Add Mesh","Node"]},{"id":"MustardSimplify","schema_version":"1.0.0","name":"Mustard Simplify","version":"2026.2.0","tagline":"Tool to simplify scenes for improved viewport performance","archive_hash":"sha256:52e7ba18e9956e98f977cdaef9e2f5838ef9a0d63f0a1b2dddb2a43c3db06ace","archive_size":56521,"archive_url":"https://extensions.blender.org/download/sha256:52e7ba18e9956e98f977cdaef9e2f5838ef9a0d63f0a1b2dddb2a43c3db06ace/add-on-mustardsimplify-v2026.2.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/mustardsimplify/","maintainer":"Mustard","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene"]},{"id":"QuickTools_v3","schema_version":"1.0.0","name":"Grease Pencil QuickTools_v3","version":"1.1.7","tagline":"Grease Pencil Toobar in N sidebar with auto mode switch","archive_hash":"sha256:80a8be8f55be5ecf1491c0f255a905d09ac187e7d25070c4b10ee5459fc4cae9","archive_size":53548,"archive_url":"https://extensions.blender.org/download/sha256:80a8be8f55be5ecf1491c0f255a905d09ac187e7d25070c4b10ee5459fc4cae9/add-on-quicktools-v3-v1.1.7.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/quicktools-v3/","maintainer":"PongBuster","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil"]},{"id":"named_attribute_list","schema_version":"1.0.0","name":"Node Attribute List(节点属性列表)","version":"2.11.0","tagline":"Quickly Add Attribute Node in GN and Shader(几何节点和材质里快速添加属性节点)","archive_hash":"sha256:2403d64ec154913f5a72543e78ccdd6280df9f6010e9e2fe08d9cdc6e8f78658","archive_size":100935,"archive_url":"https://extensions.blender.org/download/sha256:2403d64ec154913f5a72543e78ccdd6280df9f6010e9e2fe08d9cdc6e8f78658/add-on-named-attribute-list-v2.11.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/named-attribute-list/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"CurveFitting","schema_version":"1.0.0","name":"Curve Fitting","version":"0.3.0","tagline":"Smooth out uneven vertex arrangements keeping original shape","archive_hash":"sha256:4c39752087fdab6108589e4506824701cf6d352f32e6be8f66891362bd382e9a","archive_size":22449,"archive_url":"https://extensions.blender.org/download/sha256:4c39752087fdab6108589e4506824701cf6d352f32e6be8f66891362bd382e9a/add-on-curvefitting-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/curvefitting/","maintainer":"zuda77","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"Utilities_Gadget","schema_version":"1.0.0","name":"Utilities Gadget","version":"1.1.5","tagline":"Batch rendering and model conversio","archive_hash":"sha256:9a56ba155f59e292d1769e1ac3cd3eb641cc9013ead197853fa398757be9d6bc","archive_size":6095,"archive_url":"https://extensions.blender.org/download/sha256:9a56ba155f59e292d1769e1ac3cd3eb641cc9013ead197853fa398757be9d6bc/add-on-utilities-gadget-v1.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/utilities-gadget/","maintainer":"HurcaGuari","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"bbone_Tools","schema_version":"1.0.0","name":"the bendybones toolkit","version":"1.6.0","tagline":"a simple toolkit for rigging with bendybones","archive_hash":"sha256:a5560c8e61a605354ae65519f983ac19636fcdcebc5f781bde727d58e7906a79","archive_size":4337,"archive_url":"https://extensions.blender.org/download/sha256:a5560c8e61a605354ae65519f983ac19636fcdcebc5f781bde727d58e7906a79/add-on-bbone-tools-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bbone-tools/","maintainer":"Felipe-G","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"viewtools","schema_version":"1.0.0","name":"ViewTools","version":"1.0.0","tagline":"Essential Viewport tools for industrial workflows","archive_hash":"sha256:1d9bb6ed90fc9f289b34e63efb833acb370dd6aaed98a19183c13598236a8922","archive_size":4857,"archive_url":"https://extensions.blender.org/download/sha256:1d9bb6ed90fc9f289b34e63efb833acb370dd6aaed98a19183c13598236a8922/add-on-viewtools-v1.0.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/viewtools/","maintainer":"Ishara-Sandeepa","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface","Mesh","Object"]},{"id":"persiantype","schema_version":"1.0.0","name":"Persian type","version":"2.0.1","tagline":"Add Persian/Arabic type directly to Blender","archive_hash":"sha256:f519fd2e627f369686c5b9272526326b5cfb37e2555deb39f1a17299b8f1cb9e","archive_size":1952767,"archive_url":"https://extensions.blender.org/download/sha256:f519fd2e627f369686c5b9272526326b5cfb37e2555deb39f1a17299b8f1cb9e/add-on-persiantype-v2.0.1.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/persiantype/","maintainer":"Damyar","license":["SPDX:GPL-3.0-or-later"]},{"id":"group_input_helper","schema_version":"1.0.0","name":"Group input helper(节点组输入助手)","version":"2.9.8","tagline":"Qucik add/split/merge Group Input node/socket(快速添加拆分合并移动组输入节点接口)","archive_hash":"sha256:0e0563d36700e10a98c0c124d20d6866186625a0d351a21096caf45a318b0007","archive_size":76056,"archive_url":"https://extensions.blender.org/download/sha256:0e0563d36700e10a98c0c124d20d6866186625a0d351a21096caf45a318b0007/add-on-group-input-helper-v2.9.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/group-input-helper/","maintainer":"W_Cloud","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"botanesque","schema_version":"1.0.0","name":"Botanesque","version":"1.1.0","tagline":"Cozy brown blender theme","archive_hash":"sha256:fe991ce8b287c8aaea5f3c4cf503be2afd1fb96daa9ee0eb0a954b9cdc70a200","archive_size":5736,"archive_url":"https://extensions.blender.org/download/sha256:fe991ce8b287c8aaea5f3c4cf503be2afd1fb96daa9ee0eb0a954b9cdc70a200/theme-botanesque-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/botanesque/","maintainer":"polygoniq","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"shutdown_after_render","schema_version":"1.0.0","name":"Shutdown after render","version":"0.4.0","tagline":"Automatically shuts down your PC after your render finishes","archive_hash":"sha256:d7dc0b029145c7411cf660ca67d4909104ea13f3fc8bec2474dc5a8942479f1a","archive_size":4087,"archive_url":"https://extensions.blender.org/download/sha256:d7dc0b029145c7411cf660ca67d4909104ea13f3fc8bec2474dc5a8942479f1a/add-on-shutdown-after-render-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shutdown-after-render/","maintainer":"David-Bühler","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"io_scene_pod","schema_version":"1.0.0","name":"UbiSoft Pod formats","version":"0.36.8","tagline":"Import-Export Pod tracks, ghosts, images, and cars","archive_hash":"sha256:a419a08af2dba5dbf487fbe33e98ad3738594e8549718332f4d719aac8c6b57b","archive_size":7257423,"archive_url":"https://extensions.blender.org/download/sha256:a419a08af2dba5dbf487fbe33e98ad3738594e8549718332f4d719aac8c6b57b/add-on-io-scene-pod-v0.36.8-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/io-scene-pod/","maintainer":"Syroot","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export","Scene"]},{"id":"has_paint_layers","schema_version":"1.0.0","name":"HAS Paint Layers","version":"0.8.93","tagline":"Layers for texture painting","archive_hash":"sha256:d768c479f5d60b9eba58555db5a1d9d7ff29c402f8b4f7418d5ad34d3c790255","archive_size":68078,"archive_url":"https://extensions.blender.org/download/sha256:d768c479f5d60b9eba58555db5a1d9d7ff29c402f8b4f7418d5ad34d3c790255/add-on-has-paint-layers-v0.8.93.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/has-paint-layers/","maintainer":"Hirourk","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Store temporary images"},"tags":["Paint","Bake"]},{"id":"shapekey_keeper","schema_version":"1.0.0","name":"SKkeeper","version":"1.8.2","tagline":"Applies modifiers while keeping shapekeys and drivers","archive_hash":"sha256:4a02b8366b5b251b36b03b397781572b5ce60e12900d869a419b8969cd1cc678","archive_size":20217,"archive_url":"https://extensions.blender.org/download/sha256:4a02b8366b5b251b36b03b397781572b5ce60e12900d869a419b8969cd1cc678/add-on-shapekey-keeper-v1.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapekey-keeper/","maintainer":"Nidus","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"RetroGrey","schema_version":"1.0.0","name":"RetroGrey","version":"1.3.4","tagline":"Theme inspired by the grey color of 90s computer devices","archive_hash":"sha256:efae32bcfb363f12d5be7c11b3dc9398fa938f0113f3524e96f37e84582ff758","archive_size":6837,"archive_url":"https://extensions.blender.org/download/sha256:efae32bcfb363f12d5be7c11b3dc9398fa938f0113f3524e96f37e84582ff758/theme-retrogrey-v1.3.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/retrogrey/","maintainer":"Oskar_Wasiluk","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"datablock_utils","schema_version":"1.0.0","name":"Data-Block Utilities","version":"1.3.2","tagline":"Show users, merge duplicates, find similar, and more","archive_hash":"sha256:db3574b4ae63feb175a5027b3d393fb586ba2d1cdf605618ca69f8c3b6592e07","archive_size":1740530,"archive_url":"https://extensions.blender.org/download/sha256:db3574b4ae63feb175a5027b3d393fb586ba2d1cdf605618ca69f8c3b6592e07/add-on-datablock-utils-v1.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/datablock-utils/","maintainer":"Leonardo-Pike-Excell","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","System"]},{"id":"ambientcg_material_importer","schema_version":"1.0.0","name":"AmbientCG Material Importer","version":"1.4.0","tagline":"One-click material creation from AmbientCG","archive_hash":"sha256:83f901d2671ad425d1a2251ca7ed74a02a4ad87b0870b14a82bb04b76079a082","archive_size":4167,"archive_url":"https://extensions.blender.org/download/sha256:83f901d2671ad425d1a2251ca7ed74a02a4ad87b0870b14a82bb04b76079a082/add-on-ambientcg-material-importer-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ambientcg-material-importer/","maintainer":"Nino-Filiu","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and cache textures to disk","network":"Makes calls to AmbientCG"},"tags":["Import-Export","Material"]},{"id":"cursor_plus","schema_version":"1.0.0","name":"3D Cursor Plus","version":"1.0.4","tagline":"Axes, undo and few other tools for your 3D Cursor","archive_hash":"sha256:e4f35c9732aa75a941cce0bb25ba82a1c606239bef60513a30bf2339f0c24a47","archive_size":79566,"archive_url":"https://extensions.blender.org/download/sha256:e4f35c9732aa75a941cce0bb25ba82a1c606239bef60513a30bf2339f0c24a47/add-on-cursor-plus-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cursor-plus/","maintainer":"chokavr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/Load gizmo presets and Pie menu configuration"},"tags":["3D View"]},{"id":"two_point_perspective","schema_version":"1.0.0","name":"Two-Point Perspective","version":"0.0.2","tagline":"Replaces the active camera with a two-point perspective one","archive_hash":"sha256:5b6e59e62df8879f4341f242cd3a4488dc0fe441f80385a23915d6a3fcb1b3bd","archive_size":17509,"archive_url":"https://extensions.blender.org/download/sha256:5b6e59e62df8879f4341f242cd3a4488dc0fe441f80385a23915d6a3fcb1b3bd/add-on-two-point-perspective-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/two-point-perspective/","maintainer":"Athina-Syntychaki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"Grid_Dimensions","schema_version":"1.0.0","name":"Grid Dimensions/网格标注","version":"1.1.2","tagline":"Grid Dimensions/网格标注","archive_hash":"sha256:1f61463cc6ea7a08297e7c7b6f268eba1a0240c07b2912628fcd4a1b5bb14053","archive_size":34880,"archive_url":"https://extensions.blender.org/download/sha256:1f61463cc6ea7a08297e7c7b6f268eba1a0240c07b2912628fcd4a1b5bb14053/add-on-grid-dimensions-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grid-dimensions/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"mpfb","schema_version":"1.0.0","name":"MPFB","version":"2.0.16","tagline":"Human character generator and editor","archive_hash":"sha256:b5cdc8b08147e0c6463e4faa01147491b13a0b062f73415363f029debd11c934","archive_size":44978070,"archive_url":"https://extensions.blender.org/download/sha256:b5cdc8b08147e0c6463e4faa01147491b13a0b062f73415363f029debd11c934/add-on-mpfb-v2.0.16.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mpfb/","maintainer":"Joel-Palmius","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load and save data","network":"(optional) Interact with local instance of MakeHuman"},"tags":["Add Mesh","Rigging"]},{"id":"motion_inspector","schema_version":"1.0.0","name":"Motion inspector","version":"0.2.9","tagline":"Inspect F-Curves and animated object movement","archive_hash":"sha256:693f63eb2e2f8bb04e8dbe703dfd7dd1404026ce5dbe2474fe25eae06381db53","archive_size":4834,"archive_url":"https://extensions.blender.org/download/sha256:693f63eb2e2f8bb04e8dbe703dfd7dd1404026ce5dbe2474fe25eae06381db53/add-on-motion-inspector-v0.2.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/motion-inspector/","maintainer":"Chalouek-RGBit","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","3D View"]},{"id":"modern_primitive","schema_version":"1.0.0","name":"Modern Primitive","version":"0.0.55","tagline":"Modern Primitive for Non-Destructive Modeling","archive_hash":"sha256:73cbd13d9a7f39c60fc49a48752ebcfcd078f215db9304a26cf4e22a398a0bf8","archive_size":3407351,"archive_url":"https://extensions.blender.org/download/sha256:73cbd13d9a7f39c60fc49a48752ebcfcd078f215db9304a26cf4e22a398a0bf8/add-on-modern-primitive-v0.0.55.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/modern-primitive/","maintainer":"Degarashi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Geometry-Node from Add-on Directory"},"tags":["Add Mesh","Modeling"]},{"id":"greasepencil_nudge_frames","schema_version":"1.0.0","name":"Grease Pencil Nudge Frames","version":"0.1.1","tagline":"Modify exposure in the dopesheet with D/F","archive_hash":"sha256:935857f93894275c01154fbf40ac769f5430fdcf5737315d9f84a2aef9922c6f","archive_size":1738,"archive_url":"https://extensions.blender.org/download/sha256:935857f93894275c01154fbf40ac769f5430fdcf5737315d9f84a2aef9922c6f/add-on-greasepencil-nudge-frames-v0.1.1.zip","type":"add-on","blender_version_min":"4.3.1","website":"https://extensions.blender.org/add-ons/greasepencil-nudge-frames/","maintainer":"bergamote","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Grease Pencil"]},{"id":"Non_Destructive_Primitives","schema_version":"1.0.0","name":"ND Primitives","version":"0.2.46","tagline":"Non-Destructive Parametric Primitives in Blender","archive_hash":"sha256:7be2a39d184c099018628d93580fec929a192f3a367d3eb332dbc8231eb8d4f8","archive_size":290494,"archive_url":"https://extensions.blender.org/download/sha256:7be2a39d184c099018628d93580fec929a192f3a367d3eb332dbc8231eb8d4f8/add-on-non-destructive-primitives-v0.2.46.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/non-destructive-primitives/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Geometry Nodes Objects from Add-on Folder"},"tags":["Modeling","Add Mesh"]},{"id":"orange_dark_vignette","schema_version":"1.0.0","name":"Orange Dark + Vignette","version":"1.1.0","tagline":"Transparent orange UI and vignette, Blender colors","archive_hash":"sha256:4713520790d11b9b883ee47b9f9fb751615cb5c1d02ad3c4aa455d40ca08832d","archive_size":5835,"archive_url":"https://extensions.blender.org/download/sha256:4713520790d11b9b883ee47b9f9fb751615cb5c1d02ad3c4aa455d40ca08832d/theme-orange-dark-vignette-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/orange-dark-vignette/","maintainer":"danil_orlow","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"node_pinyin","schema_version":"1.0.0","name":"szm/首字母","version":"1.2.0","tagline":"Enable node and modifier search with PinYin/支持节点和修改器的中文拼音搜索","archive_hash":"sha256:f94b8f609474f189ed0735335f7503d47679c8a76ef7ba1be1efeaa169edd3fe","archive_size":40672,"archive_url":"https://extensions.blender.org/download/sha256:f94b8f609474f189ed0735335f7503d47679c8a76ef7ba1be1efeaa169edd3fe/add-on-node-pinyin-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-pinyin/","maintainer":"Xinyu-Zhu","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"proto_game_asset_tools","schema_version":"1.0.0","name":"PROTO Game Asset Tools","version":"1.3.0","tagline":"tools for game assets, fixed Unreal FBX exports","archive_hash":"sha256:14f7544d04722472d4b24bbdb04550aea16c39c6e5e8a49dfe46220dbe274802","archive_size":28673,"archive_url":"https://extensions.blender.org/download/sha256:14f7544d04722472d4b24bbdb04550aea16c39c6e5e8a49dfe46220dbe274802/add-on-proto-game-asset-tools-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/proto-game-asset-tools/","maintainer":"PROTOWLF","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export FBX to disk","clipboard":"Copy and paste data"},"tags":["Import-Export","Game Engine"]},{"id":"b_subeditor","schema_version":"1.0.0","name":"B SubEditor","version":"1.0.1","tagline":"Sync subtitles in Text Editor/VSE","archive_hash":"sha256:ecf1dd66d0d2812603227a549d07efe010749e17149f7c3c247b07fa68f3cf5d","archive_size":6393,"archive_url":"https://extensions.blender.org/download/sha256:ecf1dd66d0d2812603227a549d07efe010749e17149f7c3c247b07fa68f3cf5d/add-on-b-subeditor-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b-subeditor/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory with subtitle files"},"tags":["Sequencer","Text Editor","Import-Export"]},{"id":"b_Unicode","schema_version":"1.0.0","name":"B Unicode","version":"1.1.1","tagline":"Access Unicode characters","archive_hash":"sha256:8f2e8f263321c2d29cd54ddbb3bb25d04965f5f58921b5749702e475774cd83c","archive_size":40909,"archive_url":"https://extensions.blender.org/download/sha256:8f2e8f263321c2d29cd54ddbb3bb25d04965f5f58921b5749702e475774cd83c/add-on-b-unicode-v1.1.1.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/b-unicode/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Sequencer","Text Editor"]},{"id":"sco_edgewise","schema_version":"1.0.0","name":"SCO EdgeWise","version":"2.0.6","tagline":"Measure distances, edge lengths, and angles in Edit Mode","archive_hash":"sha256:c541631ac21cda9bf95205851e0910404ba01b115bc524a26f2b60b9f9cd4dae","archive_size":137848,"archive_url":"https://extensions.blender.org/download/sha256:c541631ac21cda9bf95205851e0910404ba01b115bc524a26f2b60b9f9cd4dae/add-on-sco-edgewise-v2.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sco-edgewise/","maintainer":"BEAST_of_BURDEN","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"font_selector","schema_version":"1.0.0","name":"Font Selector","version":"3.2.2","tagline":"Browse available fonts from blender","archive_hash":"sha256:6f2006ea677059102fc7265f5dd0d9149ba80b93cbcef7d09d06aade32fda3c6","archive_size":1183546,"archive_url":"https://extensions.blender.org/download/sha256:6f2006ea677059102fc7265f5dd0d9149ba80b93cbcef7d09d06aade32fda3c6/add-on-font-selector-v3.2.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/font-selector/","maintainer":"tonton_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing json preset files, Reading font files"},"tags":["Import-Export","System"]},{"id":"vertex_overlap","schema_version":"1.0.0","name":"Vertex Overlap","version":"1.1.0","tagline":"Alerts you to overlapping vertices in real-time","archive_hash":"sha256:0c281759e0e4e627b5a6d9f1a134391a04e1a944746ef8472186cf7416eb6f14","archive_size":17220,"archive_url":"https://extensions.blender.org/download/sha256:0c281759e0e4e627b5a6d9f1a134391a04e1a944746ef8472186cf7416eb6f14/add-on-vertex-overlap-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vertex-overlap/","maintainer":"Shawn-Shipley","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"quick_resolution_setup","schema_version":"1.0.0","name":"Quick Resolution Setup","version":"1.1.0","tagline":"Quick Resolution Setup","archive_hash":"sha256:e90bfb222c33399c8569dc67819d677bca9a5e3cca2c881a8968013e948e40ea","archive_size":23899,"archive_url":"https://extensions.blender.org/download/sha256:e90bfb222c33399c8569dc67819d677bca9a5e3cca2c881a8968013e948e40ea/add-on-quick-resolution-setup-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-resolution-setup/","maintainer":"Hades-Su","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Render"]},{"id":"audio_notifier","schema_version":"1.0.0","name":"Audio Notifier","version":"1.0.5","tagline":"Audio notifications for success, cancel and warning","archive_hash":"sha256:c268571786d940171942d5e747c1c3424a5d02c184600d11704a8a46b5199541","archive_size":36990,"archive_url":"https://extensions.blender.org/download/sha256:c268571786d940171942d5e747c1c3424a5d02c184600d11704a8a46b5199541/add-on-audio-notifier-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/audio-notifier/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"k_tools_mode_highlight","schema_version":"1.0.0","name":"K-Tools: Mode Highlight","version":"1.1.5","tagline":"Automatically change the header color based on the current mode","archive_hash":"sha256:eae884fe1f34f0453d23b0b254ab85a2cd3e85b7b95dbf867a65fd7370c804c4","archive_size":13305,"archive_url":"https://extensions.blender.org/download/sha256:eae884fe1f34f0453d23b0b254ab85a2cd3e85b7b95dbf867a65fd7370c804c4/add-on-k-tools-mode-highlight-v1.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-mode-highlight/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"xray_selection_tools","schema_version":"1.0.0","name":"X-Ray Selection Tools","version":"4.10.2","tagline":"Box, lasso and circle selection tools with x-ray","archive_hash":"sha256:5abcac3932b30d66b8d693aaf6cf54811b9944a6fb7226f0819fe29e3157134e","archive_size":88167,"archive_url":"https://extensions.blender.org/download/sha256:5abcac3932b30d66b8d693aaf6cf54811b9944a6fb7226f0819fe29e3157134e/add-on-xray-selection-tools-v4.10.2.zip","type":"add-on","blender_version_min":"5.1.1","website":"https://extensions.blender.org/add-ons/xray-selection-tools/","maintainer":"MarshmallowCirno","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"autokey_highlight","schema_version":"1.0.0","name":"Autokey Highlight","version":"1.0.7","tagline":"Highlights the viewport when autokey is enabled","archive_hash":"sha256:3b250ef260551db38a91e00e8a605747260c47798b1db8a2dffb8fcd8c8fa6e8","archive_size":3186,"archive_url":"https://extensions.blender.org/download/sha256:3b250ef260551db38a91e00e8a605747260c47798b1db8a2dffb8fcd8c8fa6e8/add-on-autokey-highlight-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/autokey-highlight/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","3D View","System"]},{"id":"EdgeFlow","schema_version":"1.0.0","name":"EdgeFlow","version":"1.1.2","tagline":"Helps adjusting mesh geometry to curved surfaces","archive_hash":"sha256:4fa53590a837813c72dc9ed0a416f8e3de61352abb262b461974cd9f7092b1c1","archive_size":34350,"archive_url":"https://extensions.blender.org/download/sha256:4fa53590a837813c72dc9ed0a416f8e3de61352abb262b461974cd9f7092b1c1/add-on-edgeflow-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edgeflow/","maintainer":"Benjamin-Sauder","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"LightHepler","schema_version":"1.0.0","name":"Light Helper","version":"0.4.6","tagline":"Light Helper","archive_hash":"sha256:a99c5697ffcb22e6d7a64cd17d353137206b38b707519f03afcaa23933ba214d","archive_size":20722,"archive_url":"https://extensions.blender.org/download/sha256:a99c5697ffcb22e6d7a64cd17d353137206b38b707519f03afcaa23933ba214d/add-on-lighthepler-v0.4.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lighthepler/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"lattice_helper","schema_version":"1.0.0","name":"Lattice Helper","version":"1.2.5","tagline":"Apply Lattice modifier to object(s) in object/edit mode","archive_hash":"sha256:f55bbabd50eef367d05158fbd122b93c2dacb47732d871f4e67455aafd3259c4","archive_size":12464,"archive_url":"https://extensions.blender.org/download/sha256:f55bbabd50eef367d05158fbd122b93c2dacb47732d871f4e67455aafd3259c4/add-on-lattice-helper-v1.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lattice-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"color_randomizer","schema_version":"1.0.0","name":"Color Randomizer","version":"1.3.0","tagline":"Randomly assign colors to objects","archive_hash":"sha256:08820b85193be83b338634efc1e941a944b1666273b9b052771d88f667477944","archive_size":10414,"archive_url":"https://extensions.blender.org/download/sha256:08820b85193be83b338634efc1e941a944b1666273b9b052771d88f667477944/add-on-color-randomizer-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/color-randomizer/","maintainer":"ilumetric","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"lumos","schema_version":"1.0.0","name":"Lumos","version":"3.2.2","tagline":"Bring your lighting to the next level","archive_hash":"sha256:65420e29fe19c6213415f0091bb28b5e3e41d238d9062042157fd286a2cef8ef","archive_size":40153,"archive_url":"https://extensions.blender.org/download/sha256:65420e29fe19c6213415f0091bb28b5e3e41d238d9062042157fd286a2cef8ef/add-on-lumos-v3.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lumos/","maintainer":"Eqkoss","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting","3D View"]},{"id":"rmKit","schema_version":"1.0.0","name":"rmKit","version":"1.0.13","tagline":"Tools and Utils for Modeling and GameWorkflows","archive_hash":"sha256:25c336e8ad89518cb70c7a460ec07fa94d14bd7ebd6170974817d3ee3240b92c","archive_size":83033,"archive_url":"https://extensions.blender.org/download/sha256:25c336e8ad89518cb70c7a460ec07fa94d14bd7ebd6170974817d3ee3240b92c/add-on-rmkit-v1.0.13.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rmkit/","maintainer":"Timothee-Yeramian","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Modeling","Mesh","Object","Material"]},{"id":"Duplication_Tool_addon","schema_version":"1.0.0","name":"Duplication Tool","version":"1.0.2","tagline":"Create copies with incremental names and materials","archive_hash":"sha256:691aedb7c878f624519c697a6502fb9fe7ecc7c2f258d3c9ca34ded0c2ff2864","archive_size":3052,"archive_url":"https://extensions.blender.org/download/sha256:691aedb7c878f624519c697a6502fb9fe7ecc7c2f258d3c9ca34ded0c2ff2864/add-on-duplication-tool-addon-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/duplication-tool-addon/","maintainer":"Vinay-chikkam","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","System"]},{"id":"import_files_svg_cuts_directory","schema_version":"1.0.0","name":"Import SVG Cuts Directory","version":"1.0.1","tagline":"Import object based on a directory of SVG cuts","archive_hash":"sha256:bdfe34a8b5e59c0d98342756cfc0ef9185622bd161a3642ba1a43ed0818b6cfb","archive_size":5958242,"archive_url":"https://extensions.blender.org/download/sha256:bdfe34a8b5e59c0d98342756cfc0ef9185622bd161a3642ba1a43ed0818b6cfb/add-on-import-files-svg-cuts-directory-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-files-svg-cuts-directory/","maintainer":"Benedikt-Schaber","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import directory of SVGs from disk"},"tags":["Import-Export"]},{"id":"sakura_poselib","schema_version":"1.0.0","name":"Sakura Poselib","version":"1.4.4","tagline":"Yet another Pose Library with handful features","archive_hash":"sha256:09a1c37cb2ef33976df34d8629bd0b33ec2e734eb916093128ed0f6dc060102e","archive_size":56108,"archive_url":"https://extensions.blender.org/download/sha256:09a1c37cb2ef33976df34d8629bd0b33ec2e734eb916093128ed0f6dc060102e/add-on-sakura-poselib-v1.4.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sakura-poselib/","maintainer":"Kafuji","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save/Load Poselib data as Json or CSV"},"tags":["Animation"]},{"id":"audio_exporter","schema_version":"1.0.0","name":"Audio Exporter","version":"1.1.0","tagline":"Export audio separate or combined files in VSE","archive_hash":"sha256:4154a825f0d4ffb9b0d47f400bc8c2b6880e853510ad93650bc598c63c9a14be","archive_size":6145,"archive_url":"https://extensions.blender.org/download/sha256:4154a825f0d4ffb9b0d47f400bc8c2b6880e853510ad93650bc598c63c9a14be/add-on-audio-exporter-v1.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/audio-exporter/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory where it exports audio files"},"tags":["Sequencer"]},{"id":"Shadingplus","schema_version":"1.0.0","name":"Shading +","version":"1.1.4","tagline":"Shading pie for designers and artists","archive_hash":"sha256:af133ec48e4121248200435f78a3f9d7601ad80b6b47fe68d6fa906870117b67","archive_size":50470985,"archive_url":"https://extensions.blender.org/download/sha256:af133ec48e4121248200435f78a3f9d7601ad80b6b47fe68d6fa906870117b67/add-on-shadingplus-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shadingplus/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"brushstroke_tools","schema_version":"1.0.0","name":"Brushstroke Tools","version":"1.2.3","tagline":"Brushstroke painting tools by the Blender Studio","archive_hash":"sha256:b66728b70b2d6af5ad942b5aa27fcc540db0972c22169480aa552d1e22061fe4","archive_size":29638062,"archive_url":"https://extensions.blender.org/download/sha256:b66728b70b2d6af5ad942b5aa27fcc540db0972c22169480aa552d1e22061fe4/add-on-brushstroke-tools-v1.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/brushstroke-tools/","maintainer":"Blender Studio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write brushstroke asset resources from/to disk"},"tags":["Paint","Geometry Nodes","Material"]},{"id":"node_color_tools","schema_version":"1.0.0","name":"Node Color Tools Pie","version":"1.0.3","tagline":"Quick, organized node colors with pie menu ease","archive_hash":"sha256:e59fd49dbc701c9f45705e7f28dcf4d5d93dc13bf8820a5c8bf813a50c33b1e7","archive_size":4752,"archive_url":"https://extensions.blender.org/download/sha256:e59fd49dbc701c9f45705e7f28dcf4d5d93dc13bf8820a5c8bf813a50c33b1e7/add-on-node-color-tools-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-color-tools/","maintainer":"Lumpengnom","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"mesh_analysis_overlay","schema_version":"1.0.0","name":"Mesh Analysis Overlay","version":"4.1.0","tagline":"Mesh Analysis Overlay","archive_hash":"sha256:08b24bce782c7c8c72d47a3e2c8708a571f19538fed30d57d30fa874f7791a5c","archive_size":18588,"archive_url":"https://extensions.blender.org/download/sha256:08b24bce782c7c8c72d47a3e2c8708a571f19538fed30d57d30fa874f7791a5c/add-on-mesh-analysis-overlay-v4.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/mesh-analysis-overlay/","maintainer":"DShot92","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"gamiflow","schema_version":"1.0.0","name":"GamiFlow","version":"1.9.10","tagline":"Easier game asset creation","archive_hash":"sha256:725dbcc49ccbbaac34d6733f44dcae055ce4ed2c304822df7c5a91417e2e0283","archive_size":162741,"archive_url":"https://extensions.blender.org/download/sha256:725dbcc49ccbbaac34d6733f44dcae055ce4ed2c304822df7c5a91417e2e0283/add-on-gamiflow-v1.9.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gamiflow/","maintainer":"Mathieu.Einig","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export FBX files to disk"},"tags":["Import-Export","Object"]},{"id":"Runlevel_Two","schema_version":"1.0.0","name":"Runlevel Two","version":"1.2.0","tagline":"A refined, distraction-free color palette, pleasing to the eye","archive_hash":"sha256:58de5dc3b042dc70479d8315ea628381f1549c6a22c22941a8ac90adabaca1a1","archive_size":5962,"archive_url":"https://extensions.blender.org/download/sha256:58de5dc3b042dc70479d8315ea628381f1549c6a22c22941a8ac90adabaca1a1/theme-runlevel-two-v1.2.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/runlevel-two/","maintainer":"Rene-Smaal","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Accessibility","Colorful"]},{"id":"render_overscan","schema_version":"1.0.0","name":"Render Overscan","version":"0.1.16","tagline":"Applies and manages overscan in renders","archive_hash":"sha256:3fd9bb4da29f3d9a572e6c24e3740c651f50172e5f3e421dacfd0ab28d9428fa","archive_size":3933,"archive_url":"https://extensions.blender.org/download/sha256:3fd9bb4da29f3d9a572e6c24e3740c651f50172e5f3e421dacfd0ab28d9428fa/add-on-render-overscan-v0.1.16.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/render-overscan/","maintainer":"efimpetelin","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"strip_array","schema_version":"1.0.0","name":"Strip Array","version":"1.1.0","tagline":"Array of duplicated strips, Customizable, Strips Display","archive_hash":"sha256:35813e53db04e787e8a6629b33529766cedc3d78d25111ab200822eda1b577ba","archive_size":4825,"archive_url":"https://extensions.blender.org/download/sha256:35813e53db04e787e8a6629b33529766cedc3d78d25111ab200822eda1b577ba/add-on-strip-array-v1.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/strip-array/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"latticemagic","schema_version":"1.0.0","name":"Lattice Magic","version":"1.0.1","tagline":"Lattice-based deforming tools","archive_hash":"sha256:7f888bac24e8ea490446b75a07609e37f257d7cf7ba67c44703f06de0bb1c91e","archive_size":29840,"archive_url":"https://extensions.blender.org/download/sha256:7f888bac24e8ea490446b75a07609e37f257d7cf7ba67c44703f06de0bb1c91e/add-on-latticemagic-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/latticemagic/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"Show_Object_Data_Users_in_Viewport","schema_version":"1.0.0","name":"Show Collection/Object/Data Users in Viewport","version":"1.0.6","tagline":"Show Collection/Object/Data Users in the Viewport","archive_hash":"sha256:9976496cb96fd37b3121f107981be35f6336da4692e00bb43ccdb4582d010699","archive_size":4288,"archive_url":"https://extensions.blender.org/download/sha256:9976496cb96fd37b3121f107981be35f6336da4692e00bb43ccdb4582d010699/add-on-show-object-data-users-in-viewport-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/show-object-data-users-in-viewport/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"camera_shakify","schema_version":"1.0.0","name":"Camera Shakify","version":"0.5.1","tagline":"Add captured camera shake/wobble to your cameras","archive_hash":"sha256:40bb62e0960b301fe8c7b1de11ec959b8ce6c55ce03ed720c5c3b21c0c764e36","archive_size":78219,"archive_url":"https://extensions.blender.org/download/sha256:40bb62e0960b301fe8c7b1de11ec959b8ce6c55ce03ed720c5c3b21c0c764e36/add-on-camera-shakify-v0.5.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/camera-shakify/","maintainer":"Eat the Future","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Camera"]},{"id":"embroidery_importer","schema_version":"1.0.0","name":"Embroidery Importer","version":"0.9.6","tagline":"Import embroidery files into Blender","archive_hash":"sha256:d9481434abe7dc30e943e794733519035a1e29f8ba1590a23961a658860774f7","archive_size":157512,"archive_url":"https://extensions.blender.org/download/sha256:d9481434abe7dc30e943e794733519035a1e29f8ba1590a23961a658860774f7/add-on-embroidery-importer-v0.9.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/embroidery-importer/","maintainer":"javl","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read embroidery files from disk"},"tags":["Import-Export"]},{"id":"mio3_uv","schema_version":"1.0.0","name":"Mio3 UV","version":"2.2.0","tagline":"UV Edit Assistant Tools","archive_hash":"sha256:597e349839c347c7894381b4fcbcea7777ec034f604ad753bcb1038323478219","archive_size":5203225,"archive_url":"https://extensions.blender.org/download/sha256:597e349839c347c7894381b4fcbcea7777ec034f604ad753bcb1038323478219/add-on-mio3-uv-v2.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mio3-uv/","maintainer":"mio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Imports images, nodes, and translations from the bundled files"},"tags":["UV"]},{"id":"S3D_QuickSwitch","schema_version":"1.0.0","name":"Quick Switch","version":"2.1.0","tagline":"Quickly switch between Editor Areas","archive_hash":"sha256:d6b8fe2348c76f91687bfcdedf7264dc605c1eff99562b8a3827151f7d19f380","archive_size":6932,"archive_url":"https://extensions.blender.org/download/sha256:d6b8fe2348c76f91687bfcdedf7264dc605c1eff99562b8a3827151f7d19f380/add-on-s3d-quickswitch-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/s3d-quickswitch/","maintainer":"Silvie3D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","Pipeline"]},{"id":"Frigus_Nox","schema_version":"1.0.0","name":"Frigus Nox","version":"1.0.8","tagline":"Frigus Nox theme","archive_hash":"sha256:5bf2f16afce50f77cb329a0dbd80c0d24d1c925365b273e6359714f96876444e","archive_size":5668,"archive_url":"https://extensions.blender.org/download/sha256:5bf2f16afce50f77cb329a0dbd80c0d24d1c925365b273e6359714f96876444e/theme-frigus-nox-v1.0.8.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frigus-nox/","maintainer":"Cyrill-Vitkovskiy","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"spreadsheet_import","schema_version":"1.0.0","name":"Spreadsheet Import","version":"0.4.0","tagline":"Import data to spreadsheet for use with geometry nodes","archive_hash":"sha256:a339f6a2de9447fd26e59bcc1b4241bd493a251de1ed242579671d6219ac21ba","archive_size":16630,"archive_url":"https://extensions.blender.org/download/sha256:a339f6a2de9447fd26e59bcc1b4241bd493a251de1ed242579671d6219ac21ba/add-on-spreadsheet-import-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/spreadsheet-import/","maintainer":"smonbrogg","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load CSV and JSON files from disk"},"tags":["Import-Export","Geometry Nodes"]},{"id":"Scene_ViewLayer_Switcher","schema_version":"1.0.0","name":"Scene/View/Workspace Switcher","version":"1.1.0","tagline":"Shortcut for Scenes/ViewLayers","archive_hash":"sha256:1d8572fcf0ce5007edd83615b40418230c3ce7be133e005d0986ff065c2a04d0","archive_size":11003,"archive_url":"https://extensions.blender.org/download/sha256:1d8572fcf0ce5007edd83615b40418230c3ce7be133e005d0986ff065c2a04d0/add-on-scene-viewlayer-switcher-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-viewlayer-switcher/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"pohlke","schema_version":"1.0.0","name":"Pohlke","version":"2.0.0","tagline":"One-click standard axonometric and oblique projection cameras","archive_hash":"sha256:c20f9ae11702babf1e09bb0586ff30731f7a5cea7869d0e17a77c0a6ac40ad25","archive_size":16257,"archive_url":"https://extensions.blender.org/download/sha256:c20f9ae11702babf1e09bb0586ff30731f7a5cea7869d0e17a77c0a6ac40ad25/add-on-pohlke-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pohlke/","maintainer":"mononym","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"FishSim","schema_version":"1.0.0","name":"FishSim","version":"4.2.0","tagline":"Fish Swimming Simulation","archive_hash":"sha256:85e0a06c223139250853e1bb7e51fabf47ed7fcd287de89440bad1f6ee2b244a","archive_size":16851312,"archive_url":"https://extensions.blender.org/download/sha256:85e0a06c223139250853e1bb7e51fabf47ed7fcd287de89440bad1f6ee2b244a/add-on-fishsim-v4.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fishsim/","maintainer":"Nerk","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"sync_render_sets","schema_version":"1.0.0","name":"Sync Render Sets","version":"1.2.1","tagline":"Sync scenes render settings/colorspaces,viewlayers`s passes","archive_hash":"sha256:37cfd9b7c85b37fb0e53ebc7c1148bb0e331e1731059a7d408bfbf40652ee362","archive_size":24219,"archive_url":"https://extensions.blender.org/download/sha256:37cfd9b7c85b37fb0e53ebc7c1148bb0e331e1731059a7d408bfbf40652ee362/add-on-sync-render-sets-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sync-render-sets/","maintainer":"CP-Design","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"circular_stacker","schema_version":"1.0.0","name":"Circular Stacker","version":"1.0.0","tagline":"Distribute selected objects in a circular (donut) pattern","archive_hash":"sha256:c8beafaa14035e601afd131c1129460d396f3d0260a807d2ca7a1c3552361451","archive_size":3099,"archive_url":"https://extensions.blender.org/download/sha256:c8beafaa14035e601afd131c1129460d396f3d0260a807d2ca7a1c3552361451/add-on-circular-stacker-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/circular-stacker/","maintainer":"Hydrocallis","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"overscan","schema_version":"1.0.0","name":"Overscan Render","version":"1.2.3","tagline":"Render with an overscan","archive_hash":"sha256:6599df781f683d78c2a0f2095b81c8d920e74d4b32d6de19095986afe299e10b","archive_size":3063,"archive_url":"https://extensions.blender.org/download/sha256:6599df781f683d78c2a0f2095b81c8d920e74d4b32d6de19095986afe299e10b/add-on-overscan-v1.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/overscan/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"Distribute","schema_version":"1.0.0","name":"Distribute","version":"1.1.0","tagline":"Distribute selected objects from first to last on X, Y or Z axis","archive_hash":"sha256:c293bd89069c379b97add283081a9a61727b1f1737a1cd5f042881b21c520e47","archive_size":1692,"archive_url":"https://extensions.blender.org/download/sha256:c293bd89069c379b97add283081a9a61727b1f1737a1cd5f042881b21c520e47/add-on-distribute-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/distribute/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"motionpath","schema_version":"1.0.0","name":"Motion Path Creator","version":"2.1.2","tagline":"Create motion paths for bones, vertices, empties and objects","archive_hash":"sha256:6afd3b0e6f7e740b6603a8e5773c306cefe0f26da628685184ef5dda92a2189f","archive_size":6955,"archive_url":"https://extensions.blender.org/download/sha256:6afd3b0e6f7e740b6603a8e5773c306cefe0f26da628685184ef5dda92a2189f/add-on-motionpath-v2.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/motionpath/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"fireray","schema_version":"1.0.0","name":"Fire Ray","version":"2.0.0","tagline":"Reality Capture setup and create an empty on a tracked camera","archive_hash":"sha256:ddf5d45609f794693fa8eca42bf8427c0095ba9b7ff032250cb1bde891a3fdb3","archive_size":2709,"archive_url":"https://extensions.blender.org/download/sha256:ddf5d45609f794693fa8eca42bf8427c0095ba9b7ff032250cb1bde891a3fdb3/add-on-fireray-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fireray/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Tracking"]},{"id":"HDRIRotator","schema_version":"1.0.0","name":"HDRI Rotator","version":"1.1.4","tagline":"Move and rotate HDRIs, Shadows and Lights from the viewport","archive_hash":"sha256:69e4cb8239059d348bce877309c59df997c37162b7b3d04f2aebd74edb0b5b53","archive_size":20170,"archive_url":"https://extensions.blender.org/download/sha256:69e4cb8239059d348bce877309c59df997c37162b7b3d04f2aebd74edb0b5b53/add-on-hdrirotator-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hdrirotator/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"auto_active_camera_switcher","schema_version":"1.0.0","name":"Auto Active Camera Switcher","version":"1.0.2","tagline":"Automatically makes the selected camera the active camera","archive_hash":"sha256:b604674c6f02cc353293796c7c645606a7829ebc8bb80e5ca6dc9843c7342bd5","archive_size":2653,"archive_url":"https://extensions.blender.org/download/sha256:b604674c6f02cc353293796c7c645606a7829ebc8bb80e5ca6dc9843c7342bd5/add-on-auto-active-camera-switcher-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-active-camera-switcher/","maintainer":"Yamato3D-3dnchu.com-","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera"]},{"id":"AddonProfiler","schema_version":"1.0.0","name":"Add-on Profiler","version":"2.1.0","tagline":"Monitor and capture add-on profiling data","archive_hash":"sha256:3f3f29f987b24e3669ca4ea739f1ded51ee2ded6adad647699eca3f96f99974c","archive_size":5449,"archive_url":"https://extensions.blender.org/download/sha256:3f3f29f987b24e3669ca4ea739f1ded51ee2ded6adad647699eca3f96f99974c/add-on-addonprofiler-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/addonprofiler/","maintainer":"MrClock","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and process benchmark and profile data"},"tags":["Development"]},{"id":"add_frame_range_presets","schema_version":"1.0.0","name":"Add Frame Range Presets","version":"1.1.3","tagline":"Create preset frame ranges in just a click","archive_hash":"sha256:3977d76fee643f5db538f589fc07c96e7a939a32800d6db73fd6422d146dd1ed","archive_size":16118,"archive_url":"https://extensions.blender.org/download/sha256:3977d76fee643f5db538f589fc07c96e7a939a32800d6db73fd6422d146dd1ed/add-on-add-frame-range-presets-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-frame-range-presets/","maintainer":"stoatsnhoney","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"C3DB","schema_version":"1.0.0","name":"3D Cursors Briefcase","version":"0.1.8","tagline":"Store and manage multiple 3D Cursors","archive_hash":"sha256:41c7aa4374a6bb8a05e2e2f024d8e0d8c503c9c14c52bd48785e9c0b4ce9da38","archive_size":6803,"archive_url":"https://extensions.blender.org/download/sha256:41c7aa4374a6bb8a05e2e2f024d8e0d8c503c9c14c52bd48785e9c0b4ce9da38/add-on-c3db-v0.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/c3db/","maintainer":"dupoxy","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"cameraide_settings","schema_version":"1.0.0","name":"Cameraide","version":"1.1.0","tagline":"Camera specific Resolution, Frame Range, Output Path & Format","archive_hash":"sha256:564539c2e6e457a83e4879fee123e966fda3da429b072255e38e01757f322e89","archive_size":68544,"archive_url":"https://extensions.blender.org/download/sha256:564539c2e6e457a83e4879fee123e966fda3da429b072255e38e01757f322e89/add-on-cameraide-settings-v1.1.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/cameraide-settings/","maintainer":"longiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Render"]},{"id":"simple_bounce_curve","schema_version":"1.0.0","name":"Simple Bounce Curve","version":"1.1.0","tagline":"Creates a simple bounce curve between selected objects","archive_hash":"sha256:d9600617c81ca045b5aeffc5e393a1d09e589d7aca4d6ab15a0845720a93b47b","archive_size":2102,"archive_url":"https://extensions.blender.org/download/sha256:d9600617c81ca045b5aeffc5e393a1d09e589d7aca4d6ab15a0845720a93b47b/add-on-simple-bounce-curve-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-bounce-curve/","maintainer":"Polyfjord","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Object"]},{"id":"org_tayou_bone_vertex_group_merge","schema_version":"1.0.0","name":"Bone and Vertex Group Merge","version":"1.4.1","tagline":"merge selected bones into the active bone","archive_hash":"sha256:ce830a02f48ccc0ed33ec043729df2cb83acb0ba0b91eb3f5f914e5339add61a","archive_size":17934,"archive_url":"https://extensions.blender.org/download/sha256:ce830a02f48ccc0ed33ec043729df2cb83acb0ba0b91eb3f5f914e5339add61a/add-on-org-tayou-bone-vertex-group-merge-v1.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/org-tayou-bone-vertex-group-merge/","maintainer":"Tayou","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"Custom_Grid_Scales","schema_version":"1.0.0","name":"Custom Grid Scales","version":"1.1.0","tagline":"Adds the ability to quickly change between custom grid scales","archive_hash":"sha256:05fa8215b7ed9ded0cca86164f49e09d5cc393e92f80dba4cc6c5c6358588b01","archive_size":2631,"archive_url":"https://extensions.blender.org/download/sha256:05fa8215b7ed9ded0cca86164f49e09d5cc393e92f80dba4cc6c5c6358588b01/add-on-custom-grid-scales-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.1","website":"https://extensions.blender.org/add-ons/custom-grid-scales/","maintainer":"Jacob-Beatty","license":["SPDX:GPL-3.0-or-later"]},{"id":"more_colors","schema_version":"1.0.0","name":"HUE","version":"1.2.2","tagline":"A set of tools to make vertex painting easier","archive_hash":"sha256:1fbaa310bd64dfa268b1ed52895f894e2d9d4c7eca7de88034a3eae5d1dd93d3","archive_size":57737,"archive_url":"https://extensions.blender.org/download/sha256:1fbaa310bd64dfa268b1ed52895f894e2d9d4c7eca7de88034a3eae5d1dd93d3/add-on-more-colors-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/more-colors/","maintainer":"FardreamerLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Mesh","Paint"]},{"id":"thomas_rig_legacy","schema_version":"1.0.0","name":"Thomas Rig Legacy","version":"1.2.8","tagline":"Addon for this rig","archive_hash":"sha256:9a3e7a31cb7fedeb7ed71bc6295e682dcc0c129f1b65c7de04c0dd34295469fe","archive_size":10605168,"archive_url":"https://extensions.blender.org/download/sha256:9a3e7a31cb7fedeb7ed71bc6295e682dcc0c129f1b65c7de04c0dd34295469fe/add-on-thomas-rig-legacy-v1.2.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/thomas-rig-legacy/","maintainer":"BlueEvilGFX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To save the skin to Blender-tmp & read MC textures","network":"To download a skin with the Minecraft/Mojang API"},"tags":["Animation","Rigging"]},{"id":"cortecloud_export","schema_version":"1.0.0","name":"CorteCloud Export","version":"1.0.5","tagline":"Manage and Export wood cut list to CorteCloud csv format","archive_hash":"sha256:ac372a5a9e812069840c9b24f86e86af9f625b798445d128732b8dd94890a191","archive_size":20274,"archive_url":"https://extensions.blender.org/download/sha256:ac372a5a9e812069840c9b24f86e86af9f625b798445d128732b8dd94890a191/add-on-cortecloud-export-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cortecloud-export/","maintainer":"Filipe-Rocha-Lopes","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export csv files"}},{"id":"auto_reload","schema_version":"1.0.0","name":"Auto Reload","version":"3.1.2","tagline":"Automatic reload for external files","archive_hash":"sha256:881d502684e842f2b90d1d911128adea6cebc39b31b91dc311ffc3bfb115f7d4","archive_size":21511,"archive_url":"https://extensions.blender.org/download/sha256:881d502684e842f2b90d1d911128adea6cebc39b31b91dc311ffc3bfb115f7d4/add-on-auto-reload-v3.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-reload/","maintainer":"tonton_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Checking/Reloading external files from current blend"},"tags":["Import-Export","Pipeline"]},{"id":"core_debug_tools","schema_version":"1.0.0","name":"Core Debug Tools","version":"0.1.0","tagline":"Debugging utilities for core Blender developers","archive_hash":"sha256:f21387eea0b95445be76e9b6eee95c7ad807451aefdc65a36dce7a11d262ad20","archive_size":629513,"archive_url":"https://extensions.blender.org/download/sha256:f21387eea0b95445be76e9b6eee95c7ad807451aefdc65a36dce7a11d262ad20/add-on-core-debug-tools-v0.1.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/core-debug-tools/","maintainer":"JacquesLucke","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Build temporary html files to view in the browser"},"tags":["Development"]},{"id":"Colorista","schema_version":"1.0.0","name":"Colorista","version":"1.1.9","tagline":"A convenient color grading add-on designed for colorists","archive_hash":"sha256:07da6c3d687b8a6f88ea120adf93b10cf0a5a88aca12998a2cb02f20380523ef","archive_size":950252,"archive_url":"https://extensions.blender.org/download/sha256:07da6c3d687b8a6f88ea120adf93b10cf0a5a88aca12998a2cb02f20380523ef/add-on-colorista-v1.1.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/colorista/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read Node"},"tags":["Modeling","Node","Render","Compositing"]},{"id":"popoti_align_helper","schema_version":"1.0.0","name":"POPOTI Align Helper","version":"1.2.7","tagline":"More friendly alignment based on observation perspective","archive_hash":"sha256:fca6fa04bc5880bf5d8bdce12d49f6cde3b9d5db7f79f957e1ef504cfde4720f","archive_size":95518,"archive_url":"https://extensions.blender.org/download/sha256:fca6fa04bc5880bf5d8bdce12d49f6cde3b9d5db7f79f957e1ef504cfde4720f/add-on-popoti-align-helper-v1.2.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/popoti-align-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object"]},{"id":"UV_Snapper","schema_version":"1.0.0","name":"UV Snapper","version":"1.1.1","tagline":"Snap selected UVs to a custom atlas","archive_hash":"sha256:e8b8a90172e88ed991b7c3dfae419b660a9209caf9a1de97ab68b2ecd4d744eb","archive_size":236058,"archive_url":"https://extensions.blender.org/download/sha256:e8b8a90172e88ed991b7c3dfae419b660a9209caf9a1de97ab68b2ecd4d744eb/add-on-uv-snapper-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/uv-snapper/","maintainer":"Duncan-Readle","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"theme_moss","schema_version":"1.0.0","name":"Moss","version":"1.0.5","tagline":"Mossy castle dark theme","archive_hash":"sha256:3475452906c58f1ec3d6b15a961a729cce0e3986ec081e5b6cfc055967ae4078","archive_size":5609,"archive_url":"https://extensions.blender.org/download/sha256:3475452906c58f1ec3d6b15a961a729cce0e3986ec081e5b6cfc055967ae4078/theme-theme-moss-v1.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-moss/","maintainer":"Sereda","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"mesh_repair_tools","schema_version":"1.0.0","name":"Mesh Repair Tools","version":"4.0.2","tagline":"An integrated toolbox for mesh repair","archive_hash":"sha256:4d7221841bcc5fb23a26835dbfd9b2a87ce2ddcb29215d1f715329a924008fc7","archive_size":13836,"archive_url":"https://extensions.blender.org/download/sha256:4d7221841bcc5fb23a26835dbfd9b2a87ce2ddcb29215d1f715329a924008fc7/add-on-mesh-repair-tools-v4.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-repair-tools/","maintainer":"SineWave","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","User Interface"]},{"id":"profiling_buddy","schema_version":"1.0.0","name":"Profiling Buddy","version":"1.0.0","tagline":"Adds modifier panel to profile execution times","archive_hash":"sha256:025a1466757a8937bbea1cf5f377272eeb2f259b8be6b1f558d5c642629c78d0","archive_size":1756,"archive_url":"https://extensions.blender.org/download/sha256:025a1466757a8937bbea1cf5f377272eeb2f259b8be6b1f558d5c642629c78d0/add-on-profiling-buddy-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/profiling-buddy/","maintainer":"SimonThommes","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Rigging","Geometry Nodes","User Interface"]},{"id":"Proton","schema_version":"1.0.0","name":"Proton","version":"1.1.0","tagline":"A modern dark theme for Blender with purple accents","archive_hash":"sha256:3bc76322cf8e763fdd823cd1955acc00e92480a9add6c7829a981459d93cad99","archive_size":5141,"archive_url":"https://extensions.blender.org/download/sha256:3bc76322cf8e763fdd823cd1955acc00e92480a9add6c7829a981459d93cad99/theme-proton-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/proton/","maintainer":"VISaberToothIV","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"clean_game_asset_exporter","schema_version":"1.0.0","name":"Clean Game Asset Exporter","version":"1.0.0","tagline":"Game asset exporter for the Defold game engine","archive_hash":"sha256:377a5cbde66f7ea39b861f3062a7ec5c919c8e0a515aeeb8add9e06ae5aacea3","archive_size":4988,"archive_url":"https://extensions.blender.org/download/sha256:377a5cbde66f7ea39b861f3062a7ec5c919c8e0a515aeeb8add9e06ae5aacea3/add-on-clean-game-asset-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clean-game-asset-exporter/","maintainer":"DeBolt","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export game asset files to disk"},"tags":["Game Engine","Import-Export"]},{"id":"Neo_Grey_Theme","schema_version":"1.0.0","name":"Neo_Grey_Theme","version":"2.5.2","tagline":"Dust Cloud","archive_hash":"sha256:82dc471246367596754ec134acefa92d725b071ee066a650063231a81fb401d5","archive_size":5688,"archive_url":"https://extensions.blender.org/download/sha256:82dc471246367596754ec134acefa92d725b071ee066a650063231a81fb401d5/theme-neo-grey-theme-v2.5.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/neo-grey-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"SMEAR","schema_version":"1.0.0","name":"SMEAR","version":"1.1.8","tagline":"Create smear frames for 3D animations","archive_hash":"sha256:eb035521ff506fa339916040c6184b5d09a124125bdfbb942ce2a50ca1b5b1e5","archive_size":3313751,"archive_url":"https://extensions.blender.org/download/sha256:eb035521ff506fa339916040c6184b5d09a124125bdfbb942ce2a50ca1b5b1e5/add-on-smear-v1.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smear/","maintainer":"Jean-Basset","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"simple_deform_helper","schema_version":"1.0.0","name":"Simple Deform Helper","version":"0.2.7","tagline":"Simple Deform visualization adjustment tool","archive_hash":"sha256:4f8fbd7850d9415c8a5c3180af85d66c7b17c5a83a01a08bab14932525631acb","archive_size":173571,"archive_url":"https://extensions.blender.org/download/sha256:4f8fbd7850d9415c8a5c3180af85d66c7b17c5a83a01a08bab14932525631acb/add-on-simple-deform-helper-v0.2.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-deform-helper/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object","Mesh"]},{"id":"image_packer","schema_version":"1.0.0","name":"Image Packer","version":"1.0.7","tagline":"Packs images into a single image","archive_hash":"sha256:32ff0572ecfd9fd7af321ae9299f59101c3d222879c7d7aebb2622f1c3f82c2c","archive_size":24146,"archive_url":"https://extensions.blender.org/download/sha256:32ff0572ecfd9fd7af321ae9299f59101c3d222879c7d7aebb2622f1c3f82c2c/add-on-image-packer-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/image-packer/","maintainer":"Quint-Vrolijk","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"Modal_lattice_resolution","schema_version":"1.0.0","name":"Modal Lattice Resolution","version":"0.3.4","tagline":"Create Lattice or Tweak Resolution from 3D viewport, 'L' keymap","archive_hash":"sha256:13fb4af136685386fb22fe40e68d29c9a7cebdc24d6a5acc2d87ce031e0ad13b","archive_size":7314,"archive_url":"https://extensions.blender.org/download/sha256:13fb4af136685386fb22fe40e68d29c9a7cebdc24d6a5acc2d87ce031e0ad13b/add-on-modal-lattice-resolution-v0.3.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/modal-lattice-resolution/","maintainer":"Tyo79","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Mesh"]},{"id":"you_are_autosave","schema_version":"1.0.0","name":"You Are Autosave","version":"1.5.0","tagline":"Show a warning when you haven't saved in a while","archive_hash":"sha256:7655433433ca018ea03604dc0b8759ce2de9d5c239024017abb8a95b153ee63b","archive_size":17503,"archive_url":"https://extensions.blender.org/download/sha256:7655433433ca018ea03604dc0b8759ce2de9d5c239024017abb8a95b153ee63b/add-on-you-are-autosave-v1.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/you-are-autosave/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"univ","schema_version":"1.0.0","name":"UniV","version":"4.0.0","tagline":"Smart UV Tools","archive_hash":"sha256:734a70137ab6824c9b4294a8aef2cd76e23c667795ebf7f360668ebe45968963","archive_size":471709,"archive_url":"https://extensions.blender.org/download/sha256:734a70137ab6824c9b4294a8aef2cd76e23c667795ebf7f360668ebe45968963/add-on-univ-v4.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/univ/","maintainer":"Oxicid","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Creates and updates icon files in the add-on directory"},"tags":["UV"]},{"id":"dark_17","schema_version":"1.0.0","name":"17 Dark","version":"1.0.2","tagline":"Makes Blender darker","archive_hash":"sha256:c1527478cbb92a6f87eadb887b6971534c97e2222d580578c77118a140ba3ddb","archive_size":5616,"archive_url":"https://extensions.blender.org/download/sha256:c1527478cbb92a6f87eadb887b6971534c97e2222d580578c77118a140ba3ddb/theme-dark-17-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-17/","maintainer":"S41L0R","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"bone_eyedropper","schema_version":"1.0.0","name":"Bone Eyedropper","version":"1.1.8","tagline":"Eyedrop a bone from active or target and assign it to a property","archive_hash":"sha256:b2b551c815a874247b7d4e8c11b167d331319bea1f7551db5a2ac443642297fd","archive_size":139882,"archive_url":"https://extensions.blender.org/download/sha256:b2b551c815a874247b7d4e8c11b167d331319bea1f7551db5a2ac443642297fd/add-on-bone-eyedropper-v1.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bone-eyedropper/","maintainer":"Nifs","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import .blend from disk","clipboard":"Copy property paths to clipboard"},"tags":["3D View","User Interface"]},{"id":"quick_export_extension","schema_version":"1.0.0","name":"Quick Export","version":"1.1.0","tagline":"Exports the active object's collection if it has exporters","archive_hash":"sha256:bc786396fcbd9e0c3f309ea0388a815912111e4417f5f3faeb2e7cc5fc975f76","archive_size":2422,"archive_url":"https://extensions.blender.org/download/sha256:bc786396fcbd9e0c3f309ea0388a815912111e4417f5f3faeb2e7cc5fc975f76/add-on-quick-export-extension-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-export-extension/","maintainer":"Maro3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"Real_Time_Paths","schema_version":"1.0.0","name":"Motion Path Pro","version":"3.1.0","tagline":"Update motion path in real time","archive_hash":"sha256:eaee70d1ffaf5b3454ba6cd5c39d4b779b99bd59c52227aa0fea627276db7ff2","archive_size":15369,"archive_url":"https://extensions.blender.org/download/sha256:eaee70d1ffaf5b3454ba6cd5c39d4b779b99bd59c52227aa0fea627276db7ff2/add-on-real-time-paths-v3.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/real-time-paths/","maintainer":"Hamdi-Amer","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"theme_GreenKM","schema_version":"1.0.0","name":"Green Kode Mono","version":"1.1.6","tagline":"Kinda retro green theme","archive_hash":"sha256:9e27e44e3086d3df5937c923415b4271c6a4d6ff0cf288bb01cc62b362d46567","archive_size":6032,"archive_url":"https://extensions.blender.org/download/sha256:9e27e44e3086d3df5937c923415b4271c6a4d6ff0cf288bb01cc62b362d46567/theme-theme-greenkm-v1.1.6.zip","type":"theme","blender_version_min":"5.0.1","website":"https://extensions.blender.org/themes/theme-greenkm/","maintainer":"DannySi","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"Quellenform_theme","schema_version":"1.0.0","name":"Quellenform's Theme","version":"0.1.0","tagline":"A dark grey theme with a gentle touch of blue and green colors","archive_hash":"sha256:1fd5a7c591b27910c3f584f3954a4b478dc3a4585a3bd8748c4290a7bc1da20d","archive_size":5899,"archive_url":"https://extensions.blender.org/download/sha256:1fd5a7c591b27910c3f584f3954a4b478dc3a4585a3bd8748c4290a7bc1da20d/theme-quellenform-theme-v0.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/quellenform-theme/","maintainer":"quellenform","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"act_game_asset_creation_toolset","schema_version":"1.0.0","name":"ACT: Game Asset Creation Toolset","version":"2025.2.1","tagline":"Tools for easy create and export low-poly game assets","archive_hash":"sha256:e733197281ff010e1b5fd4ddc9c17249becc7a14c759ae87e82fa1bed9deb284","archive_size":49479,"archive_url":"https://extensions.blender.org/download/sha256:e733197281ff010e1b5fd4ddc9c17249becc7a14c759ae87e82fa1bed9deb284/add-on-act-game-asset-creation-toolset-v2025.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/act-game-asset-creation-toolset/","maintainer":"IvanVostrikov","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export FBX/OBJ/GLTF to disk"},"tags":["3D View","Object","UV","Mesh","Import-Export","Modeling"]},{"id":"node_to_python","schema_version":"1.0.0","name":"Node To Python","version":"4.2.0","tagline":"Turn node groups into Python code","archive_hash":"sha256:a23d847def65873bf284ab0c80108bd45db61104f7a45fe44f7ec38d849f75e4","archive_size":82229,"archive_url":"https://extensions.blender.org/download/sha256:a23d847def65873bf284ab0c80108bd45db61104f7a45fe44f7ec38d849f75e4/add-on-node-to-python-v4.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-to-python/","maintainer":"Brendan-Parmer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Creates and writes to files in a user-specified directory"},"tags":["Development","Compositing","Geometry Nodes","Material","Node"]},{"id":"Eclipse","schema_version":"1.0.0","name":"Eclipse","version":"1.2.2","tagline":"Where Darkness Meets Elegance","archive_hash":"sha256:9b22fcdaed346fdc37aeb5f4686932495b6bbbb70f9ce62d6c6b960bb5894ba7","archive_size":5863,"archive_url":"https://extensions.blender.org/download/sha256:9b22fcdaed346fdc37aeb5f4686932495b6bbbb70f9ce62d6c6b960bb5894ba7/theme-eclipse-v1.2.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/eclipse/","maintainer":"DaoL","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"custom_templates","schema_version":"1.0.0","name":"Custom Templates","version":"1.7.0","tagline":"Use your own .blend files as template options for new projects","archive_hash":"sha256:b28b219df1598bd2359a9dfa5c5fd99e714c97792ad5947adc64634018b9cff8","archive_size":18893,"archive_url":"https://extensions.blender.org/download/sha256:b28b219df1598bd2359a9dfa5c5fd99e714c97792ad5947adc64634018b9cff8/add-on-custom-templates-v1.7.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/custom-templates/","maintainer":"Francesco-Bellini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export, + from folder, Ensure absolute paths in resources"},"tags":["System","User Interface"]},{"id":"world_apply","schema_version":"1.0.0","name":"World Apply","version":"1.0.1","tagline":"Sync viewport world settings with scene world settings","archive_hash":"sha256:17188904a6800963eae79e35ca53f13c2289c98ad4ef63172d42f250ed33c663","archive_size":2866,"archive_url":"https://extensions.blender.org/download/sha256:17188904a6800963eae79e35ca53f13c2289c98ad4ef63172d42f250ed33c663/add-on-world-apply-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/world-apply/","maintainer":"Baraa-Khaled-Youssef","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read HDRI files stored in Blender's directories"},"tags":["Lighting"]},{"id":"timeline_buttons","schema_version":"1.0.0","name":"Timeline Buttons","version":"1.0.0","tagline":"Put the buttons in timeline to other animation related editors","archive_hash":"sha256:3aac330381de15d2f69641f0f6c7f0dcaec42371e014ca70889cad899d27d815","archive_size":15158,"archive_url":"https://extensions.blender.org/download/sha256:3aac330381de15d2f69641f0f6c7f0dcaec42371e014ca70889cad899d27d815/add-on-timeline-buttons-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/timeline-buttons/","maintainer":"tinkerboi","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"ddslideshow","schema_version":"1.0.0","name":"DDSlideshow","version":"0.0.5","tagline":"Create a Ken Burns Effect slideshow","archive_hash":"sha256:c83b00339fb45a3a50191a3856dead7a9878c5c9101a198ceece181c96d8ab0b","archive_size":7196,"archive_url":"https://extensions.blender.org/download/sha256:c83b00339fb45a3a50191a3856dead7a9878c5c9101a198ceece181c96d8ab0b/add-on-ddslideshow-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ddslideshow/","maintainer":"Michael-Lamertz","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to load images for the slideshow"},"tags":["Sequencer"]},{"id":"ikea_browser","schema_version":"1.0.0","name":"IKEA Browser","version":"0.4.0","tagline":"Search and import models from ikea.com","archive_hash":"sha256:b8b619c55c58ab93222c40e46633d3dc1fc3e2ca2ebf26128572164e04ae27b2","archive_size":7016,"archive_url":"https://extensions.blender.org/download/sha256:b8b619c55c58ab93222c40e46633d3dc1fc3e2ca2ebf26128572164e04ae27b2/add-on-ikea-browser-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ikea-browser/","maintainer":"Shish","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Store downloaded models","network":"Download from ikea.com"},"tags":["Import-Export"]},{"id":"bonsai","schema_version":"1.0.0","name":"Bonsai","version":"0.8.5","tagline":"A native Building Information Model authoring platform using IFC","archive_hash":"sha256:81c0cfc9a6204e13fdd4391daef6e91ed8033488fde69ca5933b3535f490514f","archive_size":123569083,"archive_url":"https://extensions.blender.org/download/sha256:81c0cfc9a6204e13fdd4391daef6e91ed8033488fde69ca5933b3535f490514f/add-on-bonsai-v0.8.5-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/bonsai/","maintainer":"IfcOpenShell","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load and save IFCs, IDS, BCF, etc from disk","network":"Augin / Cove.Tool integration for VR and environmental analysis","clipboard":"Copy and paste error logs"},"platforms":["windows-x64"],"tags":["3D View","Add Mesh","Animation","Camera","Development","Import-Export","Lighting","Material","Modeling","Mesh","Node","Object","Pipeline","Render","Scene","System","User Interface","UV"]},{"id":"Clean_Blue","schema_version":"1.0.0","name":"Clean Blue","version":"1.4.0","tagline":"This is a pleasant light-colored theme","archive_hash":"sha256:6dde8d3518209c90af4af2a06f162a18c34e7c886e0a557f7c0c93fd811fa63d","archive_size":5811,"archive_url":"https://extensions.blender.org/download/sha256:6dde8d3518209c90af4af2a06f162a18c34e7c886e0a557f7c0c93fd811fa63d/theme-clean-blue-v1.4.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/clean-blue/","maintainer":"DaoL","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"redsquare","schema_version":"1.0.0","name":"RedSquare V2","version":"1.2.1","tagline":"A theme with basic red tones and a more square-ish type of look","archive_hash":"sha256:05e411805c178dff7b8a4e3a9fe37a15bea260f01e8903d6e17bf1845f20fc8e","archive_size":5707,"archive_url":"https://extensions.blender.org/download/sha256:05e411805c178dff7b8a4e3a9fe37a15bea260f01e8903d6e17bf1845f20fc8e/theme-redsquare-v1.2.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/redsquare/","maintainer":"luccadanielp","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"mengges_dark_theme","schema_version":"1.0.0","name":"MengGe's Dark Theme","version":"1.2.0","tagline":"Dark Theme Pro Max Ultra Plus Lift","archive_hash":"sha256:f2d43e826c8469ebd6ee3df71eb23af969c9f73ff80b877b2c6036a3c6be25cc","archive_size":5629,"archive_url":"https://extensions.blender.org/download/sha256:f2d43e826c8469ebd6ee3df71eb23af969c9f73ff80b877b2c6036a3c6be25cc/theme-mengges-dark-theme-v1.2.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/mengges-dark-theme/","maintainer":"MengGe_KKD","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"armature_pie","schema_version":"1.0.0","name":"Armature Pie","version":"1.1.2","tagline":"Pick Armatures Comfortably & Solo Collection By Pie Menu","archive_hash":"sha256:f03490659072d00769c5d545524870938508d1b012e6285cd934a34d6b7411da","archive_size":13793,"archive_url":"https://extensions.blender.org/download/sha256:f03490659072d00769c5d545524870938508d1b012e6285cd934a34d6b7411da/add-on-armature-pie-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/armature-pie/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"Elegant_Light_Theme","schema_version":"1.0.0","name":"Elegant_Light_Theme","version":"2.3.2","tagline":"Soft Light","archive_hash":"sha256:03ba0f0c9e8e8a7b33af2d83c4c94697d1d0df40f44c49ce839592247633f064","archive_size":5668,"archive_url":"https://extensions.blender.org/download/sha256:03ba0f0c9e8e8a7b33af2d83c4c94697d1d0df40f44c49ce839592247633f064/theme-elegant-light-theme-v2.3.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/elegant-light-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"livery_helper","schema_version":"1.0.0","name":"LiveryHelper","version":"1.0.3","tagline":"Makes creating, editing and customizing car liveries much easier","archive_hash":"sha256:5f1718454dab8b0507fdd8f1743f5536cb0da9f423e7bc789b664eef19b28cab","archive_size":5198,"archive_url":"https://extensions.blender.org/download/sha256:5f1718454dab8b0507fdd8f1743f5536cb0da9f423e7bc789b664eef19b28cab/add-on-livery-helper-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/livery-helper/","maintainer":"Mast26","license":["SPDX:MIT"],"permissions":{"files":"Loading source livery images"},"tags":["Material"]},{"id":"optiploy","schema_version":"1.0.0","name":"OptiPloy: Rig Spawner","version":"1.8.2","tagline":"Improve your workflow with smarter linking tools","archive_hash":"sha256:8dee57bb226f754c3bcab8986df3eca85ee8148faae759649f48d2374c7e0956","archive_size":41364,"archive_url":"https://extensions.blender.org/download/sha256:8dee57bb226f754c3bcab8986df3eca85ee8148faae759649f48d2374c7e0956/add-on-optiploy-v1.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/optiploy/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and save .blend and folder entries"},"tags":["Pipeline","Animation","Rigging","Import-Export"]},{"id":"io_scene_mvr","schema_version":"1.0.0","name":"Scene MVR (.mvr) and GDTF (.gdtf)","version":"1.5.4","tagline":"My Virtual Rig and General Device Type Format","archive_hash":"sha256:fd319cfc1eb8b9af4e36e6505a92084e4653154515060745e43b28ca60453a52","archive_size":317611,"archive_url":"https://extensions.blender.org/download/sha256:fd319cfc1eb8b9af4e36e6505a92084e4653154515060745e43b28ca60453a52/add-on-io-scene-mvr-v1.5.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-mvr/","maintainer":"NRGSille","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"General Device Type Format and My Virtual Rig files"},"tags":["Import-Export","Scene","Lighting","Tracking","Rigging"]},{"id":"CV_Filter_Channels","schema_version":"1.0.0","name":"Filter_Channels","version":"1.0.8","tagline":"Filter channels in Graph Editor for animation","archive_hash":"sha256:b96b9024aca598c17e2ec30cd33cd25d419cf82d94c51c2e056f2ba3603a9bd2","archive_size":15830,"archive_url":"https://extensions.blender.org/download/sha256:b96b9024aca598c17e2ec30cd33cd25d419cf82d94c51c2e056f2ba3603a9bd2/add-on-cv-filter-channels-v1.0.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cv-filter-channels/","maintainer":"Carles-V","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"right_mouse_navigation","schema_version":"1.0.0","name":"Right Mouse Navigation","version":"2.8.0","tagline":"Game Engine Movement and Menus","archive_hash":"sha256:9974909656bb82cb599949b93df47cabf0b174cd727504254e35fc08a36e222d","archive_size":2200146,"archive_url":"https://extensions.blender.org/download/sha256:9974909656bb82cb599949b93df47cabf0b174cd727504254e35fc08a36e222d/add-on-right-mouse-navigation-v2.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/right-mouse-navigation/","maintainer":"SpectralVectors","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Node","User Interface"]},{"id":"texel_density_checker","schema_version":"1.0.0","name":"Texel Density Checker","version":"2026.1.1","tagline":"Toolset for working with Texel Density","archive_hash":"sha256:ca5554ec5c08a830c344ddc08a4c4f8f2e619178ac05ef582ea0293ab540308d","archive_size":26191,"archive_url":"https://extensions.blender.org/download/sha256:ca5554ec5c08a830c344ddc08a4c4f8f2e619178ac05ef582ea0293ab540308d/add-on-texel-density-checker-v2026.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/texel-density-checker/","maintainer":"IvanVostrikov","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object","UV"]},{"id":"simple_renaming_panel","schema_version":"1.0.0","name":"Simple Renaming","version":"2.1.8","tagline":"Effortlessly rename multiple objects with this simple addon","archive_hash":"sha256:32fc435f6daf82feaa711e1b23c960575fbefce3ae99504ca12bcd4f0eb120b1","archive_size":53269,"archive_url":"https://extensions.blender.org/download/sha256:32fc435f6daf82feaa711e1b23c960575fbefce3ae99504ca12bcd4f0eb120b1/add-on-simple-renaming-panel-v2.1.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simple-renaming-panel/","maintainer":"MatthiasPatscheider","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Scene","User Interface"]},{"id":"auto_switch_theme","schema_version":"1.0.0","name":"Auto Switch Theme","version":"1.0.1","tagline":"Set light and dark themes based on your system appearance","archive_hash":"sha256:e3c92dc4696f87117b7ce31d52ed690c3c302ddeca98b5677788c7d2eaeac6b1","archive_size":11020,"archive_url":"https://extensions.blender.org/download/sha256:e3c92dc4696f87117b7ce31d52ed690c3c302ddeca98b5677788c7d2eaeac6b1/add-on-auto-switch-theme-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-switch-theme/","maintainer":"pablovazquez","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Read existing themes from disk"},"tags":["User Interface"]},{"id":"ik_fk_snapping_tool","schema_version":"1.0.0","name":"IK-FK Snapping Tool","version":"3.0.3","tagline":"Tools to perform IK to FK and FK to IK snapping","archive_hash":"sha256:bc34f92eeab8f922dc6918d3f3f05c8f42ddde0faaffbb3a69c3a164dea16ddd","archive_size":19058,"archive_url":"https://extensions.blender.org/download/sha256:bc34f92eeab8f922dc6918d3f3f05c8f42ddde0faaffbb3a69c3a164dea16ddd/add-on-ik-fk-snapping-tool-v3.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ik-fk-snapping-tool/","maintainer":"Endertainer007","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"macos_dark_theme","schema_version":"1.0.0","name":"MacOS Dark Theme","version":"2.0.1","tagline":"The MacOS interface style in Blender","archive_hash":"sha256:5a2b3a93e7d4aad0a6adb3e52f382007e292af49730e5335f018b11c3cfdd4f3","archive_size":17990,"archive_url":"https://extensions.blender.org/download/sha256:5a2b3a93e7d4aad0a6adb3e52f382007e292af49730e5335f018b11c3cfdd4f3/theme-macos-dark-theme-v2.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/macos-dark-theme/","maintainer":"stoatsnhoney","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"openvat","schema_version":"1.0.0","name":"OpenVAT","version":"1.1.0","tagline":"Encode and preview vertex animation textures","archive_hash":"sha256:9ead429665193bae5f97ce5af171ef6cd772aa158f80b6d1c750480d8d9aaec1","archive_size":277888,"archive_url":"https://extensions.blender.org/download/sha256:9ead429665193bae5f97ce5af171ef6cd772aa158f80b6d1c750480d8d9aaec1/add-on-openvat-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/openvat/","maintainer":"sharpened","license":["SPDX:GPL-3.0-or-later"]},{"id":"align2custom","schema_version":"1.0.0","name":"Align 2 Custom","version":"2.1.2","tagline":"Align 3D View to custom orientation or 3D cursor","archive_hash":"sha256:c9c2b3ba9871dc20208c20772006af0644f5ab7aa7f9acf9fc2b03098cbc1856","archive_size":17939,"archive_url":"https://extensions.blender.org/download/sha256:c9c2b3ba9871dc20208c20772006af0644f5ab7aa7f9acf9fc2b03098cbc1856/add-on-align2custom-v2.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/align2custom/","maintainer":"fdaubine","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View"]},{"id":"import_mixamo_root_motion","schema_version":"1.0.0","name":"Import Mixamo - Root Motion","version":"1.0.3","tagline":"Batch Import Fbx (Mixamo) And Apply Root Motion","archive_hash":"sha256:2ac0f138d09124b8dbf5b0c6816f0e17da6bc2ec373808d00b6a34dd672736b3","archive_size":23046,"archive_url":"https://extensions.blender.org/download/sha256:2ac0f138d09124b8dbf5b0c6816f0e17da6bc2ec373808d00b6a34dd672736b3/add-on-import-mixamo-root-motion-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-mixamo-root-motion/","maintainer":"DevilMayCry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import FBX from disk"},"tags":["Import-Export"]},{"id":"geonode_shapekeys","schema_version":"1.0.0","name":"GeoNode Shape Keys","version":"1.0.0","tagline":"Sculpt on linked animated characters","archive_hash":"sha256:2ac8d503b2f7004a7066c9af0432da2327fc471b269e9f90cfb92cd86203442c","archive_size":220787,"archive_url":"https://extensions.blender.org/download/sha256:2ac8d503b2f7004a7066c9af0432da2327fc471b269e9f90cfb92cd86203442c/add-on-geonode-shapekeys-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/geonode-shapekeys/","maintainer":"Mets","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"To load the necessary GeoNodes from its .blend file"},"tags":["Rigging"]},{"id":"mesh_mesh_align_plus","schema_version":"1.0.0","name":"Mesh Align Plus","version":"1.1.0-rc.1","tagline":"Move/align mesh parts+objects based on scene geometry/metrics","archive_hash":"sha256:6177ca247f21143f839cf12aa0fda4b6ef738ef6554ce43c86446348b9bdf719","archive_size":90285,"archive_url":"https://extensions.blender.org/download/sha256:6177ca247f21143f839cf12aa0fda4b6ef738ef6554ce43c86446348b9bdf719/add-on-mesh-mesh-align-plus-v1.1.0-rc.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-mesh-align-plus/","maintainer":"BitByte","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View","Mesh","Modeling","Object","User Interface"]},{"id":"theme_Houdini","schema_version":"1.0.0","name":"Houdini","version":"1.3.0","tagline":"Theme Inspired By SideFX Houdini","archive_hash":"sha256:3d656c2c963edaf5040ca9ffb4f87ba7559b2cf6b3962d66b951a9e21d3dd3b9","archive_size":5502,"archive_url":"https://extensions.blender.org/download/sha256:3d656c2c963edaf5040ca9ffb4f87ba7559b2cf6b3962d66b951a9e21d3dd3b9/theme-theme-houdini-v1.3.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-houdini/","maintainer":"rmantdtg","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By"]},{"id":"mio3_copy_weight","schema_version":"1.0.0","name":"Mio3 Copy Weight","version":"1.1.0","tagline":"Copies weights of selected vertices across objects","archive_hash":"sha256:6957c7eb02bbae11a3a5efef3b1470c8471b1864a71c08c69edeb0941249e92e","archive_size":15521,"archive_url":"https://extensions.blender.org/download/sha256:6957c7eb02bbae11a3a5efef3b1470c8471b1864a71c08c69edeb0941249e92e/add-on-mio3-copy-weight-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mio3-copy-weight/","maintainer":"mio","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"whispering_ripples","schema_version":"1.0.0","name":"Whispering Ripples","version":"1.3.0","tagline":"In the whisper of the night, ripples of creativity flow freely","archive_hash":"sha256:90a7ebd8eb00c189410b2bdb76c9d45863a44284af13ca8a3bf78a42bf1f93e1","archive_size":6168,"archive_url":"https://extensions.blender.org/download/sha256:90a7ebd8eb00c189410b2bdb76c9d45863a44284af13ca8a3bf78a42bf1f93e1/theme-whispering-ripples-v1.3.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/whispering-ripples/","maintainer":"DaoL","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"sequenced_bake","schema_version":"1.0.0","name":"Sequenced Bake","version":"1.1.6","tagline":"Tools for baking material sequences and generating sprite sheets","archive_hash":"sha256:a1235d8ac5b3ae98668e53cf5759dd1ad88e21cc5baf9c7d8d41b9e9d0555a7a","archive_size":44148,"archive_url":"https://extensions.blender.org/download/sha256:a1235d8ac5b3ae98668e53cf5759dd1ad88e21cc5baf9c7d8d41b9e9d0555a7a/add-on-sequenced-bake-v1.1.6.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/sequenced-bake/","maintainer":"Anthony-OConnell","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Saving and opening image files"},"tags":["Material","Bake","Node"]},{"id":"quick_menu","schema_version":"1.0.0","name":"QuickMenu","version":"2.0.0","tagline":"Quick-Add/Mod & Quick-Cam","archive_hash":"sha256:da1b178cbeb2abab2051e7017964a287d56de4c44dbf8386623af4834adce6d2","archive_size":17449,"archive_url":"https://extensions.blender.org/download/sha256:da1b178cbeb2abab2051e7017964a287d56de4c44dbf8386623af4834adce6d2/add-on-quick-menu-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-menu/","maintainer":"QiuMu","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"auto_track","schema_version":"1.0.0","name":"Auto-tracking","version":"1.0.0","tagline":"VFX motion tracking automation","archive_hash":"sha256:e4dc16bbe23f728ddd3c0a1f9a2389e9708c24d4975d00a77da1a676b8df928d","archive_size":3589,"archive_url":"https://extensions.blender.org/download/sha256:e4dc16bbe23f728ddd3c0a1f9a2389e9708c24d4975d00a77da1a676b8df928d/add-on-auto-track-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-track/","maintainer":"mcd1992","license":["SPDX:GPL-2.0-or-later"],"tags":["Tracking"]},{"id":"snap_bisect","schema_version":"1.0.0","name":"Snap Bisect","version":"1.0.6","tagline":"Bisect operator with snapping to vertices or edge midpoints","archive_hash":"sha256:396b5687b0917b6d0ac5105da9f6d18ecf582483c73a96a2de89a06556e2154a","archive_size":3851,"archive_url":"https://extensions.blender.org/download/sha256:396b5687b0917b6d0ac5105da9f6d18ecf582483c73a96a2de89a06556e2154a/add-on-snap-bisect-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/snap-bisect/","maintainer":"AdamDominec","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"shape_key_swapper_extension","schema_version":"1.0.0","name":"ShapeKeySwapper","version":"1.0.3","tagline":"Swap vertex positions between 0 and 1 of the active shape key","archive_hash":"sha256:cdf443f57432608598903ed9f25a0821341ebb75feec8c83ead31545956476e0","archive_size":1941,"archive_url":"https://extensions.blender.org/download/sha256:cdf443f57432608598903ed9f25a0821341ebb75feec8c83ead31545956476e0/add-on-shape-key-swapper-extension-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shape-key-swapper-extension/","maintainer":"Maro3D","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"passpartout_slider","schema_version":"1.0.0","name":"Passpartout Slider","version":"1.0.0","tagline":"Let's you control active camera Passpartout by pressing P","archive_hash":"sha256:7d7cb75097ba7baff6feea1dff47164f2a36cd660d0845353a2ddb44fa134e21","archive_size":1819,"archive_url":"https://extensions.blender.org/download/sha256:7d7cb75097ba7baff6feea1dff47164f2a36cd660d0845353a2ddb44fa134e21/add-on-passpartout-slider-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/passpartout-slider/","maintainer":"Costa","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"keyframe_tools_extension","schema_version":"1.0.0","name":"Keyframe Tools","version":"1.0.7","tagline":"A set of tools for inserting, deleting, and moving keyframes","archive_hash":"sha256:e755c7ebb0df1e234b11a7f6ee93d05f9367913cf29121bdd42ce32fa52e324e","archive_size":11009,"archive_url":"https://extensions.blender.org/download/sha256:e755c7ebb0df1e234b11a7f6ee93d05f9367913cf29121bdd42ce32fa52e324e/add-on-keyframe-tools-extension-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyframe-tools-extension/","maintainer":"Hydrocallis","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"omUlete","schema_version":"1.0.0","name":"omUlete","version":"0.98.8","tagline":"A stand-alone exporter for the Panda3D .egg format","archive_hash":"sha256:44c9b28bfc67dae7f58edca9527728c860fac7901f7d817a33110d4686f999a0","archive_size":33170,"archive_url":"https://extensions.blender.org/download/sha256:44c9b28bfc67dae7f58edca9527728c860fac7901f7d817a33110d4686f999a0/add-on-omulete-v0.98.8.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/omulete/","maintainer":"Jackson-Sutherland","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"save exported egg files"},"tags":["Import-Export","Game Engine"]},{"id":"custom_output_path","schema_version":"1.0.0","name":"Custom Output Path","version":"1.1.8","tagline":"Customize file output paths with placeholders","archive_hash":"sha256:5b4b0bb7278624c271076cf910845d2318911da34e55d680749d7f9a219fea8b","archive_size":22437,"archive_url":"https://extensions.blender.org/download/sha256:5b4b0bb7278624c271076cf910845d2318911da34e55d680749d7f9a219fea8b/add-on-custom-output-path-v1.1.8.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/custom-output-path/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Render"]},{"id":"render_preset","schema_version":"1.0.0","name":"Render Preset","version":"1.3.4","tagline":"Create and use render presets","archive_hash":"sha256:429dcb66ab8906791ae7ec237b9f07990f93ce00738f195f282ebc137142ebd3","archive_size":74565,"archive_url":"https://extensions.blender.org/download/sha256:429dcb66ab8906791ae7ec237b9f07990f93ce00738f195f282ebc137142ebd3/add-on-render-preset-v1.3.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-preset/","maintainer":"tonton_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing json preset files in a user-defined location"},"tags":["Render","Pipeline"]},{"id":"mesh_maze","schema_version":"1.0.0","name":"Maze any Mesh","version":"1.2.2","tagline":"Convert any mesh to a maze pattern","archive_hash":"sha256:032c4ec845968791fceba506688f0af05f64566a88fc9f8d3353c4d8aa0589f2","archive_size":18705,"archive_url":"https://extensions.blender.org/download/sha256:032c4ec845968791fceba506688f0af05f64566a88fc9f8d3353c4d8aa0589f2/add-on-mesh-maze-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-maze/","maintainer":"elfnorcat","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"NodePie","schema_version":"1.0.0","name":"Node Pie","version":"1.2.56","tagline":"Add nodes faster with a pie menu","archive_hash":"sha256:83d6a7229c6b20e63ca22ed99596bda5de6b816c9859969391b2738ebad75d0c","archive_size":478543,"archive_url":"https://extensions.blender.org/download/sha256:83d6a7229c6b20e63ca22ed99596bda5de6b816c9859969391b2738ebad75d0c/add-on-nodepie-v1.2.56.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nodepie/","maintainer":"Strike_Digital","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing config files"},"tags":["User Interface","Node"]},{"id":"drag_and_drop_support","schema_version":"1.0.0","name":"Drag and Drop Support","version":"1.3.0","tagline":"Support and improve drag and drop imports in Blender","archive_hash":"sha256:ffca1b51dec3b369d4550b7890bdcfe83ca5e33fbf8b0f77c6feb777640a0980","archive_size":29508,"archive_url":"https://extensions.blender.org/download/sha256:ffca1b51dec3b369d4550b7890bdcfe83ca5e33fbf8b0f77c6feb777640a0980/add-on-drag-and-drop-support-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/drag-and-drop-support/","maintainer":"Natsune-Mochizuki","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import models from the disk"},"tags":["3D View","Import-Export"]},{"id":"deep_gray_something","schema_version":"1.0.0","name":"Deep Gray Something","version":"1.0.1","tagline":"Blender 5 dark theme with blue and green selection highlights","archive_hash":"sha256:c7b1258ab1aec1a1e740e3899353305af318599e29fad0ef83abfdd0e44302c1","archive_size":6009,"archive_url":"https://extensions.blender.org/download/sha256:c7b1258ab1aec1a1e740e3899353305af318599e29fad0ef83abfdd0e44302c1/theme-deep-gray-something-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/deep-gray-something/","maintainer":"blanchsb","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast","Accessibility"]},{"id":"matbatchtools","schema_version":"1.0.0","name":"Material Batch Tools","version":"2.5.0","tagline":"Quick batch automation of common material tasks","archive_hash":"sha256:9a26ca20d1d0a13eb7dae7032c328343a18f6abeb4c0e7768dfdbefffbe0017c","archive_size":37453,"archive_url":"https://extensions.blender.org/download/sha256:9a26ca20d1d0a13eb7dae7032c328343a18f6abeb4c0e7768dfdbefffbe0017c/add-on-matbatchtools-v2.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/matbatchtools/","maintainer":"Theanine3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"sourceenginecollisiontools","schema_version":"1.0.0","name":"Source Engine Collision Tools","version":"3.2.0","tagline":"Generate & optimize collision models for use in Source Engine","archive_hash":"sha256:494b10804c4457eb370357bd3aebd67f953bc65ad6ec47d86b16b9acd081c577","archive_size":68437,"archive_url":"https://extensions.blender.org/download/sha256:494b10804c4457eb370357bd3aebd67f953bc65ad6ec47d86b16b9acd081c577/add-on-sourceenginecollisiontools-v3.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sourceenginecollisiontools/","maintainer":"Theanine3D","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export collision-related QC and VMF files"},"tags":["Mesh","Object","Game Engine"]},{"id":"hot_node","schema_version":"1.0.0","name":"Hot Node","version":"1.2.1","tagline":"Add nodes like adding node","archive_hash":"sha256:ba974165b67c4820466d70cce8f67242e6d6e8e9bbd6013f833a354cc26ef3f4","archive_size":113483,"archive_url":"https://extensions.blender.org/download/sha256:ba974165b67c4820466d70cce8f67242e6d6e8e9bbd6013f833a354cc26ef3f4/add-on-hot-node-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hot-node/","maintainer":"Trantor","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access file system for storing custom nodes"},"tags":["Node","Geometry Nodes","Material"]},{"id":"ZenUVChecker","schema_version":"1.0.0","name":"Zen UV Checker","version":"1.5.1","tagline":"Check the state of UVs on the model easily with Checker Textures","archive_hash":"sha256:82f22c29e599869a3b87b4cde469c47b603e4d68f70539cadb4196961c152e44","archive_size":2989307,"archive_url":"https://extensions.blender.org/download/sha256:82f22c29e599869a3b87b4cde469c47b603e4d68f70539cadb4196961c152e44/add-on-zenuvchecker-v1.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/zenuvchecker/","maintainer":"Sergey_Tyapkin","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access to folders for importing Checker Textures"},"tags":["UV"]},{"id":"improved_node_search","schema_version":"1.0.0","name":"Improved Node Search","version":"1.0.5","tagline":"Navigate your node tree faster via more node search options","archive_hash":"sha256:a44ed6dbf107e0ef69c008b963ecc776101082c827bd943b9a01cdcc7c3991c4","archive_size":11647,"archive_url":"https://extensions.blender.org/download/sha256:a44ed6dbf107e0ef69c008b963ecc776101082c827bd943b9a01cdcc7c3991c4/add-on-improved-node-search-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/improved-node-search/","maintainer":"Griperis","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"noise_nodes","schema_version":"1.0.0","name":"Noise Nodes","version":"0.7.0","tagline":"Advance Noise Nodes For blender","archive_hash":"sha256:5213c751c997a1fc6905c912a60c254d0b95cdb571b7c3db1058be8b5f3755dc","archive_size":1482042,"archive_url":"https://extensions.blender.org/download/sha256:5213c751c997a1fc6905c912a60c254d0b95cdb571b7c3db1058be8b5f3755dc/add-on-noise-nodes-v0.7.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/noise-nodes/","maintainer":"Haseeb-Ahmed-3","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"clear_filepaths","schema_version":"1.0.0","name":"Clear Filepaths","version":"1.1.2","tagline":"Removes personal filepaths from your .blend file","archive_hash":"sha256:5800df075e83a222323db050bc9b774ad087dbca1b707103dba34ee5901f76a9","archive_size":4114,"archive_url":"https://extensions.blender.org/download/sha256:5800df075e83a222323db050bc9b774ad087dbca1b707103dba34ee5901f76a9/add-on-clear-filepaths-v1.1.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clear-filepaths/","maintainer":"FlailingFog","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Saves a copy of a .blend file without filepaths"},"platforms":["windows-x64"],"tags":["System"]},{"id":"onyx","schema_version":"1.0.0","name":"Onyx","version":"1.2.0","tagline":"A minimalistic dark theme","archive_hash":"sha256:6a5bfa1177c7708a10645d113ea632168fc1447c9c74d36a79cda3c55661c755","archive_size":5222,"archive_url":"https://extensions.blender.org/download/sha256:6a5bfa1177c7708a10645d113ea632168fc1447c9c74d36a79cda3c55661c755/theme-onyx-v1.2.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/onyx/","maintainer":"Aeraglyx","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"professional_plus","schema_version":"1.0.0","name":"Professional Plus","version":"2.0.0","tagline":"Professional theme with more vivid colors","archive_hash":"sha256:17b2b8b1c25538d6d70ec064278629430a29bb8ac9d1ba6b9e8d2f70d5fd2fa5","archive_size":5719,"archive_url":"https://extensions.blender.org/download/sha256:17b2b8b1c25538d6d70ec064278629430a29bb8ac9d1ba6b9e8d2f70d5fd2fa5/theme-professional-plus-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/professional-plus/","maintainer":"Alessandro-Vecchio","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"incremental_auto_save","schema_version":"1.0.0","name":"Incremental Auto-Save","version":"1.1.2","tagline":"Improvements to Blender's Autosave","archive_hash":"sha256:294d6c544419e840d8927f6b88095b409afb2841753d2d9e8447bf8b4d724d4f","archive_size":75152,"archive_url":"https://extensions.blender.org/download/sha256:294d6c544419e840d8927f6b88095b409afb2841753d2d9e8447bf8b4d724d4f/add-on-incremental-auto-save-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/incremental-auto-save/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save preferences & .blends in chosen directories"},"tags":["System"]},{"id":"tiny_backup","schema_version":"1.0.0","name":"Tiny Backup","version":"1.0.2","tagline":"A minimalistic backup solution","archive_hash":"sha256:00f0e44af81d41ba29b5e95b10fad221791be4b611ed8ce462d5afab4f75cadc","archive_size":13763,"archive_url":"https://extensions.blender.org/download/sha256:00f0e44af81d41ba29b5e95b10fad221791be4b611ed8ce462d5afab4f75cadc/add-on-tiny-backup-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tiny-backup/","maintainer":"Thane5","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Save backups on disk"},"tags":["System"]},{"id":"Randomize_Bones_Pose","schema_version":"1.0.0","name":"Randomize_Bones_Pose","version":"2.0.0","tagline":"Randomize_Bones_Pose","archive_hash":"sha256:f7cb0958faf3f296809e664f74ec4aec03b39cf1af6d64371b64061f44044bb4","archive_size":16685,"archive_url":"https://extensions.blender.org/download/sha256:f7cb0958faf3f296809e664f74ec4aec03b39cf1af6d64371b64061f44044bb4/add-on-randomize-bones-pose-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/randomize-bones-pose/","maintainer":"IZ.MdVerz","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"pose_shape_keys","schema_version":"1.0.0","name":"Pose Shape Keys","version":"1.0.0","tagline":"Preserve your shape keys through weight changes, and much more","archive_hash":"sha256:f90f6365a515d7ddd60f8e8410a4a4d1fb36594ae20e3b989f09d9d4360849f6","archive_size":35835,"archive_url":"https://extensions.blender.org/download/sha256:f90f6365a515d7ddd60f8e8410a4a4d1fb36594ae20e3b989f09d9d4360849f6/add-on-pose-shape-keys-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pose-shape-keys/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"select_panel_xdanic","schema_version":"1.0.0","name":"Select panel","version":"0.1.5","tagline":"All selections and more under a panel","archive_hash":"sha256:39f014c0fe720f04cfa525ff9c9e1fa13d899611969efecfe97002fc8a7cb793","archive_size":4058,"archive_url":"https://extensions.blender.org/download/sha256:39f014c0fe720f04cfa525ff9c9e1fa13d899611969efecfe97002fc8a7cb793/add-on-select-panel-xdanic-v0.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/select-panel-xdanic/","maintainer":"xdanic","license":["SPDX:GPL-2.0"],"tags":["User Interface"]},{"id":"theme_XP_AliVe","schema_version":"1.0.0","name":"XP_AliVe","version":"1.0.3","tagline":"Blender theme inspired by 2000s","archive_hash":"sha256:c0bffb862dc60fe848872207122feb401e3de59a6cd5cab5f6f7da9549ad5b7a","archive_size":5978,"archive_url":"https://extensions.blender.org/download/sha256:c0bffb862dc60fe848872207122feb401e3de59a6cd5cab5f6f7da9549ad5b7a/theme-theme-xp-alive-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-xp-alive/","maintainer":"AliVe","license":["SPDX:GPL-2.0-or-later"],"tags":["Colorful","High Contrast","Inspired By","Accessibility"]},{"id":"MustardUI","schema_version":"1.0.0","name":"MustardUI","version":"2026.6.2","tagline":"Easy-to-use UI for human characters","archive_hash":"sha256:b7e3d4c5c5374021267567d3541e69e21fdd9293233a44f494e2d80f18107cc3","archive_size":544375,"archive_url":"https://extensions.blender.org/download/sha256:b7e3d4c5c5374021267567d3541e69e21fdd9293233a44f494e2d80f18107cc3/add-on-mustardui-v2026.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mustardui/","maintainer":"Mustard","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export templates from/to disk"},"tags":["User Interface"]},{"id":"Half_Knife","schema_version":"1.0.0","name":"Half Knife","version":"1.3.85","tagline":"Optimized for fast workflow knife tool for Blender","archive_hash":"sha256:9c03a65b75ae4b8d6b9a3917d4ccd213d005443a56cc38f1519db7a079ab3c83","archive_size":15498,"archive_url":"https://extensions.blender.org/download/sha256:9c03a65b75ae4b8d6b9a3917d4ccd213d005443a56cc38f1519db7a079ab3c83/add-on-half-knife-v1.3.85.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/half-knife/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"node_quick_maths","schema_version":"1.0.0","name":"Node Quick Maths","version":"1.2.2","tagline":"A fast way to make long math chains in node editors","archive_hash":"sha256:c68f02a0e467f315f9693de37ff4a3d2d14b26e01ecb895b95759bb04062ceac","archive_size":22432,"archive_url":"https://extensions.blender.org/download/sha256:c68f02a0e467f315f9693de37ff4a3d2d14b26e01ecb895b95759bb04062ceac/add-on-node-quick-maths-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-quick-maths/","maintainer":"Zeptofine","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Pipeline","User Interface"]},{"id":"easyweight","schema_version":"1.0.0","name":"EasyWeight","version":"1.0.9","tagline":"Weight Painting Workflow Boosters","archive_hash":"sha256:9334b15aef0668f4405b4c94af24da413100ac0090391cfa68669190e2266ee0","archive_size":42626,"archive_url":"https://extensions.blender.org/download/sha256:9334b15aef0668f4405b4c94af24da413100ac0090391cfa68669190e2266ee0/add-on-easyweight-v1.0.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/easyweight/","maintainer":"Mets","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"set_smooth_group","schema_version":"1.0.0","name":"Set Smooth Group","version":"1.1.0","tagline":"Simplify setting smooth groups with sharp edges","archive_hash":"sha256:aaf35ea5fe6627cfbf550e508fb4f21de8a87029ec914be59d765fd793b8273b","archive_size":17228,"archive_url":"https://extensions.blender.org/download/sha256:aaf35ea5fe6627cfbf550e508fb4f21de8a87029ec914be59d765fd793b8273b/add-on-set-smooth-group-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/set-smooth-group/","maintainer":"VIktor-Kom","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"toggle_socket_visibility","schema_version":"1.0.0","name":"Toggle Socket Visibility","version":"1.0.0","tagline":"Control which node sockets are visible or not via panel/pop-up","archive_hash":"sha256:948e5bb472ec2fd75345e37139edccd83181925d756a2974a7f22b8beaafe00f","archive_size":7638,"archive_url":"https://extensions.blender.org/download/sha256:948e5bb472ec2fd75345e37139edccd83181925d756a2974a7f22b8beaafe00f/add-on-toggle-socket-visibility-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toggle-socket-visibility/","maintainer":"quackarooni","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"strange_attractors","schema_version":"1.0.0","name":"Strange Attractors","version":"2.1.0","tagline":"Add Strange Attractor curves","archive_hash":"sha256:466827116b5e4e4fa70a1b4d54597f207da22edb8b3eb693d0690df836738e06","archive_size":11456,"archive_url":"https://extensions.blender.org/download/sha256:466827116b5e4e4fa70a1b4d54597f207da22edb8b3eb693d0690df836738e06/add-on-strange-attractors-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/strange-attractors/","maintainer":"7bitretro","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"k_tools_view_sync","schema_version":"1.0.0","name":"K-Tools: Sync | Lock Viewport","version":"2.8.1","tagline":"Sync or Lock multiple viewports at once in real-time","archive_hash":"sha256:160d9135c53d5d5150671ec07ae181eea86b38bec05246b88fce791e08322956","archive_size":64885,"archive_url":"https://extensions.blender.org/download/sha256:160d9135c53d5d5150671ec07ae181eea86b38bec05246b88fce791e08322956/add-on-k-tools-view-sync-v2.8.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-view-sync/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"universal_multi_importer","schema_version":"1.0.0","name":"Universal Multi Importer","version":"2.4.2","tagline":"Batch Import many file formats at once, Batch process them","archive_hash":"sha256:a145cff633db3ece89da10b954898d397c44e9e61c74c392ccea1e801c23d234","archive_size":86464,"archive_url":"https://extensions.blender.org/download/sha256:a145cff633db3ece89da10b954898d397c44e9e61c74c392ccea1e801c23d234/add-on-universal-multi-importer-v2.4.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/universal-multi-importer/","maintainer":"Tilapiatsu","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Files from disk, save presets to disk"},"tags":["Import-Export","Pipeline"]},{"id":"BAM","schema_version":"1.0.0","name":"[BAM] AutoMat","version":"1.3.1","tagline":"Batch creation of materials from textures folder","archive_hash":"sha256:5dbbde5a9dbc0a72218affd6a3ef30d7e421adbc086d36f7149952a20969da9c","archive_size":7291248,"archive_url":"https://extensions.blender.org/download/sha256:5dbbde5a9dbc0a72218affd6a3ef30d7e421adbc086d36f7149952a20969da9c/add-on-bam-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bam/","maintainer":"AlexeyHRDesign","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Import-Export"]},{"id":"action_to_scene_range","schema_version":"1.0.0","name":"Action to Scene Range","version":"1.7.0","tagline":"When switching Actions, automatically set the Scene Frame Range","archive_hash":"sha256:bf2cb52492569624d6f1a1a19f4fde207d1ad6a18eab4e8e548da0bc6ace6ecf","archive_size":2520,"archive_url":"https://extensions.blender.org/download/sha256:bf2cb52492569624d6f1a1a19f4fde207d1ad6a18eab4e8e548da0bc6ace6ecf/add-on-action-to-scene-range-v1.7.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/action-to-scene-range/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"face_set_operators","schema_version":"1.0.0","name":"Face Set Operators","version":"1.0.0","tagline":"Convert sculpt mode attributes into anything you need","archive_hash":"sha256:73cd9f9c8a1eca7c893947165c061ad38e8f7d189a4ef24e65e03f398826f5e6","archive_size":4650,"archive_url":"https://extensions.blender.org/download/sha256:73cd9f9c8a1eca7c893947165c061ad38e8f7d189a4ef24e65e03f398826f5e6/add-on-face-set-operators-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/face-set-operators/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt","Mesh"]},{"id":"my_best_pie_menu_ever","schema_version":"1.0.0","name":"My Best Pie Menu Ever","version":"2.9.1","tagline":"Quick access to the functions you need","archive_hash":"sha256:dc2b09cf7638d2fa82ebf504c9f76fc269978e6fd7d033d2b0a178fd1d727d6c","archive_size":84510,"archive_url":"https://extensions.blender.org/download/sha256:dc2b09cf7638d2fa82ebf504c9f76fc269978e6fd7d033d2b0a178fd1d727d6c/add-on-my-best-pie-menu-ever-v2.9.1.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/my-best-pie-menu-ever/","maintainer":"emptybraces","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FBX from/to disk"},"tags":["3D View","User Interface"]},{"id":"mmd_tools","schema_version":"1.0.0","name":"MMD Tools","version":"4.5.13","tagline":"Utility tools for MMD model editing","archive_hash":"sha256:261cec171596c79fd204f39cc1227ffada3ced73626f27b5f915fd9dda619a69","archive_size":802456,"archive_url":"https://extensions.blender.org/download/sha256:261cec171596c79fd204f39cc1227ffada3ced73626f27b5f915fd9dda619a69/add-on-mmd-tools-v4.5.13.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mmd-tools/","maintainer":"MMD","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export PMX/PMD/VMD/VPD from/to disk"},"tags":["Camera","Import-Export","Material","Mesh","Object","Physics"]},{"id":"bioxelnodes","schema_version":"1.0.0","name":"Bioxel Nodes","version":"2.0.4","tagline":"For scientific volumetric data visualization in Blender","archive_hash":"sha256:79a309c013dea28a7f8e54b9a1772073d19bf57f85b4dce124776543fb6e8e77","archive_size":138587632,"archive_url":"https://extensions.blender.org/download/sha256:79a309c013dea28a7f8e54b9a1772073d19bf57f85b4dce124776543fb6e8e77/add-on-bioxelnodes-v2.0.4-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bioxelnodes/","maintainer":"icrdr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export volume data from/to disk"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Render","Import-Export"]},{"id":"molecularnodes","schema_version":"1.0.0","name":"Molecular Nodes","version":"4.5.12","tagline":"A toolbox for molecular import and animation in Blender","archive_hash":"sha256:d7523ae0233d3ec67215e5101fa60cae9e5ccf60bb224aa49ae1473e6136a3a4","archive_size":132599384,"archive_url":"https://extensions.blender.org/download/sha256:d7523ae0233d3ec67215e5101fa60cae9e5ccf60bb224aa49ae1473e6136a3a4/add-on-molecularnodes-v4.5.12-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/molecularnodes/","maintainer":"bradyajohnston","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk and caching downloads","network":"Downloading structural data from the PDB and AFPDB"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Import-Export"]},{"id":"io_scene_psk_psa","schema_version":"1.0.0","name":"Unreal PSK/PSA (.psk/.psa)","version":"9.1.2","tagline":"Import and export PSK and PSA files used in Unreal Engine","archive_hash":"sha256:a134bfa33f54804b9434149dea11472fc6ea43bb851a72d07df3511c843a4a4d","archive_size":80731,"archive_url":"https://extensions.blender.org/download/sha256:a134bfa33f54804b9434149dea11472fc6ea43bb851a72d07df3511c843a4a4d/add-on-io-scene-psk-psa-v9.1.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/io-scene-psk-psa/","maintainer":"darknation","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write PSK and PSA files from and to disk"},"tags":["Game Engine","Import-Export"]},{"id":"theme_Plasticity","schema_version":"1.0.0","name":"Plasticity","version":"2.0.0","tagline":"Theme Inspired By Plasticity app","archive_hash":"sha256:784ac771c1ae56b9382a09e8b99d5835033b36c095cda9afd28487f0695a0351","archive_size":6395,"archive_url":"https://extensions.blender.org/download/sha256:784ac771c1ae56b9382a09e8b99d5835033b36c095cda9afd28487f0695a0351/theme-theme-plasticity-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-plasticity/","maintainer":"SHEK","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast","Inspired By","Accessibility"]},{"id":"k_tools_visibility_check","schema_version":"1.0.0","name":"Visibility Check","version":"2.5.2","tagline":"Check for mismatched objects in viewport and render view","archive_hash":"sha256:c3af61e03cbe782d82b521d4b2d9eef50c98d6c25ffcb8984f8c8f439fc07913","archive_size":6511,"archive_url":"https://extensions.blender.org/download/sha256:c3af61e03cbe782d82b521d4b2d9eef50c98d6c25ffcb8984f8c8f439fc07913/add-on-k-tools-visibility-check-v2.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k-tools-visibility-check/","maintainer":"Robert-Kezives","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Render"]},{"id":"open_stage_blender_dmx","schema_version":"1.0.0","name":"DMX","version":"2.2.4","tagline":"Visualization & programming with GDTF&MVR","archive_hash":"sha256:96cd0cc92a446b37317170bbddd25bd6ec916c154ab3d3c9e14103fff8c79ce8","archive_size":2064675,"archive_url":"https://extensions.blender.org/download/sha256:96cd0cc92a446b37317170bbddd25bd6ec916c154ab3d3c9e14103fff8c79ce8/add-on-open-stage-blender-dmx-v2.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/open-stage-blender-dmx/","maintainer":"Sunova","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import GDTF devices. Import/Export MVR scenes and project data"}},{"id":"maze_generator","schema_version":"1.0.0","name":"Maze Generator","version":"0.3.1","tagline":"A Maze generator extension for Blender","archive_hash":"sha256:dd7cc3f38fb80df5ffafb6e3e70221469051bfcded84c78a784c320c0e3d15d1","archive_size":28418,"archive_url":"https://extensions.blender.org/download/sha256:dd7cc3f38fb80df5ffafb6e3e70221469051bfcded84c78a784c320c0e3d15d1/add-on-maze-generator-v0.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/maze-generator/","maintainer":"Leeroy-Majors","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"node_group_presets","schema_version":"1.0.0","name":"Node Group Presets","version":"0.8.0","tagline":"Save Node Group values as presets","archive_hash":"sha256:201454f4c0a32eed158502d13a0887141aaf4494647a22b4264802f94272b5a0","archive_size":27634,"archive_url":"https://extensions.blender.org/download/sha256:201454f4c0a32eed158502d13a0887141aaf4494647a22b4264802f94272b5a0/add-on-node-group-presets-v0.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-group-presets/","maintainer":"juaum","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copy/paste presets between nodedroups and across files"},"tags":["Geometry Nodes","Material","Node"]},{"id":"booltron","schema_version":"1.0.0","name":"Booltron","version":"3.3.3","tagline":"Super add-on for superfast booleans","archive_hash":"sha256:740c5b4965541f1e391be9d84a73aed98c28ae2e0b6a7db3a7f00f12c942661f","archive_size":48949,"archive_url":"https://extensions.blender.org/download/sha256:740c5b4965541f1e391be9d84a73aed98c28ae2e0b6a7db3a7f00f12c942661f/add-on-booltron-v3.3.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/booltron/","maintainer":"MikhailRachinskiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Object"]},{"id":"Dark_Pro","schema_version":"1.0.0","name":"Dark Pro","version":"2.0.3","tagline":"Just a little darker","archive_hash":"sha256:b5b0c094bcc136c5be57cf7cd413757cdc0e5673f865ab23574069dad94a5203","archive_size":5421,"archive_url":"https://extensions.blender.org/download/sha256:b5b0c094bcc136c5be57cf7cd413757cdc0e5673f865ab23574069dad94a5203/theme-dark-pro-v2.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-pro/","maintainer":"Mahdi.Shalchian","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"quick_groups","schema_version":"1.0.0","name":"Quick Groups (Instances)","version":"1.0.3","tagline":"Group objects with Ctrl+G using instances","archive_hash":"sha256:f9da4f1267c480b5fd252e2d61573e1ebbd3e4fafa723547b93f032d7292d01c","archive_size":6862,"archive_url":"https://extensions.blender.org/download/sha256:f9da4f1267c480b5fd252e2d61573e1ebbd3e4fafa723547b93f032d7292d01c/add-on-quick-groups-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-groups/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling"]},{"id":"t3d_gn_presets","schema_version":"1.0.0","name":"T3D GN Presets","version":"1.6.0","tagline":"A versatile collection of useful node groups for Geometry Nodes","archive_hash":"sha256:1b5e343d3b335b85caa7be2b9410b8218b777546638cdc5bce6e9f6e774e71cd","archive_size":835788,"archive_url":"https://extensions.blender.org/download/sha256:1b5e343d3b335b85caa7be2b9410b8218b777546638cdc5bce6e9f6e774e71cd/add-on-t3d-gn-presets-v1.6.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/t3d-gn-presets/","maintainer":"Tams_3d","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Append node-groups from source file"},"tags":["Geometry Nodes"]},{"id":"per_camera_resolution","schema_version":"1.0.0","name":"Per-Camera Resolution","version":"2.3.2","tagline":"Every camera should have its resolution","archive_hash":"sha256:48cecdfc004417c6d0dee452657d0822dd96ea3897e159d5544d9819f3e54b8f","archive_size":11199,"archive_url":"https://extensions.blender.org/download/sha256:48cecdfc004417c6d0dee452657d0822dd96ea3897e159d5544d9819f3e54b8f/add-on-per-camera-resolution-v2.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/per-camera-resolution/","maintainer":"pioverfour","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","Camera"]},{"id":"synchronize_workspaces","schema_version":"1.0.0","name":"Synchronize Workspaces","version":"1.14.0","tagline":"Synchronize 3D views between workspaces","archive_hash":"sha256:156bb74e7c8e77449d9da5dabb71ef00ad0286447e24968c41173e821ee714b5","archive_size":3974,"archive_url":"https://extensions.blender.org/download/sha256:156bb74e7c8e77449d9da5dabb71ef00ad0286447e24968c41173e821ee714b5/add-on-synchronize-workspaces-v1.14.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/synchronize-workspaces/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"grease_pencil_tool_wheel","schema_version":"1.0.0","name":"GP Tool Wheel","version":"1.0.11","tagline":"Extended pie menu for selecting Grease Pencil tools quickly","archive_hash":"sha256:c6c1c53b5f17791958cb92a02f38e9cbaf9e578226d0a615e06eeb8a3cb42ba6","archive_size":206402,"archive_url":"https://extensions.blender.org/download/sha256:c6c1c53b5f17791958cb92a02f38e9cbaf9e578226d0a615e06eeb8a3cb42ba6/add-on-grease-pencil-tool-wheel-v1.0.11.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grease-pencil-tool-wheel/","maintainer":"SietseB","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Grease Pencil"]},{"id":"commotion","schema_version":"1.0.0","name":"Commotion","version":"2.5.0","tagline":"Animation offset tools for motion graphics","archive_hash":"sha256:9554d7ccc6211c666991b03cd72b354173495dc8977320a70874694bf25179eb","archive_size":27868,"archive_url":"https://extensions.blender.org/download/sha256:9554d7ccc6211c666991b03cd72b354173495dc8977320a70874694bf25179eb/add-on-commotion-v2.5.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/commotion/","maintainer":"MikhailRachinskiy","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"find_bad_tracks","schema_version":"1.0.0","name":"Find Bad Tracks","version":"1.0.2","tagline":"Highlight motion tracks that move in suspicious directions","archive_hash":"sha256:b9f5373c3ca5119c4f14b9c11f0e92f2a29ff908bbd265803fef2a9d705c97b8","archive_size":25067,"archive_url":"https://extensions.blender.org/download/sha256:b9f5373c3ca5119c4f14b9c11f0e92f2a29ff908bbd265803fef2a9d705c97b8/add-on-find-bad-tracks-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/find-bad-tracks/","maintainer":"Walles","license":["SPDX:GPL-2.0-or-later"],"tags":["Tracking"]},{"id":"cloudrig","schema_version":"1.0.0","name":"CloudRig","version":"2.2.25","tagline":"Rig Generation & Rigging Workflow Tools","archive_hash":"sha256:5723242659cf81c9b0d9f24e94cb1bb704efa1602c17515a8001e4e29642b6a8","archive_size":3407150,"archive_url":"https://extensions.blender.org/download/sha256:5723242659cf81c9b0d9f24e94cb1bb704efa1602c17515a8001e4e29642b6a8/add-on-cloudrig-v2.2.25.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/cloudrig/","maintainer":"Blender Studio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load widgets/metarigs/preferences from disk","clipboard":"Copy/paste Bone Collections between armatures"},"tags":["Rigging"]},{"id":"theme_drcl","schema_version":"1.0.0","name":"drcl","version":"1.0.3","tagline":"A variation of Dracula dark theme","archive_hash":"sha256:bcb32cf5c1a0bafffdb7e2223b1f5eeedf272750227318ac65d0596748e00040","archive_size":4955,"archive_url":"https://extensions.blender.org/download/sha256:bcb32cf5c1a0bafffdb7e2223b1f5eeedf272750227318ac65d0596748e00040/theme-theme-drcl-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-drcl/","maintainer":"Sereda","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"YB_Animator_Tool","schema_version":"1.0.0","name":"YB Animator Tool","version":"1.1.3","tagline":"export grease pencil layers as keyframes and CSV","archive_hash":"sha256:7e06d55ad957752bfe87476860bd07b1d2c5609974f8a2e993975eb278768c1b","archive_size":5541,"archive_url":"https://extensions.blender.org/download/sha256:7e06d55ad957752bfe87476860bd07b1d2c5609974f8a2e993975eb278768c1b/add-on-yb-animator-tool-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/yb-animator-tool/","maintainer":"YB_","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Output CSV and sequence diagram"},"tags":["Grease Pencil","Animation","User Interface"]},{"id":"keymesh","schema_version":"1.0.0","name":"Keymesh","version":"2.3.2","tagline":"Create stop-motion animations by sculpting frame-by-frame","archive_hash":"sha256:aa56eec60eee3053668594b2daf513e792d464a7593b3af6a90068f5a607ed2a","archive_size":42763,"archive_url":"https://extensions.blender.org/download/sha256:aa56eec60eee3053668594b2daf513e792d464a7593b3af6a90068f5a607ed2a/add-on-keymesh-v2.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keymesh/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Store generated pose preview images and/or load them from disk"},"tags":["Animation","Sculpt","Mesh"]},{"id":"node_annotator","schema_version":"1.0.0","name":"Node Annotator","version":"0.4.3","tagline":"Easily create good documentation of your node trees","archive_hash":"sha256:e283048c97db794f392755c44604cb95655cd73fabe7cb3f29add5d440b40411","archive_size":28712,"archive_url":"https://extensions.blender.org/download/sha256:e283048c97db794f392755c44604cb95655cd73fabe7cb3f29add5d440b40411/add-on-node-annotator-v0.4.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-annotator/","maintainer":"FrankFirsching","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Geometry Nodes"]},{"id":"theme_ps","schema_version":"1.0.0","name":"PS","version":"1.1.3","tagline":"Adobe Photoshop inspired light theme","archive_hash":"sha256:1b69c3dabcffcdd76b87ed15724dd2db995821823b72bdea8946c0709854cbc2","archive_size":5663,"archive_url":"https://extensions.blender.org/download/sha256:1b69c3dabcffcdd76b87ed15724dd2db995821823b72bdea8946c0709854cbc2/theme-theme-ps-v1.1.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-ps/","maintainer":"Sereda","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By","Light"]},{"id":"toggle_language","schema_version":"1.0.0","name":"Toggle Language","version":"1.6.2","tagline":"One click to toggle UI between two languages","archive_hash":"sha256:67ea3fe811d72c81ad19bd1540b4cb0374446e69ae18a77b01a665d27f2da3fe","archive_size":31213,"archive_url":"https://extensions.blender.org/download/sha256:67ea3fe811d72c81ad19bd1540b4cb0374446e69ae18a77b01a665d27f2da3fe/add-on-toggle-language-v1.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toggle-language/","maintainer":"del1a8dc50179276c0","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"quick_lighting_environment","schema_version":"1.0.0","name":"QLE (Quick Lighting Environment)","version":"1.8.0","tagline":"Adds a Basic Lighting Setup to Your Blender Scene","archive_hash":"sha256:561863f28ac7d0df9e815a800796efaca126ad78cd23741ac28807f262031883","archive_size":105787,"archive_url":"https://extensions.blender.org/download/sha256:561863f28ac7d0df9e815a800796efaca126ad78cd23741ac28807f262031883/add-on-quick-lighting-environment-v1.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-lighting-environment/","maintainer":"don1138","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"SB_path_actions","schema_version":"1.0.0","name":"Path Actions","version":"2.8.0","tagline":"Open blend folder in OS explorer, and more","archive_hash":"sha256:91c1735d381921e54a17fedd9b81dc79c77735d9b4feb7e2b12df75a2ddd8d53","archive_size":42828,"archive_url":"https://extensions.blender.org/download/sha256:91c1735d381921e54a17fedd9b81dc79c77735d9b4feb7e2b12df75a2ddd8d53/add-on-sb-path-actions-v2.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sb-path-actions/","maintainer":"SamuelBernou","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Open folders, List Blend files","clipboard":"Copy path to files"},"tags":["System","Development"]},{"id":"print3d_toolbox","schema_version":"1.0.0","name":"3D Print Toolbox","version":"1.3.5","tagline":"Utilities for 3D printing","archive_hash":"sha256:0cb51b20599c3f69a2168e753b0e69c8577289ab198ae7c1498559f0e8d545c2","archive_size":148598,"archive_url":"https://extensions.blender.org/download/sha256:0cb51b20599c3f69a2168e753b0e69c8577289ab198ae7c1498559f0e8d545c2/add-on-print3d-toolbox-v1.3.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/print3d-toolbox/","maintainer":"MikhailRachinskiy","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export STL, PLY, OBJ files"},"tags":["Mesh"]},{"id":"green_olive","schema_version":"1.0.0","name":"Green Olive","version":"1.0.3","tagline":"A fine-tuned dark green theme","archive_hash":"sha256:c7544cc6ceb987628e3d7cbf49ac394cb9da92228673cebb1664aa2f0beb8cac","archive_size":5774,"archive_url":"https://extensions.blender.org/download/sha256:c7544cc6ceb987628e3d7cbf49ac394cb9da92228673cebb1664aa2f0beb8cac/theme-green-olive-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/green-olive/","maintainer":"Liuuzaki","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Accessibility"]},{"id":"fls_blcn","schema_version":"1.0.0","name":"Fast Language Switch","version":"0.0.5","tagline":"Fast change the language of the interface","archive_hash":"sha256:02aecb087b32a2863ac24729708022975fe431cf9a693c30ae706767758229e9","archive_size":2475,"archive_url":"https://extensions.blender.org/download/sha256:02aecb087b32a2863ac24729708022975fe431cf9a693c30ae706767758229e9/add-on-fls-blcn-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fls-blcn/","maintainer":"Kk","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"theme_xsi","schema_version":"1.0.0","name":"Softimage XSI","version":"5.0.0","tagline":"Community-made theme inspired by Softimage XSI","archive_hash":"sha256:ec047fc1185a8292f84a08d9a69a0d71483f9c53c88b74222dbf4449f6f10443","archive_size":6273,"archive_url":"https://extensions.blender.org/download/sha256:ec047fc1185a8292f84a08d9a69a0d71483f9c53c88b74222dbf4449f6f10443/theme-theme-xsi-v5.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-xsi/","maintainer":"RobWu","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By"]},{"id":"theme_white","schema_version":"1.0.0","name":"White","version":"1.0.1","tagline":"Community-made theme","archive_hash":"sha256:1f18c2b22d2a8f1b1ad3113eb3f972ef708bdc7a3e494df61779bf5d7d0689a0","archive_size":6242,"archive_url":"https://extensions.blender.org/download/sha256:1f18c2b22d2a8f1b1ad3113eb3f972ef708bdc7a3e494df61779bf5d7d0689a0/theme-theme-white-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-white/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","High Contrast"]},{"id":"theme_print_friendly","schema_version":"1.0.0","name":"Print Friendly","version":"2.0.0","tagline":"Community-made theme optimized for printing","archive_hash":"sha256:ec1e53309b01b0d1fd81a4aa72bd636ff411402fe9b56eb4126ef440f5f3ad24","archive_size":5585,"archive_url":"https://extensions.blender.org/download/sha256:ec1e53309b01b0d1fd81a4aa72bd636ff411402fe9b56eb4126ef440f5f3ad24/theme-theme-print-friendly-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-print-friendly/","maintainer":"JasonvanGumster","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","High Contrast"]},{"id":"theme_minimal_dark","schema_version":"1.0.0","name":"Minimal Dark","version":"3.1.2","tagline":"A flat dark theme for Blender","archive_hash":"sha256:b5814ca544a39e7c0b19d07523555e235d0efe856c74a4a912e784ecfaef419a","archive_size":7358,"archive_url":"https://extensions.blender.org/download/sha256:b5814ca544a39e7c0b19d07523555e235d0efe856c74a4a912e784ecfaef419a/theme-theme-minimal-dark-v3.1.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-minimal-dark/","maintainer":"jlampel","license":["SPDX:GPL-2.0-or-later"]},{"id":"theme_maya","schema_version":"1.0.0","name":"Maya","version":"2.0.0","tagline":"Community-made theme inspired by Maya","archive_hash":"sha256:6a6c6eac7b9aaf180bf8583d4c1d2f5b27e01a0581a5fa9782b9abd4a7c4ee1a","archive_size":5859,"archive_url":"https://extensions.blender.org/download/sha256:6a6c6eac7b9aaf180bf8583d4c1d2f5b27e01a0581a5fa9782b9abd4a7c4ee1a/theme-theme-maya-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-maya/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"theme_deep_grey","schema_version":"1.0.0","name":"Deep Grey","version":"2.0.5","tagline":"A comfortable medium dark theme for Blender","archive_hash":"sha256:a2c52a73fab56be425cd592f735d2909382ec53948b5da8b54f09e491870e7e6","archive_size":5595,"archive_url":"https://extensions.blender.org/download/sha256:a2c52a73fab56be425cd592f735d2909382ec53948b5da8b54f09e491870e7e6/theme-theme-deep-grey-v2.0.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-deep-grey/","maintainer":"TheRedWaxPolice","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"skinify_rig","schema_version":"1.0.0","name":"Skinify Rig","version":"0.11.2","tagline":"Creates a mesh object from selected bones","archive_hash":"sha256:26babe1f712c53b6e3a9de6da8a81a768548ed197d41716ed643a25469e3cf61","archive_size":6450,"archive_url":"https://extensions.blender.org/download/sha256:26babe1f712c53b6e3a9de6da8a81a768548ed197d41716ed643a25469e3cf61/add-on-skinify-rig-v0.11.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/skinify-rig/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"f2","schema_version":"1.0.0","name":"F2","version":"1.8.5","tagline":"Extends the 'Make Edge/Face' functionality","archive_hash":"sha256:dc8f19637a61c332b3eb937a6b86e2363511cbb29a9a22ea8571fe7d924ab05c","archive_size":5505,"archive_url":"https://extensions.blender.org/download/sha256:dc8f19637a61c332b3eb937a6b86e2363511cbb29a9a22ea8571fe7d924ab05c/add-on-f2-v1.8.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/f2/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"navigation","schema_version":"1.0.0","name":"3D Navigation","version":"1.3.0","tagline":"Navigate the 3D Viewport from the Sidebar","archive_hash":"sha256:4dab907f3eddb4ba96dfbb5c97f6f525e9cd0f4bfd45d9a21717a728954bf8ed","archive_size":3238,"archive_url":"https://extensions.blender.org/download/sha256:4dab907f3eddb4ba96dfbb5c97f6f525e9cd0f4bfd45d9a21717a728954bf8ed/add-on-navigation-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/navigation/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"amaranth","schema_version":"1.0.0","name":"Amaranth","version":"1.0.31","tagline":"A collection of tools to improve productivity","archive_hash":"sha256:ff9e36d3dbd9c556062449fb6943c55b0753a191a6a4f60a70a2d799411a28f3","archive_size":46492,"archive_url":"https://extensions.blender.org/download/sha256:ff9e36d3dbd9c556062449fb6943c55b0753a191a6a4f60a70a2d799411a28f3/add-on-amaranth-v1.0.31.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/amaranth/","maintainer":"pablovazquez","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Render","Compositing","User Interface","Scene","Lighting"]},{"id":"math_vis_console","schema_version":"1.0.0","name":"Math Vis (Console)","version":"0.2.2","tagline":"Display console defined mathutils variables in the 3D view","archive_hash":"sha256:72e30386a06a1b15500488a709951b085c18ff02bf95d07f126ac3e9ea3d470a","archive_size":6507,"archive_url":"https://extensions.blender.org/download/sha256:72e30386a06a1b15500488a709951b085c18ff02bf95d07f126ac3e9ea3d470a/add-on-math-vis-console-v0.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/math-vis-console/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View"]},{"id":"auto_mirror","schema_version":"1.0.0","name":"Auto Mirror","version":"2.5.4","tagline":"Super fast cutting and mirroring for mesh","archive_hash":"sha256:68c7785f641c91905b07b8122af6a0147834e9a7b77285966253b1f770f30cc7","archive_size":3571,"archive_url":"https://extensions.blender.org/download/sha256:68c7785f641c91905b07b8122af6a0147834e9a7b77285966253b1f770f30cc7/add-on-auto-mirror-v2.5.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-mirror/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"boltfactory","schema_version":"1.0.0","name":"BoltFactory","version":"0.7.1","tagline":"Add a bolt or nut","archive_hash":"sha256:b75f6f946b5c29f7a2122737da891917cd9c862e85b37daef82c662a348223b3","archive_size":35319,"archive_url":"https://extensions.blender.org/download/sha256:b75f6f946b5c29f7a2122737da891917cd9c862e85b37daef82c662a348223b3/add-on-boltfactory-v0.7.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/boltfactory/","maintainer":"Bolt Factory","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"snap_utilities_line","schema_version":"1.0.0","name":"Snap Line Tool","version":"6.8.1","tagline":"Extends Blender Snap controls","archive_hash":"sha256:8098ef55983b4192e2e711eb1c5542e93bb65996f973b2f5173bdd01093f1dbc","archive_size":32147,"archive_url":"https://extensions.blender.org/download/sha256:8098ef55983b4192e2e711eb1c5542e93bb65996f973b2f5173bdd01093f1dbc/add-on-snap-utilities-line-v6.8.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/snap-utilities-line/","maintainer":"mano-wii","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"looptools","schema_version":"1.0.0","name":"LoopTools","version":"4.7.7","tagline":"Mesh modelling toolkit. Several tools to aid modelling","archive_hash":"sha256:ff1ca3b3fff73094379da8b1fa2c1acbc9d88d26b7dfc73bb9de5941a6b50108","archive_size":30534,"archive_url":"https://extensions.blender.org/download/sha256:ff1ca3b3fff73094379da8b1fa2c1acbc9d88d26b7dfc73bb9de5941a6b50108/add-on-looptools-v4.7.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/looptools/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"node_arrange","schema_version":"1.0.0","name":"Node Arrange","version":"1.12.1","tagline":"Arrange node trees with one click","archive_hash":"sha256:ccce3db24525e89ab7c019a550bba1adbbe6bb5ccfc78a1957c484b8bd8d6c06","archive_size":1756301,"archive_url":"https://extensions.blender.org/download/sha256:ccce3db24525e89ab7c019a550bba1adbbe6bb5ccfc78a1957c484b8bd8d6c06/add-on-node-arrange-v1.12.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-arrange/","maintainer":"Leonardo-Pike-Excell","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"antlandscape","schema_version":"1.0.0","name":"A.N.T.Landscape","version":"0.2.0","tagline":"Another Noise Tool: Landscape and Displace","archive_hash":"sha256:230571bc14c50952f3af99b70fdb365cf0cee503382975dc38149407a5a4c8c0","archive_size":60899,"archive_url":"https://extensions.blender.org/download/sha256:230571bc14c50952f3af99b70fdb365cf0cee503382975dc38149407a5a4c8c0/add-on-antlandscape-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/antlandscape/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"material_library","schema_version":"1.0.0","name":"Material Library","version":"0.6.0","tagline":"Material Library VX","archive_hash":"sha256:baf00c107c5f938e6401cc9d30ab2226b2e1a9f8e92607335d19f1e4492e8019","archive_size":594898,"archive_url":"https://extensions.blender.org/download/sha256:baf00c107c5f938e6401cc9d30ab2226b2e1a9f8e92607335d19f1e4492e8019/add-on-material-library-v0.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/material-library/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Material"]},{"id":"copy_attributes_menu","schema_version":"1.0.0","name":"Copy Attributes Menu","version":"0.6.3","tagline":"Copy Attributes Menu","archive_hash":"sha256:990bac36be4c6a39c4506c84a689c5ec45e1a4b43995542cd0b058663f190478","archive_size":8270,"archive_url":"https://extensions.blender.org/download/sha256:990bac36be4c6a39c4506c84a689c5ec45e1a4b43995542cd0b058663f190478/add-on-copy-attributes-menu-v0.6.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-attributes-menu/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"material_utilities","schema_version":"1.0.0","name":"Material Utilities","version":"2.2.3","tagline":"Menu of material tools (assign, select..) in the 3D View","archive_hash":"sha256:35e3f516724b522930ca2defb78c8ef38949949aa7cc37b64be2d3522431b739","archive_size":16895,"archive_url":"https://extensions.blender.org/download/sha256:35e3f516724b522930ca2defb78c8ef38949949aa7cc37b64be2d3522431b739/add-on-material-utilities-v2.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/material-utilities/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Material"]},{"id":"edit_linked_library","schema_version":"1.0.0","name":"Edit Linked Library","version":"0.9.2","tagline":"Allows editing of objects, collections, and node groups lin . . ","archive_hash":"sha256:db6827e091da07209ffcff97ce271de8af2a8823619d25626472f6bf65ef5234","archive_size":3575,"archive_url":"https://extensions.blender.org/download/sha256:db6827e091da07209ffcff97ce271de8af2a8823619d25626472f6bf65ef5234/add-on-edit-linked-library-v0.9.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-linked-library/","maintainer":"JasonvanGumster","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"simplify_curves_plus","schema_version":"1.0.0","name":"Simplify Curves+","version":"1.1.3","tagline":"Simplify Curves: 3dview, Dopesheet, Graph","archive_hash":"sha256:57734eb8248818f3db18c2b934a9470b6ccd640066962c38918868ec93446851","archive_size":5943,"archive_url":"https://extensions.blender.org/download/sha256:57734eb8248818f3db18c2b934a9470b6ccd640066962c38918868ec93446851/add-on-simplify-curves-plus-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simplify-curves-plus/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"modifier_tools","schema_version":"1.0.0","name":"Modifier Tools","version":"0.2.7","tagline":"Modifiers Specials Show/Hide/Apply Selected","archive_hash":"sha256:68a98d3c992800dbb76d580835be0d4c023696d8fdcb41e590ec0c367876442a","archive_size":2718,"archive_url":"https://extensions.blender.org/download/sha256:68a98d3c992800dbb76d580835be0d4c023696d8fdcb41e590ec0c367876442a/add-on-modifier-tools-v0.2.7.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/modifier-tools/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"freestyle_svg_exporter","schema_version":"1.0.0","name":"Freestyle SVG Exporter","version":"1.0.0","tagline":"Exports Freestyle's stylized edges in SVG format","archive_hash":"sha256:d72191a8ca5847a38e6114d6e66aa07573191ef76b14bea192efe2759921b60b","archive_size":7691,"archive_url":"https://extensions.blender.org/download/sha256:d72191a8ca5847a38e6114d6e66aa07573191ef76b14bea192efe2759921b60b/add-on-freestyle-svg-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/freestyle-svg-exporter/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"extra_mesh_objects","schema_version":"1.0.0","name":"Extra Mesh Objects","version":"0.4.1","tagline":"Add extra mesh object types","archive_hash":"sha256:c85ce4bb2820d5af26b4dad66bf1a0fdeb4bfeffc668c5e4f098f1e416ed434b","archive_size":133442,"archive_url":"https://extensions.blender.org/download/sha256:c85ce4bb2820d5af26b4dad66bf1a0fdeb4bfeffc668c5e4f098f1e416ed434b/add-on-extra-mesh-objects-v0.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/extra-mesh-objects/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"export_paper_model","schema_version":"1.0.0","name":"Export Paper Model","version":"1.4.2","tagline":"Export printable net of a Mesh object","archive_hash":"sha256:0d49e1413b624fe9e86c1da10824dc8c1c28713a72ff72530550812dfbc56cba","archive_size":35606,"archive_url":"https://extensions.blender.org/download/sha256:0d49e1413b624fe9e86c1da10824dc8c1c28713a72ff72530550812dfbc56cba/add-on-export-paper-model-v1.4.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/export-paper-model/","maintainer":"AdamDominec","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export files to disk"},"tags":["Import-Export"]},{"id":"precision_drawing_tools_pdt","schema_version":"1.0.0","name":"Precision Drawing Tools (PDT)","version":"1.5.3","tagline":"Precision Drawing Tools for Accurate Modelling","archive_hash":"sha256:8e64e4ababc06e1a843eb72dd126c422bfb1117934dd4bdc480c2c6a76e37266","archive_size":49495,"archive_url":"https://extensions.blender.org/download/sha256:8e64e4ababc06e1a843eb72dd126c422bfb1117934dd4bdc480c2c6a76e37266/add-on-precision-drawing-tools-pdt-v1.5.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/precision-drawing-tools-pdt/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View"]},{"id":"extra_curve_objectes","schema_version":"1.0.0","name":"Extra Curve Objects","version":"0.2.0","tagline":"Add extra curve object types","archive_hash":"sha256:4ca91ce5563d094694b2c7f1fc9acece8b5ba8f5dd017a49f080e9cfa5553909","archive_size":52956,"archive_url":"https://extensions.blender.org/download/sha256:4ca91ce5563d094694b2c7f1fc9acece8b5ba8f5dd017a49f080e9cfa5553909/add-on-extra-curve-objectes-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/extra-curve-objectes/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"node_presets","schema_version":"1.0.0","name":"Node Presets","version":"1.1.0","tagline":"Add node groups directly to the node editors","archive_hash":"sha256:0b875c6c78c02bf6ab79cf82310a587cfc8dfe790aec158102a35dd22f1c8c04","archive_size":2398,"archive_url":"https://extensions.blender.org/download/sha256:0b875c6c78c02bf6ab79cf82310a587cfc8dfe790aec158102a35dd22f1c8c04/add-on-node-presets-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-presets/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Node"]},{"id":"copy_render_settings","schema_version":"1.0.0","name":"Copy Render Settings","version":"2.0.0","tagline":"Allows to copy a selection of render settings from current . . ","archive_hash":"sha256:dd7074aaddeb16d228f19ce98d3a45f641db108453af72ebb0e43c225bb162e0","archive_size":7786,"archive_url":"https://extensions.blender.org/download/sha256:dd7074aaddeb16d228f19ce98d3a45f641db108453af72ebb0e43c225bb162e0/add-on-copy-render-settings-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-render-settings/","maintainer":"mont29","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"tinycad_mesh_tools","schema_version":"1.0.0","name":"tinyCAD Mesh tools","version":"1.3.3","tagline":"tinyCAD Mesh tools Add-on","archive_hash":"sha256:a725746d79502e6519273f3b9d7a54f0350e15f6c391c36fc9c1288f75070bd6","archive_size":37134,"archive_url":"https://extensions.blender.org/download/sha256:a725746d79502e6519273f3b9d7a54f0350e15f6c391c36fc9c1288f75070bd6/add-on-tinycad-mesh-tools-v1.3.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tinycad-mesh-tools/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"collection_manager","schema_version":"1.0.0","name":"Collection Manager","version":"2.24.12","tagline":"Manage collections and their objects","archive_hash":"sha256:623eca06047acc9a548bb1a58b3eed2ab4357524826bfa2da8a95ace2c4f569a","archive_size":42507,"archive_url":"https://extensions.blender.org/download/sha256:623eca06047acc9a548bb1a58b3eed2ab4357524826bfa2da8a95ace2c4f569a/add-on-collection-manager-v2.24.12.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/collection-manager/","maintainer":"Imaginer","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"autodesk_3ds_format","schema_version":"1.0.0","name":"Autodesk 3D Studio (.3ds)","version":"3.0.1","tagline":"Import-Export 3DS scenes, objects, cameras, lights & animations","archive_hash":"sha256:3a9fad1b399b835401702b4d8ab2cff1bf818ce91299e105bc9e668b7e93e0d9","archive_size":208325,"archive_url":"https://extensions.blender.org/download/sha256:3a9fad1b399b835401702b4d8ab2cff1bf818ce91299e105bc9e668b7e93e0d9/add-on-autodesk-3ds-format-v3.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/autodesk-3ds-format/","maintainer":"NRGSille","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import-Export Autodesk 3DS files"},"tags":["Import-Export","Scene","Object","Camera","Lighting","Animation"]},{"id":"storypencil_storyboard_tools","schema_version":"1.0.0","name":"Storypencil - Storyboard Tools","version":"1.2.0","tagline":"Storyboard tools","archive_hash":"sha256:70b1115a622a4e7d5f29998a7c1acd7f9c1df2f384be025fd2b54e3d1ff9cac6","archive_size":20608,"archive_url":"https://extensions.blender.org/download/sha256:70b1115a622a4e7d5f29998a7c1acd7f9c1df2f384be025fd2b54e3d1ff9cac6/add-on-storypencil-storyboard-tools-v1.2.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/storypencil-storyboard-tools/","maintainer":"antoniov","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"object_color_rules","schema_version":"1.0.0","name":"Object Color Rules","version":"0.0.2","tagline":"Rules for assigning object color (for object & wireframe co . . ","archive_hash":"sha256:e23968a37905a932db8875ef9c9f3d29ca7af69ec2e87d4483ae54cb809d7cd5","archive_size":4057,"archive_url":"https://extensions.blender.org/download/sha256:e23968a37905a932db8875ef9c9f3d29ca7af69ec2e87d4483ae54cb809d7cd5/add-on-object-color-rules-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/object-color-rules/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"stored_views","schema_version":"1.0.0","name":"Stored Views","version":"0.4.0","tagline":"Save and restore views, pov, layers & display configs","archive_hash":"sha256:cec382a11ded631ee31b410725db78fe72e82c377a6077ee9bb7b5af1485e5f0","archive_size":24199,"archive_url":"https://extensions.blender.org/download/sha256:cec382a11ded631ee31b410725db78fe72e82c377a6077ee9bb7b5af1485e5f0/add-on-stored-views-v0.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stored-views/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory where it stores/reads view presets"},"tags":["3D View"]},{"id":"cell_fracture","schema_version":"1.0.0","name":"Cell Fracture","version":"0.2.1","tagline":"Fractured Object Creation","archive_hash":"sha256:878bbd46e0c735da689101aeed9ebe99f18c0d8d0cbd2e9e17ed8cda6b264fb2","archive_size":9722,"archive_url":"https://extensions.blender.org/download/sha256:878bbd46e0c735da689101aeed9ebe99f18c0d8d0cbd2e9e17ed8cda6b264fb2/add-on-cell-fracture-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cell-fracture/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"import_autocad_dxf_format_dxf","schema_version":"1.0.0","name":"Import AutoCAD DXF Format (.dxf)","version":"0.9.10","tagline":"Import files in the Autocad DXF format (.dxf)","archive_hash":"sha256:bc82f6498e92bbcb637c330f2ed9df431fd193303ddd1fec88994c8e0d1924f3","archive_size":57092,"archive_url":"https://extensions.blender.org/download/sha256:bc82f6498e92bbcb637c330f2ed9df431fd193303ddd1fec88994c8e0d1924f3/add-on-import-autocad-dxf-format-dxf-v0.9.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-autocad-dxf-format-dxf/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory with .dxf files"},"tags":["Import-Export"]},{"id":"bool_tool","schema_version":"1.0.0","name":"Bool Tool","version":"2.1.0","tagline":"Quick Boolean operators and tools for hard surface modeling","archive_hash":"sha256:d3a282db25925d115dd1a7638aa28116f2f9198423b0afb6179e8127d59c06e1","archive_size":173035,"archive_url":"https://extensions.blender.org/download/sha256:d3a282db25925d115dd1a7638aa28116f2f9198423b0afb6179e8127d59c06e1/add-on-bool-tool-v2.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/bool-tool/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Object"]},{"id":"vdm_brush_baker","schema_version":"1.0.0","name":"VDM Brush Baker","version":"1.0.6","tagline":"Bake vector displacement brushes easily from a plane","archive_hash":"sha256:b704f4dca21c2e929b559d99896c18a373b0599a6ca11b45856d5106ec4d6419","archive_size":5781,"archive_url":"https://extensions.blender.org/download/sha256:b704f4dca21c2e929b559d99896c18a373b0599a6ca11b45856d5106ec4d6419/add-on-vdm-brush-baker-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vdm-brush-baker/","maintainer":"robin.hohni","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Add-on saves textures to disk"},"tags":["Bake","Sculpt"]},{"id":"add_camera_rigs","schema_version":"1.0.0","name":"Add Camera Rigs","version":"1.8.2","tagline":"Adds a Camera Rig with UI","archive_hash":"sha256:b06aa8048718bbea463fc430694b735fd69b934bf8811a02f6fd17d18a7c1f90","archive_size":13706,"archive_url":"https://extensions.blender.org/download/sha256:b06aa8048718bbea463fc430694b735fd69b934bf8811a02f6fd17d18a7c1f90/add-on-add-camera-rigs-v1.8.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-camera-rigs/","maintainer":"WayneDixon","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"ivygen","schema_version":"1.0.0","name":"IvyGen","version":"0.1.5","tagline":"Adds generated ivy to a mesh object starting at the 3D cursor","archive_hash":"sha256:7e60967a11cabacb9bca0128e65dcfb96cec8794a934bc7dc2e353ae720cff98","archive_size":7172,"archive_url":"https://extensions.blender.org/download/sha256:7e60967a11cabacb9bca0128e65dcfb96cec8794a934bc7dc2e353ae720cff98/add-on-ivygen-v0.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ivygen/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"measureit","schema_version":"1.0.0","name":"MeasureIt","version":"1.8.4","tagline":"Tools for measuring objects","archive_hash":"sha256:85b1836d97e5c2f0311afdf45cf9fd3cefa71bade074963864ce40ee15c26042","archive_size":28891,"archive_url":"https://extensions.blender.org/download/sha256:85b1836d97e5c2f0311afdf45cf9fd3cefa71bade074963864ce40ee15c26042/add-on-measureit-v1.8.4.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/measureit/","maintainer":"antoniov","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"tri_lighting","schema_version":"1.0.0","name":"Tri-lighting","version":"0.2.1","tagline":"Add 3 Point Lighting to Selected / Active Object","archive_hash":"sha256:91bd27546e4be010ed03eb732dcf04500086ba79278c7259ec0912c996b3b04b","archive_size":3531,"archive_url":"https://extensions.blender.org/download/sha256:91bd27546e4be010ed03eb732dcf04500086ba79278c7259ec0912c996b3b04b/add-on-tri-lighting-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tri-lighting/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"grease_pencil_tools","schema_version":"1.0.0","name":"Grease Pencil Tools","version":"2.2.5","tagline":"Extra tools for Grease Pencil","archive_hash":"sha256:31c799c76ca6fe883b56042b27b670ccaceab03294cd3f2d73292449ea95f287","archive_size":51990,"archive_url":"https://extensions.blender.org/download/sha256:31c799c76ca6fe883b56042b27b670ccaceab03294cd3f2d73292449ea95f287/add-on-grease-pencil-tools-v2.2.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/grease-pencil-tools/","maintainer":"SamuelBernou","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil","Object"]},{"id":"tissue","schema_version":"1.0.0","name":"Tissue","version":"0.3.71","tagline":"Tools for Computational Design","archive_hash":"sha256:e2da80e8dc35fa07bd63cc09c71511a8d2766f00bc1ae93ae1416710049b04ad","archive_size":113361,"archive_url":"https://extensions.blender.org/download/sha256:e2da80e8dc35fa07bd63cc09c71511a8d2766f00bc1ae93ae1416710049b04ad/add-on-tissue-v0.3.71.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/tissue/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"icon_viewer","schema_version":"1.0.0","name":"Icon Viewer","version":"1.4.2","tagline":"Click an icon to copy its name to the clipboard","archive_hash":"sha256:f8f8edde289718bb022fcaeb8c2f0613730625af41cace80f3906d64779e64fc","archive_size":3814,"archive_url":"https://extensions.blender.org/download/sha256:f8f8edde289718bb022fcaeb8c2f0613730625af41cace80f3906d64779e64fc/add-on-icon-viewer-v1.4.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/icon-viewer/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Development"]},{"id":"magic_uv","schema_version":"1.0.0","name":"Magic UV","version":"6.7.1","tagline":"UV Toolset. See Add-ons Preferences for details","archive_hash":"sha256:09451ad3876aa1a1f693cdce4a5837e9a6c69cfc96cfc292ebc398a529d28571","archive_size":104347,"archive_url":"https://extensions.blender.org/download/sha256:09451ad3876aa1a1f693cdce4a5837e9a6c69cfc96cfc292ebc398a529d28571/add-on-magic-uv-v6.7.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/magic-uv/","maintainer":"nutti","license":["SPDX:GPL-2.0-or-later"],"tags":["UV"]},{"id":"export_autocad_dxf_format_dxf","schema_version":"1.0.0","name":"Export Autocad DXF Format (.dxf)","version":"2.2.4","tagline":"The script exports Blender geometry to DXF format r12 version","archive_hash":"sha256:eb49707876bcf472d440e89206252b90d8c7b9bf919ece6c59a8d7f1181199e7","archive_size":33206,"archive_url":"https://extensions.blender.org/download/sha256:eb49707876bcf472d440e89206252b90d8c7b9bf919ece6c59a8d7f1181199e7/add-on-export-autocad-dxf-format-dxf-v2.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-autocad-dxf-format-dxf/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory where it exports DXF file"},"tags":["Import-Export"]},{"id":"discombobulator","schema_version":"1.0.0","name":"Discombobulator","version":"0.1.0","tagline":"Add Discombobulator","archive_hash":"sha256:79b9763dd90ec7e7dd0f2b1a6dca0485145f9ac258787c6ba5fafb56d6b45d9d","archive_size":7864,"archive_url":"https://extensions.blender.org/download/sha256:79b9763dd90ec7e7dd0f2b1a6dca0485145f9ac258787c6ba5fafb56d6b45d9d/add-on-discombobulator-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/discombobulator/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"animall","schema_version":"1.0.0","name":"AnimAll","version":"0.14.0","tagline":"Animate mesh, lattice, curve and surface data","archive_hash":"sha256:85fcb80112f25a194891242708eb3bc8fdd02890b9a6d9fc83502e059e0d1f86","archive_size":8635,"archive_url":"https://extensions.blender.org/download/sha256:85fcb80112f25a194891242708eb3bc8fdd02890b9a6d9fc83502e059e0d1f86/add-on-animall-v0.14.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/animall/","maintainer":"AnimAll","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"blender_id_authentication","schema_version":"1.0.0","name":"Blender ID authentication","version":"2.1.3","tagline":"Stores your Blender ID credentials for usage with other add-ons","archive_hash":"sha256:c082141d5040e928d4691f2f00f020932e36b4a06500a210e06e4c2a014564d5","archive_size":11456,"archive_url":"https://extensions.blender.org/download/sha256:c082141d5040e928d4691f2f00f020932e36b4a06500a210e06e4c2a014564d5/add-on-blender-id-authentication-v2.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-id-authentication/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Requires access to id.blender.org to sync preferences"},"tags":["System"]},{"id":"edit_mesh_tools","schema_version":"1.0.0","name":"Edit Mesh Tools","version":"0.3.6","tagline":"Mesh modelling toolkit. Several tools to aid modelling","archive_hash":"sha256:af6440c98c5f64dbcd492e03d7e8772e3bacad92dfc92b5be8abadacc86e7ee0","archive_size":74410,"archive_url":"https://extensions.blender.org/download/sha256:af6440c98c5f64dbcd492e03d7e8772e3bacad92dfc92b5be8abadacc86e7ee0/add-on-edit-mesh-tools-v0.3.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-mesh-tools/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"viewport_pie_menus","schema_version":"1.0.0","name":"3D Viewport Pie Menus","version":"1.7.4","tagline":"Various pie menus to speed up your workflow","archive_hash":"sha256:2120e0002b06ee0aac364cb4e300a852ac8b2dadcaa0657eccd82915e8d98d55","archive_size":128248,"archive_url":"https://extensions.blender.org/download/sha256:2120e0002b06ee0aac364cb4e300a852ac8b2dadcaa0657eccd82915e8d98d55/add-on-viewport-pie-menus-v1.7.4.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/viewport-pie-menus/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"To load brush icons from disk"},"tags":["User Interface"]},{"id":"bsurfaces_gpl_edition","schema_version":"1.0.0","name":"Bsurfaces GPL Edition","version":"1.8.4","tagline":"Modeling and retopology tool","archive_hash":"sha256:a521277138cf2bac92655e3e684f0714aafca25dd86fc5adc2e0f274df34dd6e","archive_size":31781,"archive_url":"https://extensions.blender.org/download/sha256:a521277138cf2bac92655e3e684f0714aafca25dd86fc5adc2e0f274df34dd6e/add-on-bsurfaces-gpl-edition-v1.8.4.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/bsurfaces-gpl-edition/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"curve_tools","schema_version":"1.0.0","name":"Curve Tools","version":"0.4.6","tagline":"Adds some functionality for bezier/nurbs curve/surface modeling","archive_hash":"sha256:af1e26d5e38c0c024598898e31e35373c978505a1942deb12588ef87ad85696f","archive_size":55633,"archive_url":"https://extensions.blender.org/download/sha256:af1e26d5e38c0c024598898e31e35373c978505a1942deb12588ef87ad85696f/add-on-curve-tools-v0.4.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/curve-tools/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"power_sequencer","schema_version":"1.0.0","name":"Power Sequencer","version":"2.0.4","tagline":"Video editing tools for content creators","archive_hash":"sha256:895f02298c1c616f4d115184e7d71de3b82a61aa95f3d524cceaedf3d3f1ff5a","archive_size":97495,"archive_url":"https://extensions.blender.org/download/sha256:895f02298c1c616f4d115184e7d71de3b82a61aa95f3d524cceaedf3d3f1ff5a/add-on-power-sequencer-v2.0.4.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/power-sequencer/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"dynamic_sky","schema_version":"1.0.0","name":"Dynamic Sky","version":"1.0.6","tagline":"Creates Dynamic Sky for Cycles","archive_hash":"sha256:2f8d1fc2e0c71287e42b4f91d52d270da8f4d7da8033305b2a1790f742fa374f","archive_size":4358,"archive_url":"https://extensions.blender.org/download/sha256:2f8d1fc2e0c71287e42b4f91d52d270da8f4d7da8033305b2a1790f742fa374f/add-on-dynamic-sky-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-sky/","maintainer":"Dynamic Sky","license":["SPDX:GPL-2.0-or-later"],"tags":["Lighting"]},{"id":"vrm","schema_version":"1.0.0","name":"VRM format","version":"4.4.0","tagline":"VRM import, export and editing capabilities","archive_hash":"sha256:83facc17c8ed2b3e450fef15bd11110946bd610c6ff7a01330b025a71de6788d","archive_size":1603506,"archive_url":"https://extensions.blender.org/download/sha256:83facc17c8ed2b3e450fef15bd11110946bd610c6ff7a01330b025a71de6788d/add-on-vrm-v4.4.0.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/vrm/","maintainer":"saturday06","license":["SPDX:MIT","SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export VRM from/to disk"},"tags":["Import-Export","Animation","Modeling","Material","Physics"]},{"id":"io_scene_max","schema_version":"1.0.0","name":"Import Autodesk MAX (.max)","version":"1.9.2","tagline":"Import 3DSMAX meshes & materials","archive_hash":"sha256:ae11b8903ca7fcab78cd1163305b80a268335894139f251a502da0476ef77b43","archive_size":92503,"archive_url":"https://extensions.blender.org/download/sha256:ae11b8903ca7fcab78cd1163305b80a268335894139f251a502da0476ef77b43/add-on-io-scene-max-v1.9.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-max/","maintainer":"NRGSille","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import Autodesk MAX files"},"tags":["Import-Export","Mesh","Material"]},{"id":"sun_position","schema_version":"1.0.0","name":"Sun Position","version":"4.4.0","tagline":"Show the position of the Sun with objects or an environment","archive_hash":"sha256:b8a83c2ff04fad709687de51065faf6add52e824ec06fef22b4a95fe98955856","archive_size":26592,"archive_url":"https://extensions.blender.org/download/sha256:b8a83c2ff04fad709687de51065faf6add52e824ec06fef22b4a95fe98955856/add-on-sun-position-v4.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sun-position/","maintainer":"pioverfour","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"gruvbox_light","schema_version":"1.0.0","name":"Gruvbox Light","version":"1.7.0","tagline":"Gruvbox light theme","archive_hash":"sha256:0cf1134eacd9b4fe8b1cf336bdd8510fc984fd8c322427145a498982b0167664","archive_size":5434,"archive_url":"https://extensions.blender.org/download/sha256:0cf1134eacd9b4fe8b1cf336bdd8510fc984fd8c322427145a498982b0167664/theme-gruvbox-light-v1.7.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gruvbox-light/","maintainer":"Eleuth","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"gruvbox_dark","schema_version":"1.0.0","name":"Gruvbox Dark","version":"1.7.1","tagline":"Gruvbox dark theme","archive_hash":"sha256:54617fdf9c8a883c2425c9ccf3dbee6b745cb258b94e59776b932ef4b98289ae","archive_size":5232,"archive_url":"https://extensions.blender.org/download/sha256:54617fdf9c8a883c2425c9ccf3dbee6b745cb258b94e59776b932ef4b98289ae/theme-gruvbox-dark-v1.7.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gruvbox-dark/","maintainer":"Eleuth","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"phoenixart_fusion_theme","schema_version":"1.0.0","name":"PhoenixArt Fusion Theme","version":"4.0.3","tagline":"Based on Blackmagic Fusion Theme","archive_hash":"sha256:19029c154eba46e528b33dd7a18a3633507df051e0341358651a0030eedcd066","archive_size":6404,"archive_url":"https://extensions.blender.org/download/sha256:19029c154eba46e528b33dd7a18a3633507df051e0341358651a0030eedcd066/theme-phoenixart-fusion-theme-v4.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/phoenixart-fusion-theme/","maintainer":"phoenixart","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"alien_pink_theme","schema_version":"1.0.0","name":"Alien Pink","version":"6.0.0","tagline":"Stylish and vibrant theme designed specially for you","archive_hash":"sha256:cef37705d005e9f1ff988d0d620d646bfaac30532cb2d2fbce97885245906641","archive_size":6709,"archive_url":"https://extensions.blender.org/download/sha256:cef37705d005e9f1ff988d0d620d646bfaac30532cb2d2fbce97885245906641/theme-alien-pink-theme-v6.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/alien-pink-theme/","maintainer":"Alumx","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"copy_object_name_to_data","schema_version":"1.0.0","name":"Copy Object Name to Data","version":"1.1.1","tagline":"A simple operator to copy object names to object data","archive_hash":"sha256:686fd6616844730398773fa942ffc42bcc478622a1441b51c70ba28853274c03","archive_size":14363,"archive_url":"https://extensions.blender.org/download/sha256:686fd6616844730398773fa942ffc42bcc478622a1441b51c70ba28853274c03/add-on-copy-object-name-to-data-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-object-name-to-data/","maintainer":"Xury46","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","User Interface"]},{"id":"nd","schema_version":"1.0.0","name":"ND","version":"2.2.0","tagline":"Non-Destructive Modeling Toolkit","archive_hash":"sha256:71bc660afb8fb690e27389b7b729af6a5c1060833a8264f5c8cf52c034c7b411","archive_size":1137919,"archive_url":"https://extensions.blender.org/download/sha256:71bc660afb8fb690e27389b7b729af6a5c1060833a8264f5c8cf52c034c7b411/add-on-nd-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nd/","maintainer":"HugeMenace","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import built-in and custom assets"},"tags":["3D View","Lighting","Material","Modeling","Mesh","Object","Scene","UV"]},{"id":"io_export_after_effects","schema_version":"1.0.0","name":"Export: Adobe After Effects (.jsx)","version":"0.2.1","tagline":"Export cameras, images and empties to Adobe After Effects","archive_hash":"sha256:8c1caea017a582d3e9725fb2d96a17546a9877704d42676471097a59225049b4","archive_size":16102,"archive_url":"https://extensions.blender.org/download/sha256:8c1caea017a582d3e9725fb2d96a17546a9877704d42676471097a59225049b4/add-on-io-export-after-effects-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-export-after-effects/","maintainer":"Les Fées Spéciales","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Export JSX file to disk"},"tags":["Import-Export"]},{"id":"Bagapie","schema_version":"1.0.0","name":"Bagapie","version":"11.0.10","tagline":"50+ tools : Scattering, Ivy Gen, Random Array, Architecture","archive_hash":"sha256:2e55574dcb37ca4a86e1942317906f769e269d382d6a82d0b1330cfb94707c9c","archive_size":10833751,"archive_url":"https://extensions.blender.org/download/sha256:2e55574dcb37ca4a86e1942317906f769e269d382d6a82d0b1330cfb94707c9c/add-on-bagapie-v11.0.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bagapie/","maintainer":"Kiara_Bagattini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create, setup and add assets libraries","network":"Open web browser for documentation and tutorials"},"tags":["Modeling","Node"]},{"id":"y_projectionnode_form_camera_f1","schema_version":"1.0.0","name":"ProjectionNode from Camera","version":"1.3.0","tagline":"Creates a material specified in the Background Image of Camera","archive_hash":"sha256:6fc076e3124099bdad58988605f36ae44a27d2b65932aee2d0fc8b91aedf0d75","archive_size":9289,"archive_url":"https://extensions.blender.org/download/sha256:6fc076e3124099bdad58988605f36ae44a27d2b65932aee2d0fc8b91aedf0d75/add-on-y-projectionnode-form-camera-f1-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/y-projectionnode-form-camera-f1/","maintainer":"Yukimituki","license":["SPDX:GPL-2.0-or-later"],"tags":["Node","Material"]},{"id":"Shadow","schema_version":"1.0.0","name":"Shadow","version":"5.0.2","tagline":"Dark theme","archive_hash":"sha256:0325c737f887420efd31225df8a6d79c7645b4bff72dec4787605ed2d6fbf84b","archive_size":5744,"archive_url":"https://extensions.blender.org/download/sha256:0325c737f887420efd31225df8a6d79c7645b4bff72dec4787605ed2d6fbf84b/theme-shadow-v5.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/shadow/","maintainer":"--Shadow--","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"ucupaint","schema_version":"1.0.0","name":"Ucupaint","version":"2.4.8","tagline":"Layer based painting for Eevee and Cycles","archive_hash":"sha256:c81b5b3c80884e2ab402783d9f3432735d436e7eff9d189a8b9f14ac39169ccf","archive_size":2024427,"archive_url":"https://extensions.blender.org/download/sha256:c81b5b3c80884e2ab402783d9f3432735d436e7eff9d189a8b9f14ac39169ccf/add-on-ucupaint-v2.4.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ucupaint/","maintainer":"ucupumar","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access to filesystem for loading and saving images"},"tags":["Node","Material","Paint","Bake"]},{"id":"Industrial_AOV_Connector","schema_version":"1.0.0","name":"Industrial AOV Connector","version":"5.2.0","tagline":"Auto generate outputs for advanced compositing","archive_hash":"sha256:dcb04683854b49d2eb1a7ba27fcd2210b9bea7c3e371acb807b6e4657b5ee719","archive_size":219657,"archive_url":"https://extensions.blender.org/download/sha256:dcb04683854b49d2eb1a7ba27fcd2210b9bea7c3e371acb807b6e4657b5ee719/add-on-industrial-aov-connector-v5.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/industrial-aov-connector/","maintainer":"Roland-Vyens","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Delete Useless Default Renders button need this"},"tags":["Compositing","Import-Export","Pipeline","Render"]},{"id":"hdr_rotation","schema_version":"1.0.0","name":"Hdr Rotation","version":"1.0.7","tagline":"Rotation HDR by Shift+Right Drag in 3D View","archive_hash":"sha256:d78bada4fd2f4eb6cab6b30872006264b900ca91631b6a7ddc9a07111053fc68","archive_size":6585,"archive_url":"https://extensions.blender.org/download/sha256:d78bada4fd2f4eb6cab6b30872006264b900ca91631b6a7ddc9a07111053fc68/add-on-hdr-rotation-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hdr-rotation/","maintainer":"ACGGIT_LJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Render"]},{"id":"Dark_Purple_Green","schema_version":"1.0.0","name":"DarkPurpleGreen","version":"1.0.1","tagline":"Dark minimal neon theme","archive_hash":"sha256:ca96f25e8529fc306169b9a85a8e62826401ebb4bd26bd4eb4ff5bbec813e9d4","archive_size":5871,"archive_url":"https://extensions.blender.org/download/sha256:ca96f25e8529fc306169b9a85a8e62826401ebb4bd26bd4eb4ff5bbec813e9d4/theme-dark-purple-green-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-purple-green/","maintainer":"MSBH","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"node_editor_switcher","schema_version":"1.0.0","name":"Node Editor Switcher","version":"1.1.0","tagline":"Pie menu, shortcuts and buttons to switch between node editors","archive_hash":"sha256:2b7228d52b2d984301f9437453eafd0854c0547e15902e231640f2c6877a48e3","archive_size":2134,"archive_url":"https://extensions.blender.org/download/sha256:2b7228d52b2d984301f9437453eafd0854c0547e15902e231640f2c6877a48e3/add-on-node-editor-switcher-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-editor-switcher/","maintainer":"Victor-09","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Pipeline","User Interface"]},{"id":"Adapta_Nokto","schema_version":"1.0.0","name":"Adapta Nokto","version":"1.1.3","tagline":"Adapta Nokto theme","archive_hash":"sha256:42c3ec72557e2cb64a04370064b50047bf36904d186c438a040d636e53c40fb4","archive_size":5612,"archive_url":"https://extensions.blender.org/download/sha256:42c3ec72557e2cb64a04370064b50047bf36904d186c438a040d636e53c40fb4/theme-adapta-nokto-v1.1.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/adapta-nokto/","maintainer":"Cyrill-Vitkovskiy","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"browser_scroll_resize","schema_version":"1.0.0","name":"Browser Scroll Resize","version":"1.0.6","tagline":"Resize File Size Thumbnail on Browsers with Mouse Wheel","archive_hash":"sha256:d50bb8de1b5ef1b7a7b7f6567c2f15aec77c05d6fac04b443e5a2ff0107fbd94","archive_size":16676,"archive_url":"https://extensions.blender.org/download/sha256:d50bb8de1b5ef1b7a7b7f6567c2f15aec77c05d6fac04b443e5a2ff0107fbd94/add-on-browser-scroll-resize-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.3.1","website":"https://extensions.blender.org/add-ons/browser-scroll-resize/","maintainer":"Barrunterio","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"delete_line_shortcut","schema_version":"1.0.0","name":"Delete Line Shortcut","version":"1.2.2","tagline":"Shortcut to delete a line and copy its content","archive_hash":"sha256:e327da024c4d02910dc501b3c5a0445326654775e04750b9458fd7dc7153f7ab","archive_size":15764,"archive_url":"https://extensions.blender.org/download/sha256:e327da024c4d02910dc501b3c5a0445326654775e04750b9458fd7dc7153f7ab/add-on-delete-line-shortcut-v1.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/delete-line-shortcut/","maintainer":"matej.zeman02","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Add-on can read and write to the system clipboard."},"tags":["User Interface","Text Editor"]},{"id":"keyframe_visibility","schema_version":"1.0.0","name":"Keyframe Visibility","version":"1.0.2","tagline":"Batch keyframe visibility for objects","archive_hash":"sha256:d34a97ea3d6f6776991474da0e4794e6c124ec9a0262abfe4aeef65e35670f84","archive_size":4295,"archive_url":"https://extensions.blender.org/download/sha256:d34a97ea3d6f6776991474da0e4794e6c124ec9a0262abfe4aeef65e35670f84/add-on-keyframe-visibility-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyframe-visibility/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","3D View"]},{"id":"midnight_blue_theme","schema_version":"1.0.0","name":"Midnight Blue","version":"1.0.1","tagline":"Blender blues after midnight","archive_hash":"sha256:8ab6dd7c85f7451cc8a7fe41dcb95b5a474a01f9a336a841e8f11e28555d9928","archive_size":5982,"archive_url":"https://extensions.blender.org/download/sha256:8ab6dd7c85f7451cc8a7fe41dcb95b5a474a01f9a336a841e8f11e28555d9928/theme-midnight-blue-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/midnight-blue-theme/","maintainer":"cmzw","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"bulk_asset_tools","schema_version":"1.0.0","name":"Bulk Asset Tools","version":"1.8.0","tagline":"Manage your asset libraries with ease","archive_hash":"sha256:fa483ef8a9e8dbd128af4397851224104c67104b87d087f569cbbadf83c3a278","archive_size":11314,"archive_url":"https://extensions.blender.org/download/sha256:fa483ef8a9e8dbd128af4397851224104c67104b87d087f569cbbadf83c3a278/add-on-bulk-asset-tools-v1.8.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bulk-asset-tools/","maintainer":"guitargeek","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Make changes to asset files"},"tags":["User Interface"]},{"id":"blender_path_maker","schema_version":"1.0.0","name":"Path Maker","version":"1.4.5","tagline":"Replaces custom tags in the Output Path","archive_hash":"sha256:1c222d219c83a66f87ab9f573d682c584de029ed23c7ef3b44f5f89f66a0d926","archive_size":4822,"archive_url":"https://extensions.blender.org/download/sha256:1c222d219c83a66f87ab9f573d682c584de029ed23c7ef3b44f5f89f66a0d926/add-on-blender-path-maker-v1.4.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-path-maker/","maintainer":"thornydre","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"SelectsAllIslandsUDIM","schema_version":"1.0.0","name":"Selects all UV islands on one UDIM","version":"1.2.0","tagline":"Highlighting UV-islands and faces of the corresponding UDIM","archive_hash":"sha256:3ead06399c6676eeb55ccd18d122a9d4fc7d1cba004290de7ddaaf9f8c5b930f","archive_size":3781,"archive_url":"https://extensions.blender.org/download/sha256:3ead06399c6676eeb55ccd18d122a9d4fc7d1cba004290de7ddaaf9f8c5b930f/add-on-selectsallislandsudim-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/selectsallislandsudim/","maintainer":"Ailex","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"lightpainter","schema_version":"1.0.0","name":"Light Painter","version":"1.5.10","tagline":"Do not place your lights, paint them","archive_hash":"sha256:01f5dfb34f1b19692b25b77b439b61432cbdd28cdd166dd1c83f308dd9086045","archive_size":109568,"archive_url":"https://extensions.blender.org/download/sha256:01f5dfb34f1b19692b25b77b439b61432cbdd28cdd166dd1c83f308dd9086045/add-on-lightpainter-v1.5.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lightpainter/","maintainer":"SMagnusson","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Lighting","Object"]},{"id":"ContextPie","schema_version":"1.0.0","name":"Context Pie","version":"0.9.51","tagline":"Context sensitive pie menu for a simple, fast workflow","archive_hash":"sha256:709e419e41eae0db0d6109ade42fe2220a9cbdefd5d7eed3462869fa76afc24e","archive_size":171087,"archive_url":"https://extensions.blender.org/download/sha256:709e419e41eae0db0d6109ade42fe2220a9cbdefd5d7eed3462869fa76afc24e/add-on-contextpie-v0.9.51.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/contextpie/","maintainer":"BastianLS","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View","UV"]},{"id":"orient_and_origin_to_selected","schema_version":"1.0.0","name":"Orient and Origin to Selected","version":"1.2.0","tagline":"Quickly manipulate the object origin","archive_hash":"sha256:f2f35569453161aa07e2d9c3ae6fe618538c6af7f659f910bb7bdfb8a4fc3521","archive_size":42615,"archive_url":"https://extensions.blender.org/download/sha256:f2f35569453161aa07e2d9c3ae6fe618538c6af7f659f910bb7bdfb8a4fc3521/add-on-orient-and-origin-to-selected-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/orient-and-origin-to-selected/","maintainer":"Orange Turbine","license":["SPDX:GPL-2.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"screencast_keys","schema_version":"1.0.0","name":"Screencast Keys","version":"4.2.2","tagline":"Display keys pressed in Blender","archive_hash":"sha256:dc9f079d49cf18058646a0d8c0efc88c2928554f6960cf1bff5fbabf6dd48bc4","archive_size":39054,"archive_url":"https://extensions.blender.org/download/sha256:dc9f079d49cf18058646a0d8c0efc88c2928554f6960cf1bff5fbabf6dd48bc4/add-on-screencast-keys-v4.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/screencast-keys/","maintainer":"nutti","license":["SPDX:GPL-3.0-or-later"],"tags":["System","User Interface"]},{"id":"Gold_Pro_Theme","schema_version":"1.0.0","name":"Gold Pro","version":"1.1.4","tagline":"Professional blender theme with Gold :)","archive_hash":"sha256:c74e7b313e8e3fc7abb1e1ef91af4a93dfcb61110e767cb9d720746798a64e5d","archive_size":5514,"archive_url":"https://extensions.blender.org/download/sha256:c74e7b313e8e3fc7abb1e1ef91af4a93dfcb61110e767cb9d720746798a64e5d/theme-gold-pro-theme-v1.1.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gold-pro-theme/","maintainer":"EmanuelFerro","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"lfs_camera_plane","schema_version":"1.0.0","name":"Camera Plane","version":"3.0.1","tagline":"Import images and stick them to the camera","archive_hash":"sha256:38ae1b667ba8ed24f14ba4fd1d8f2509dbb327b1b0c22ed17fbd4f7f3b250028","archive_size":17283,"archive_url":"https://extensions.blender.org/download/sha256:38ae1b667ba8ed24f14ba4fd1d8f2509dbb327b1b0c22ed17fbd4f7f3b250028/add-on-lfs-camera-plane-v3.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/lfs-camera-plane/","maintainer":"Les Fées Spéciales","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images from disk"},"tags":["3D View","Import-Export","Object","Camera"]},{"id":"Wireframe_Color_Tools","schema_version":"1.0.0","name":"Wireframe Color Tools","version":"1.0.0","tagline":"Change Object Colors based on different kinds of methods","archive_hash":"sha256:e1290c2cfb2b6ce2346f12679eed8f6cc2e522c90f40889e056e28f11f3832a9","archive_size":3122,"archive_url":"https://extensions.blender.org/download/sha256:e1290c2cfb2b6ce2346f12679eed8f6cc2e522c90f40889e056e28f11f3832a9/add-on-wireframe-color-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wireframe-color-tools/","maintainer":"Lumpengnom","license":["SPDX:GPL-2.0-or-later"],"tags":["3D View","Material","Object"]},{"id":"neutral_grey","schema_version":"1.0.0","name":"Neutral Grey","version":"2.0.3","tagline":"A neutral grey theme for Blender","archive_hash":"sha256:d8b3c0b0c41cb7cc9a7ab555f6f7d7722bfab1756c62f85924aeb51edbb76454","archive_size":5558,"archive_url":"https://extensions.blender.org/download/sha256:d8b3c0b0c41cb7cc9a7ab555f6f7d7722bfab1756c62f85924aeb51edbb76454/theme-neutral-grey-v2.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/neutral-grey/","maintainer":"scopelma","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Accessibility"]},{"id":"deep_dark_sea","schema_version":"1.0.0","name":"Deep Dark Sea","version":"3.0.0","tagline":"Darker than the default dark","archive_hash":"sha256:59391a10f0750d676911eb3daf9e717504355033e9851de584d430e30c1c5298","archive_size":6219,"archive_url":"https://extensions.blender.org/download/sha256:59391a10f0750d676911eb3daf9e717504355033e9851de584d430e30c1c5298/theme-deep-dark-sea-v3.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/deep-dark-sea/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"border_buddy","schema_version":"1.0.0","name":"Border Buddy","version":"0.1.1","tagline":"Your buddy that helps to preserve borders","archive_hash":"sha256:1806735a0d626fabbda5d37bbb2ed03841da49abc956a18dddf9274875bffaf4","archive_size":2579,"archive_url":"https://extensions.blender.org/download/sha256:1806735a0d626fabbda5d37bbb2ed03841da49abc956a18dddf9274875bffaf4/add-on-border-buddy-v0.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/border-buddy/","maintainer":"SimonThommes","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"bake_shape_keys","schema_version":"1.0.0","name":"Bake Shape Keys","version":"1.4.0","tagline":"Feature-set for shape keys and shape key animations","archive_hash":"sha256:883e86f28541be0cd3e0a59abdc8fd0ea531d10186181d38cdaca590d17ee0dd","archive_size":14241,"archive_url":"https://extensions.blender.org/download/sha256:883e86f28541be0cd3e0a59abdc8fd0ea531d10186181d38cdaca590d17ee0dd/add-on-bake-shape-keys-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bake-shape-keys/","maintainer":"nickberckley","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Mesh"]},{"id":"matalogue","schema_version":"1.0.0","name":"Matalogue","version":"1.5.1","tagline":"All your node trees in one list","archive_hash":"sha256:b1911aa0cbe55456ccd3c16a38aed01c687f205d5ca86c69903ef36aca7c90d9","archive_size":13431,"archive_url":"https://extensions.blender.org/download/sha256:b1911aa0cbe55456ccd3c16a38aed01c687f205d5ca86c69903ef36aca7c90d9/add-on-matalogue-v1.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/matalogue/","maintainer":"GregZaal","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"stack_node","schema_version":"1.0.0","name":"Stack","version":"1.0.4","tagline":"Layer blending node with blend modes, opacity, and masking","archive_hash":"sha256:bbaf8b4918680251d8f2966addaea0ec8d46e0fa0a4b92dd44d79bc93f7d831f","archive_size":23737,"archive_url":"https://extensions.blender.org/download/sha256:bbaf8b4918680251d8f2966addaea0ec8d46e0fa0a4b92dd44d79bc93f7d831f/add-on-stack-node-v1.0.4.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/stack-node/","maintainer":"NXSTYNATE","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"mat_helperr","schema_version":"1.0.0","name":"MAT Helper","version":"1.2.1","tagline":"Smart PBR texture importer for UModel .mat & .json exports","archive_hash":"sha256:3386ada34896c54c73e1cffe52a1de9fdedc5a475324ddbcd08b6fa60691b9b6","archive_size":4011,"archive_url":"https://extensions.blender.org/download/sha256:3386ada34896c54c73e1cffe52a1de9fdedc5a475324ddbcd08b6fa60691b9b6/add-on-mat-helperr-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mat-helperr/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Import-Export"]},{"id":"NieR_Automata_UI","schema_version":"1.0.0","name":"NieR_Automata_UI","version":"1.3.1","tagline":"Glory to Mankind","archive_hash":"sha256:423aac4916d63536601499ef6a0c8de8a2c296bc87d3aedadabd5400bfd51c76","archive_size":5829,"archive_url":"https://extensions.blender.org/download/sha256:423aac4916d63536601499ef6a0c8de8a2c296bc87d3aedadabd5400bfd51c76/theme-nier-automata-ui-v1.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/nier-automata-ui/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Colorful"]},{"id":"texops","schema_version":"1.0.0","name":"TexOps","version":"1.0.0","tagline":"Texture Conversion, Generation, and Manipulation Operations","archive_hash":"sha256:4cfbd79aabfde50762d0d555d7a795eec480b59333309062828345550d85abc9","archive_size":94059,"archive_url":"https://extensions.blender.org/download/sha256:4cfbd79aabfde50762d0d555d7a795eec480b59333309062828345550d85abc9/add-on-texops-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/texops/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint","Bake","Import-Export","User Interface"]},{"id":"preset_startup_manager","schema_version":"1.0.0","name":"Startup Preset Manager","version":"2.10.0","tagline":"Custom startup file creation / hot reloading","archive_hash":"sha256:09db3bb39ffa07a51635b7af748221c1b45c4fca6d49174d2a57366652609ca8","archive_size":4684,"archive_url":"https://extensions.blender.org/download/sha256:09db3bb39ffa07a51635b7af748221c1b45c4fca6d49174d2a57366652609ca8/add-on-preset-startup-manager-v2.10.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/preset-startup-manager/","maintainer":"Gruff-Wright","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline","Scene","System"]},{"id":"mass_keyframe","schema_version":"1.0.0","name":"Mass Keyframe","version":"1.1.8","tagline":"Keyframe properties better","archive_hash":"sha256:ac70facdf6a32075a6a00ce88dcd6ffee75597560080d154e60db3ded67a6b48","archive_size":386198,"archive_url":"https://extensions.blender.org/download/sha256:ac70facdf6a32075a6a00ce88dcd6ffee75597560080d154e60db3ded67a6b48/add-on-mass-keyframe-v1.1.8.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/mass-keyframe/","maintainer":"StratosDerg","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"geonode_to_shapekey","schema_version":"1.0.0","name":"Geonode To Shapekey","version":"1.2.0","tagline":"Convert geometry nodes to shapekeys. Useful for glTF export","archive_hash":"sha256:f4b3cd3f8cbb88efd704e56fbb15ddf6de088ae8c3e57e4b06091d0457fd7392","archive_size":4974,"archive_url":"https://extensions.blender.org/download/sha256:f4b3cd3f8cbb88efd704e56fbb15ddf6de088ae8c3e57e4b06091d0457fd7392/add-on-geonode-to-shapekey-v1.2.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/geonode-to-shapekey/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes","Pipeline"]},{"id":"dimensions_and_lines","schema_version":"1.0.0","name":"Dimensions and Lines","version":"1.1.0","tagline":"create technical drawings, dimensions and lines","archive_hash":"sha256:b2d368e76a9a41d82b65766fcbc002042ff3383ad40d8e8619ae88bf20d64c30","archive_size":75526,"archive_url":"https://extensions.blender.org/download/sha256:b2d368e76a9a41d82b65766fcbc002042ff3383ad40d8e8619ae88bf20d64c30/add-on-dimensions-and-lines-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dimensions-and-lines/","maintainer":"jan.holinka","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","3D View","Mesh"]},{"id":"polyzamboni","schema_version":"1.0.0","name":"PolyZamboni","version":"1.3.1","tagline":"Papercraft in Blender","archive_hash":"sha256:ed4c89087f806c5517686cbea42db37b652fd0aa5489237de195f655b88e6894","archive_size":20562449,"archive_url":"https://extensions.blender.org/download/sha256:ed4c89087f806c5517686cbea42db37b652fd0aa5489237de195f655b88e6894/add-on-polyzamboni-v1.3.1-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/polyzamboni/","maintainer":"Anton-Florey","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export PDF/SVG to disk"},"platforms":["windows-x64"],"tags":["3D View","Import-Export"]},{"id":"textures_autosave","schema_version":"1.0.0","name":"Autosave Textures","version":"1.0.1","tagline":"Save all modified image textures on blendfile (auto-)save","archive_hash":"sha256:86990c248d92cb1c1c9fee66a3d5e9ec215017bc0cd45acefbf8645823bde938","archive_size":2642,"archive_url":"https://extensions.blender.org/download/sha256:86990c248d92cb1c1c9fee66a3d5e9ec215017bc0cd45acefbf8645823bde938/add-on-textures-autosave-v1.0.1.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/textures-autosave/","maintainer":"mont29","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write image files to disk"},"tags":["Pipeline","Paint"]},{"id":"csv_importer","schema_version":"1.0.0","name":"CSV Importer","version":"0.2.3","tagline":"import csv data to meshes in Blender","archive_hash":"sha256:f3f6b15df15381d0f7ba6a47f161b8552f6c850d5beda4e3471c5ae07a38812b","archive_size":53601988,"archive_url":"https://extensions.blender.org/download/sha256:f3f6b15df15381d0f7ba6a47f161b8552f6c850d5beda4e3471c5ae07a38812b/add-on-csv-importer-v0.2.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.5","website":"https://extensions.blender.org/add-ons/csv-importer/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Geometry Nodes","Import-Export"]},{"id":"NLATools","schema_version":"1.0.0","name":"Merge NLA Strips","version":"1.2.0","tagline":"Combine selected NLA strips into one","archive_hash":"sha256:fb71b63b597aa5998c41387cb24ccb78fed7944a43e80418f959080090a4d276","archive_size":4416,"archive_url":"https://extensions.blender.org/download/sha256:fb71b63b597aa5998c41387cb24ccb78fed7944a43e80418f959080090a4d276/add-on-nlatools-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nlatools/","maintainer":"Likkez","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Bake"]},{"id":"Cake_Particles","schema_version":"1.0.0","name":"Cake_Particles","version":"5.0.0","tagline":"Bake particles simulation into keyframed animations","archive_hash":"sha256:f1c2e3f5f97bfa3432cc2fb85af35ca6cb05e4ecd7d6dd619522cc36aa80b42f","archive_size":9459,"archive_url":"https://extensions.blender.org/download/sha256:f1c2e3f5f97bfa3432cc2fb85af35ca6cb05e4ecd7d6dd619522cc36aa80b42f/add-on-cake-particles-v5.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cake-particles/","maintainer":"scaryplasmon","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Bake","Physics","Object"]},{"id":"Quick_Character_Selector","schema_version":"1.0.0","name":"Quick Character Selector","version":"1.1.0","tagline":"Seleccion rapida de armatures","archive_hash":"sha256:b1eee352e175dbb52f8c6298a00f15f0d28d1b396f341529a61b73654120fbad","archive_size":1581,"archive_url":"https://extensions.blender.org/download/sha256:b1eee352e175dbb52f8c6298a00f15f0d28d1b396f341529a61b73654120fbad/add-on-quick-character-selector-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-character-selector/","maintainer":"MatiasMartin","license":["SPDX:GPL-2.0-or-later"],"tags":["Object","Animation"]},{"id":"momo","schema_version":"1.0.0","name":"Momo Light","version":"5.0.6","tagline":"Momo Light - theme inspired by Modo","archive_hash":"sha256:c2db79e4c561c2e622d5320a0fa8ce635d92afd4143f6f9a37084fef068ce6f3","archive_size":6451,"archive_url":"https://extensions.blender.org/download/sha256:c2db79e4c561c2e622d5320a0fa8ce635d92afd4143f6f9a37084fef068ce6f3/theme-momo-v5.0.6.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/momo/","maintainer":"TimoShch","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By"]},{"id":"dynamic_context_menu","schema_version":"1.0.0","name":"Dynamic Context Menu","version":"1.9.4","tagline":"Object Mode Context Sensitive Spacebar Menu","archive_hash":"sha256:d5489ad11a246fcac650b86b3beb5137f1506a7d09092028acfbc86b8cdc90b5","archive_size":15679,"archive_url":"https://extensions.blender.org/download/sha256:d5489ad11a246fcac650b86b3beb5137f1506a7d09092028acfbc86b8cdc90b5/add-on-dynamic-context-menu-v1.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-context-menu/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["User Interface"]},{"id":"import_palettes","schema_version":"1.0.0","name":"Import Palettes","version":"1.0.5","tagline":"Import Palettes","archive_hash":"sha256:9874614269a5e890d25021308641083531d982fb8603c113090389f382bc4acd","archive_size":4151,"archive_url":"https://extensions.blender.org/download/sha256:9874614269a5e890d25021308641083531d982fb8603c113090389f382bc4acd/add-on-import-palettes-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-palettes/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory with color palette files"},"tags":["Import-Export"]},{"id":"open_linked","schema_version":"1.0.0","name":"Open Linked","version":"1.0.1","tagline":"Open linked blends from the Outliner","archive_hash":"sha256:699f9ce0e8f8cac5fa94fbfa0b7991a3d0511da33dfa84f83d0be7754ecb70c3","archive_size":40897,"archive_url":"https://extensions.blender.org/download/sha256:699f9ce0e8f8cac5fa94fbfa0b7991a3d0511da33dfa84f83d0be7754ecb70c3/add-on-open-linked-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/open-linked/","maintainer":"polygoniq","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Add-on expects to have access to filesytem."},"tags":["User Interface"]},{"id":"flexytrack","schema_version":"1.0.0","name":"FlexyTrack","version":"1.0.1","tagline":"Physics-free Damped Track rigging for bone chains","archive_hash":"sha256:59e2ae09758d87f47e9cbb3287de30a0ddca3bde0566ba8db5820c6fd0e5bd8f","archive_size":4695,"archive_url":"https://extensions.blender.org/download/sha256:59e2ae09758d87f47e9cbb3287de30a0ddca3bde0566ba8db5820c6fd0e5bd8f/add-on-flexytrack-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/flexytrack/","maintainer":"MignotGeorges","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"stop_motion_obj2","schema_version":"1.0.0","name":"OBJSequence","version":"1.0.5","tagline":"Import OBJ sequences as stop motion animation with caching","archive_hash":"sha256:37ca7d94886742f430f5ef0843d4138616544a2d3d4efe431040e2ff28a5de02","archive_size":10861,"archive_url":"https://extensions.blender.org/download/sha256:37ca7d94886742f430f5ef0843d4138616544a2d3d4efe431040e2ff28a5de02/add-on-stop-motion-obj2-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stop-motion-obj2/","maintainer":"Liam-Courtney","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read OBJ files from folders chosen by the user"}},{"id":"nodesync","schema_version":"1.0.0","name":"NodeSync","version":"1.3.1","tagline":"Git version control for your Geometry and Shader node trees","archive_hash":"sha256:717968e8be00804c33eee501889793f44a8fe6d23f82407675705fae7b78bae0","archive_size":55449,"archive_url":"https://extensions.blender.org/download/sha256:717968e8be00804c33eee501889793f44a8fe6d23f82407675705fae7b78bae0/add-on-nodesync-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nodesync/","maintainer":"Matias-1","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write node trees to disk and manage a local Git repo","network":"Push and pull node trees to/from a user-supplied Git remote"},"tags":["Node"]},{"id":"target_weld","schema_version":"1.0.0","name":"Target Weld","version":"1.1.9","tagline":"Merge vertices and edges","archive_hash":"sha256:db11de4d3d5df2d93c1f3c57aad0ac60a5c07a013bc192d8dd1783ceeb066ca1","archive_size":38324,"archive_url":"https://extensions.blender.org/download/sha256:db11de4d3d5df2d93c1f3c57aad0ac60a5c07a013bc192d8dd1783ceeb066ca1/add-on-target-weld-v1.1.9.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/target-weld/","maintainer":"KewlSheet","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"vmc_link","schema_version":"1.0.0","name":"VMC Link","version":"0.3.1","tagline":"VMC receiver for armature and shape keys","archive_hash":"sha256:faa31295a7a0fd825b1203675f90fe10daeb4101ef0941708dfe07ed94bdb2bf","archive_size":55528,"archive_url":"https://extensions.blender.org/download/sha256:faa31295a7a0fd825b1203675f90fe10daeb4101ef0941708dfe07ed94bdb2bf/add-on-vmc-link-v0.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vmc-link/","maintainer":"Internet-Addict","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Receive OSC / VMC motion data over UDP"},"tags":["System"]},{"id":"PinkPinkPink","schema_version":"1.0.0","name":"PinkPinkPink","version":"1.1.0","tagline":"Pink Blender Theme","archive_hash":"sha256:99e666d5352cc017b6e9813f448a16758204e1db707c40c2418eb0dbc7f99f09","archive_size":5254,"archive_url":"https://extensions.blender.org/download/sha256:99e666d5352cc017b6e9813f448a16758204e1db707c40c2418eb0dbc7f99f09/theme-pinkpinkpink-v1.1.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/pinkpinkpink/","maintainer":"Livbaire","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Colorful"]},{"id":"roreddos_theme","schema_version":"1.0.0","name":"RoReddosTheme","version":"1.0.1","tagline":"A clean, dark minimal theme with deep red accents","archive_hash":"sha256:c7b99319e2e9c63d79392a16ff1411a3514d4053c6996be06e4c27074eaf7514","archive_size":5908,"archive_url":"https://extensions.blender.org/download/sha256:c7b99319e2e9c63d79392a16ff1411a3514d4053c6996be06e4c27074eaf7514/theme-roreddos-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/roreddos-theme/","maintainer":"RoReddo","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"edge_length_measure","schema_version":"1.0.0","name":"Edge Length Measure","version":"1.0.0","tagline":"Measure mesh edge lengths in Object Mode","archive_hash":"sha256:1fb1319bf07728a6c8cd4478f28a8ebb03072f0f2f10a2f7392c8586bfb73a0e","archive_size":16761,"archive_url":"https://extensions.blender.org/download/sha256:1fb1319bf07728a6c8cd4478f28a8ebb03072f0f2f10a2f7392c8586bfb73a0e/add-on-edge-length-measure-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/edge-length-measure/","maintainer":"binary-angel","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Mesh","Modeling"]},{"id":"theme_CrimsonAttack","schema_version":"1.0.0","name":"Crimson Attack","version":"1.0.0","tagline":"A Red hue'd version of blue invasion","archive_hash":"sha256:c797984cfd094d88741f76100340a6885e11d0d815da2ad8d15676f99f3d620c","archive_size":6231,"archive_url":"https://extensions.blender.org/download/sha256:c797984cfd094d88741f76100340a6885e11d0d815da2ad8d15676f99f3d620c/theme-theme-crimsonattack-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-crimsonattack/","maintainer":"zaq","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful","Inspired By"]},{"id":"viewport_fps","schema_version":"1.0.0","name":"Viewport FPS","version":"1.0.2","tagline":"Displays frames per second in current 3D viewport","archive_hash":"sha256:842eed9027d319486dd87aa88e48af6ca0a1c3077b9639ddd5f66e0b050f269f","archive_size":3040,"archive_url":"https://extensions.blender.org/download/sha256:842eed9027d319486dd87aa88e48af6ca0a1c3077b9639ddd5f66e0b050f269f/add-on-viewport-fps-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-fps/","maintainer":"Pazelock","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface","System"]},{"id":"VibeyTM_Pro","schema_version":"1.0.0","name":"Vibey™ Pro","version":"0.0.1","tagline":"Visually exciting yet fully functional","archive_hash":"sha256:dad4cca29ed2bbf3aa50a4b11551bf7474d3d0b0f8c12be6f1e5f271f448af92","archive_size":18840,"archive_url":"https://extensions.blender.org/download/sha256:dad4cca29ed2bbf3aa50a4b11551bf7474d3d0b0f8c12be6f1e5f271f448af92/theme-vibeytm-pro-v0.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/vibeytm-pro/","maintainer":"Fedor-Rezhenov","license":["SPDX:GPL-3.0-or-later"]},{"id":"rendercue","schema_version":"1.0.0","name":"RenderCue","version":"1.1.3","tagline":"Sequence. Queue. Render","archive_hash":"sha256:97fbabec32217c2438adda789ab6ef8a5beac6b90ac06fae3def010b47d2ba2b","archive_size":52378,"archive_url":"https://extensions.blender.org/download/sha256:97fbabec32217c2438adda789ab6ef8a5beac6b90ac06fae3def010b47d2ba2b/add-on-rendercue-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rendercue/","maintainer":"UsamaSQ","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save renders to user-defined directories","network":"Send render notifications via Webhooks"},"tags":["Render","Pipeline"]},{"id":"io_xnalara","schema_version":"1.0.0","name":"XPS Import/Export","version":"2.3.0","tagline":"Import-Export for XNALara/XPS files","archive_hash":"sha256:0e0197fcccb6a889f53fe48e7734cce58992766d5dded3c219495da76615702c","archive_size":173848,"archive_url":"https://extensions.blender.org/download/sha256:0e0197fcccb6a889f53fe48e7734cce58992766d5dded3c219495da76615702c/add-on-io-xnalara-v2.3.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/io-xnalara/","maintainer":"maylog","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Pipeline"]},{"id":"Three_d_Cursor_Snap","schema_version":"1.0.0","name":"Three d Cursor Snap","version":"1.2.0","tagline":"Move 3d cursor like gizmo to snap vertex, edge and face","archive_hash":"sha256:5b7031eb3fdc8b85bb272c2483239741932434b3fe6403fc0eedaa2a64e9ef55","archive_size":3579,"archive_url":"https://extensions.blender.org/download/sha256:5b7031eb3fdc8b85bb272c2483239741932434b3fe6403fc0eedaa2a64e9ef55/add-on-three-d-cursor-snap-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/three-d-cursor-snap/","maintainer":"deepak756","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Modeling","Mesh"]},{"id":"gzm_mod","schema_version":"1.0.0","name":"GZM 3D model format","version":"1.1.0","tagline":"Import-export 3D models for the GZM game","archive_hash":"sha256:b37590a0769e21e94c2f461faa83e2e54cbe22de6d0a1d45e64f97cd3270b6e9","archive_size":26696,"archive_url":"https://extensions.blender.org/download/sha256:b37590a0769e21e94c2f461faa83e2e54cbe22de6d0a1d45e64f97cd3270b6e9/add-on-gzm-mod-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/gzm-mod/","maintainer":"777-tanks","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"batch_camera_render","schema_version":"1.0.0","name":"Batch Render Cameras","version":"2.2.1","tagline":"Render animations from multiple selected cameras","archive_hash":"sha256:13cf0fa7db66a4f29c64227622b6211f5d3816008b7aabf71b75e50893985832","archive_size":5224,"archive_url":"https://extensions.blender.org/download/sha256:13cf0fa7db66a4f29c64227622b6211f5d3816008b7aabf71b75e50893985832/add-on-batch-camera-render-v2.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-camera-render/","maintainer":"Mahdi.Shalchian","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create output folders for rendered frames"},"tags":["Render","Camera"]},{"id":"blur_hdri","schema_version":"1.0.0","name":"Blur HDRI","version":"0.0.10","tagline":"Blur HDRI Images by creating a new node with a Gaussian Blur","archive_hash":"sha256:8b4ac375baefb660a055d517b0554bc94c6338cb02beeaf13e0993a12ccdc2da","archive_size":7813271,"archive_url":"https://extensions.blender.org/download/sha256:8b4ac375baefb660a055d517b0554bc94c6338cb02beeaf13e0993a12ccdc2da/add-on-blur-hdri-v0.0.10-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/blur-hdri/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Material","Lighting"]},{"id":"node_editor_pro","schema_version":"1.0.0","name":"Node Editor Pro","version":"0.5.0","tagline":"Organize nodes with auto-layout, snap and cleanup","archive_hash":"sha256:ba6cd0cbb08dcfa05a99680f6c27a29ba090bf795bb057589372e3d9b08c3f7c","archive_size":4809,"archive_url":"https://extensions.blender.org/download/sha256:ba6cd0cbb08dcfa05a99680f6c27a29ba090bf795bb057589372e3d9b08c3f7c/add-on-node-editor-pro-v0.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-editor-pro/","maintainer":"the_visual_geek","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"data_scale","schema_version":"1.0.0","name":"ID Tools","version":"1.2.0","tagline":"Assortment of tools for the manipulation of data-blocks","archive_hash":"sha256:6aee14fa7c34487d34a4822ffacc829876382eccf7a8ae6382f84cdc9a61e646","archive_size":22974,"archive_url":"https://extensions.blender.org/download/sha256:6aee14fa7c34487d34a4822ffacc829876382eccf7a8ae6382f84cdc9a61e646/add-on-data-scale-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/data-scale/","maintainer":"hisanimations","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Temporarily create .blend files to weigh them"},"tags":["Import-Export"]},{"id":"anim_offset_pro","schema_version":"1.0.0","name":"Anim Offset Pro","version":"1.3.0","tagline":"Offset poses across animation keyframes","archive_hash":"sha256:dd1d412f81e9e875bfb4c58d445cd64f904953febf61f05417ca0cf86d7c0ecd","archive_size":5091,"archive_url":"https://extensions.blender.org/download/sha256:dd1d412f81e9e875bfb4c58d445cd64f904953febf61f05417ca0cf86d7c0ecd/add-on-anim-offset-pro-v1.3.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/anim-offset-pro/","maintainer":"Drika111.","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"shape_key_utilities_enhanced","schema_version":"1.0.0","name":"Shape Key & Vertex Groups Utilities Enhanced","version":"1.1.1","tagline":"Comprehensive shape key and vertex group management tools","archive_hash":"sha256:f7d756df3bb017b871d7057fb727e79ac98a5e235fc0fa0ad83c7cca78127527","archive_size":21006,"archive_url":"https://extensions.blender.org/download/sha256:f7d756df3bb017b871d7057fb727e79ac98a5e235fc0fa0ad83c7cca78127527/add-on-shape-key-utilities-enhanced-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/shape-key-utilities-enhanced/","maintainer":"LeafyBush7","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Object","Modeling"]},{"id":"dynamic_render_border","schema_version":"1.0.0","name":"Dynamic Render Border","version":"1.0.1","tagline":"Addon to create dynamic render borders for animations","archive_hash":"sha256:b7ad62a75bfeb6066efe981c1afaec3a7e048d134903c2f50e0aea695b184986","archive_size":7352,"archive_url":"https://extensions.blender.org/download/sha256:b7ad62a75bfeb6066efe981c1afaec3a7e048d134903c2f50e0aea695b184986/add-on-dynamic-render-border-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-render-border/","maintainer":"tobiaskummer","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","Animation"]},{"id":"shapeFitter","schema_version":"1.0.0","name":"Shape Fitter","version":"1.3.1","tagline":"Fit primitive shapes to verticies","archive_hash":"sha256:b435b06bca5fb8895246639d92d03f3f62adb71b4cb656b3a1e85a08b241be58","archive_size":10853,"archive_url":"https://extensions.blender.org/download/sha256:b435b06bca5fb8895246639d92d03f3f62adb71b4cb656b3a1e85a08b241be58/add-on-shapefitter-v1.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapefitter/","maintainer":"pfalkingham","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"trimmer","schema_version":"1.0.0","name":"Trimmer","version":"0.3.0","tagline":"Simplified texturing workflow for trim-sheets","archive_hash":"sha256:fd310ab53bf5e974d603924e68067671b23084859b99f2d6d52e878efb3ddff5","archive_size":12275,"archive_url":"https://extensions.blender.org/download/sha256:fd310ab53bf5e974d603924e68067671b23084859b99f2d6d52e878efb3ddff5/add-on-trimmer-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/trimmer/","maintainer":"LaXHeXLuX","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"extrude_along_path","schema_version":"1.0.0","name":"Extrude Along Path","version":"2.2.0","tagline":"Extrude or Rake profile geometry Along a defined Path","archive_hash":"sha256:5afb06c2fbffb81d72e4041aa2b56e04fc2ed0cd0fca7bbe12d57cd4abe73283","archive_size":15621,"archive_url":"https://extensions.blender.org/download/sha256:5afb06c2fbffb81d72e4041aa2b56e04fc2ed0cd0fca7bbe12d57cd4abe73283/add-on-extrude-along-path-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/extrude-along-path/","maintainer":"RobbieK","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"camera_viewer","schema_version":"1.0.0","name":"Camera Viewer","version":"1.1.5","tagline":"You can preview the camera view directly in the 3D viewport","archive_hash":"sha256:7afdb247583b54901fb99f5d8ac0123228e5d1a4f1b15f9655f0d4df42c9fd89","archive_size":11088,"archive_url":"https://extensions.blender.org/download/sha256:7afdb247583b54901fb99f5d8ac0123228e5d1a4f1b15f9655f0d4df42c9fd89/add-on-camera-viewer-v1.1.5.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/camera-viewer/","maintainer":"KENKEN","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"meshstats","schema_version":"1.0.0","name":"Meshstats","version":"1.3.2","tagline":"Mesh statistics","archive_hash":"sha256:54bbc62131198db4c4c7f3f74276ef835cf8719d3ea57598e8dfac3758652421","archive_size":55105,"archive_url":"https://extensions.blender.org/download/sha256:54bbc62131198db4c4c7f3f74276ef835cf8719d3ea57598e8dfac3758652421/add-on-meshstats-v1.3.2.zip","type":"add-on","blender_version_min":"4.2.2","website":"https://extensions.blender.org/add-ons/meshstats/","maintainer":"muhuk","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"requin_blue_theme","schema_version":"1.0.0","name":"Requin Blue","version":"1.2.0","tagline":"This is a Blender theme with a major blue color","archive_hash":"sha256:f9719297e08b25c93ad28a52aaed35103e3484588373d059096c87514dd7fa42","archive_size":6733,"archive_url":"https://extensions.blender.org/download/sha256:f9719297e08b25c93ad28a52aaed35103e3484588373d059096c87514dd7fa42/theme-requin-blue-theme-v1.2.0.zip","type":"theme","blender_version_min":"5.0.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/themes/requin-blue-theme/","maintainer":"MozzarellaARC","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"Auto_Sort_Collections","schema_version":"1.0.0","name":"Auto Sort Collections","version":"1.0.3","tagline":"Automatic organisation of collections","archive_hash":"sha256:6bf044c291ef9e6c9c7fd0fe6eb56c93e9f6925b81adab32f96bbbfd999739fb","archive_size":10344,"archive_url":"https://extensions.blender.org/download/sha256:6bf044c291ef9e6c9c7fd0fe6eb56c93e9f6925b81adab32f96bbbfd999739fb/add-on-auto-sort-collections-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-sort-collections/","maintainer":"Shuimeng","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene"]},{"id":"auto_dark_mode","schema_version":"1.0.0","name":"Auto Dark Mode","version":"3.0.0","tagline":"Automatically follow the system light/dark mode","archive_hash":"sha256:a1e8a5f58f1bbeed52f5afcb6ed5b36c45f1e3642419becf8f6472967963260b","archive_size":11993,"archive_url":"https://extensions.blender.org/download/sha256:a1e8a5f58f1bbeed52f5afcb6ed5b36c45f1e3642419becf8f6472967963260b/add-on-auto-dark-mode-v3.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-dark-mode/","maintainer":"dprice","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read installed themes"},"tags":["System","User Interface"]},{"id":"f1dg3t_blender_red","schema_version":"1.0.0","name":"F1dg3t Red","version":"1.1.0","tagline":"Perfect for Shadow State 2","archive_hash":"sha256:0288b146cc76cd0f5bbe25c87639a1a150e9298cf64c66eb7ae2f55d60953680","archive_size":6491,"archive_url":"https://extensions.blender.org/download/sha256:0288b146cc76cd0f5bbe25c87639a1a150e9298cf64c66eb7ae2f55d60953680/theme-f1dg3t-blender-red-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/f1dg3t-blender-red/","maintainer":"F1dg3t","license":["SPDX:GPL-2.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"blue_genes","schema_version":"1.0.0","name":"Blue Genes","version":"1.0.3","tagline":"Dark Blue, Readable Daily Driver","archive_hash":"sha256:dbd30beb266dff2448d87b8e592e1afce7330b5d79ec4c1ef7a4b3c3d1c9e61e","archive_size":5997,"archive_url":"https://extensions.blender.org/download/sha256:dbd30beb266dff2448d87b8e592e1afce7330b5d79ec4c1ef7a4b3c3d1c9e61e/theme-blue-genes-v1.0.3.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/blue-genes/","maintainer":"SpectralVectors","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"save_with_versioning","schema_version":"1.0.0","name":"Save with Versioning","version":"2.1.0","tagline":"Save incremental and use published files for asset linking","archive_hash":"sha256:7481617c63e770530f3e37d0d3519eaca1b3cd7589e21ddedc4f26912f50b6ff","archive_size":20710,"archive_url":"https://extensions.blender.org/download/sha256:7481617c63e770530f3e37d0d3519eaca1b3cd7589e21ddedc4f26912f50b6ff/add-on-save-with-versioning-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/save-with-versioning/","maintainer":"DShot92","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save .blend files"},"tags":["Pipeline"]},{"id":"is_key_free","schema_version":"1.0.0","name":"Is key Free","version":"1.1.3","tagline":"Find free shortcuts, inform about used and print a key list","archive_hash":"sha256:68b702bfc895175d2b3dad64880e2249e97b8f461510bf20e9ab6951fcc67d3a","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:68b702bfc895175d2b3dad64880e2249e97b8f461510bf20e9ab6951fcc67d3a/add-on-is-key-free-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/is-key-free/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Development"]},{"id":"archimesh","schema_version":"1.0.0","name":"Archimesh","version":"1.2.5","tagline":"Generate rooms, doors, windows, and other architecture objects","archive_hash":"sha256:44745a86dd472e296e06cd45c511e002a1105512a73009cb0018c87611d18d87","archive_size":323488,"archive_url":"https://extensions.blender.org/download/sha256:44745a86dd472e296e06cd45c511e002a1105512a73009cb0018c87611d18d87/add-on-archimesh-v1.2.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/archimesh/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"scatter_objects","schema_version":"1.0.0","name":"Scatter Objects","version":"0.2.0","tagline":"Distribute object instances on another object","archive_hash":"sha256:3fda488f56523b799e3937c802119f1da986391e193cb4d443177e6e132c764b","archive_size":6876,"archive_url":"https://extensions.blender.org/download/sha256:3fda488f56523b799e3937c802119f1da986391e193cb4d443177e6e132c764b/add-on-scatter-objects-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scatter-objects/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Object"]},{"id":"sapling_tree_gen","schema_version":"1.0.0","name":"Sapling Tree Gen","version":"0.3.7","tagline":"Adds a parametric tree","archive_hash":"sha256:27a478262e1c86612a9c3daffe7f4dce2802f5bc2294033462e5adc6d9c0080f","archive_size":36296,"archive_url":"https://extensions.blender.org/download/sha256:27a478262e1c86612a9c3daffe7f4dce2802f5bc2294033462e5adc6d9c0080f/add-on-sapling-tree-gen-v0.3.7.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/sapling-tree-gen/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"node_group_utilities","schema_version":"1.0.0","name":"Node Group Utilities","version":"2.1.1","tagline":"Extra options and functions for node groups","archive_hash":"sha256:00fcf7000ecc7fc01b96293030269439cc6ef72809f5be80f806b7cb18afa4a5","archive_size":67952,"archive_url":"https://extensions.blender.org/download/sha256:00fcf7000ecc7fc01b96293030269439cc6ef72809f5be80f806b7cb18afa4a5/add-on-node-group-utilities-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-group-utilities/","maintainer":"Baraa-Khaled-Youssef","license":["SPDX:GPL-2.0-or-later"],"tags":["Node","Material"]},{"id":"flatterer","schema_version":"1.0.0","name":"Flatterer","version":"1.6.0","tagline":"Flat mesh to SVG exporter for laser cutters","archive_hash":"sha256:61241ed38f522af0152439c07d8654caf30a67e45f6b5298e8797061460a2559","archive_size":383844,"archive_url":"https://extensions.blender.org/download/sha256:61241ed38f522af0152439c07d8654caf30a67e45f6b5298e8797061460a2559/add-on-flatterer-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/flatterer/","maintainer":"dr.sybren","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export SVG files to disk"},"tags":["Import-Export"]},{"id":"pro_3d_dimension_tool","schema_version":"1.0.0","name":"Pro 3D Dimension Tool","version":"1.4.1","tagline":"Professional 3D dimensioning tool for Blender","archive_hash":"sha256:50647875cc65f7c5b8a19e4628bbdf433414d4955326b2faafdf43c05b0440f5","archive_size":22336,"archive_url":"https://extensions.blender.org/download/sha256:50647875cc65f7c5b8a19e4628bbdf433414d4955326b2faafdf43c05b0440f5/add-on-pro-3d-dimension-tool-v1.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pro-3d-dimension-tool/","maintainer":"DUONG-HOANG","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Modeling"]},{"id":"bombsquad_tools","schema_version":"1.0.0","name":"BombSquad Tools","version":"3.0.12","tagline":"Tools for creating BombSquad game assets","archive_hash":"sha256:0c5f2f5b01dd02165f9cb72b00f570636d75d62cbeed706bf10f90b4eff5cd00","archive_size":39147,"archive_url":"https://extensions.blender.org/download/sha256:0c5f2f5b01dd02165f9cb72b00f570636d75d62cbeed706bf10f90b4eff5cd00/add-on-bombsquad-tools-v3.0.12.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bombsquad-tools/","maintainer":"aryan02420","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export .bob, .cob, and .json files"},"tags":["Import-Export","Scene"]},{"id":"vertex_group_assistant","schema_version":"1.0.0","name":"Vertex Group Assistant","version":"1.0.2","tagline":"Simplifies clothing rigging for avatars","archive_hash":"sha256:a566528f6aad3e2971e874bad0c48e4094102f23ccb5ae92790b7803055d102c","archive_size":3846,"archive_url":"https://extensions.blender.org/download/sha256:a566528f6aad3e2971e874bad0c48e4094102f23ccb5ae92790b7803055d102c/add-on-vertex-group-assistant-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vertex-group-assistant/","maintainer":"Maro3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"blender_Run_Scripts_From_Folder","schema_version":"1.0.0","name":"Run Scripts From Folder","version":"0.0.7","tagline":"Execute script from Script Directiories","archive_hash":"sha256:cb458bdebbfcdb64b6a2262ca9fa83f7b23e062f39e305e6b95cc5b81d84cb47","archive_size":2464,"archive_url":"https://extensions.blender.org/download/sha256:cb458bdebbfcdb64b6a2262ca9fa83f7b23e062f39e305e6b95cc5b81d84cb47/add-on-blender-run-scripts-from-folder-v0.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-run-scripts-from-folder/","maintainer":"Alexander-Bicukow","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read .py files from disk"},"tags":["System"]},{"id":"convert_rotation_mode","schema_version":"1.0.0","name":"Convert Rotation Mode","version":"1.5.1","tagline":"Change rotation mode whilst preserving animation","archive_hash":"sha256:63ecb6db33c6cd21d98609286cfb3a780571cff3e5e8c6acb536cdb783fc3aec","archive_size":23134,"archive_url":"https://extensions.blender.org/download/sha256:63ecb6db33c6cd21d98609286cfb3a780571cff3e5e8c6acb536cdb783fc3aec/add-on-convert-rotation-mode-v1.5.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/convert-rotation-mode/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copy and paste bone transforms"},"tags":["Animation","3D View","Bake"]},{"id":"bdvd_SharpBlade","schema_version":"1.0.0","name":"Sharp Blade","version":"5.2.0","tagline":"Easy on the eyes, deep in the blue. Create freely","archive_hash":"sha256:b2b2199a00b52df8ad291b2625da12c478524e19c480cddc8ba04bbc46362e24","archive_size":5892,"archive_url":"https://extensions.blender.org/download/sha256:b2b2199a00b52df8ad291b2625da12c478524e19c480cddc8ba04bbc46362e24/theme-bdvd-sharpblade-v5.2.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/bdvd-sharpblade/","maintainer":"bdvd","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"dynamic_brush_menus","schema_version":"1.0.0","name":"Dynamic Brush Menus","version":"1.1.10","tagline":"Fast access to brushes & tools in Sculpt and Paint Modes","archive_hash":"sha256:ee971938173591236df0a08db5ebced525052b70fd0f69dbeae64598622fb400","archive_size":15222,"archive_url":"https://extensions.blender.org/download/sha256:ee971938173591236df0a08db5ebced525052b70fd0f69dbeae64598622fb400/add-on-dynamic-brush-menus-v1.1.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-brush-menus/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["User Interface"]},{"id":"visibility_handler","schema_version":"1.0.0","name":"Visibility handler","version":"1.1.3","tagline":"Copy visibility from viewport to render settings or vice versa","archive_hash":"sha256:44a76b38bbb79f925e0354bc1609856c500f0b1d084a14488516558f2c26219c","archive_size":8680,"archive_url":"https://extensions.blender.org/download/sha256:44a76b38bbb79f925e0354bc1609856c500f0b1d084a14488516558f2c26219c/add-on-visibility-handler-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/visibility-handler/","maintainer":"DanielBystedt","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"frutigeraero_orange","schema_version":"1.0.0","name":"Frutiger Aero Orange","version":"1.1.0","tagline":"The future we we're promised","archive_hash":"sha256:d4b57d63ab707be3edadbaa4f1c459a811dfea9012846f2bcc53b4692f8aaa61","archive_size":6374,"archive_url":"https://extensions.blender.org/download/sha256:d4b57d63ab707be3edadbaa4f1c459a811dfea9012846f2bcc53b4692f8aaa61/theme-frutigeraero-orange-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frutigeraero-orange/","maintainer":"Lightmare2000","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"blend_project_packer","schema_version":"1.0.0","name":"Blend Project Packer","version":"1.0.1","tagline":"Preflight and pack portable Blender projects","archive_hash":"sha256:31688f9ba88be0f22ac1828e148d889b1ed405078cea9345f8345db44c47394d","archive_size":152065,"archive_url":"https://extensions.blender.org/download/sha256:31688f9ba88be0f22ac1828e148d889b1ed405078cea9345f8345db44c47394d/add-on-blend-project-packer-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blend-project-packer/","maintainer":"JohnnyCake","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read scene assets and write portable folders or zip archives"},"tags":["Pipeline"]},{"id":"sculpting_planar_clo","schema_version":"1.0.0","name":"Planar Sculpting","version":"1.2.1","tagline":"Restores Classic Planar: Original Normal & Plane behavior","archive_hash":"sha256:6a056275993640de5422d8322304546ef23d8116d5c057e7a21ef9950f1d8578","archive_size":24699,"archive_url":"https://extensions.blender.org/download/sha256:6a056275993640de5422d8322304546ef23d8116d5c057e7a21ef9950f1d8578/add-on-sculpting-planar-clo-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpting-planar-clo/","maintainer":"clo1to5","license":["SPDX:GPL-3.0-or-later"]},{"id":"bagapaste","schema_version":"1.0.0","name":"BagaPaste","version":"1.0.3","tagline":"Paste clipboard images/URLs as planes or reference images","archive_hash":"sha256:9a306ef1bf9ebf07f6d7f2470655930ab2e00ac86cf1bd718b215ad3290f2569","archive_size":18406,"archive_url":"https://extensions.blender.org/download/sha256:9a306ef1bf9ebf07f6d7f2470655930ab2e00ac86cf1bd718b215ad3290f2569/add-on-bagapaste-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/bagapaste/","maintainer":"Kiara_Bagattini","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save clipboard or downloaded images to disk before importing","network":"Download images when the clipboard contains an HTTP/HTTPS URL","clipboard":"Read image/file/text data from the system clipboard"},"tags":["Import-Export","3D View"]},{"id":"image_sequence_to_mp4_video_converter","schema_version":"1.0.0","name":"Image Sequence to MP4 Video Converter","version":"1.0.3","tagline":"Convert image sequences to MP4 with custom resolution","archive_hash":"sha256:463d624dba76193ecf576cea46f8ea024372178e917036d0252b15fc7154f08d","archive_size":8152,"archive_url":"https://extensions.blender.org/download/sha256:463d624dba76193ecf576cea46f8ea024372178e917036d0252b15fc7154f08d/add-on-image-sequence-to-mp4-video-converter-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/image-sequence-to-mp4-video-converter/","maintainer":"Prince_Eagle","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"wfc_3d_generator","schema_version":"1.0.0","name":"WFC 3D Generator","version":"1.3.15","tagline":"Simple WFC 3D generator for procedural creation of objects","archive_hash":"sha256:f85fb64dee3a760872a6ef578fa5e7c2d31e27a68897ac6b8ff3418ec802c9b4","archive_size":71927,"archive_url":"https://extensions.blender.org/download/sha256:f85fb64dee3a760872a6ef578fa5e7c2d31e27a68897ac6b8ff3418ec802c9b4/add-on-wfc-3d-generator-v1.3.15.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/wfc-3d-generator/","maintainer":"Jonny-B","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export constraints (JSON) from/to disk"},"tags":["Object","Modeling","Render","Game Engine"]},{"id":"expLODe","schema_version":"1.0.0","name":"expLODe","version":"1.0.2","tagline":"LOD automation script using Python and Blender","archive_hash":"sha256:e22b3e3e5986a89f0dc6febba53631b2e527fe759efe5745d3968f2053323c74","archive_size":22275,"archive_url":"https://extensions.blender.org/download/sha256:e22b3e3e5986a89f0dc6febba53631b2e527fe759efe5745d3968f2053323c74/add-on-explode-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/explode/","maintainer":"Rainma22","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FBX from/to disk"},"tags":["Import-Export"]},{"id":"SHIRAKUMO_rectangle_tools","schema_version":"1.0.0","name":"Rectangle Tools","version":"1.0.2","tagline":"Tools to more easily draw rectangles in edit mode","archive_hash":"sha256:16aa9da0c9d4eb8d0e7c9b94c1a1e1602a602c75109e2c8beeffb5648719ce9b","archive_size":7349,"archive_url":"https://extensions.blender.org/download/sha256:16aa9da0c9d4eb8d0e7c9b94c1a1e1602a602c75109e2c8beeffb5648719ce9b/add-on-shirakumo-rectangle-tools-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shirakumo-rectangle-tools/","maintainer":"shinmera","license":["SPDX:GPL-3.0-or-later","SPDX:Zlib"],"tags":["Modeling"]},{"id":"armature_deform_with_linked_groups","schema_version":"1.0.0","name":"Armature Deform with Linked Groups","version":"1.0.0","tagline":"Create an armature deformation using linked vertices","archive_hash":"sha256:1047c0266831c6a13fad2563b7e4e173338e13905b92be26f9ac48666eabc4b2","archive_size":4824,"archive_url":"https://extensions.blender.org/download/sha256:1047c0266831c6a13fad2563b7e4e173338e13905b92be26f9ac48666eabc4b2/add-on-armature-deform-with-linked-groups-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/armature-deform-with-linked-groups/","maintainer":"Suchaaver","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation","Mesh"]},{"id":"LinkageMarkingMenu","schema_version":"1.0.0","name":"Linkage Marking Menu","version":"1.0.5","tagline":"Customizable Marking Menu for Object and Edit modes","archive_hash":"sha256:30ab484d65284197c16c36b34413ebfbb48743700ecf1c39f361e9bb60f6cd4c","archive_size":18953,"archive_url":"https://extensions.blender.org/download/sha256:30ab484d65284197c16c36b34413ebfbb48743700ecf1c39f361e9bb60f6cd4c/add-on-linkagemarkingmenu-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/linkagemarkingmenu/","maintainer":"Linkage","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"eevee_projectors","schema_version":"1.0.0","name":"Eevee Projectors","version":"1.1.1","tagline":"Fake Projector lights in Eeve","archive_hash":"sha256:f43016da2aba44eeb36dbcadee9116495c46721e33580af67fa487ae7305749e","archive_size":285870,"archive_url":"https://extensions.blender.org/download/sha256:f43016da2aba44eeb36dbcadee9116495c46721e33580af67fa487ae7305749e/add-on-eevee-projectors-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/eevee-projectors/","maintainer":"F1dg3t","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting","Object"]},{"id":"align_tools","schema_version":"1.0.0","name":"Align Tools","version":"0.3.6","tagline":"Align Selected Objects to Active Object","archive_hash":"sha256:741ca75b391bda65d2dc22160b4f594b7d4ed9a8772dd055535b7c2c7eb9b9de","archive_size":6743,"archive_url":"https://extensions.blender.org/download/sha256:741ca75b391bda65d2dc22160b4f594b7d4ed9a8772dd055535b7c2c7eb9b9de/add-on-align-tools-v0.3.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/align-tools/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"RigFlex","schema_version":"1.0.0","name":"RigFlex","version":"4.2.1","tagline":"Simple Soft Body Simulation for Armatures","archive_hash":"sha256:c225c679634d5872fa6f6baf1e0bf513ececa90e8243cd30747fc825e743b064","archive_size":8750,"archive_url":"https://extensions.blender.org/download/sha256:c225c679634d5872fa6f6baf1e0bf513ececa90e8243cd30747fc825e743b064/add-on-rigflex-v4.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/rigflex/","maintainer":"Nerk","license":["SPDX:GPL-2.0-or-later"],"tags":["Animation","Physics","Rigging"]},{"id":"FavoriteObjects","schema_version":"1.0.0","name":"Favorite Objects","version":"1.0.5","tagline":"Mark your favorite objects and select them from the Viewport","archive_hash":"sha256:88b3d6b72968ba21a2771608335635237bd9bb56338423aab049bd0a9e6e01c6","archive_size":5933,"archive_url":"https://extensions.blender.org/download/sha256:88b3d6b72968ba21a2771608335635237bd9bb56338423aab049bd0a9e6e01c6/add-on-favoriteobjects-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/favoriteobjects/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"property_chart","schema_version":"1.0.0","name":"Property Chart","version":"0.1.2","tagline":"Edit properties simultaneously for selected objects/sequencer","archive_hash":"sha256:9239bce660c04eb8a3a4bd5f5bca5f3291fb6ad13cee1cf2cca2386f00cda9ed","archive_size":2959,"archive_url":"https://extensions.blender.org/download/sha256:9239bce660c04eb8a3a4bd5f5bca5f3291fb6ad13cee1cf2cca2386f00cda9ed/add-on-property-chart-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/property-chart/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"gp_to_curves","schema_version":"1.0.0","name":"Grease Pencil to Curves","version":"0.4.5","tagline":"Quickly convert Grease Pencil strokes to simple curves and hair","archive_hash":"sha256:42d5a745d6c1f48a82610aa686c21ad41e2036bd9f8edd6c71dd0742034f6ad5","archive_size":6977,"archive_url":"https://extensions.blender.org/download/sha256:42d5a745d6c1f48a82610aa686c21ad41e2036bd9f8edd6c71dd0742034f6ad5/add-on-gp-to-curves-v0.4.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/gp-to-curves/","maintainer":"DadsCastle","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil","Add Curve","Modeling"]},{"id":"frutigeraero_green","schema_version":"1.0.0","name":"Frutiger Aero Green","version":"1.0.0","tagline":"The future we we're promised","archive_hash":"sha256:bd727fff80e17d0cb2b5bb7601db635ae9366f9455d1e337f3696708e7e7921c","archive_size":6419,"archive_url":"https://extensions.blender.org/download/sha256:bd727fff80e17d0cb2b5bb7601db635ae9366f9455d1e337f3696708e7e7921c/theme-frutigeraero-green-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frutigeraero-green/","maintainer":"Lightmare2000","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"randomizer","schema_version":"1.0.0","name":"Material Randomizer Pro","version":"1.10.0","tagline":"Material Randomization Tools","archive_hash":"sha256:8747ea7cad63a28ebba701b426f306ad6fc1bf8c66f7486c222a40120f902d46","archive_size":10795,"archive_url":"https://extensions.blender.org/download/sha256:8747ea7cad63a28ebba701b426f306ad6fc1bf8c66f7486c222a40120f902d46/add-on-randomizer-v1.10.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/randomizer/","maintainer":"lambdawalker","license":["SPDX:GPL-3.0-or-later"]},{"id":"Connecter","schema_version":"1.0.0","name":"Connecter","version":"0.6.20","tagline":"Streamlined Asset Management: Import & Export with Connecter DAM","archive_hash":"sha256:4aac3920620b8a259d6736a7f48668d44dd1a23fb8de2df3be0c51de2b799310","archive_size":392369,"archive_url":"https://extensions.blender.org/download/sha256:4aac3920620b8a259d6736a7f48668d44dd1a23fb8de2df3be0c51de2b799310/add-on-connecter-v0.6.20-windows-x64-windows-arm64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/connecter/","maintainer":"DesignConnected","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export blend files from/to disk"},"platforms":["windows-x64","windows-arm64"],"tags":["Import-Export"]},{"id":"render_multiple_instances","schema_version":"1.0.0","name":"Render Multiple Instances","version":"3.2.1","tagline":"Render animations and Flipbooks faster with multiple instances","archive_hash":"sha256:d4d4a14874541dcbf6cccf740ee21a142e9ae8a5b46bab532ba3822a0cc0c2dc","archive_size":8380,"archive_url":"https://extensions.blender.org/download/sha256:d4d4a14874541dcbf6cccf740ee21a142e9ae8a5b46bab532ba3822a0cc0c2dc/add-on-render-multiple-instances-v3.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-multiple-instances/","maintainer":"DShot92","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and read exports images"},"tags":["Render","Pipeline"]},{"id":"turnaround_camera","schema_version":"1.0.0","name":"Turnaround Camera","version":"0.3.0","tagline":"Add a camera rotation around selected object","archive_hash":"sha256:e9bfadd7d4d9e7dcfde9d0effa1815f9170561a81b63bee549b066c31aa48efa","archive_size":3237,"archive_url":"https://extensions.blender.org/download/sha256:e9bfadd7d4d9e7dcfde9d0effa1815f9170561a81b63bee549b066c31aa48efa/add-on-turnaround-camera-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/turnaround-camera/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Animation"]},{"id":"carver","schema_version":"1.0.0","name":"Carver","version":"1.2.3","tagline":"Multiple tools to carve or to create objects","archive_hash":"sha256:4c0b7c0c2906e09ee96fd2d5bb0d36f0be439a41f6f222ae48f38c317262ac3b","archive_size":29032,"archive_url":"https://extensions.blender.org/download/sha256:4c0b7c0c2906e09ee96fd2d5bb0d36f0be439a41f6f222ae48f38c317262ac3b/add-on-carver-v1.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/carver/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"soretro_5x","schema_version":"1.0.0","name":"So Retro 5X","version":"1.0.0","tagline":"Nostalgia theme by Strawberiie-Orea, 5.1 update by Ozbren","archive_hash":"sha256:c3c3e4950cb6f94d405527164e30b402fb57b4cf69c190e909e3243974438ab5","archive_size":5648,"archive_url":"https://extensions.blender.org/download/sha256:c3c3e4950cb6f94d405527164e30b402fb57b4cf69c190e909e3243974438ab5/theme-soretro-5x-v1.0.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/soretro-5x/","maintainer":"Ozbren","license":["SPDX:GPL-2.0-or-later"]},{"id":"vse_shapes","schema_version":"1.0.0","name":"VSE Shapes","version":"1.3.0","tagline":"Rectangles, ellipses and freehand drawing in the sequencer","archive_hash":"sha256:d0b36019929c5fc1c6cfd4e5a5d52432b3963ab3f2b7d78f1e57bc238d536880","archive_size":12591,"archive_url":"https://extensions.blender.org/download/sha256:d0b36019929c5fc1c6cfd4e5a5d52432b3963ab3f2b7d78f1e57bc238d536880/add-on-vse-shapes-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/vse-shapes/","maintainer":"Volko","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save generated shape images next to the .blend file"},"tags":["Sequencer"]},{"id":"LocUMan","schema_version":"1.0.0","name":"Local User Manual File URL","version":"0.0.2","tagline":"Override the user manual URL to use a local copy","archive_hash":"sha256:0e2d417819ad00a2ed4ba04b42451ac5ceb03686e86cea60d0e3d0c2b15acce2","archive_size":7290,"archive_url":"https://extensions.blender.org/download/sha256:0e2d417819ad00a2ed4ba04b42451ac5ceb03686e86cea60d0e3d0c2b15acce2/add-on-locuman-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/locuman/","maintainer":"dupoxy","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Extract the user manual to disk","network":"Need to download the user manual","clipboard":"Copy and paste the expected folder path"},"tags":["User Interface","System"]},{"id":"Matcha_Latte_Theme","schema_version":"1.0.0","name":"Matcha_Latte_Theme","version":"1.0.1","tagline":"Green Tea and Cream Milk","archive_hash":"sha256:298cac82452e569ba0257b34740d683ee5ca5b4fcf822d811b9033864326657d","archive_size":5916,"archive_url":"https://extensions.blender.org/download/sha256:298cac82452e569ba0257b34740d683ee5ca5b4fcf822d811b9033864326657d/theme-matcha-latte-theme-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/matcha-latte-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light","Colorful"]},{"id":"minislicer","schema_version":"1.0.0","name":"MiniSlicer","version":"1.2.1","tagline":"Slice and export .phz/.ctb files for Phrozen resin printers","archive_hash":"sha256:83dca8081ad6a22b24ca6adc8830d63c8dc2ecf02f71a9f13b1b64dfefbea8a2","archive_size":28018,"archive_url":"https://extensions.blender.org/download/sha256:83dca8081ad6a22b24ca6adc8830d63c8dc2ecf02f71a9f13b1b64dfefbea8a2/add-on-minislicer-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/minislicer/","maintainer":"Germán-Andrés-Soto-Castro","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write the exported printer file (.phz/.ctb)"},"tags":["Object"]},{"id":"layer_vertex_colors","schema_version":"1.0.0","name":"Layer Vertex Colors","version":"1.0.2","tagline":"Layered vertex color slot system","archive_hash":"sha256:cc1e24f182dfb40cbcf19176e993b2754ae2a034d7085bfffde1f204cbb032dd","archive_size":19283,"archive_url":"https://extensions.blender.org/download/sha256:cc1e24f182dfb40cbcf19176e993b2754ae2a034d7085bfffde1f204cbb032dd/add-on-layer-vertex-colors-v1.0.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/layer-vertex-colors/","maintainer":"xqfa","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write mesh attribute data for vertex color slots"}},{"id":"face_shapekey_rig","schema_version":"1.0.0","name":"Face Shape Key Rig","version":"1.0.0-beta.3","tagline":"Viewport slider and pad controllers for shape keys","archive_hash":"sha256:fc64273c4c79dcf8507fa007b39740995c77e5e269f6c83c601e7f7a2e41d6cb","archive_size":32433,"archive_url":"https://extensions.blender.org/download/sha256:fc64273c4c79dcf8507fa007b39740995c77e5e269f6c83c601e7f7a2e41d6cb/add-on-face-shapekey-rig-v1.0.0-beta.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/face-shapekey-rig/","maintainer":"thwotkd123","license":["SPDX:GPL-3.0-or-later"]},{"id":"blendgrey","schema_version":"1.0.0","name":"BlendGrey","version":"1.1.0","tagline":"Color-neutral theme inspired by the iconic Blender 2.7 aesthetic","archive_hash":"sha256:9e3a226fd873baf7823ff49cd7619030d225275e6525836f7b5b080f13574653","archive_size":5859,"archive_url":"https://extensions.blender.org/download/sha256:9e3a226fd873baf7823ff49cd7619030d225275e6525836f7b5b080f13574653/theme-blendgrey-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blendgrey/","maintainer":"iamren","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"mesh_filters","schema_version":"1.0.0","name":"Mesh Filters","version":"1.0.1","tagline":"Combinable filter stack for mesh selection","archive_hash":"sha256:d62c17957450f676d7556e2da8865eac251076245a5ddc997867245e90fceacf","archive_size":5097,"archive_url":"https://extensions.blender.org/download/sha256:d62c17957450f676d7556e2da8865eac251076245a5ddc997867245e90fceacf/add-on-mesh-filters-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mesh-filters/","maintainer":"Hartface","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"hair_net","schema_version":"1.0.0","name":"Hair Net","version":"1.0.0","tagline":"Converts mesh and curves into particle hair","archive_hash":"sha256:69a746f4c1d8766103b21af13679b3ee843dcf1e0aa396223d40071701327f16","archive_size":67446,"archive_url":"https://extensions.blender.org/download/sha256:69a746f4c1d8766103b21af13679b3ee843dcf1e0aa396223d40071701327f16/add-on-hair-net-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/hair-net/","maintainer":"Holo_X","license":["SPDX:GPL-3.0-or-later"],"tags":["Physics","Pipeline"]},{"id":"image_remap","schema_version":"1.0.0","name":"Image Remap Canvas","version":"0.2.0","tagline":"Extract perspective regions into a GPU canvas","archive_hash":"sha256:dbeb268e2ff39e8324f3ba8c22d14261cae0210b74a7b29990f5b7ce221aa42d","archive_size":34853,"archive_url":"https://extensions.blender.org/download/sha256:dbeb268e2ff39e8324f3ba8c22d14261cae0210b74a7b29990f5b7ce221aa42d/add-on-image-remap-v0.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/image-remap/","maintainer":"atticuslv","license":["SPDX:GPL-3.0-or-later"]},{"id":"hardflow","schema_version":"1.0.0","name":"Hardflow","version":"1.21.0","tagline":"Open source hard surface boolean modeling toolkit","archive_hash":"sha256:7840aadec9d0e02b31f6143712b63d784f59ad121f8cd1581ebfecbbb8d2297f","archive_size":256552,"archive_url":"https://extensions.blender.org/download/sha256:7840aadec9d0e02b31f6143712b63d784f59ad121f8cd1581ebfecbbb8d2297f/add-on-hardflow-v1.21.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/hardflow/","maintainer":"ugulay","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh","Object"]},{"id":"unity_style_walk_navigation","schema_version":"1.0.0","name":"Unity Style Walk Navigation","version":"1.2.0","tagline":"Unity-style right-click first-person walk navigation","archive_hash":"sha256:e83f4d3590d7b7ba7d5a4bac587dcec4543c77b0701c8302aceb1a1e6d94d10a","archive_size":23463,"archive_url":"https://extensions.blender.org/download/sha256:e83f4d3590d7b7ba7d5a4bac587dcec4543c77b0701c8302aceb1a1e6d94d10a/add-on-unity-style-walk-navigation-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unity-style-walk-navigation/","maintainer":"時の勇者","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"img2cube","schema_version":"1.0.0","name":"img2cube","version":"1.0.6","tagline":"Camera-match a photo from drawn lines, then drop 3D snap points","archive_hash":"sha256:442a8134679e1dd8443f052503872df57ea0b07aefd5dbb24ae1be3756803ab6","archive_size":28044,"archive_url":"https://extensions.blender.org/download/sha256:442a8134679e1dd8443f052503872df57ea0b07aefd5dbb24ae1be3756803ab6/add-on-img2cube-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/img2cube/","maintainer":"LongLiveTheCube","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","Modeling"]},{"id":"keyboardandmousetracker","schema_version":"1.0.0","name":"Keyboard and mouse tracker","version":"1.0.2","tagline":"Keyboard & mouse tracker","archive_hash":"sha256:9d6ada5db978016212c57fd7e1d34b364353cc2e545dc11abce12f16d1f624ef","archive_size":3761,"archive_url":"https://extensions.blender.org/download/sha256:9d6ada5db978016212c57fd7e1d34b364353cc2e545dc11abce12f16d1f624ef/add-on-keyboardandmousetracker-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyboardandmousetracker/","maintainer":"Stefan2814","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes"]},{"id":"cad2cube","schema_version":"1.0.0","name":"CAD2Cube — DXF Importer","version":"1.5.0","tagline":"Free DXF importer with layers, units and block instances","archive_hash":"sha256:60c32d9bfcc46fcaf9b415a82a793d8c1f4ac8fa3c98e380a74b9c18c3df6cb5","archive_size":2583424,"archive_url":"https://extensions.blender.org/download/sha256:60c32d9bfcc46fcaf9b415a82a793d8c1f4ac8fa3c98e380a74b9c18c3df6cb5/add-on-cad2cube-v1.5.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cad2cube/","maintainer":"LongLiveTheCube","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import DXF files from disk"},"tags":["Import-Export"]},{"id":"basic_cad_red","schema_version":"1.0.0","name":"Basic CAD - Red","version":"1.0.1","tagline":"A theme inspired by CAD programs","archive_hash":"sha256:87c05ed777a6c1fda4a4a1a7389b6d910c5339d934be62db38e1dfcf9deaa77b","archive_size":5926,"archive_url":"https://extensions.blender.org/download/sha256:87c05ed777a6c1fda4a4a1a7389b6d910c5339d934be62db38e1dfcf9deaa77b/theme-basic-cad-red-v1.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/basic-cad-red/","maintainer":"Bebo","license":["SPDX:GPL-3.0-or-later"]},{"id":"pcam_solver","schema_version":"1.0.0","name":"PCamSolver","version":"1.0.2","tagline":"Pseudo 3D camera and object solving from 2D movie clip tracks","archive_hash":"sha256:fb89e97a25718443bf2870ca60790f1f5731a6c7fdfc973e11bd65f4403d2448","archive_size":50205,"archive_url":"https://extensions.blender.org/download/sha256:fb89e97a25718443bf2870ca60790f1f5731a6c7fdfc973e11bd65f4403d2448/add-on-pcam-solver-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pcam-solver/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Camera"]},{"id":"arc_interface","schema_version":"1.0.0","name":"ARC Interface","version":"1.0.0","tagline":"Engineering inspired holographic interface","archive_hash":"sha256:6168eee8618fb27fa5f45354b6969da98124c9767010da25acb5dea929f48672","archive_size":6111,"archive_url":"https://extensions.blender.org/download/sha256:6168eee8618fb27fa5f45354b6969da98124c9767010da25acb5dea929f48672/theme-arc-interface-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/arc-interface/","maintainer":"The_Iron_Maker","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By","Colorful"]},{"id":"plague_inc_cure_theme","schema_version":"1.0.0","name":"Plague Inc. - Cure Theme","version":"1.0.0","tagline":"Very blue theme","archive_hash":"sha256:6794e252932390d33e0f22bd7b4a31ac20e1f5971ee4fb8be375c6d4fb596bec","archive_size":6078,"archive_url":"https://extensions.blender.org/download/sha256:6794e252932390d33e0f22bd7b4a31ac20e1f5971ee4fb8be375c6d4fb596bec/theme-plague-inc-cure-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/plague-inc-cure-theme/","maintainer":"Bebo","license":["SPDX:GPL-3.0-or-later"]},{"id":"yaha","schema_version":"1.0.0","name":"Y.A.H.A","version":"1.0.1","tagline":"Yet Another HDRI Addon","archive_hash":"sha256:5ead7ec1c36e1e9e2dff9a49c69a5faa79a0aebef8df00d61fe8dddf0dcde027","archive_size":41767,"archive_url":"https://extensions.blender.org/download/sha256:5ead7ec1c36e1e9e2dff9a49c69a5faa79a0aebef8df00d61fe8dddf0dcde027/add-on-yaha-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/yaha/","maintainer":"ArtinŌr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Scan local folders to generate thumbnails and map environments"},"tags":["Lighting","Scene"]},{"id":"omi_physics_body_gltf_extension","schema_version":"1.0.0","name":"OMI Physics Body glTF Extension","version":"1.6.5","tagline":"Export primitive collision shapes from Blender to Godot via glTF","archive_hash":"sha256:6e343473b15e4b9d32f53cad59ffa42ca2347a8dfdc457da2cd94112acf1527b","archive_size":16883,"archive_url":"https://extensions.blender.org/download/sha256:6e343473b15e4b9d32f53cad59ffa42ca2347a8dfdc457da2cd94112acf1527b/add-on-omi-physics-body-gltf-extension-v1.6.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/omi-physics-body-gltf-extension/","maintainer":"ZycaR","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export glTF, GLB and Blender files from/to disk"},"tags":["Import-Export"]},{"id":"arch_generator","schema_version":"1.0.0","name":"Arch Generator","version":"1.0.1","tagline":"Generate procedural architectural arches, pillars and structures","archive_hash":"sha256:b0a902ee3c0ff7b5360c3056bc9a084ba8e9d9f94882f68151abffb8df5abb4c","archive_size":15104,"archive_url":"https://extensions.blender.org/download/sha256:b0a902ee3c0ff7b5360c3056bc9a084ba8e9d9f94882f68151abffb8df5abb4c/add-on-arch-generator-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/arch-generator/","maintainer":"Aniruddhya-goswami","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Add Mesh"]},{"id":"blendtopo","schema_version":"1.0.0","name":"Blendtopo - Topology Optimization","version":"1.0.0","tagline":"SIMP topology optimization for solid mesh parts","archive_hash":"sha256:c65502117009b9bfe78b4351baa7bdb20ec3b98d2b4a8b4239b16aed538b320b","archive_size":1205804,"archive_url":"https://extensions.blender.org/download/sha256:c65502117009b9bfe78b4351baa7bdb20ec3b98d2b4a8b4239b16aed538b320b/add-on-blendtopo-v1.0.0-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blendtopo/","maintainer":"Blenderhead-engineer","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Exchanges data with helper subprocesses during optimization"},"platforms":["windows-x64"],"tags":["Mesh","Physics"]},{"id":"exact_radius","schema_version":"1.0.0","name":"Exact Radius","version":"1.9.4","tagline":"Make selected vertex rings exact-radius circles, many at once","archive_hash":"sha256:f2c9ad957a7a3d408503649b9e559d0977dcc09ec2ef3f09dfc0cac2ef2dcd74","archive_size":25280,"archive_url":"https://extensions.blender.org/download/sha256:f2c9ad957a7a3d408503649b9e559d0977dcc09ec2ef3f09dfc0cac2ef2dcd74/add-on-exact-radius-v1.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/exact-radius/","maintainer":"Patrick-Tiefenbacher","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"helio","schema_version":"1.0.0","name":"Helio","version":"1.1.1","tagline":"Automatic lighting of the scene based on GPS, date and time","archive_hash":"sha256:a190743fc32fd7d3a1c4937b29405cf92fe717d2a3af8caa9b8928b1bc80f789","archive_size":431226,"archive_url":"https://extensions.blender.org/download/sha256:a190743fc32fd7d3a1c4937b29405cf92fe717d2a3af8caa9b8928b1bc80f789/add-on-helio-v1.1.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/helio/","maintainer":"Mikydosh","license":["SPDX:GPL-3.0-or-later"],"tags":["Lighting"]},{"id":"bay_area","schema_version":"1.0.0","name":"Bay Area","version":"1.0.0","tagline":"Red and gold theme for Blender 5","archive_hash":"sha256:64c54a905ead56013de315c78a5d0aff102aeeeffa0a846a8f293eb05c5285eb","archive_size":6539,"archive_url":"https://extensions.blender.org/download/sha256:64c54a905ead56013de315c78a5d0aff102aeeeffa0a846a8f293eb05c5285eb/theme-bay-area-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/bay-area/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"sculpt_pose_sync","schema_version":"1.0.0","name":"Sculpt Pose Sync","version":"34.0.0","tagline":"Dual-window workflow for symmetrical posed model sculpting","archive_hash":"sha256:1189b58caee8a175176fb2d64ea034c77043c3d669de8d6748bd067268d2bd73","archive_size":9052,"archive_url":"https://extensions.blender.org/download/sha256:1189b58caee8a175176fb2d64ea034c77043c3d669de8d6748bd067268d2bd73/add-on-sculpt-pose-sync-v34.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpt-pose-sync/","maintainer":"mamenr","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt"]},{"id":"refboard","schema_version":"1.0.0","name":"RefBoard","version":"1.5.2","tagline":"Arrange image references inside a dedicated node editor","archive_hash":"sha256:63e5ea6e313c58c5df1c575760256350310e93bcfe7a2b4d85744570026c1037","archive_size":3822996,"archive_url":"https://extensions.blender.org/download/sha256:63e5ea6e313c58c5df1c575760256350310e93bcfe7a2b4d85744570026c1037/add-on-refboard-v1.5.2-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/refboard/","maintainer":"MoseenkowAndrew","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load selected, dropped, or pasted images"},"platforms":["windows-x64"],"tags":["Node","User Interface"]},{"id":"node_exporter","schema_version":"1.0.0","name":"NodeExporter","version":"1.0.2","tagline":"Export node trees to a highly interactive HTML viewer","archive_hash":"sha256:406fd2baafbdb243d85ae258443657860e8c74fd60d0a218a0c16b865296b840","archive_size":20422,"archive_url":"https://extensions.blender.org/download/sha256:406fd2baafbdb243d85ae258443657860e8c74fd60d0a218a0c16b865296b840/add-on-node-exporter-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/node-exporter/","maintainer":"KrazyGFX","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"moldforge","schema_version":"1.0.0","name":"MoldForge","version":"0.26.3","tagline":"Generate printable silicone mold systems from a mesh","archive_hash":"sha256:234ac5ae67a85153bf859691da08e86697ee416c888749b3d790c017a7602005","archive_size":89440,"archive_url":"https://extensions.blender.org/download/sha256:234ac5ae67a85153bf859691da08e86697ee416c888749b3d790c017a7602005/add-on-moldforge-v0.26.3.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/moldforge/","maintainer":"Lyubomir-Todorov","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export the generated mold parts as STL files"},"tags":["Mesh","Modeling","Object"]},{"id":"black_acid","schema_version":"1.0.0","name":"Black Acid","version":"1.0.0","tagline":"Black and Neon Lime theme for Blender 5","archive_hash":"sha256:8d033728c864fff8f279bca2e415aedb37e65d1c39ed88a8033fbee23d2b7d3b","archive_size":6507,"archive_url":"https://extensions.blender.org/download/sha256:8d033728c864fff8f279bca2e415aedb37e65d1c39ed88a8033fbee23d2b7d3b/theme-black-acid-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/black-acid/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"mjolnir","schema_version":"1.0.0","name":"Mjolnir","version":"1.0.0","tagline":"Military green and yellow theme for Blender 5","archive_hash":"sha256:5f93901db3a668b013365b29a35d1e5c87b991a15f8d58be62250ee63f9ed9cb","archive_size":6566,"archive_url":"https://extensions.blender.org/download/sha256:5f93901db3a668b013365b29a35d1e5c87b991a15f8d58be62250ee63f9ed9cb/theme-mjolnir-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/mjolnir/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"blendguard","schema_version":"1.0.0","name":"BlendGuard","version":"0.5.1","tagline":"See what a .blend will auto-run before you trust it","archive_hash":"sha256:20afde00350dd33eef7dce1624ec064427666e697865b33a826987811f364601","archive_size":30741,"archive_url":"https://extensions.blender.org/download/sha256:20afde00350dd33eef7dce1624ec064427666e697865b33a826987811f364601/add-on-blendguard-v0.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blendguard/","maintainer":"Arthur-Dutra","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read user-selected .blend files to inspect for scripts"},"tags":["Pipeline","System"]},{"id":"frutigeraero_blue","schema_version":"1.0.0","name":"Frutiger Aero Blue","version":"1.1.0","tagline":"The future we we're promised","archive_hash":"sha256:835904ec8da7c340003c65e2551266868439819628d76afb20888a9be27f6657","archive_size":6357,"archive_url":"https://extensions.blender.org/download/sha256:835904ec8da7c340003c65e2551266868439819628d76afb20888a9be27f6657/theme-frutigeraero-blue-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/frutigeraero-blue/","maintainer":"Lightmare2000","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"novaskin_export","schema_version":"1.0.0","name":"NovaSkin Export","version":"1.4.3","tagline":"Export Minecraft scenes as re-skinnable browser wallpapers","archive_hash":"sha256:fdc9fe6a1c933e06b2f5e1501030d96711eb036f3b86e5b801f202f97fd9c9b1","archive_size":105434,"archive_url":"https://extensions.blender.org/download/sha256:fdc9fe6a1c933e06b2f5e1501030d96711eb036f3b86e5b801f202f97fd9c9b1/add-on-novaskin-export-v1.4.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/novaskin-export/","maintainer":"Saviski","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write the exported UV/mask/light files next to the .blend"},"tags":["Render","Pipeline"]},{"id":"prosit","schema_version":"1.0.0","name":"Prosit","version":"1.0.0","tagline":"Dark maroon and burnt orange theme for Blender 5","archive_hash":"sha256:fc1407e91787c03e8c2b6fea59d6302490a3c40b43e785c3574d7beb874e4c65","archive_size":6681,"archive_url":"https://extensions.blender.org/download/sha256:fc1407e91787c03e8c2b6fea59d6302490a3c40b43e785c3574d7beb874e4c65/theme-prosit-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/prosit/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"scientia","schema_version":"1.0.0","name":"Scientia","version":"1.0.0","tagline":"Dark red theme for Blender 5","archive_hash":"sha256:f185e1642d7a13f8ba860cb0986c4f0f4088e54c01aa8b0dce9a8eb4468f8372","archive_size":6717,"archive_url":"https://extensions.blender.org/download/sha256:f185e1642d7a13f8ba860cb0986c4f0f4088e54c01aa8b0dce9a8eb4468f8372/theme-scientia-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/scientia/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"camera_shift_sync","schema_version":"1.0.0","name":"Camera Shift Sync","version":"0.2.2","tagline":"Compose-preserving camera moves around a world-fixed target","archive_hash":"sha256:8b75bb5497577a1d0c7ac80c02841c726b14d684cab0058e216ededf9eed2fb6","archive_size":38104,"archive_url":"https://extensions.blender.org/download/sha256:8b75bb5497577a1d0c7ac80c02841c726b14d684cab0058e216ededf9eed2fb6/add-on-camera-shift-sync-v0.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camera-shift-sync/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"green_viz","schema_version":"1.0.0","name":"Green Viz","version":"1.0.4","tagline":"Dark green theme for Blender 5","archive_hash":"sha256:264334a9bb72b7b0e7b4e309624981067ad303b9c5ffeb75fb3e681d7bad92cf","archive_size":6858,"archive_url":"https://extensions.blender.org/download/sha256:264334a9bb72b7b0e7b4e309624981067ad303b9c5ffeb75fb3e681d7bad92cf/theme-green-viz-v1.0.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/green-viz/","maintainer":"WGX3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"IMEBridge","schema_version":"1.0.0","name":"IMEBridge","version":"0.3.0","tagline":"Bridge native IME input into Blender text editing","archive_hash":"sha256:1459f18def25b75fb51718a98505a17f81e67aa36ed731ad0d07ed1a3e84e59c","archive_size":80971,"archive_url":"https://extensions.blender.org/download/sha256:1459f18def25b75fb51718a98505a17f81e67aa36ed731ad0d07ed1a3e84e59c/add-on-imebridge-v0.3.0-windows-x64-macos-arm64.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/imebridge/","maintainer":"Suenkanwei","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64","macos-arm64"],"tags":["System","Text Editor","User Interface"]},{"id":"float_curve_css","schema_version":"1.0.0","name":"Float Curve CSS","version":"1.0.4","tagline":"Float Curve editing tools and Curve Profile to Float Curve","archive_hash":"sha256:24786037a42e779c64c6ad4abeb6c040abac518037fbe6fb4fb9b007ca60abc2","archive_size":11584,"archive_url":"https://extensions.blender.org/download/sha256:24786037a42e779c64c6ad4abeb6c040abac518037fbe6fb4fb9b007ca60abc2/add-on-float-curve-css-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/float-curve-css/","maintainer":"guillaume_bissieres","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"copy_pivot_from_active","schema_version":"1.0.0","name":"Copy Pivot From Active","version":"1.0.1","tagline":"Copy pivot offset from active mesh to other selected meshes","archive_hash":"sha256:ebce90935ee999756561ecca4290c45752d0910c789bf3a7ca5de47a9684a78e","archive_size":2334,"archive_url":"https://extensions.blender.org/download/sha256:ebce90935ee999756561ecca4290c45752d0910c789bf3a7ca5de47a9684a78e/add-on-copy-pivot-from-active-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-pivot-from-active/","maintainer":"6cto","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"flat_uv_mapper","schema_version":"1.0.0","name":"Flat UV Mapper","version":"1.1.0","tagline":"CSG-style planar face UV mapping with tile, offset and rotation","archive_hash":"sha256:4b502bfe25ae0417e2f9e7af697d2f7a83cd9194963679eb32c64b3c62be6b84","archive_size":64686,"archive_url":"https://extensions.blender.org/download/sha256:4b502bfe25ae0417e2f9e7af697d2f7a83cd9194963679eb32c64b3c62be6b84/add-on-flat-uv-mapper-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/flat-uv-mapper/","maintainer":"schemann","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"aiming_helper","schema_version":"1.0.0","name":"Aiming Helper","version":"1.0.1","tagline":"A visual helper for aligning sights","archive_hash":"sha256:9f79716709ca52fbaa55d25b4f006986c9277f8e934f1a8cba938124ec01a967","archive_size":5173,"archive_url":"https://extensions.blender.org/download/sha256:9f79716709ca52fbaa55d25b4f006986c9277f8e934f1a8cba938124ec01a967/add-on-aiming-helper-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/aiming-helper/","maintainer":"Hartface","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"render_pipeline_async","schema_version":"1.0.0","name":"End-to-End Render Pipeline","version":"1.0.0","tagline":"Event-driven automated 3D rendering and VSE video compilation","archive_hash":"sha256:7b8ac050603eac01cea8e1257bb33bfec88488c454750679d1cf03777c57740f","archive_size":18297,"archive_url":"https://extensions.blender.org/download/sha256:7b8ac050603eac01cea8e1257bb33bfec88488c454750679d1cf03777c57740f/add-on-render-pipeline-async-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-pipeline-async/","maintainer":"impatient0","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads rendered frames and writes compiled video files"},"tags":["Sequencer","Animation","Render"]},{"id":"EyeZenNight","schema_version":"1.0.0","name":"Eye Zen Night","version":"1.0.1","tagline":"A relaxing theme for night work","archive_hash":"sha256:39f3c851847e6a9e0bb62410b12056e070bf69ab41e17b74ad095f0c1bddd3b2","archive_size":5977,"archive_url":"https://extensions.blender.org/download/sha256:39f3c851847e6a9e0bb62410b12056e070bf69ab41e17b74ad095f0c1bddd3b2/theme-eyezennight-v1.0.1.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/eyezennight/","maintainer":"Sekuora","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Print"]},{"id":"VDB_Theme","schema_version":"1.0.0","name":"VDB Theme","version":"1.0.3","tagline":"Dark yellow accent theme","archive_hash":"sha256:be09bb9b911cf8cb6702dd99118f6bf0b255b2f3919fa9ca39c41eed4f8887f1","archive_size":5383,"archive_url":"https://extensions.blender.org/download/sha256:be09bb9b911cf8cb6702dd99118f6bf0b255b2f3919fa9ca39c41eed4f8887f1/theme-vdb-theme-v1.0.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/vdb-theme/","maintainer":"Tibe-Van-den-Brande","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"marker_shortcuts","schema_version":"1.0.0","name":"Marker Shortcuts","version":"0.1.1","tagline":"Assign keyboard shortcuts to timeline markers","archive_hash":"sha256:3a0c19925ddb5cce77e3560617f5a3936a04f3c8c89e9dc5e839c71e3061e1c5","archive_size":8666,"archive_url":"https://extensions.blender.org/download/sha256:3a0c19925ddb5cce77e3560617f5a3936a04f3c8c89e9dc5e839c71e3061e1c5/add-on-marker-shortcuts-v0.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/marker-shortcuts/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Sequencer"]},{"id":"mandelbulb","schema_version":"1.0.0","name":"Mandelbulb Generator","version":"1.0.2","tagline":"Mandelbulb and Julia Fractal Generator","archive_hash":"sha256:c739e911c0a2362c3bde1ceeef932cbb19f6c024f6f8209fd172b04fd96a2d92","archive_size":8913,"archive_url":"https://extensions.blender.org/download/sha256:c739e911c0a2362c3bde1ceeef932cbb19f6c024f6f8209fd172b04fd96a2d92/add-on-mandelbulb-v1.0.2.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/mandelbulb/","maintainer":"Suussonic","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","Modeling"]},{"id":"viewport_scalebar","schema_version":"1.0.0","name":"Viewport Scale Bar","version":"1.2.1","tagline":"Cartographic scale bar overlay for the 3D Viewport","archive_hash":"sha256:719ba03403b9eb44145459d39426ad8df1def7749053ea0cb441adefeee78d65","archive_size":9798,"archive_url":"https://extensions.blender.org/download/sha256:719ba03403b9eb44145459d39426ad8df1def7749053ea0cb441adefeee78d65/add-on-viewport-scalebar-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-scalebar/","maintainer":"Renee-13","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","User Interface"]},{"id":"io_bugsnax","schema_version":"1.0.0","name":"Bugsnax Cache Importer/Exporter","version":"1.0.1","tagline":"Import/Export Bugsnax .xcache, .objcache, .daecache","archive_hash":"sha256:9231de5a4a99a5a4bf955e494ecad4946b91be50ee3237e6b793bfb2a8c5670d","archive_size":93176,"archive_url":"https://extensions.blender.org/download/sha256:9231de5a4a99a5a4bf955e494ecad4946b91be50ee3237e6b793bfb2a8c5670d/add-on-io-bugsnax-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-bugsnax/","maintainer":"SaintBaron","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"backup_modifiers","schema_version":"1.0.0","name":"Backup Modifiers","version":"1.0.4","tagline":"Apply modifiers with a backup. Easily switch to backup object","archive_hash":"sha256:6671ec4cf396c6a47967d0fa9d14936c1a47fd8f92c978add3abd5b4df1c3709","archive_size":3118,"archive_url":"https://extensions.blender.org/download/sha256:6671ec4cf396c6a47967d0fa9d14936c1a47fd8f92c978add3abd5b4df1c3709/add-on-backup-modifiers-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/backup-modifiers/","maintainer":"R4V3N","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"dark_highlights","schema_version":"1.0.0","name":"CGDive Dark with Area Highlights","version":"1.0.0","tagline":"A standard Dark Theme with area highlights and better panel","archive_hash":"sha256:3d29709eff4497fa06d8679ca14cbb42a972c85cd8355618e7d58463f4bb16b2","archive_size":5611,"archive_url":"https://extensions.blender.org/download/sha256:3d29709eff4497fa06d8679ca14cbb42a972c85cd8355618e7d58463f4bb16b2/theme-dark-highlights-v1.0.0.zip","type":"theme","blender_version_min":"4.4.0","website":"https://extensions.blender.org/themes/dark-highlights/","maintainer":"Todor-CGDive","license":["SPDX:GPL-2.0-or-later"]},{"id":"nukxon_vr_exporter","schema_version":"1.0.0","name":"Nukxon VR Exporter","version":"1.2.1","tagline":"Render VR cubemap tours and export .nukxon packages","archive_hash":"sha256:9d1b0d0e0048d71aaa02377a8097d5172189cf4deb82cab209d73217de613509","archive_size":27069,"archive_url":"https://extensions.blender.org/download/sha256:9d1b0d0e0048d71aaa02377a8097d5172189cf4deb82cab209d73217de613509/add-on-nukxon-vr-exporter-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nukxon-vr-exporter/","maintainer":"Nukxon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Write .nukxon export bundle to user-chosen output folder"},"tags":["Render","Import-Export"]},{"id":"io_lottie_export","schema_version":"1.0.0","name":"Lottie Export","version":"0.1.3","tagline":"Export Grease Pencil animation to Lottie JSON / dotLottie / TGS","archive_hash":"sha256:79a424817d6e190bf720c7d76b472d863943689a18899bcaf3b68a0da12c3cd2","archive_size":31309,"archive_url":"https://extensions.blender.org/download/sha256:79a424817d6e190bf720c7d76b472d863943689a18899bcaf3b68a0da12c3cd2/add-on-io-lottie-export-v0.1.3.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/io-lottie-export/","maintainer":"MultLabs","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"magic_wand","schema_version":"1.0.0","name":"Magic Wand","version":"0.0.4","tagline":"Topology-aware mesh selection","archive_hash":"sha256:e1888f95536d3e242e1f449a5fe6c7023df06469c8e27ebab353e8d3af71db8d","archive_size":15676,"archive_url":"https://extensions.blender.org/download/sha256:e1888f95536d3e242e1f449a5fe6c7023df06469c8e27ebab353e8d3af71db8d/add-on-magic-wand-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/magic-wand/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"dark_purple","schema_version":"1.0.0","name":"Dark Purple","version":"1.0.0","tagline":"Dark Purple gray style","archive_hash":"sha256:90289ec78324072453380e3446997ee1a8c3636d830a0bb4995532a883345796","archive_size":5323,"archive_url":"https://extensions.blender.org/download/sha256:90289ec78324072453380e3446997ee1a8c3636d830a0bb4995532a883345796/theme-dark-purple-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/dark-purple/","maintainer":"wans7.gumroad.com","license":["SPDX:GPL-3.0-or-later"]},{"id":"local_view_manager","schema_version":"1.0.0","name":"Local View Manager","version":"2.1.0","tagline":"Remove, add and recover to Local View from Outliner and Viewport","archive_hash":"sha256:0a3c4804ad861ca989400ba0b45ab06e2ab512a2f5c3101dddbbd3652d7d1266","archive_size":7078,"archive_url":"https://extensions.blender.org/download/sha256:0a3c4804ad861ca989400ba0b45ab06e2ab512a2f5c3101dddbbd3652d7d1266/add-on-local-view-manager-v2.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/local-view-manager/","maintainer":"3DDinosaur","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"view_selected","schema_version":"1.0.0","name":"View Selected","version":"1.0.0","tagline":"Smart Selection View","archive_hash":"sha256:b6f6fa52bfb361fda7096424fabf5a58816dda0228fc0ffec6f3d54c2e4132ca","archive_size":4107,"archive_url":"https://extensions.blender.org/download/sha256:b6f6fa52bfb361fda7096424fabf5a58816dda0228fc0ffec6f3d54c2e4132ca/add-on-view-selected-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/view-selected/","maintainer":"wans7.gumroad.com","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"point_cloud_io","schema_version":"1.0.0","name":"Point Cloud I/O","version":"0.5.1","tagline":"Import and export E57, PLY, LAS, LAZ, PCD, XYZ, PTS files","archive_hash":"sha256:cdd313ea71b0c82ad66e06dcf659984cbad9567cbbad5fee78e948971cd61bc0","archive_size":22372470,"archive_url":"https://extensions.blender.org/download/sha256:cdd313ea71b0c82ad66e06dcf659984cbad9567cbbad5fee78e948971cd61bc0/add-on-point-cloud-io-v0.5.1.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/point-cloud-io/","maintainer":"StudioMedio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write point cloud files on disk"},"tags":["Import-Export"]},{"id":"frame_by_plane","schema_version":"1.0.0","name":"Frame By Plane","version":"6.1.1","tagline":"A better Image as Planes workflow for animation","archive_hash":"sha256:a399877c73d90c3af6ac74bbb28041160c17d495c45210ec1674111c836997cf","archive_size":8705695,"archive_url":"https://extensions.blender.org/download/sha256:a399877c73d90c3af6ac74bbb28041160c17d495c45210ec1674111c836997cf/add-on-frame-by-plane-v6.1.1-windows-x64.zip","type":"add-on","blender_version_min":"5.1.2","website":"https://extensions.blender.org/add-ons/frame-by-plane/","maintainer":"Alessandro-Pannoli","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read media and write layered/render cache files","clipboard":"Import media paths and copy diagnostic reports to the clipboard"},"platforms":["windows-x64"],"tags":["3D View","Animation"]},{"id":"slides_pro","schema_version":"1.0.0","name":"Slides","version":"1.6.2","tagline":"Create and play slide-based presentations in the 3D View","archive_hash":"sha256:7ac2d0fdf3e8c2c5b3f96df9aa0d9c5f24cc5ec965d060f756a52b7a339ebbf9","archive_size":10301,"archive_url":"https://extensions.blender.org/download/sha256:7ac2d0fdf3e8c2c5b3f96df9aa0d9c5f24cc5ec965d060f756a52b7a339ebbf9/add-on-slides-pro-v1.6.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/slides-pro/","maintainer":"Alessandro-Pannoli","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"Classic_But_Modern","schema_version":"1.0.0","name":"ClassicButModern","version":"1.0.0","tagline":"A Blender theme inspired by 2.8x releases of Blender","archive_hash":"sha256:85d552cb420bbee1c93c74cff3db87746783785d2d59d1ff9b9a06c622a54907","archive_size":5393,"archive_url":"https://extensions.blender.org/download/sha256:85d552cb420bbee1c93c74cff3db87746783785d2d59d1ff9b9a06c622a54907/theme-classic-but-modern-v1.0.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/classic-but-modern/","maintainer":"Neon-Hat","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"dji_proxy_switcher","schema_version":"1.0.0","name":"DJI Proxy Switcher","version":"2.1.1","tagline":"Replace LRF proxies with full-res MP4s instantly","archive_hash":"sha256:428feec54a98293aadfe5345a8d2a8905502f922d9696a268ab4900492916301","archive_size":2987,"archive_url":"https://extensions.blender.org/download/sha256:428feec54a98293aadfe5345a8d2a8905502f922d9696a268ab4900492916301/add-on-dji-proxy-switcher-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dji-proxy-switcher/","maintainer":"aflynneastwood","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"siemen_lens_blender_autoaov","schema_version":"1.0.0","name":"AutoAOV","version":"2.1.5","tagline":"Automatically create an AOV structure for exporting","archive_hash":"sha256:2f290ce770220139450ece59048e9fd5ed7e37f0ed1ef1209da58646a1eece3e","archive_size":14417,"archive_url":"https://extensions.blender.org/download/sha256:2f290ce770220139450ece59048e9fd5ed7e37f0ed1ef1209da58646a1eece3e/add-on-siemen-lens-blender-autoaov-v2.1.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/siemen-lens-blender-autoaov/","maintainer":"Siemen-Lens","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Uses Files permission to create folders and export camera"},"tags":["Render","Compositing","Node","Pipeline","Lighting"]},{"id":"Lightsaber_VFX","schema_version":"1.0.0","name":"Lightsaber VFX","version":"1.0.2","tagline":"Super simple lightsaber VFX setup for Blender","archive_hash":"sha256:c36b38b4f94b420f67e2ab73c7807babf3529fac3e4cf90abc1ee480faf12267","archive_size":52312,"archive_url":"https://extensions.blender.org/download/sha256:c36b38b4f94b420f67e2ab73c7807babf3529fac3e4cf90abc1ee480faf12267/add-on-lightsaber-vfx-v1.0.2.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/lightsaber-vfx/","maintainer":"Will-Hadfield-1","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write lightsaber preset files in user data folder"},"tags":["Compositing"]},{"id":"wittyming_color_palette","schema_version":"1.0.0","name":"Color Palette","version":"1.2.3","tagline":"Record and drag material node colors in the Shader Editor","archive_hash":"sha256:075775b465c832602804c7d3826a01b36d1207718105173260f73e6488f86454","archive_size":371079,"archive_url":"https://extensions.blender.org/download/sha256:075775b465c832602804c7d3826a01b36d1207718105173260f73e6488f86454/add-on-wittyming-color-palette-v1.2.3.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/wittyming-color-palette/","maintainer":"MingWitty","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface"]},{"id":"h4rb_scene_director","schema_version":"1.0.0","name":"Scene Director","version":"0.9.5","tagline":"Lighting, world, compositor layers and render planning","archive_hash":"sha256:9160866914a383bbe638718218394c88a76b12826cefcbc4db10ef279b8c3a70","archive_size":79029,"archive_url":"https://extensions.blender.org/download/sha256:9160866914a383bbe638718218394c88a76b12826cefcbc4db10ef279b8c3a70/add-on-h4rb-scene-director-v0.9.5.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/h4rb-scene-director/","maintainer":"Melih-Kayaci","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","Lighting","Compositing","Render"]},{"id":"theme_dictionary","schema_version":"1.0.0","name":"theme dictionary","version":"0.6.4","tagline":"theme recolor plugin that retrieves relevant options","archive_hash":"sha256:a6a4de727343fac8370d117afc7326501019f19ef7058e10c7971ce9e4d9271e","archive_size":43319,"archive_url":"https://extensions.blender.org/download/sha256:a6a4de727343fac8370d117afc7326501019f19ef7058e10c7971ce9e4d9271e/add-on-theme-dictionary-v0.6.4.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/theme-dictionary/","maintainer":"61+","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"vodi_white","schema_version":"1.0.0","name":"vodi white","version":"0.6.3","tagline":"Ice-feeling elegant white theme, simple and clean","archive_hash":"sha256:4d8cf55af97525b5fcbc10f2afe16f7bebfd6c740c1397b80d68d59f21beb9e2","archive_size":5256,"archive_url":"https://extensions.blender.org/download/sha256:4d8cf55af97525b5fcbc10f2afe16f7bebfd6c740c1397b80d68d59f21beb9e2/theme-vodi-white-v0.6.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/vodi-white/","maintainer":"61+","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"EVA_Unit_01","schema_version":"1.0.0","name":"EVA UNIT 01","version":"1.0.0","tagline":"Color theme inspired by Evangelion Unit-01 purple/green palette","archive_hash":"sha256:65ba4e362eae0a511cae31d10f0b2b587075a9f9d3b8f56005d399f885b7cd5a","archive_size":5944,"archive_url":"https://extensions.blender.org/download/sha256:65ba4e362eae0a511cae31d10f0b2b587075a9f9d3b8f56005d399f885b7cd5a/theme-eva-unit-01-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/eva-unit-01/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"boardtyper_3d","schema_version":"1.0.0","name":"Boardtyper 3D","version":"1.0.1","tagline":"Export Blender models to Tabletop Simulator JSON","archive_hash":"sha256:c11cbe753a7adb9a9274419e1eec0422492b24a1425d279b664a537a4fea7c04","archive_size":7316,"archive_url":"https://extensions.blender.org/download/sha256:c11cbe753a7adb9a9274419e1eec0422492b24a1425d279b664a537a4fea7c04/add-on-boardtyper-3d-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/boardtyper-3d/","maintainer":"Skarmuse","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export OBJ and JSON files to the local drive"},"tags":["Import-Export","Game Engine"]},{"id":"CryptoMatte_ID_Color","schema_version":"1.0.0","name":"CryptoMatte ID Color","version":"1.0.4","tagline":"Generate real time ID color compositor nodes using Cryptomatte","archive_hash":"sha256:10db2d4d2bfd31347770ccf8cb1a87e7dc7354cde610931f2e9a93a9c7618d26","archive_size":7710,"archive_url":"https://extensions.blender.org/download/sha256:10db2d4d2bfd31347770ccf8cb1a87e7dc7354cde610931f2e9a93a9c7618d26/add-on-cryptomatte-id-color-v1.0.4.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/cryptomatte-id-color/","maintainer":"61+","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing"]},{"id":"looking_glass_display_simulator","schema_version":"1.0.0","name":"Looking Glass Display Simulator","version":"1.0.0","tagline":"Simulate Looking Glass displays, create compatible quilts","archive_hash":"sha256:5df5a7704708f42ac229774678869b6c5876166e3f23357c3f1852fb26e0e2b2","archive_size":39179,"archive_url":"https://extensions.blender.org/download/sha256:5df5a7704708f42ac229774678869b6c5876166e3f23357c3f1852fb26e0e2b2/add-on-looking-glass-display-simulator-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/looking-glass-display-simulator/","maintainer":"Lukas-Vincenc","license":["SPDX:GPL-3.0-or-later"]},{"id":"copy_relative_transform","schema_version":"1.0.0","name":"Copy Relative Transform","version":"0.1.0","tagline":"Copy & paste transforms relative to the view or an object","archive_hash":"sha256:974552489bff1d37969269302e28019e18e930f703e902cc785552ea6b292e54","archive_size":3565,"archive_url":"https://extensions.blender.org/download/sha256:974552489bff1d37969269302e28019e18e930f703e902cc785552ea6b292e54/add-on-copy-relative-transform-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-relative-transform/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"jk3da_theme","schema_version":"1.0.0","name":"JK3DA Theme","version":"1.2.0","tagline":"Dark warm Blender theme with orange accent","archive_hash":"sha256:a4a6fd78e17a7f94988eeddf77b4eb134b9f9cfa091f1feb1798a3ee545ef4c9","archive_size":5512,"archive_url":"https://extensions.blender.org/download/sha256:a4a6fd78e17a7f94988eeddf77b4eb134b9f9cfa091f1feb1798a3ee545ef4c9/theme-jk3da-theme-v1.2.0.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/jk3da-theme/","maintainer":"Jonas-Kircher","license":["SPDX:GPL-3.0-or-later"]},{"id":"festivity_flow","schema_version":"1.0.0","name":"Flow","version":"1.3.2","tagline":"One-click procedural wavy bone chain animation","archive_hash":"sha256:393cf29b50cbfa7dfcce828789054525e010b1e86b81c19519205a5f53a032bb","archive_size":30629,"archive_url":"https://extensions.blender.org/download/sha256:393cf29b50cbfa7dfcce828789054525e010b1e86b81c19519205a5f53a032bb/add-on-festivity-flow-v1.3.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/festivity-flow/","maintainer":"festivity","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write preset files in the user scripts directory"},"tags":["Animation"]},{"id":"Dark_Comic_Theme","schema_version":"1.0.0","name":"Dark_Comic_Theme","version":"1.1.1","tagline":"Propaganda Poster","archive_hash":"sha256:0c152091197d76044b1495f7965e869f9aa3fe3644df364fa03cec34b661d554","archive_size":5783,"archive_url":"https://extensions.blender.org/download/sha256:0c152091197d76044b1495f7965e869f9aa3fe3644df364fa03cec34b661d554/theme-dark-comic-theme-v1.1.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-comic-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"speedzone","schema_version":"1.0.0","name":"SPEEDZONE","version":"1.2.0","tagline":"Create or Rescale Paths for Realistic Car Speeds","archive_hash":"sha256:4bb9950452578c1e7e33f7bb77bd534fd2f0c9fdabba7e0459429abd2ff471e0","archive_size":4092,"archive_url":"https://extensions.blender.org/download/sha256:4bb9950452578c1e7e33f7bb77bd534fd2f0c9fdabba7e0459429abd2ff471e0/add-on-speedzone-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/speedzone/","maintainer":"KGD","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load path data"},"tags":["Animation"]},{"id":"K3D_UV_Islands_Keeper","schema_version":"1.0.0","name":"K3D UV Islands Keeper","version":"1.1.2","tagline":"Multi-slot memory for UV island selections and transformations","archive_hash":"sha256:ff57d0839efc1c77fc4f2a7645ec37ffdcfb3a44ad0a2806200058506b8b421a","archive_size":3922,"archive_url":"https://extensions.blender.org/download/sha256:ff57d0839efc1c77fc4f2a7645ec37ffdcfb3a44ad0a2806200058506b8b421a/add-on-k3d-uv-islands-keeper-v1.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/k3d-uv-islands-keeper/","maintainer":"Manuel-SEILHES","license":["SPDX:GPL-3.0-or-later"]},{"id":"batchforge_batch_export","schema_version":"1.0.0","name":"BatchForge: Batch Export Tool","version":"2.8.0","tagline":"Batch export with origin control & multi-format support","archive_hash":"sha256:aeb59665434ea614b906fd2a2d950a8f6b0c5e42e99ca373c00aba01d1eedff8","archive_size":9967,"archive_url":"https://extensions.blender.org/download/sha256:aeb59665434ea614b906fd2a2d950a8f6b0c5e42e99ca373c00aba01d1eedff8/add-on-batchforge-batch-export-v2.8.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batchforge-batch-export/","maintainer":"mabaci","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Addon saves and loads files from disk"},"tags":["Import-Export"]},{"id":"deus_ex_md","schema_version":"1.0.0","name":"Deus Ex MD Theme","version":"1.0.0","tagline":"Inspired by Deus Ex HR/MD","archive_hash":"sha256:91d3fc0d5cd78cf2c3830e89789ce9b3d5a4793e1bbbca18e463b0f4635dfee5","archive_size":6032,"archive_url":"https://extensions.blender.org/download/sha256:91d3fc0d5cd78cf2c3830e89789ce9b3d5a4793e1bbbca18e463b0f4635dfee5/theme-deus-ex-md-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/deus-ex-md/","maintainer":"Andrei-Khrutskii","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"a3da_parser","schema_version":"1.0.0","name":"A3DA Parser","version":"1.0.21","tagline":"Import & export Project Diva A3DA animation files","archive_hash":"sha256:12b64807b1b2e96cc43d163e85f564d5cb20e811dc6ef72be6816b52f069de5c","archive_size":167740,"archive_url":"https://extensions.blender.org/download/sha256:12b64807b1b2e96cc43d163e85f564d5cb20e811dc6ef72be6816b52f069de5c/add-on-a3da-parser-v1.0.21.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/a3da-parser/","maintainer":"Hans_Xwh","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export Project Diva A3DA animation files"},"tags":["Import-Export"]},{"id":"sprite_sheet_generator","schema_version":"1.0.0","name":"Sprite Sheet Generator","version":"2.2.3","tagline":"Generate sprite sheets from animations with armature rotation","archive_hash":"sha256:21398e86234dc9672dca0d00881bd9d57a1a0f17d7d8444159e764d653c87474","archive_size":10668,"archive_url":"https://extensions.blender.org/download/sha256:21398e86234dc9672dca0d00881bd9d57a1a0f17d7d8444159e764d653c87474/add-on-sprite-sheet-generator-v2.2.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sprite-sheet-generator/","maintainer":"mabaci","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Addon saves and loads files from disk"},"tags":["Render","Pipeline","Game Engine"]},{"id":"attribute_baker","schema_version":"1.0.0","name":"Attribute Baker","version":"1.0.2","tagline":"Bake Geometry Nodes attributes to image textures via UV map","archive_hash":"sha256:6fa6d62b875b0270543d73992759dece3db2f156bc7b44b6ba4494154e71068d","archive_size":6945,"archive_url":"https://extensions.blender.org/download/sha256:6fa6d62b875b0270543d73992759dece3db2f156bc7b44b6ba4494154e71068d/add-on-attribute-baker-v1.0.2.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/attribute-baker/","maintainer":"ibotpl","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Saves baked images to the chosen output folder on disk"},"tags":["Render","UV","Geometry Nodes"]},{"id":"keychain_builder","schema_version":"1.0.0","name":"Keychain Builder","version":"1.1.3","tagline":"Generate 3D-printable keychains from text in one click","archive_hash":"sha256:52b1b204d589eef3de37b3cac7cfe1ace0c695d490cc14a37bf484b8f0041e38","archive_size":8317,"archive_url":"https://extensions.blender.org/download/sha256:52b1b204d589eef3de37b3cac7cfe1ace0c695d490cc14a37bf484b8f0041e38/add-on-keychain-builder-v1.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keychain-builder/","maintainer":"Sergey-Kabanov","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"batch_asset_placer","schema_version":"1.0.0","name":"Batch Asset Placer","version":"1.0.1","tagline":"Adds selected assets from Asset Browser to 3D cursor","archive_hash":"sha256:9954ef60d304dd0d8f2a66ac1bf4ddb1a3ab56b7fe68b5c86c969df9cbba2126","archive_size":5307,"archive_url":"https://extensions.blender.org/download/sha256:9954ef60d304dd0d8f2a66ac1bf4ddb1a3ab56b7fe68b5c86c969df9cbba2126/add-on-batch-asset-placer-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/batch-asset-placer/","maintainer":"Andrey-Pestryakov","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"SimplyLoopy","schema_version":"1.0.0","name":"Simply Loopy","version":"1.2.0-G","tagline":"Simplify a mesh through edge loop collapse","archive_hash":"sha256:1f1e2ebf0343483d112f67612e98e69203ed23aaba1fe2a94ab81ef6b629180d","archive_size":16610,"archive_url":"https://extensions.blender.org/download/sha256:1f1e2ebf0343483d112f67612e98e69203ed23aaba1fe2a94ab81ef6b629180d/add-on-simplyloopy-v1.2.0-G.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/simplyloopy/","maintainer":"Memm","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"import_e57","schema_version":"1.0.0","name":"E57 Point Cloud Importer","version":"1.0.1","tagline":"Import E57 point clouds natively","archive_hash":"sha256:dc45109fde3911c1331aabd40a6a62e5e05bf323ac6c223e1c741afa707d9bb5","archive_size":1147241,"archive_url":"https://extensions.blender.org/download/sha256:dc45109fde3911c1331aabd40a6a62e5e05bf323ac6c223e1c741afa707d9bb5/add-on-import-e57-v1.0.1-windows-x64.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/import-e57/","maintainer":"Quentin-Misslin","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"]},{"id":"Theme_Tamer","schema_version":"1.0.0","name":"Theme Tamer","version":"3.3.4","tagline":"Search, auto-group and batch-edit theme properties","archive_hash":"sha256:939353904b1d05b836b6b3c97017f1affc6506024e061a885d9ee287417a9a11","archive_size":24424,"archive_url":"https://extensions.blender.org/download/sha256:939353904b1d05b836b6b3c97017f1affc6506024e061a885d9ee287417a9a11/add-on-theme-tamer-v3.3.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/theme-tamer/","maintainer":"3DDinosaur","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"copy_to_autograph","schema_version":"1.0.0","name":"Copy to Autograph","version":"0.1.0","tagline":"Copy selected objects to clipboard in Autograph format (JSON)","archive_hash":"sha256:f897b6193f5cce483f7a68dee13c1e8beaf7b33dd895f5fe5215df6228c2d05e","archive_size":5444,"archive_url":"https://extensions.blender.org/download/sha256:f897b6193f5cce483f7a68dee13c1e8beaf7b33dd895f5fe5215df6228c2d05e/add-on-copy-to-autograph-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/copy-to-autograph/","maintainer":"SergeyMetelskiy","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"Copying JSON formated data to clipboard"},"tags":["Import-Export"]},{"id":"Vikings_Midnight_Round_Theme","schema_version":"1.0.0","name":"Viking's Midnight Round","version":"1.1.0","tagline":"Original theme by Liam , ported by me","archive_hash":"sha256:49e1cb379125e47de200a96475f72734de11ba6bd034d3b4732a546b0349b38b","archive_size":5586,"archive_url":"https://extensions.blender.org/download/sha256:49e1cb379125e47de200a96475f72734de11ba6bd034d3b4732a546b0349b38b/theme-vikings-midnight-round-theme-v1.1.0.zip","type":"theme","blender_version_min":"5.1.1","website":"https://extensions.blender.org/themes/vikings-midnight-round-theme/","maintainer":"IyeViking","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"themeable_local_view","schema_version":"1.0.0","name":"Themeable Modes and Views","version":"0.2.0","tagline":"Themeable visual clues for modes, Local View and more","archive_hash":"sha256:dbdf37ca8cc3d3c4623fa2ee0d42b6fa566fb436895a8fcdb3f9dd6de6fc49c6","archive_size":6894,"archive_url":"https://extensions.blender.org/download/sha256:dbdf37ca8cc3d3c4623fa2ee0d42b6fa566fb436895a8fcdb3f9dd6de6fc49c6/add-on-themeable-local-view-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/themeable-local-view/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"y2k_futurism_theme","schema_version":"1.0.0","name":"Y2K Futurism Theme","version":"1.0.0","tagline":"A futuristic early-2000s inspired Blender UI theme","archive_hash":"sha256:99ab2d20ee9a5dc52bb6e80c9546b03f9fb3bc9cb286e6e51f04bd8da21fb6cb","archive_size":6450,"archive_url":"https://extensions.blender.org/download/sha256:99ab2d20ee9a5dc52bb6e80c9546b03f9fb3bc9cb286e6e51f04bd8da21fb6cb/theme-y2k-futurism-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/y2k-futurism-theme/","maintainer":"Igor-S-G-Barros","license":["SPDX:GPL-3.0-or-later"],"tags":["Colorful","Inspired By"]},{"id":"Paperzhu_animehelper_extension","schema_version":"1.0.0","name":"Paper Anime Render Helper","version":"2.2.5","tagline":"Create anime-style outlines, color, highlights, and glow","archive_hash":"sha256:1cf6ad06fbd6c911a718a891ecfefd4c27c2582e30f7d24dee0c01e35f8fe6cf","archive_size":30924,"archive_url":"https://extensions.blender.org/download/sha256:1cf6ad06fbd6c911a718a891ecfefd4c27c2582e30f7d24dee0c01e35f8fe6cf/add-on-paperzhu-animehelper-extension-v2.2.5.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/paperzhu-animehelper-extension/","maintainer":"paperzhu","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Render","Compositing"]},{"id":"pixelsync_porter","schema_version":"1.0.0","name":"PixelSync Porter","version":"2.4.0","tagline":"Professional synchronization bridge for Blender settings","archive_hash":"sha256:0f54de5bfc110d08ca65297909936029ff09419d6f4eee5467803136a24193b9","archive_size":18724,"archive_url":"https://extensions.blender.org/download/sha256:0f54de5bfc110d08ca65297909936029ff09419d6f4eee5467803136a24193b9/add-on-pixelsync-porter-v2.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pixelsync-porter/","maintainer":"CYBER-KING","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write config files for exporting and importing settings"}},{"id":"unity_rig","schema_version":"1.0.0","name":"Unity Rig","version":"1.0.2","tagline":"Create Unity Humanoid-compatible rigs and convert Rigify rigs","archive_hash":"sha256:2c590237c1a824d5f8dafacf294fbb3bff8bea19ed2af3f32c39aee3233ea64f","archive_size":28072,"archive_url":"https://extensions.blender.org/download/sha256:2c590237c1a824d5f8dafacf294fbb3bff8bea19ed2af3f32c39aee3233ea64f/add-on-unity-rig-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unity-rig/","maintainer":"nixkuroi","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Import-Export"]},{"id":"import_gdsii","schema_version":"1.0.0","name":"GDSII Importer","version":"1.0.3","tagline":"GDSII importer with PDK layer stack support","archive_hash":"sha256:c9252550b3ba7b0b8b3098d58976942ff01e354371d047f9cfc2d10e35edafc1","archive_size":28877884,"archive_url":"https://extensions.blender.org/download/sha256:c9252550b3ba7b0b8b3098d58976942ff01e354371d047f9cfc2d10e35edafc1/add-on-import-gdsii-v1.0.3-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-gdsii/","maintainer":"dnltz","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"unit_to_pixel_converter","schema_version":"1.0.0","name":"Unit to pixel converter","version":"1.3.2","tagline":"Calculates render resolution from different measurement units","archive_hash":"sha256:6a7b6766d96781a1f04cef893f363b3123ced4da2c76a929280720ecb499b77b","archive_size":16645,"archive_url":"https://extensions.blender.org/download/sha256:6a7b6766d96781a1f04cef893f363b3123ced4da2c76a929280720ecb499b77b/add-on-unit-to-pixel-converter-v1.3.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/unit-to-pixel-converter/","maintainer":"Viktor-Kamp","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"backdrop","schema_version":"1.0.0","name":"Backdrop","version":"3.6.0","tagline":"One click cyclorama","archive_hash":"sha256:a16c8f8e767bd5e2d434de35e8435e1e21f7e071ac37f1923a8e80bca6f2b986","archive_size":3014,"archive_url":"https://extensions.blender.org/download/sha256:a16c8f8e767bd5e2d434de35e8435e1e21f7e071ac37f1923a8e80bca6f2b986/add-on-backdrop-v3.6.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/backdrop/","maintainer":"Muzammil-Halimov","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"edgeflowdraw_extension","schema_version":"1.0.0","name":"EdgeFlowDraw","version":"2.1.2","tagline":"Draw path of quads; begin with edgeflow instead of block/point","archive_hash":"sha256:f0fda6af2998220922c02d6258c1c3ae4d792910ecd204c937cdc58925fd2223","archive_size":23442,"archive_url":"https://extensions.blender.org/download/sha256:f0fda6af2998220922c02d6258c1c3ae4d792910ecd204c937cdc58925fd2223/add-on-edgeflowdraw-extension-v2.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edgeflowdraw-extension/","maintainer":"David-Boudreau","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"render_commander","schema_version":"1.0.0","name":"Render Commander","version":"1.2.5","tagline":"Configure and export parallel render jobs and standalone scripts","archive_hash":"sha256:70ab38c8e95fe96933ade9f5f35d48ea45f3ad429e5100622af1a760f87aba72","archive_size":92160,"archive_url":"https://extensions.blender.org/download/sha256:70ab38c8e95fe96933ade9f5f35d48ea45f3ad429e5100622af1a760f87aba72/add-on-render-commander-v1.2.5.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/render-commander/","maintainer":"n4dirp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export script files and temp data","clipboard":"Add data paths from the clipboard"},"tags":["Render","Import-Export"]},{"id":"blink_bg","schema_version":"1.0.0","name":"Blink BG","version":"1.0.2","tagline":"Control camera BG image alpha/depth","archive_hash":"sha256:38fa18cb0ce4d891f3d270ed85e2c5fd029509d490102ddd05d0b1e7f689d2c3","archive_size":4327,"archive_url":"https://extensions.blender.org/download/sha256:38fa18cb0ce4d891f3d270ed85e2c5fd029509d490102ddd05d0b1e7f689d2c3/add-on-blink-bg-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blink-bg/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","3D View"]},{"id":"model_decompressor","schema_version":"1.0.0","name":"Compressed GLB Importer","version":"0.0.5","tagline":"Import Meshopt and quantized GLB models with standalone Python","archive_hash":"sha256:63497f21250f22fc7068f9787699551daa9683ded267b0e687be423e4c198cac","archive_size":41838,"archive_url":"https://extensions.blender.org/download/sha256:63497f21250f22fc7068f9787699551daa9683ded267b0e687be423e4c198cac/add-on-model-decompressor-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/model-decompressor/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"uvcp_addon","schema_version":"1.0.0","name":"UV Coordinate Palette","version":"1.0.0","tagline":"UV tool for storing coordinates of the 2D Cursor in a palette","archive_hash":"sha256:f4a3e5c38063a1a788323eedb14f49536bd9887b55839bc193ec6d48890d3150","archive_size":4498,"archive_url":"https://extensions.blender.org/download/sha256:f4a3e5c38063a1a788323eedb14f49536bd9887b55839bc193ec6d48890d3150/add-on-uvcp-addon-v1.0.0.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/uvcp-addon/","maintainer":"Oleksandr-Gubanov","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"dynamic_color_palette","schema_version":"1.0.0","name":"Dynamic Color Palette","version":"2.1.1","tagline":"Generate palette textures and assign colors via UV lookup","archive_hash":"sha256:7ae98a692d022f747a9aaa5e1ebcbbcc1e7d33d9d7ce68467793f2ca20179472","archive_size":65751,"archive_url":"https://extensions.blender.org/download/sha256:7ae98a692d022f747a9aaa5e1ebcbbcc1e7d33d9d7ce68467793f2ca20179472/add-on-dynamic-color-palette-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-color-palette/","maintainer":"fwdotcom","license":["SPDX:GPL-3.0-or-later"]},{"id":"blender2ue_rig_exporter","schema_version":"1.0.0","name":"Rig UE5 Exporter","version":"0.0.4","tagline":"Export rig to UE5","archive_hash":"sha256:8f9e355559d0ea035e097de7a34d12f416cd953a6063cc03ba8b855722a3c3e1","archive_size":17915,"archive_url":"https://extensions.blender.org/download/sha256:8f9e355559d0ea035e097de7a34d12f416cd953a6063cc03ba8b855722a3c3e1/add-on-blender2ue-rig-exporter-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender2ue-rig-exporter/","maintainer":"Wiffzackius","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export STL, PLY, OBJ files"},"tags":["Import-Export"]},{"id":"uv_layers_tools_ult","schema_version":"1.0.0","name":"UV Layers Tools (ULT)","version":"1.2.0","tagline":"Batch UV layer management for Blender","archive_hash":"sha256:b906d776f4305664fa7a6a9a6dd3d19e20e392ee015a0c464fc6465edc67b2e0","archive_size":9977,"archive_url":"https://extensions.blender.org/download/sha256:b906d776f4305664fa7a6a9a6dd3d19e20e392ee015a0c464fc6465edc67b2e0/add-on-uv-layers-tools-ult-v1.2.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/uv-layers-tools-ult/","maintainer":"AbstracteurDeQuinteEssence","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","Mesh"]},{"id":"blendixserial","schema_version":"1.0.0","name":"blendixserial","version":"2.2.1","tagline":"Connect Blender to External Devices via Simple UART","archive_hash":"sha256:2fc077994af32dc2283b36b31d5b68aa022a27e92fabc013d414bfc4c06f5efc","archive_size":132688,"archive_url":"https://extensions.blender.org/download/sha256:2fc077994af32dc2283b36b31d5b68aa022a27e92fabc013d414bfc4c06f5efc/add-on-blendixserial-v2.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blendixserial/","maintainer":"Rurouni-Usman","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"nuke_camera_exporter","schema_version":"1.0.0","name":"Export to Nuke Script","version":"1.0.0","tagline":"Export cameras and empties to Nuke with exact matrix data","archive_hash":"sha256:aff488b5d0e3af9424f25247e187a46095f282a1b81004209d2c1c06a1c1754e","archive_size":2631,"archive_url":"https://extensions.blender.org/download/sha256:aff488b5d0e3af9424f25247e187a46095f282a1b81004209d2c1c06a1c1754e/add-on-nuke-camera-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nuke-camera-exporter/","maintainer":"Vicky_at_24fps","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"clamp_psx_dark","schema_version":"1.0.0","name":"Clamp PSX Dark","version":"1.0.0","tagline":"Retro PlayStation inspired dark theme for Blender 4.5","archive_hash":"sha256:49284abe0ed2ccfdfb9309386b7cfc2e33f644ca01b28939ccdf578b0be09fd3","archive_size":5757,"archive_url":"https://extensions.blender.org/download/sha256:49284abe0ed2ccfdfb9309386b7cfc2e33f644ca01b28939ccdf578b0be09fd3/theme-clamp-psx-dark-v1.0.0.zip","type":"theme","blender_version_min":"4.5.0","website":"https://extensions.blender.org/themes/clamp-psx-dark/","maintainer":"Gadzhimuslimov-Kamil-R","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"dynamic_rig_render_controls","schema_version":"1.0.0","name":"Dynamic List Manager","version":"1.2.0","tagline":"manages the visibility of mesh objects into Groups","archive_hash":"sha256:338f2d5cc283f940ed5feee9ba342aa0266a20c26a4640c43da239bf1f5fb1cc","archive_size":11081,"archive_url":"https://extensions.blender.org/download/sha256:338f2d5cc283f940ed5feee9ba342aa0266a20c26a4640c43da239bf1f5fb1cc/add-on-dynamic-rig-render-controls-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-rig-render-controls/","maintainer":"Eduardito_3D","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"psx_theme","schema_version":"1.0.0","name":"PS1 Classic","version":"2.0.2","tagline":"Retro PlayStation 1 inspired Blender theme","archive_hash":"sha256:7fa72c88d46ca2e952e8bd6aade1ed34e91b4d163ede5e6132337759ff716496","archive_size":5909,"archive_url":"https://extensions.blender.org/download/sha256:7fa72c88d46ca2e952e8bd6aade1ed34e91b4d163ede5e6132337759ff716496/theme-psx-theme-v2.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/psx-theme/","maintainer":"Fawkek","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By","Colorful"]},{"id":"depotkit","schema_version":"1.0.0","name":"DepotKit","version":"2.0.1","tagline":"Collect & organise all external assets in your .blend file","archive_hash":"sha256:0b7866ffd5f179a2d5f224093dec8580e54b8063e034240f7d0052aee130b199","archive_size":8376,"archive_url":"https://extensions.blender.org/download/sha256:0b7866ffd5f179a2d5f224093dec8580e54b8063e034240f7d0052aee130b199/add-on-depotkit-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/depotkit/","maintainer":"BHiMAX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reads and writes texture files from disk"}},{"id":"io_mesh_threejs_objectloader","schema_version":"1.0.0","name":"three.js ObjectLoader","version":"1.0.1","tagline":"Import/Export three.js ObjectLoader JSON format 4+","archive_hash":"sha256:e0be2eff5d961f6095c52a3cabcde4b9f2bce0185c0126055e858310b89fd909","archive_size":12558,"archive_url":"https://extensions.blender.org/download/sha256:e0be2eff5d961f6095c52a3cabcde4b9f2bce0185c0126055e858310b89fd909/add-on-io-mesh-threejs-objectloader-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-mesh-threejs-objectloader/","maintainer":"crwde","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export JSON files to disk"},"tags":["Import-Export"]},{"id":"Studio_Mid","schema_version":"1.0.0","name":"Studio Mid","version":"2.3.5","tagline":"Consistent UI, sharp colors, comfortable contrast, 3 birght lvls","archive_hash":"sha256:aa6d95262ae48c8dc60d17cd7570061fd7da8b2ceb5118e9159f6a726ea71338","archive_size":5475,"archive_url":"https://extensions.blender.org/download/sha256:aa6d95262ae48c8dc60d17cd7570061fd7da8b2ceb5118e9159f6a726ea71338/theme-studio-mid-v2.3.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/studio-mid/","maintainer":"3DDinosaur","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"Studio_Light","schema_version":"1.0.0","name":"Studio Light","version":"2.3.6","tagline":"Consistent UI, sharp colors, comfortable contrast, 3 birght lvls","archive_hash":"sha256:b3c48be16ff02d36e8b1f73711fec9a5ba2b5b1a24f195b8278a90b00885042a","archive_size":5469,"archive_url":"https://extensions.blender.org/download/sha256:b3c48be16ff02d36e8b1f73711fec9a5ba2b5b1a24f195b8278a90b00885042a/theme-studio-light-v2.3.6.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/studio-light/","maintainer":"3DDinosaur","license":["SPDX:GPL-2.0-or-later"],"tags":["Light"]},{"id":"separate_by_collision","schema_version":"1.0.0","name":"Separate by Collision","version":"2.0.1","tagline":"Separate by loose parts, but parts are joined if they collide","archive_hash":"sha256:a484a8c03a93a95144070ce76736c106646c6b489f6e1e62eb30290e5df690c1","archive_size":745239,"archive_url":"https://extensions.blender.org/download/sha256:a484a8c03a93a95144070ce76736c106646c6b489f6e1e62eb30290e5df690c1/add-on-separate-by-collision-v2.0.1-linux-x64-windows-x64-macos-arm64-macos-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/separate-by-collision/","maintainer":"Hattiffnat","license":["SPDX:GPL-3.0-or-later"],"platforms":["linux-x64","windows-x64","macos-arm64","macos-x64"],"tags":["Mesh","Object"]},{"id":"pbr_lookdev","schema_version":"1.0.0","name":"PBR Lookdev","version":"4.2.1","tagline":"Layered PBR materials with masks, overlays and UDIM","archive_hash":"sha256:5d99211dcf113121d59c72ace5b8202c449c48ec45c8789e5e29db75e4685d09","archive_size":37047,"archive_url":"https://extensions.blender.org/download/sha256:5d99211dcf113121d59c72ace5b8202c449c48ec45c8789e5e29db75e4685d09/add-on-pbr-lookdev-v4.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pbr-lookdev/","maintainer":"BHiMAX","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Texture path scanning and image loading"},"tags":["Material","Node","Render"]},{"id":"smart_mesh_cleaner_pro","schema_version":"1.0.0","name":"Smart Mesh Cleaner Pro","version":"3.5.1","tagline":"Professional cleanup tool with Smart Trash Bin & Restore","archive_hash":"sha256:394046bce0e5bd2704912578dafd9aa6f988c7a752908f6b6e0e56706f870567","archive_size":7537,"archive_url":"https://extensions.blender.org/download/sha256:394046bce0e5bd2704912578dafd9aa6f988c7a752908f6b6e0e56706f870567/add-on-smart-mesh-cleaner-pro-v3.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-mesh-cleaner-pro/","maintainer":"Igor-Garcia","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Scene"]},{"id":"Zbrush","schema_version":"1.0.0","name":"Zbrush","version":"1.0.0","tagline":"A Zbrush theme for Blender","archive_hash":"sha256:0c37a691759dbe938203acf0f09d372225b4daf7dac25389fbae27d0ba240fbb","archive_size":5659,"archive_url":"https://extensions.blender.org/download/sha256:0c37a691759dbe938203acf0f09d372225b4daf7dac25389fbae27d0ba240fbb/theme-zbrush-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/zbrush/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"nodot_names","schema_version":"1.0.0","name":"NoDot Names","version":"2.0.2","tagline":"Naming conventions, presets, validation","archive_hash":"sha256:2662bb0f9bd2380590683fae7db38935fc601c4c1beb0e543d1fd04ea154a192","archive_size":27903,"archive_url":"https://extensions.blender.org/download/sha256:2662bb0f9bd2380590683fae7db38935fc601c4c1beb0e543d1fd04ea154a192/add-on-nodot-names-v2.0.2.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/nodot-names/","maintainer":"Jordan-Moss","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline","Scene","Object"]},{"id":"gray_core_master_Wana","schema_version":"1.0.0","name":"灰核主控 (Gray Core Master)","version":"1.0.0","tagline":"gray dark theme for Blender","archive_hash":"sha256:98c1732221b159820e50556a191b5fae7dae004c3b4108aa24f501a68c7d2f1f","archive_size":6960,"archive_url":"https://extensions.blender.org/download/sha256:98c1732221b159820e50556a191b5fae7dae004c3b4108aa24f501a68c7d2f1f/theme-gray-core-master-wana-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gray-core-master-wana/","maintainer":"WA-w","license":["SPDX:GPL-3.0-or-later"]},{"id":"uvo_overlays","schema_version":"1.0.0","name":"UVO","version":"1.2.4","tagline":"Dynamic overlays for the UV Editor","archive_hash":"sha256:cc61784494cc166bd3a3783da290d0428ee61ccaa878ddd8d1ec64d1209e1e0f","archive_size":63718,"archive_url":"https://extensions.blender.org/download/sha256:cc61784494cc166bd3a3783da290d0428ee61ccaa878ddd8d1ec64d1209e1e0f/add-on-uvo-overlays-v1.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/uvo-overlays/","maintainer":"Dmytro-Zuievskyi","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","Modeling"]},{"id":"batch_exporter","schema_version":"1.0.0","name":"Monty Batch Exporter","version":"1.0.0","tagline":"Batch-export objects, collections, or scenes as individual files","archive_hash":"sha256:5260d4eb47b59d16ce96e69865e79c701a64226fff8b27d699876a2083a47823","archive_size":20852,"archive_url":"https://extensions.blender.org/download/sha256:5260d4eb47b59d16ce96e69865e79c701a64226fff8b27d699876a2083a47823/add-on-batch-exporter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-exporter/","maintainer":"Diego-Montufar-Perez","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export files to disk"},"tags":["Import-Export","Pipeline"]},{"id":"AE_Flow_Dark","schema_version":"1.0.0","name":"AE_Flow_Dark","version":"1.0.0","tagline":"Dark Mood, 4thegoat","archive_hash":"sha256:d1c93ecd7eca84ba9cf379de2ffc7505e79d94f2f2018c7da7e128a4a6e5c6b1","archive_size":5775,"archive_url":"https://extensions.blender.org/download/sha256:d1c93ecd7eca84ba9cf379de2ffc7505e79d94f2f2018c7da7e128a4a6e5c6b1/theme-ae-flow-dark-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/ae-flow-dark/","maintainer":"Nois3G4te","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"propgon_uv_trim","schema_version":"1.0.0","name":"PropGon UV Trim","version":"2.1.3","tagline":"UV Trimsheet tools for layout, fitting and texel density","archive_hash":"sha256:3b413ab655498a4615f2dc8c9651f2514d67bbe072f7d4c8ae24f32bdc7ec3f1","archive_size":43502,"archive_url":"https://extensions.blender.org/download/sha256:3b413ab655498a4615f2dc8c9651f2514d67bbe072f7d4c8ae24f32bdc7ec3f1/add-on-propgon-uv-trim-v2.1.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/propgon-uv-trim/","maintainer":"PropGon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load TrimSheet presets and ID maps to disk"},"tags":["UV","Mesh"]},{"id":"goblend","schema_version":"1.0.0","name":"Goblend: Export to Godot","version":"2.1.0","tagline":"Highly customizable export of complex scenes to Godot","archive_hash":"sha256:0c0fffa33418f83bf5db8955da88c6a0b593c248056df1b74e2f81545b791d2a","archive_size":102398,"archive_url":"https://extensions.blender.org/download/sha256:0c0fffa33418f83bf5db8955da88c6a0b593c248056df1b74e2f81545b791d2a/add-on-goblend-v2.1.0.zip","type":"add-on","blender_version_min":"4.5.7","website":"https://extensions.blender.org/add-ons/goblend/","maintainer":"Togira","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export gltf, read Godot scene files, create textures"},"tags":["Game Engine","Import-Export"]},{"id":"image_dimensions_viewer","schema_version":"1.0.0","name":"Image Dimensions Viewer","version":"1.0.0","tagline":"Displays image dimensions in Node and Image Editors","archive_hash":"sha256:73f178f668da9da03c70738cdf09c249114e06f33c37bba37bfe8395130f15db","archive_size":4894,"archive_url":"https://extensions.blender.org/download/sha256:73f178f668da9da03c70738cdf09c249114e06f33c37bba37bfe8395130f15db/add-on-image-dimensions-viewer-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/image-dimensions-viewer/","maintainer":"Pazelock","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"Blender_Darker","schema_version":"1.0.0","name":"Darker","version":"1.0.1","tagline":"Blender Dark but well... darker","archive_hash":"sha256:5e356f36b12f0398c67cb3afc93a86d616e23d28f8c703f43e876f6f33c29107","archive_size":5572,"archive_url":"https://extensions.blender.org/download/sha256:5e356f36b12f0398c67cb3afc93a86d616e23d28f8c703f43e876f6f33c29107/theme-blender-darker-v1.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blender-darker/","maintainer":"FlorianW","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","High Contrast"]},{"id":"auto_paint_boundaries","schema_version":"1.0.0","name":"Auto Paint Boundaries","version":"1.1.1","tagline":"Paint cleanly inside smart, selection-limited regions","archive_hash":"sha256:5db1c2668d80db2e149ac3dd75fc2d15b7a6603e2da184468bd3588f29edb496","archive_size":14645,"archive_url":"https://extensions.blender.org/download/sha256:5db1c2668d80db2e149ac3dd75fc2d15b7a6603e2da184468bd3588f29edb496/add-on-auto-paint-boundaries-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-paint-boundaries/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"BRVLayers","schema_version":"1.0.0","name":"Batch Render View Layers","version":"1.2.3","tagline":"Batch Render View Layers","archive_hash":"sha256:63187cc826a44655a1f20a4647aacf7c6967bf7007b91ceeb7291725dff35f17","archive_size":4335,"archive_url":"https://extensions.blender.org/download/sha256:63187cc826a44655a1f20a4647aacf7c6967bf7007b91ceeb7291725dff35f17/add-on-brvlayers-v1.2.3.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/brvlayers/","maintainer":"chenkin123","license":["SPDX:GPL-3.0-or-later"],"tags":["Render"]},{"id":"sprocket_tools","schema_version":"1.0.0","name":"Sprocket Tools","version":"1.0.2","tagline":"Import and export Sprocket tank blueprints","archive_hash":"sha256:ede8a6a611179c585c1ad09cf5240fb1ea1cda37ecc994ce2c9817ef73f2758b","archive_size":392332,"archive_url":"https://extensions.blender.org/download/sha256:ede8a6a611179c585c1ad09cf5240fb1ea1cda37ecc994ce2c9817ef73f2758b/add-on-sprocket-tools-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sprocket-tools/","maintainer":"Brian-Marshall","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to import/export Sprocket blueprint data"},"tags":["Game Engine","Import-Export"]},{"id":"isometric_scene_setup","schema_version":"1.0.0","name":"Isometric Scene Setup","version":"1.0.1","tagline":"Isometric scene setup and 2D normal map rendering","archive_hash":"sha256:1e9dea02be61e0e956e7686afab62bd16494e620ace389f495cb7de2934bdda4","archive_size":5255,"archive_url":"https://extensions.blender.org/download/sha256:1e9dea02be61e0e956e7686afab62bd16494e620ace389f495cb7de2934bdda4/add-on-isometric-scene-setup-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/isometric-scene-setup/","maintainer":"RafaelPasquay","license":["SPDX:GPL-3.0-or-later","SPDX:MIT"],"tags":["Camera","Render","Scene"]},{"id":"stmap_exporter","schema_version":"1.0.0","name":"STMap Exporter","version":"1.1.0","tagline":"STMap Exporter for All Distortion Models","archive_hash":"sha256:19b8aaa06074c695d069c27288c0703b4f8d6be6046d4a4e663bcb18d94c4a61","archive_size":8942,"archive_url":"https://extensions.blender.org/download/sha256:19b8aaa06074c695d069c27288c0703b4f8d6be6046d4a4e663bcb18d94c4a61/add-on-stmap-exporter-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stmap-exporter/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Import-Export"]},{"id":"momentum","schema_version":"1.0.0","name":"Momentum","version":"1.0.1","tagline":"quickly add configurable follow-through to animations","archive_hash":"sha256:1d8f3e962baabeb2f028ae92952bc9f3fbffc0c390c2889859534dab616f7383","archive_size":16133,"archive_url":"https://extensions.blender.org/download/sha256:1d8f3e962baabeb2f028ae92952bc9f3fbffc0c390c2889859534dab616f7383/add-on-momentum-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/momentum/","maintainer":"Isaac-Burke","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"lily_lime_theme","schema_version":"1.0.0","name":"LiLy Lime","version":"1.0.0","tagline":"A fresh LiLy Lime-inspired light theme for Blender","archive_hash":"sha256:64af2baa0f398da24c045d1e33265dfcc174fc2e2df0c23dbbdfb10e331829bb","archive_size":9509,"archive_url":"https://extensions.blender.org/download/sha256:64af2baa0f398da24c045d1e33265dfcc174fc2e2df0c23dbbdfb10e331829bb/theme-lily-lime-theme-v1.0.0.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/lily-lime-theme/","maintainer":"Eridanus-Epsilon","license":["SPDX:MIT"],"tags":["Light","Colorful","Inspired By"]},{"id":"Solemn_Theme","schema_version":"1.0.0","name":"Solemn","version":"1.0.2","tagline":"A clean and dark theme","archive_hash":"sha256:0f7caef8efb90ffae3d103e127069a34b9e6672847248c06aaf86114aa24578f","archive_size":6767,"archive_url":"https://extensions.blender.org/download/sha256:0f7caef8efb90ffae3d103e127069a34b9e6672847248c06aaf86114aa24578f/theme-solemn-theme-v1.0.2.zip","type":"theme","blender_version_min":"5.0.1","website":"https://extensions.blender.org/themes/solemn-theme/","maintainer":"czod","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"Dark_Max_Pro","schema_version":"1.0.0","name":"Dark Max Pro","version":"1.0.0","tagline":"Pro Dark Max","archive_hash":"sha256:fbdab60a32fc45ac3a8de80366bea7dd8fb2903d315daf9714e496f7516f3f6e","archive_size":5433,"archive_url":"https://extensions.blender.org/download/sha256:fbdab60a32fc45ac3a8de80366bea7dd8fb2903d315daf9714e496f7516f3f6e/theme-dark-max-pro-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-max-pro/","maintainer":"PedroAmorim","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"object_reporter","schema_version":"1.0.0","name":"Object Reporter","version":"2.4.5","tagline":"Report, edit, select and export objects by custom properties","archive_hash":"sha256:7691ac2222aebcc83143312b391bb43f44683972a68d6216a69b50d4eef7adfa","archive_size":71155,"archive_url":"https://extensions.blender.org/download/sha256:7691ac2222aebcc83143312b391bb43f44683972a68d6216a69b50d4eef7adfa/add-on-object-reporter-v2.4.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/object-reporter/","maintainer":"Justinas-Dudenas","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export object property reports to CSV files on disk"},"tags":["Object"]},{"id":"robotics_animation_bone_coordinate_exporter","schema_version":"1.0.0","name":"Robotics Animation Bone Coordinate Exporter","version":"1.1.0","tagline":"Export armature animation data for robotics use","archive_hash":"sha256:5f4923122596a5f4b5e504883d816a490813c643f8125f35ad67f841653a6bea","archive_size":1886,"archive_url":"https://extensions.blender.org/download/sha256:5f4923122596a5f4b5e504883d816a490813c643f8125f35ad67f841653a6bea/add-on-robotics-animation-bone-coordinate-exporter-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/robotics-animation-bone-coordinate-exporter/","maintainer":"Kiran-Kumawat","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Import-Export","Rigging"]},{"id":"frame_range_renderer","schema_version":"1.0.0","name":"Frame Range Renderer","version":"1.0.0","tagline":"Render specific frames or frame ranges from the Output panel","archive_hash":"sha256:36b5912e8efd5943a737161e6076a0fc4c5dd0aa949bb60850dd6d1e45d2da53","archive_size":8126,"archive_url":"https://extensions.blender.org/download/sha256:36b5912e8efd5943a737161e6076a0fc4c5dd0aa949bb60850dd6d1e45d2da53/add-on-frame-range-renderer-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/frame-range-renderer/","maintainer":"AndreasResch","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Writes output images to disk"}},{"id":"soleshapper","schema_version":"1.0.0","name":"SoleShapper","version":"2.0.1","tagline":"Procedural shoe sole designer with noise deformation","archive_hash":"sha256:3724521212c5bf026c78f3dccef1cee697355dceac3847de85350f9cdf8d3ae7","archive_size":23584,"archive_url":"https://extensions.blender.org/download/sha256:3724521212c5bf026c78f3dccef1cee697355dceac3847de85350f9cdf8d3ae7/add-on-soleshapper-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/soleshapper/","maintainer":"David-Orrick","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import OBJ meshes and export STL or OBJ"},"tags":["Add Mesh"]},{"id":"tu_addon_id","schema_version":"1.0.0","name":"GeneradorMapsPbr","version":"1.0.0","tagline":"Make texture metallic,specular,Roughtness,NormalMap,Height","archive_hash":"sha256:0b37d42af8905161a45836f5c1be098f1f22b9b171f46995b3c9828791ebe37b","archive_size":6065,"archive_url":"https://extensions.blender.org/download/sha256:0b37d42af8905161a45836f5c1be098f1f22b9b171f46995b3c9828791ebe37b/add-on-tu-addon-id-v1.0.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/tu-addon-id/","maintainer":"Fran-Dominguez-Leiva-2","license":["SPDX:GPL-3.0-or-later"]},{"id":"doblux_geometry_node_group_execute","schema_version":"1.0.0","name":"DOBLUX Button to execute Geometry Node Group","version":"1.1.1","tagline":"one-click execution of any open Geometry Node group","archive_hash":"sha256:2975816a00a2d28d2f8cb8f9ba6c7598208d07ce1e72e6795c847847b4495344","archive_size":2014,"archive_url":"https://extensions.blender.org/download/sha256:2975816a00a2d28d2f8cb8f9ba6c7598208d07ce1e72e6795c847847b4495344/add-on-doblux-geometry-node-group-execute-v1.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/doblux-geometry-node-group-execute/","maintainer":"Dan-Oak","license":["SPDX:GPL-3.0-or-later"],"tags":["Geometry Nodes","User Interface"]},{"id":"soundPlanes","schema_version":"1.0.0","name":"Sound Planes","version":"1.0.0","tagline":"Auto-Add Sounds To The Sequencer Using Planes","archive_hash":"sha256:3bb89caa2ad1864541e5240df8bae3646656d6507ba6fd1f230ca74dcb684e58","archive_size":13414,"archive_url":"https://extensions.blender.org/download/sha256:3bb89caa2ad1864541e5240df8bae3646656d6507ba6fd1f230ca74dcb684e58/add-on-soundplanes-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/soundplanes/","maintainer":"nifi","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer"]},{"id":"Crunchyroll_Dark","schema_version":"1.0.0","name":"Crunchyroll Dark","version":"1.0.0","tagline":"A Crunchyroll theme for Blender","archive_hash":"sha256:c8ce1657172ae7e855e8820d924070caab3bfeedb20a47fc12ec2abbbed17c55","archive_size":5471,"archive_url":"https://extensions.blender.org/download/sha256:c8ce1657172ae7e855e8820d924070caab3bfeedb20a47fc12ec2abbbed17c55/theme-crunchyroll-dark-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/crunchyroll-dark/","maintainer":"mamane-kabirou","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"Dark_Pro_Max_Theme","schema_version":"1.0.0","name":"Dark_Pro_Max_Theme","version":"1.2.8","tagline":"Dark Default Alternative","archive_hash":"sha256:7a31b13a26e03506646f10c7e9380037cbf1089e13f284e4afe88b2474023396","archive_size":5770,"archive_url":"https://extensions.blender.org/download/sha256:7a31b13a26e03506646f10c7e9380037cbf1089e13f284e4afe88b2474023396/theme-dark-pro-max-theme-v1.2.8.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/dark-pro-max-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"output_setup_helper","schema_version":"1.0.0","name":"Output Setup Helper","version":"5.0.1","tagline":"Auto setup render outputs and denoising for multi-pass renders","archive_hash":"sha256:2ae18a2f31ec11e134586c3dfae4df83732dbc5c42a39171a04ab3f6c4f2c848","archive_size":4450,"archive_url":"https://extensions.blender.org/download/sha256:2ae18a2f31ec11e134586c3dfae4df83732dbc5c42a39171a04ab3f6c4f2c848/add-on-output-setup-helper-v5.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/output-setup-helper/","maintainer":"lukas.remis","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Render","Pipeline"]},{"id":"reflex_potentials","schema_version":"1.0.0","name":"Reflex Potentials","version":"1.0.3","tagline":"Reflex Potentials","archive_hash":"sha256:f41f8e3805cf75f8cb732dc24733ab839f5b7d633d136bcc59f40635245b1890","archive_size":35482,"archive_url":"https://extensions.blender.org/download/sha256:f41f8e3805cf75f8cb732dc24733ab839f5b7d633d136bcc59f40635245b1890/add-on-reflex-potentials-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/reflex-potentials/","maintainer":"dartmeadow","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"Blueprint_Theme","schema_version":"1.0.0","name":"Blueprint_Theme","version":"1.1.1","tagline":"True Blueprint Color","archive_hash":"sha256:68dace53d5dd2863817b293c4699b80605089b529f0b8e47a8b906dfa70b3303","archive_size":5717,"archive_url":"https://extensions.blender.org/download/sha256:68dace53d5dd2863817b293c4699b80605089b529f0b8e47a8b906dfa70b3303/theme-blueprint-theme-v1.1.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blueprint-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"Nostalgia_2bit_UI","schema_version":"1.0.0","name":"Nostalgia_2bit_UI","version":"1.3.5","tagline":"Light Default Alternative","archive_hash":"sha256:cf2c1641d730debc8a62ed8922f03a5107d0d841e8da47573f074d6778c5bd95","archive_size":5675,"archive_url":"https://extensions.blender.org/download/sha256:cf2c1641d730debc8a62ed8922f03a5107d0d841e8da47573f074d6778c5bd95/theme-nostalgia-2bit-ui-v1.3.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/nostalgia-2bit-ui/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Light"]},{"id":"BLeQ_Extension","schema_version":"1.0.0","name":"BLeQ","version":"1.0.5","tagline":"Renderqueue / 3DHomePage / Hardwaremonitor / Tools","archive_hash":"sha256:286cefdc0eaeabc2e348c1e26ac7c5eaec9946603e3570aa5382a1704132c0ac","archive_size":35304,"archive_url":"https://extensions.blender.org/download/sha256:286cefdc0eaeabc2e348c1e26ac7c5eaec9946603e3570aa5382a1704132c0ac/add-on-bleq-extension-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bleq-extension/","maintainer":"Christian-Makarski","license":["SPDX:GPL-3.0-or-later"]},{"id":"driver_copy_io","schema_version":"1.0.0","name":"Driver Copy IO","version":"2.1.1","tagline":"Copy/Paste drivers via JSON using full path","archive_hash":"sha256:58a88728287093155bb2f61c7a7e526c2923c0889872d4613bf2db867dba207d","archive_size":21147,"archive_url":"https://extensions.blender.org/download/sha256:58a88728287093155bb2f61c7a7e526c2923c0889872d4613bf2db867dba207d/add-on-driver-copy-io-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/driver-copy-io/","maintainer":"a2d4f3s1","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging"]},{"id":"mockup_screenshoter","schema_version":"1.0.0","name":"Mockup Screenshoter","version":"0.9.1","tagline":"Capture your screen to make mockups in Penpot","archive_hash":"sha256:16c2d787b49297921eebec6f3bebf1727606c435f1053f6ed6eab55280bbd96e","archive_size":6437,"archive_url":"https://extensions.blender.org/download/sha256:16c2d787b49297921eebec6f3bebf1727606c435f1053f6ed6eab55280bbd96e/add-on-mockup-screenshoter-v0.9.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/mockup-screenshoter/","maintainer":"Blender","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create temporary folder for the screen captures","clipboard":"Copy Penpot-ready json into the clipboard"},"tags":["Development"]},{"id":"b3d_ui_langloop","schema_version":"1.0.0","name":"B3D UI Language Loop","version":"1.0.3","tagline":"Quickly cycle Blender interface languages with a shortcut","archive_hash":"sha256:63bf8c9073919e21a7eb49b352d02a54f71057cfe26adce7f9d2337ac9a0b866","archive_size":6240,"archive_url":"https://extensions.blender.org/download/sha256:63bf8c9073919e21a7eb49b352d02a54f71057cfe26adce7f9d2337ac9a0b866/add-on-b3d-ui-langloop-v1.0.3.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/b3d-ui-langloop/","maintainer":"楊景貴","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"tree_clipper","schema_version":"1.0.0","name":"Tree Clipper","version":"0.1.7","tagline":"Export and import Blender node trees as JSON","archive_hash":"sha256:8823fccc495530e1739705e86eff7f6015aa00d8fd36df7d044233dc897ca641","archive_size":54864,"archive_url":"https://extensions.blender.org/download/sha256:8823fccc495530e1739705e86eff7f6015aa00d8fd36df7d044233dc897ca641/add-on-tree-clipper-v0.1.7.zip","type":"add-on","blender_version_min":"5.0.0","blender_version_max":"5.3.0","website":"https://extensions.blender.org/add-ons/tree-clipper/","maintainer":"Lars-Helge-Scheel","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Node"]},{"id":"shapingrecorder","schema_version":"1.0.0","name":"Shaping Recorder","version":"0.7.5","tagline":"Record mesh shaping and viewport moves, replay interpolated","archive_hash":"sha256:a10c5e07c373447ad896741da47cc8a4fc831852c2f09261b57c120f2f8c3596","archive_size":38248,"archive_url":"https://extensions.blender.org/download/sha256:a10c5e07c373447ad896741da47cc8a4fc831852c2f09261b57c120f2f8c3596/add-on-shapingrecorder-v0.7.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shapingrecorder/","maintainer":"darkstarrd","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write image sequences"},"tags":["Modeling"]},{"id":"reforge","schema_version":"1.0.0","name":"Reforge","version":"0.5.2","tagline":"Reforge Blender scenes into Defold assets","archive_hash":"sha256:15bd625739050ad3a4b3641ebdebfac6298330c02dee5d0b1bc08eb96b47f811","archive_size":16167,"archive_url":"https://extensions.blender.org/download/sha256:15bd625739050ad3a4b3641ebdebfac6298330c02dee5d0b1bc08eb96b47f811/add-on-reforge-v0.5.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/reforge/","maintainer":"Alexander-Bulatov","license":["SPDX:GPL-3.0-or-later"]},{"id":"comparable","schema_version":"1.0.0","name":"Comparable","version":"1.0.2","tagline":"Compare two objects or collections in one click","archive_hash":"sha256:b72d64fdb22b697a07806b75fcf932348475e326fc38b27d9230ddc0aae2116d","archive_size":3981,"archive_url":"https://extensions.blender.org/download/sha256:b72d64fdb22b697a07806b75fcf932348475e326fc38b27d9230ddc0aae2116d/add-on-comparable-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/comparable/","maintainer":"ffuthoni","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"screenwriter","schema_version":"1.0.0","name":"Screenwriter","version":"1.0.0","tagline":"Screenplay formatting and syncing tools for Blender","archive_hash":"sha256:ea16e42750bde882d4e1ceed7a74d55e020bb52bed06816615f9d5e162f6c2c6","archive_size":7307,"archive_url":"https://extensions.blender.org/download/sha256:ea16e42750bde882d4e1ceed7a74d55e020bb52bed06816615f9d5e162f6c2c6/add-on-screenwriter-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/screenwriter/","maintainer":"zhengyang237","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Reading and writing .fountain files"}},{"id":"image_zoom_overlay","schema_version":"1.0.0","name":"Image Zoom Overlay","version":"1.0.0","tagline":"Display zoom level in Image Editor with quick presets","archive_hash":"sha256:96407335647d7191ba1522818bd6f5b9e15be10fd896c50a18a5330e4d09e154","archive_size":2896,"archive_url":"https://extensions.blender.org/download/sha256:96407335647d7191ba1522818bd6f5b9e15be10fd896c50a18a5330e4d09e154/add-on-image-zoom-overlay-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/image-zoom-overlay/","maintainer":"pikok85","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Access to image editor display settings"},"tags":["User Interface"]},{"id":"pataz_notes","schema_version":"1.0.0","name":"Pataz Notes","version":"5.2.2","tagline":"Anotate your blend files","archive_hash":"sha256:31cdd963b15c269ff819321251870c4ea106ee40a6ae5a681e5db3867ddb5ba9","archive_size":4889,"archive_url":"https://extensions.blender.org/download/sha256:31cdd963b15c269ff819321251870c4ea106ee40a6ae5a681e5db3867ddb5ba9/add-on-pataz-notes-v5.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pataz-notes/","maintainer":"zanqdo","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"omoospace","schema_version":"1.0.0","name":"Omoospace","version":"0.2.7","tagline":"Manage your blender projects in omoospace's way","archive_hash":"sha256:c3b8ce14f38794ad2424bc3f15b598f702f857543ab23bfcf5969da3979e0240","archive_size":1792082,"archive_url":"https://extensions.blender.org/download/sha256:c3b8ce14f38794ad2424bc3f15b598f702f857543ab23bfcf5969da3979e0240/add-on-omoospace-v0.2.7-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/omoospace/","maintainer":"icrdr","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Manage your blender files"},"platforms":["windows-x64"],"tags":["Pipeline"]},{"id":"export_curve_to_json","schema_version":"1.0.0","name":"Export Curve To Json","version":"1.0.2","tagline":"File import/export for curves with JSON","archive_hash":"sha256:3646464bdf053849db751b2222790836064e5e268c70ef559f89bacde467c115","archive_size":18907,"archive_url":"https://extensions.blender.org/download/sha256:3646464bdf053849db751b2222790836064e5e268c70ef559f89bacde467c115/add-on-export-curve-to-json-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-curve-to-json/","maintainer":"Quint-Vrolijk","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"sculpting_extra_meshes_curve","schema_version":"1.0.0","name":"Sculpting Extra Meshes + Curve","version":"1.3.0","tagline":"Add primitives, join, boolean, mirror while in Sculpt Mode","archive_hash":"sha256:5b0c372464b0ca743651f1ffa4682f0c4ce322be119d3df59e3d71854ddbf3cf","archive_size":4205,"archive_url":"https://extensions.blender.org/download/sha256:5b0c372464b0ca743651f1ffa4682f0c4ce322be119d3df59e3d71854ddbf3cf/add-on-sculpting-extra-meshes-curve-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sculpting-extra-meshes-curve/","maintainer":"pixldg","license":["SPDX:GPL-3.0-or-later"],"tags":["Sculpt"]},{"id":"global_custom_properties","schema_version":"1.0.0","name":"Global Custom Properties","version":"1.0.0","tagline":"Reusable Custom Properties on Objects and Collections","archive_hash":"sha256:9775ca35a3b7fb12a8c36dcbde85c8497a0ddd8938ec180416d9f23d9907d128","archive_size":18782,"archive_url":"https://extensions.blender.org/download/sha256:9775ca35a3b7fb12a8c36dcbde85c8497a0ddd8938ec180416d9f23d9907d128/add-on-global-custom-properties-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/global-custom-properties/","maintainer":"1hue","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"curve_fillet_tool","schema_version":"1.0.0","name":"NURBS/Poly Fillet Tool","version":"1.0.0","tagline":"Fillet and 'unfillet' for paths","archive_hash":"sha256:07d671b719e336aba5192208baf4951d2db3cf161e56350c3fb405fb3b6b1df7","archive_size":17360,"archive_url":"https://extensions.blender.org/download/sha256:07d671b719e336aba5192208baf4951d2db3cf161e56350c3fb405fb3b6b1df7/add-on-curve-fillet-tool-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.5","website":"https://extensions.blender.org/add-ons/curve-fillet-tool/","maintainer":"zaphod","license":["SPDX:GPL-3.0-or-later"]},{"id":"time_stretch_sync","schema_version":"1.0.0","name":"Time Stretch Sync","version":"1.1.0","tagline":"Sync timeline range, playline and operators with timestretching","archive_hash":"sha256:347dd396d927096a9f8c361e79214b2a612a5ca8208274a667ee207195f5df4c","archive_size":13493,"archive_url":"https://extensions.blender.org/download/sha256:347dd396d927096a9f8c361e79214b2a612a5ca8208274a667ee207195f5df4c/add-on-time-stretch-sync-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/time-stretch-sync/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"render_subcollections","schema_version":"1.0.0","name":"Render Subcollections","version":"1.0.1","tagline":"Automatically renders subcollections one by one","archive_hash":"sha256:54f2c7f20d243d96a7575d8083e92de190a0ceb9149e3757491c82cad3833066","archive_size":3353,"archive_url":"https://extensions.blender.org/download/sha256:54f2c7f20d243d96a7575d8083e92de190a0ceb9149e3757491c82cad3833066/add-on-render-subcollections-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-subcollections/","maintainer":"Nico-Peters","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","Camera"]},{"id":"Dissolve2EdgeVertices","schema_version":"1.0.0","name":"Dissolve 2-Edge Vertices","version":"1.1.0","tagline":"Dissolve vertices with two edges to clean up mesh topology","archive_hash":"sha256:6bfec11aea3f67f68c75897824e690f2110b5a0a84f57b8c9681e1b46a60241a","archive_size":1920,"archive_url":"https://extensions.blender.org/download/sha256:6bfec11aea3f67f68c75897824e690f2110b5a0a84f57b8c9681e1b46a60241a/add-on-dissolve2edgevertices-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dissolve2edgevertices/","maintainer":"Jackal","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"beyond_channel_packer","schema_version":"1.0.0","name":"Beyond Channel Packer","version":"1.0.2","tagline":"Pack image channels (RGBA) in the Image Editor","archive_hash":"sha256:713e336af49bf826e91aead72025eadd114580927d24e33e0493583e187b7e77","archive_size":22143,"archive_url":"https://extensions.blender.org/download/sha256:713e336af49bf826e91aead72025eadd114580927d24e33e0493583e187b7e77/add-on-beyond-channel-packer-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"5.9.999","website":"https://extensions.blender.org/add-ons/beyond-channel-packer/","maintainer":"tyler.tofu","license":["SPDX:GPL-3.0-or-later"],"tags":["UV","Paint"]},{"id":"keyboard_layout_emulation","schema_version":"1.0.0","name":"Keyboard Layout Emulation","version":"1.0.4","tagline":"Emulate QWERTY keyboard shortcuts on non-QWERTY keyboard layouts","archive_hash":"sha256:6a476fcb992f89ceb556fbade7f4b1a8d6a7ed3b1f2556f0452613a66a8a556c","archive_size":32244,"archive_url":"https://extensions.blender.org/download/sha256:6a476fcb992f89ceb556fbade7f4b1a8d6a7ed3b1f2556f0452613a66a8a556c/add-on-keyboard-layout-emulation-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/keyboard-layout-emulation/","maintainer":"endorh","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export keyboard layouts/add-on preferences"},"tags":["User Interface"]},{"id":"theme_elsyiun_like","schema_version":"1.0.0","name":"elsyiun like","version":"1.1.0","tagline":"A flat dark theme that is easy on the eyes","archive_hash":"sha256:698be24bb24b0957bd8ac858be0d019e4626c7ede5f06adc3de376a5f84d77d1","archive_size":5639,"archive_url":"https://extensions.blender.org/download/sha256:698be24bb24b0957bd8ac858be0d019e4626c7ede5f06adc3de376a5f84d77d1/theme-theme-elsyiun-like-v1.1.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-elsyiun-like/","maintainer":"modekichi","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"viewport_navigation_display","schema_version":"1.0.0","name":"Viewport Navigation Display","version":"1.2.1","tagline":"Visualize and control other viewports from TOP view","archive_hash":"sha256:3764c677ad34d57510e22257ff61646ab4ec8a25d2599486588d2bf9ab2bba01","archive_size":44446,"archive_url":"https://extensions.blender.org/download/sha256:3764c677ad34d57510e22257ff61646ab4ec8a25d2599486588d2bf9ab2bba01/add-on-viewport-navigation-display-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/viewport-navigation-display/","maintainer":"Cristiano-Tosoni","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Camera","User Interface"]},{"id":"quick_signs","schema_version":"1.0.0","name":"QuickSigns","version":"1.0.1","tagline":"Create 3D text signs with Google Fonts integration","archive_hash":"sha256:d24a17ff92d6a2bbcbc7767c5c4f0a92eee7c6a564e900db4fd993545f9d9959","archive_size":9089,"archive_url":"https://extensions.blender.org/download/sha256:d24a17ff92d6a2bbcbc7767c5c4f0a92eee7c6a564e900db4fd993545f9d9959/add-on-quick-signs-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quick-signs/","maintainer":"Marin-Brouwers","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write font files to local storage","network":"Access Google Fonts API for font search and download"},"tags":["Import-Export"]},{"id":"dy_pack_master","schema_version":"1.0.0","name":"dy Pack Master","version":"1.0.1","tagline":"Make Blender projects portable for render farms","archive_hash":"sha256:5e8694b0e3747a1ee4878161bb239392d2eeb7f97da21e3dd0cef0774137724f","archive_size":34845,"archive_url":"https://extensions.blender.org/download/sha256:5e8694b0e3747a1ee4878161bb239392d2eeb7f97da21e3dd0cef0774137724f/add-on-dy-pack-master-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dy-pack-master/","maintainer":"cdordelly","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Copies and localizes external assets to project directory"},"tags":["Pipeline","Import-Export","System"]},{"id":"cycles_bake_info","schema_version":"1.0.0","name":"Bake Info","version":"1.0.2","tagline":"fast bake checkup","archive_hash":"sha256:ac46bdb997c1f31bb513c45af62890576fcf93a8f6e4e4d115bc9298d3d914c5","archive_size":1581,"archive_url":"https://extensions.blender.org/download/sha256:ac46bdb997c1f31bb513c45af62890576fcf93a8f6e4e4d115bc9298d3d914c5/add-on-cycles-bake-info-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cycles-bake-info/","maintainer":"Chalouek-RGBit","license":["SPDX:GPL-3.0-or-later"],"tags":["Render","User Interface"]},{"id":"quill","schema_version":"1.0.0","name":"Quill Import/Export","version":"1.6.0","tagline":"Import and export Quill VR illustrations and animations","archive_hash":"sha256:4ca095528de167ae98be7ebc886d8b7cd45a4279d6515e11e9d224d65d5cdfda","archive_size":57145,"archive_url":"https://extensions.blender.org/download/sha256:4ca095528de167ae98be7ebc886d8b7cd45a4279d6515e11e9d224d65d5cdfda/add-on-quill-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/quill/","maintainer":"Joan-Charmant","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export Quill projects from/to disk"},"tags":["Import-Export"]},{"id":"splats","schema_version":"1.0.0","name":"Splats","version":"1.0.1","tagline":"Generate multi-view training data for Gaussian Splatting","archive_hash":"sha256:9171a58e9149ed9fe05a0bfc1c702a20e9055b51a36600664bc8ec19675229f2","archive_size":15856,"archive_url":"https://extensions.blender.org/download/sha256:9171a58e9149ed9fe05a0bfc1c702a20e9055b51a36600664bc8ec19675229f2/add-on-splats-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/splats/","maintainer":"Dev.Patel","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export PLY point clouds and render output files"},"tags":["Render","Camera"]},{"id":"export_curve_as_svg","schema_version":"1.0.0","name":"Export Curve as SVG","version":"1.0.0","tagline":"Export selected Bezier and Poly curves as SVG files","archive_hash":"sha256:1ab1dd210d80ff5c6d6fc5fc3b2bb481e571c28e736be2a028a5568ad2d6d990","archive_size":16937,"archive_url":"https://extensions.blender.org/download/sha256:1ab1dd210d80ff5c6d6fc5fc3b2bb481e571c28e736be2a028a5568ad2d6d990/add-on-export-curve-as-svg-v1.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/export-curve-as-svg/","maintainer":"Gilberto.R","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"asset_library_tools","schema_version":"1.0.0","name":"Asset Library Tools","version":"1.0.0","tagline":"Filter assets by tags and catalogue backups for asset libraries","archive_hash":"sha256:b4984647ddd947e4d1cecf108759494135e2c2c4f6049d0125e89634163cdc37","archive_size":15607,"archive_url":"https://extensions.blender.org/download/sha256:b4984647ddd947e4d1cecf108759494135e2c2c4f6049d0125e89634163cdc37/add-on-asset-library-tools-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/asset-library-tools/","maintainer":"Akhil_Alukkaran","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write tag indexes and catalogue backup files"},"tags":["System","User Interface","Pipeline"]},{"id":"redlix_theme","schema_version":"1.0.0","name":"Redlix Theme","version":"1.0.0","tagline":"Cooperative brutalist framework - retro-futuristic design system","archive_hash":"sha256:532550a1d2fda385ae83d56b42e3ac32e2cb3a5134ed92e488515515ef562ec8","archive_size":4968,"archive_url":"https://extensions.blender.org/download/sha256:532550a1d2fda385ae83d56b42e3ac32e2cb3a5134ed92e488515515ef562ec8/theme-redlix-theme-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/redlix-theme/","maintainer":"redlix","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful"]},{"id":"ftw_flattening_toolset","schema_version":"1.0.0","name":"FTW Flattening Toolset","version":"2.0.0","tagline":"UV workflow: flattening, curve alignment, scaling, UV transfer","archive_hash":"sha256:65ae1e56ade1c60e2b996a508114b1444d51a333a52f2022f79715b62e57838a","archive_size":1176759,"archive_url":"https://extensions.blender.org/download/sha256:65ae1e56ade1c60e2b996a508114b1444d51a333a52f2022f79715b62e57838a/add-on-ftw-flattening-toolset-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/ftw-flattening-toolset/","maintainer":"FTW3DForge","license":["SPDX:GPL-3.0-or-later"]},{"id":"folded_paper_engine","schema_version":"1.0.0","name":"Folded Paper Engine","version":"1.0.11","tagline":"Define gameplay in Blender and play in Godot with a few clicks","archive_hash":"sha256:5ca30c78f45277f45ed8a808e9b191f515c2207e79e0c4f3acac2de3cb96155a","archive_size":14004,"archive_url":"https://extensions.blender.org/download/sha256:5ca30c78f45277f45ed8a808e9b191f515c2207e79e0c4f3acac2de3cb96155a/add-on-folded-paper-engine-v1.0.11.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/folded-paper-engine/","maintainer":"Papercraft-Games","license":["SPDX:GPL-3.0-or-later","SPDX:MIT"],"tags":["Import-Export","Game Engine","Pipeline"]},{"id":"spine_io","schema_version":"1.0.0","name":"Spine IO","version":"0.0.3","tagline":"Export bone-driven Spine 4.3 JSON files","archive_hash":"sha256:502a89baf7a6ff0517c018ea7b76dff9f65432437b3b8ba46a525c671344278e","archive_size":29815,"archive_url":"https://extensions.blender.org/download/sha256:502a89baf7a6ff0517c018ea7b76dff9f65432437b3b8ba46a525c671344278e/add-on-spine-io-v0.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/spine-io/","maintainer":"Digital-Art-Freedom","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read textures and write Spine JSON"},"tags":["Import-Export","Rigging","Animation"]},{"id":"camfree","schema_version":"1.0.0","name":"CamFree","version":"1.0.5","tagline":"Fly/Walk Navigation on Cameras with Constraints","archive_hash":"sha256:e5cdbf82af653ffcdd8c2cf598c5f965e47d3b69c86965fa9b085c68e4a43344","archive_size":2409,"archive_url":"https://extensions.blender.org/download/sha256:e5cdbf82af653ffcdd8c2cf598c5f965e47d3b69c86965fa9b085c68e4a43344/add-on-camfree-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/camfree/","maintainer":"JR3DFUL","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera"]},{"id":"sort_viewlayers_rmb","schema_version":"1.0.0","name":"RMB Sort View Layers Alphabetically in Outliner-Scenes","version":"0.0.2","tagline":"RMB Sort View Layers Alphabetically in Outliner-Scenes","archive_hash":"sha256:c42858f387228d7ec906bb1a5f8705345fc8cad07a4ba7399ab28ac6431034e0","archive_size":2908,"archive_url":"https://extensions.blender.org/download/sha256:c42858f387228d7ec906bb1a5f8705345fc8cad07a4ba7399ab28ac6431034e0/add-on-sort-viewlayers-rmb-v0.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sort-viewlayers-rmb/","maintainer":"RobWu","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"voda_theme_cinnamon","schema_version":"1.0.0","name":"Cinnamon","version":"2.0.0","tagline":"Cinnamon-Orange themed Blender with a gradiented kick","archive_hash":"sha256:37cf32055dda8411ddadfbf84483f1345b652048cc16d0d2dbc795dd746f6849","archive_size":6616,"archive_url":"https://extensions.blender.org/download/sha256:37cf32055dda8411ddadfbf84483f1345b652048cc16d0d2dbc795dd746f6849/theme-voda-theme-cinnamon-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/voda-theme-cinnamon/","maintainer":"VaVo","license":["SPDX:CC0-1.0"]},{"id":"Black","schema_version":"1.0.0","name":"Black","version":"5.0.4","tagline":"A black theme, probably the blackest one","archive_hash":"sha256:3167d027740b8693d0a97af41ee0fbedfde3fc378c8900ddb43adf5935600f64","archive_size":5200,"archive_url":"https://extensions.blender.org/download/sha256:3167d027740b8693d0a97af41ee0fbedfde3fc378c8900ddb43adf5935600f64/theme-black-v5.0.4.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/black/","maintainer":"Gurra","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"root_maker","schema_version":"1.0.0","name":"RootMaker","version":"1.0.1","tagline":"Create root bone & bake into actions","archive_hash":"sha256:f8e66008152054ac78b47b34971c07a9bfd32ca9e9760e9ac831028a00a85cb3","archive_size":6592,"archive_url":"https://extensions.blender.org/download/sha256:f8e66008152054ac78b47b34971c07a9bfd32ca9e9760e9ac831028a00a85cb3/add-on-root-maker-v1.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/root-maker/","maintainer":"manas-R.-Makde","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Rigging","Bake"]},{"id":"MetahumanToManny","schema_version":"1.0.0","name":"MetahumanToManny","version":"1.3.0","tagline":"Clean up MetaHuman meshes and match them to UE5 Manny","archive_hash":"sha256:effdd535e6a830738e2a757ca2c250239c81f52f72b4711a2458e205d04b13b4","archive_size":21612,"archive_url":"https://extensions.blender.org/download/sha256:effdd535e6a830738e2a757ca2c250239c81f52f72b4711a2458e205d04b13b4/add-on-metahumantomanny-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/metahumantomanny/","maintainer":"hakan-erunsal","license":["SPDX:GPL-3.0-or-later"]},{"id":"import_png_palette","schema_version":"1.0.0","name":"Import PNG Palette","version":"1.0.2","tagline":"Import PNG images as color palettes for Blender","archive_hash":"sha256:3f4b526b1790cc37067789a1a1c46d51fc09bf466d397828627fd367e34a4ee4","archive_size":2035,"archive_url":"https://extensions.blender.org/download/sha256:3f4b526b1790cc37067789a1a1c46d51fc09bf466d397828627fd367e34a4ee4/add-on-import-png-palette-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/import-png-palette/","maintainer":"Ruuubick","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Paint"]},{"id":"momo_dark","schema_version":"1.0.0","name":"Momo Dark","version":"5.0.3","tagline":"Momo Dark - theme inspired by Modo","archive_hash":"sha256:1c3d772ddb40f65df60081d1682149b80fc86bc6283ec1699f164f84c8ef93dd","archive_size":6506,"archive_url":"https://extensions.blender.org/download/sha256:1c3d772ddb40f65df60081d1682149b80fc86bc6283ec1699f164f84c8ef93dd/theme-momo-dark-v5.0.3.zip","type":"theme","blender_version_min":"5.1.0","website":"https://extensions.blender.org/themes/momo-dark/","maintainer":"TimoShch","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"rss_theme_cyberpunk","schema_version":"1.0.0","name":"RedSavStudios: Cyberpunk","version":"0.5.5","tagline":"A dark blue cyberpunk-inspired theme with neon highlights","archive_hash":"sha256:9fc403b95ae68202e260f4cd7dba2359ad4e50ace0e4fcab020edacb5366435c","archive_size":5501,"archive_url":"https://extensions.blender.org/download/sha256:9fc403b95ae68202e260f4cd7dba2359ad4e50ace0e4fcab020edacb5366435c/theme-rss-theme-cyberpunk-v0.5.5.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/rss-theme-cyberpunk/","maintainer":"Reddraconi","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"rss_theme_nord","schema_version":"1.0.0","name":"RedSavStudios: Nord (Aurora)","version":"0.5.2","tagline":"Nord Theme With Aurora Accents","archive_hash":"sha256:0e8c6afd497618aef1fa42511aff6cfab32311c162b4f8f0d9291f59523cfd50","archive_size":5196,"archive_url":"https://extensions.blender.org/download/sha256:0e8c6afd497618aef1fa42511aff6cfab32311c162b4f8f0d9291f59523cfd50/theme-rss-theme-nord-v0.5.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/rss-theme-nord/","maintainer":"Reddraconi","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"randomize_noise_offset","schema_version":"1.0.0","name":"Randomize Noise Offset","version":"1.0.3","tagline":"Randomize Noise Offset for F-Curves","archive_hash":"sha256:538013b0bbec8281cf30abafee96389d0ad3664b48b733d9b3784b674e63a6e9","archive_size":2500,"archive_url":"https://extensions.blender.org/download/sha256:538013b0bbec8281cf30abafee96389d0ad3664b48b733d9b3784b674e63a6e9/add-on-randomize-noise-offset-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/randomize-noise-offset/","maintainer":"a.a.andrusenko","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"mirror_image","schema_version":"1.0.0","name":"Mirror Image","version":"1.0.0","tagline":"Applies mirroring to the active image","archive_hash":"sha256:12acdb21a3cd9f1e05202ae384499c80949d8ed3d352cd8a0ddfe70dcac21f46","archive_size":2540,"archive_url":"https://extensions.blender.org/download/sha256:12acdb21a3cd9f1e05202ae384499c80949d8ed3d352cd8a0ddfe70dcac21f46/add-on-mirror-image-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/mirror-image/","maintainer":"R4V3N","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"toggle_orbit_method","schema_version":"1.0.0","name":"Toggle Orbit Method (Turntable / Trackball)","version":"1.0.0","tagline":"Quickly toggles between Turntable and Trackball orbit modes","archive_hash":"sha256:c22d1bfd2e9bb48344aae7cb61efa209a06174146e3f1b6436a638b3064019c4","archive_size":1369,"archive_url":"https://extensions.blender.org/download/sha256:c22d1bfd2e9bb48344aae7cb61efa209a06174146e3f1b6436a638b3064019c4/add-on-toggle-orbit-method-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/toggle-orbit-method/","maintainer":"ArgelliKa","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View"]},{"id":"blender_vnf_exporter_extension","schema_version":"1.0.0","name":"VNF Export Extension","version":"1.0.0","tagline":"Export blender mesh to openscad vnf","archive_hash":"sha256:a5520b1cd82ed825022faadc413ba1db1dd8c9b8d16fafb7c198583ccbe6c23e","archive_size":14400,"archive_url":"https://extensions.blender.org/download/sha256:a5520b1cd82ed825022faadc413ba1db1dd8c9b8d16fafb7c198583ccbe6c23e/add-on-blender-vnf-exporter-extension-v1.0.0-windows-x64-linux-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-vnf-exporter-extension/","maintainer":"runerback","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export .scad to disk"},"platforms":["windows-x64","linux-x64"],"tags":["Import-Export"]},{"id":"vray_arena_setup","schema_version":"1.0.0","name":"Vray Arena Setup","version":"2.5.0","tagline":"Export VRay Cosmos assets, scene textures, and stage cube setup","archive_hash":"sha256:608feab71c8d9f0726372656513c23c24ebad88707929a9f3c89d85a64d6185f","archive_size":6050,"archive_url":"https://extensions.blender.org/download/sha256:608feab71c8d9f0726372656513c23c24ebad88707929a9f3c89d85a64d6185f/add-on-vray-arena-setup-v2.5.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/vray-arena-setup/","maintainer":"Darsh","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read and write project and resources directories"},"tags":["Import-Export","Material"]},{"id":"Minimal","schema_version":"1.0.0","name":"Minimal","version":"1.0.0","tagline":"Dark minimal theme","archive_hash":"sha256:5cfd4ece8439e754c284703a3b92e967094ac3c05e5a145738e911139b4238fb","archive_size":5620,"archive_url":"https://extensions.blender.org/download/sha256:5cfd4ece8439e754c284703a3b92e967094ac3c05e5a145738e911139b4238fb/theme-minimal-v1.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/minimal/","maintainer":"A7medKhaled.me","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"auto_track_weights","schema_version":"1.0.0","name":"Auto Track Weights","version":"0.2.1","tagline":"Automatically adjust the weights of tracking markers","archive_hash":"sha256:90e5cf8f11558a00e14a383e30cda0fd9ca1d40bc76e514f8f42b7be3c67c6be","archive_size":2415,"archive_url":"https://extensions.blender.org/download/sha256:90e5cf8f11558a00e14a383e30cda0fd9ca1d40bc76e514f8f42b7be3c67c6be/add-on-auto-track-weights-v0.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/auto-track-weights/","maintainer":"david494","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Tracking"]},{"id":"batch_bone_constraints","schema_version":"1.0.0","name":"Batch Bone Constraints","version":"1.1.4","tagline":"Batch bone constraints to the selected multiple armatures","archive_hash":"sha256:a73d426532da74e03772365f62a32e85637622da7cfe4fb77f469923e13604ee","archive_size":6589,"archive_url":"https://extensions.blender.org/download/sha256:a73d426532da74e03772365f62a32e85637622da7cfe4fb77f469923e13604ee/add-on-batch-bone-constraints-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-bone-constraints/","maintainer":"distinctive-mark","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging","Animation"]},{"id":"theme_BlueInvasion","schema_version":"1.0.0","name":"Blue Invasion","version":"1.0.3-1","tagline":"A theme inspired by Winamp's blue invasion theme","archive_hash":"sha256:aaa50db52785b547c7902f7dea3808dbd06ba8a27b989b96de0640590a7863f2","archive_size":6165,"archive_url":"https://extensions.blender.org/download/sha256:aaa50db52785b547c7902f7dea3808dbd06ba8a27b989b96de0640590a7863f2/theme-theme-blueinvasion-v1.0.3-1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-blueinvasion/","maintainer":"zaq","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Colorful","Inspired By"]},{"id":"trident","schema_version":"1.0.0","name":"TRIDENT","version":"0.2.1","tagline":"3D UMAP/t-SNE embeddings into Blender","archive_hash":"sha256:85c8367127d76c0c21514615439d0b4fdfdb08e3034f146ad890f6cf4d29c66a","archive_size":128117,"archive_url":"https://extensions.blender.org/download/sha256:85c8367127d76c0c21514615439d0b4fdfdb08e3034f146ad890f6cf4d29c66a/add-on-trident-v0.2.1-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/trident/","maintainer":"ccordi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write data files and build outputs"},"platforms":["windows-x64"],"tags":["3D View","Object"]},{"id":"FrameFlowBlender","schema_version":"1.0.0","name":"Frame Flow Beta","version":"1.4.1","tagline":"Advanced Node Frame Add-on for Blender","archive_hash":"sha256:24848e275ae2a587be4a8048afbc32f1b67e46ef0aba693ca65a34de20bc495f","archive_size":922364,"archive_url":"https://extensions.blender.org/download/sha256:24848e275ae2a587be4a8048afbc32f1b67e46ef0aba693ca65a34de20bc495f/add-on-frameflowblender-v1.4.1.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/frameflowblender/","maintainer":"abhi.01","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","Text Editor"]},{"id":"pataz_thumbnail_toolz","schema_version":"1.0.0","name":"Pataz Thumbnail Toolz","version":"1.0.0","tagline":"Tools for managing asset thumbnails","archive_hash":"sha256:ef3ba866311125fd57ed6598dea3be8acc70608f3d95ff817d4c8444012774ac","archive_size":2763,"archive_url":"https://extensions.blender.org/download/sha256:ef3ba866311125fd57ed6598dea3be8acc70608f3d95ff817d4c8444012774ac/add-on-pataz-thumbnail-toolz-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pataz-thumbnail-toolz/","maintainer":"zanqdo","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and load files from disk"},"tags":["Pipeline"]},{"id":"io_scene_jsbsim","schema_version":"1.0.0","name":"JSBSim Viewer","version":"0.2.3","tagline":"Import and visualize JSBSim FDM aircraft XML metrics","archive_hash":"sha256:3d97352d2c89e76944575b20004a05aeb07c771412a6ffda6b375f973b8dff5f","archive_size":6721,"archive_url":"https://extensions.blender.org/download/sha256:3d97352d2c89e76944575b20004a05aeb07c771412a6ffda6b375f973b8dff5f/add-on-io-scene-jsbsim-v0.2.3.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/io-scene-jsbsim/","maintainer":"RenanMsV","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export"]},{"id":"multi_adjust","schema_version":"1.0.0","name":"Multi Adjust","version":"1.0.1","tagline":"Edits properties of multiple things together","archive_hash":"sha256:b5717e7f3f3e02a8b55acea1caaa10c0aef618f992f9dc109510c1ee2de4abed","archive_size":9515,"archive_url":"https://extensions.blender.org/download/sha256:b5717e7f3f3e02a8b55acea1caaa10c0aef618f992f9dc109510c1ee2de4abed/add-on-multi-adjust-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/multi-adjust/","maintainer":"Brrainz","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"replace_with_copy","schema_version":"1.0.0","name":"Replace With Copy","version":"1.0.1","tagline":"Batch replace multiple objects with a template","archive_hash":"sha256:b1827d0b0ae7e87cce0f4e4ecf4ce8e861d14dc183d5bb387226167ef66fbabf","archive_size":4116,"archive_url":"https://extensions.blender.org/download/sha256:b1827d0b0ae7e87cce0f4e4ecf4ce8e861d14dc183d5bb387226167ef66fbabf/add-on-replace-with-copy-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/replace-with-copy/","maintainer":"Brrainz","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"sierpinski_triangle","schema_version":"1.0.0","name":"Sierpinski Triangle","version":"1.0.4","tagline":"This add-on creates Sierpinski triangles","archive_hash":"sha256:4f6badeb029f38d3680bec40b1a7a61aafd7b35487849a09875c844bd7e01b05","archive_size":4106,"archive_url":"https://extensions.blender.org/download/sha256:4f6badeb029f38d3680bec40b1a7a61aafd7b35487849a09875c844bd7e01b05/add-on-sierpinski-triangle-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sierpinski-triangle/","maintainer":"Jonny-B","license":["SPDX:GPL-3.0-or-later"]},{"id":"light_generator","schema_version":"1.0.0","name":"Light Generator","version":"1.2.0","tagline":"Generate lights with advanced distribution","archive_hash":"sha256:1b687666b01727e8e8c91ab7a06f03c641cd840d002bcb59714e73d8ba877a05","archive_size":5837,"archive_url":"https://extensions.blender.org/download/sha256:1b687666b01727e8e8c91ab7a06f03c641cd840d002bcb59714e73d8ba877a05/add-on-light-generator-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/light-generator/","maintainer":"TFMSTYLE","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Lighting"]},{"id":"nfc_card_keychain_generator","schema_version":"1.0.0","name":"NFC Card and Keychain Generator","version":"1.2.3","tagline":"Generate customizable 3D-printable cards, tags, and keychains","archive_hash":"sha256:c2acb335a0bf0db5fe5ec7064021d8a2131c9bd409dabce8bf823a6c44529f7b","archive_size":513559,"archive_url":"https://extensions.blender.org/download/sha256:c2acb335a0bf0db5fe5ec7064021d8a2131c9bd409dabce8bf823a6c44529f7b/add-on-nfc-card-keychain-generator-v1.2.3.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/nfc-card-keychain-generator/","maintainer":"Clonephaze","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"For custom SVG import and file saving operations"},"tags":["Modeling","Object"]},{"id":"Physical_Motion_Blur","schema_version":"1.0.0","name":"Physical Motion Blur","version":"1.1.0","tagline":"Adds intuitive shutter speed and angle controls for motion blur","archive_hash":"sha256:b74e16e526349842371e5b688e7f95e4fbaf60284d413c025c30de5989a51438","archive_size":2605,"archive_url":"https://extensions.blender.org/download/sha256:b74e16e526349842371e5b688e7f95e4fbaf60284d413c025c30de5989a51438/add-on-physical-motion-blur-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/physical-motion-blur/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Render","Animation"]},{"id":"utility_materials","schema_version":"1.0.0","name":"Utility Materials","version":"1.1.5","tagline":"Industrial design theme in the Utility Materials universe","archive_hash":"sha256:1060b83f61823e30cac6147ad365e0e2532132ba85719a73fb8a881b1daee82f","archive_size":5294,"archive_url":"https://extensions.blender.org/download/sha256:1060b83f61823e30cac6147ad365e0e2532132ba85719a73fb8a881b1daee82f/theme-utility-materials-v1.1.5.zip","type":"theme","blender_version_min":"4.2.0","website":"https://extensions.blender.org/themes/utility-materials/","maintainer":"Utility-Materials","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark","Inspired By"]},{"id":"AddShaderAttribute","schema_version":"1.0.0","name":"Add Shader Attribute","version":"0.3.0","tagline":"Add attribute directly in shader nodetree","archive_hash":"sha256:94c6c429e385ec1bdd70aab48b4664b72ab7e4af3336b4acc96be2d3f4d02707","archive_size":2591,"archive_url":"https://extensions.blender.org/download/sha256:94c6c429e385ec1bdd70aab48b4664b72ab7e4af3336b4acc96be2d3f4d02707/add-on-addshaderattribute-v0.3.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/addshaderattribute/","maintainer":"atticuslv","license":["SPDX:GPL-3.0-or-later"],"tags":["Material","Node"]},{"id":"all_objects_into_assets","schema_version":"1.0.0","name":"All Objects into Assets","version":"1.0.4","tagline":"Create collection assets and catalogs automatically","archive_hash":"sha256:10d9d4dfc45855e34afbec1e7fc88d8576ab201701abf0d4c5876eac65dd52a7","archive_size":9361,"archive_url":"https://extensions.blender.org/download/sha256:10d9d4dfc45855e34afbec1e7fc88d8576ab201701abf0d4c5876eac65dd52a7/add-on-all-objects-into-assets-v1.0.4.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/all-objects-into-assets/","maintainer":"StellArc","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read/write asset library catalogs file"}},{"id":"goldsrc_model_helper","schema_version":"1.0.0","name":"GS Model Helper","version":"2.2.0","tagline":"A set of tools for working with Goldsource models in Blender","archive_hash":"sha256:074531c7e337f1e88d36dfdec5ad2f698b8d18aa7e916008120c6105846b98df","archive_size":7626,"archive_url":"https://extensions.blender.org/download/sha256:074531c7e337f1e88d36dfdec5ad2f698b8d18aa7e916008120c6105846b98df/add-on-goldsrc-model-helper-v2.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/goldsrc-model-helper/","maintainer":"DaKashi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to rename and clean up materials/textures"}},{"id":"pjavel_theme","schema_version":"1.0.0","name":"Pjavel Theme","version":"1.2.2","tagline":"Green accent theme","archive_hash":"sha256:b8a2a09aee65bdb1920d3f893f4f9b09b5373a79429fb65652f2c6a4a6eef94a","archive_size":18635,"archive_url":"https://extensions.blender.org/download/sha256:b8a2a09aee65bdb1920d3f893f4f9b09b5373a79429fb65652f2c6a4a6eef94a/theme-pjavel-theme-v1.2.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/pjavel-theme/","maintainer":"Zexyp","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"text_editor_for_development","schema_version":"1.0.0","name":"Text editor for Development","version":"1.0.7","tagline":"Text editor enhancements for add-on development","archive_hash":"sha256:132e0df040832a572a759c89205edf203a296822af651a7db49a3c99d1a1edf2","archive_size":340600,"archive_url":"https://extensions.blender.org/download/sha256:132e0df040832a572a759c89205edf203a296822af651a7db49a3c99d1a1edf2/add-on-text-editor-for-development-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/text-editor-for-development/","maintainer":"Martin-Lorentzon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Specify folder to preview for file-browsing/editing","network":"Clone remote Git repositories for add-on templates"},"tags":["Text Editor","Development"]},{"id":"bfds","schema_version":"1.0.0","name":"BFDS fire simulations","version":"7.0.0","tagline":"Create and manage NIST FDS fire simulations","archive_hash":"sha256:27de24b26775e38e30d5813ad436c3aaa8b38429728ebc191446eaa71491ccb6","archive_size":370951,"archive_url":"https://extensions.blender.org/download/sha256:27de24b26775e38e30d5813ad436c3aaa8b38429728ebc191446eaa71491ccb6/add-on-bfds-v7.0.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/bfds/","maintainer":"emanuele.gissi","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FDS files from/to disk","network":"Display geographic positions, convert coordinates"},"tags":["Import-Export"]},{"id":"sciblend","schema_version":"1.0.0","name":"SciBlend","version":"1.1.2","tagline":"Scientific visualization tools for Blender","archive_hash":"sha256:a0ea43e82838e33a8fbd691bdabd3342242093dd484a1909d70e3bc024da554d","archive_size":143536802,"archive_url":"https://extensions.blender.org/download/sha256:a0ea43e82838e33a8fbd691bdabd3342242093dd484a1909d70e3bc024da554d/add-on-sciblend-v1.1.2-windows-x64.zip","type":"add-on","blender_version_min":"4.5.1","website":"https://extensions.blender.org/add-ons/sciblend/","maintainer":"José-Marín","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"navigation_puck_addon","schema_version":"1.0.0","name":"Navigation Puck Addon","version":"2.0.1","tagline":"Navigation Puck like in Sketchbook Pro","archive_hash":"sha256:d98ab22845578d43de090fbf37e306244853a5d0fd6baef835a7ed1c0c066b13","archive_size":145831,"archive_url":"https://extensions.blender.org/download/sha256:d98ab22845578d43de090fbf37e306244853a5d0fd6baef835a7ed1c0c066b13/add-on-navigation-puck-addon-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/navigation-puck-addon/","maintainer":"IliaVerpa","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","3D View"]},{"id":"midicontroller","schema_version":"1.0.0","name":"MidiController","version":"0.1.7","tagline":"Control objects properties through midi","archive_hash":"sha256:635cc40eca6b181d6bbba19839ebf15fd006620056ed3344c7cc505079ea8127","archive_size":270990,"archive_url":"https://extensions.blender.org/download/sha256:635cc40eca6b181d6bbba19839ebf15fd006620056ed3344c7cc505079ea8127/add-on-midicontroller-v0.1.7-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/midicontroller/","maintainer":"Eldin-Zenderink","license":["SPDX:GPL-3.0-or-later"],"platforms":["windows-x64"],"tags":["User Interface","Animation"]},{"id":"smart_transform","schema_version":"1.0.0","name":"Smart Transform","version":"1.0.2","tagline":"filter objects by size or transforms, and more tools","archive_hash":"sha256:7b4fa468f7ad58552ec1b6be1d2f2c3f0ed2bfe19da271042e38a661c4cfdd11","archive_size":2671,"archive_url":"https://extensions.blender.org/download/sha256:7b4fa468f7ad58552ec1b6be1d2f2c3f0ed2bfe19da271042e38a661c4cfdd11/add-on-smart-transform-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/smart-transform/","maintainer":"Claz_Arts","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"animated_brush","schema_version":"1.0.0","name":"Animated Texture Brush","version":"1.0.2","tagline":"Randomly cycles image sequence texture while painting","archive_hash":"sha256:8903fadaf19661e63c6b7b60b805b2e11121e567ce9eb51f42f81b0aba76c7be","archive_size":2467,"archive_url":"https://extensions.blender.org/download/sha256:8903fadaf19661e63c6b7b60b805b2e11121e567ce9eb51f42f81b0aba76c7be/add-on-animated-brush-v1.0.2.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/animated-brush/","maintainer":"Kvendy","license":["SPDX:GPL-3.0-or-later"],"tags":["Paint"]},{"id":"lod_gen","schema_version":"1.0.0","name":"LODGen","version":"0.0.5","tagline":"Generate LODs for Games in 3 Clicks or Less","archive_hash":"sha256:0f2ab6b571315bee02068eb61a0ff972c25beea69acf0d2f0aec8a0b8dcc5128","archive_size":15434,"archive_url":"https://extensions.blender.org/download/sha256:0f2ab6b571315bee02068eb61a0ff972c25beea69acf0d2f0aec8a0b8dcc5128/add-on-lod-gen-v0.0.5.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/lod-gen/","maintainer":"F1dg3t","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling","Mesh"]},{"id":"LostSelection","schema_version":"1.0.0","name":"Lost Selection","version":"0.2.0","tagline":"Set of usefull extra selection operators","archive_hash":"sha256:b86837ae75d5de7867114f1a0b038fa522a5628bfcbc9073a4083570f857fcb4","archive_size":32205,"archive_url":"https://extensions.blender.org/download/sha256:b86837ae75d5de7867114f1a0b038fa522a5628bfcbc9073a4083570f857fcb4/add-on-lostselection-v0.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/lostselection/","maintainer":"niewinny","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Mesh"]},{"id":"reset_workspace","schema_version":"1.0.0","name":"Reset Workspace","version":"0.0.4","tagline":"Reset the user interface (with your startup file interface)","archive_hash":"sha256:35cef23e81719101cd3d7616c08d4804c419417c57abd7be68d11b296d1f9a32","archive_size":5093,"archive_url":"https://extensions.blender.org/download/sha256:35cef23e81719101cd3d7616c08d4804c419417c57abd7be68d11b296d1f9a32/add-on-reset-workspace-v0.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/reset-workspace/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"edit_instanced_collection","schema_version":"1.0.0","name":"Edit Instanced Collection","version":"0.0.5","tagline":"Quickly find the instanced collection source","archive_hash":"sha256:82b58677725d9892cf2e272a657f498903a17aa057cb0a432dababc18f8db6e3","archive_size":6971,"archive_url":"https://extensions.blender.org/download/sha256:82b58677725d9892cf2e272a657f498903a17aa057cb0a432dababc18f8db6e3/add-on-edit-instanced-collection-v0.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-instanced-collection/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","User Interface"]},{"id":"add_std_paper_size","schema_version":"1.0.0","name":"Add Std Paper-Format","version":"0.1.0","tagline":"Blender add-on to add planes with standardized paper formats","archive_hash":"sha256:d8699b5786b94d157a53a2322b82da1c49fcf833f42d36a3fd143d7d51796ed4","archive_size":19785,"archive_url":"https://extensions.blender.org/download/sha256:d8699b5786b94d157a53a2322b82da1c49fcf833f42d36a3fd143d7d51796ed4/add-on-add-std-paper-size-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-std-paper-size/","maintainer":"BsIngA","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"Blueprint_Film_Theme","schema_version":"1.0.0","name":"Blueprint_Film_Theme","version":"2.3.1","tagline":"Translucent Aqua","archive_hash":"sha256:a2c726fdbd2324ce3cde0db7958d97ff7235286c30ccad1bea50052075843c09","archive_size":5718,"archive_url":"https://extensions.blender.org/download/sha256:a2c726fdbd2324ce3cde0db7958d97ff7235286c30ccad1bea50052075843c09/theme-blueprint-film-theme-v2.3.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/blueprint-film-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"pbsu_addon_3ds","schema_version":"1.0.0","name":"PBSU 3D Studio (.3ds)","version":"1.0.1","tagline":"Import/export 3DS scenes, objects, cameras, lights & anims","archive_hash":"sha256:347858569d753e688770e2f73c1d75b9787ccb69ce86e6fdbb08d06483a4814d","archive_size":42631,"archive_url":"https://extensions.blender.org/download/sha256:347858569d753e688770e2f73c1d75b9787ccb69ce86e6fdbb08d06483a4814d/add-on-pbsu-addon-3ds-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/pbsu-addon-3ds/","maintainer":"Arturo-Cervantes","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import and export Autodesk 3DS files"},"tags":["Import-Export","Scene","Object","Camera","Lighting","Animation"]},{"id":"on_screen_numpad","schema_version":"1.0.0","name":"On-Screen Numpad","version":"1.2.1","tagline":"No need to leave the mouse to enter numbers","archive_hash":"sha256:4c16d0f6f007afdadcf931efbba4ae2d31924a3a9e13aeacf05531202de5b71d","archive_size":23277,"archive_url":"https://extensions.blender.org/download/sha256:4c16d0f6f007afdadcf931efbba4ae2d31924a3a9e13aeacf05531202de5b71d/add-on-on-screen-numpad-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","blender_version_max":"6.0.0","website":"https://extensions.blender.org/add-ons/on-screen-numpad/","maintainer":"Pluglug","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"Sakura_Rig_GUI","schema_version":"1.0.0","name":"Sakura's Rig Interfaces","version":"3.1.0","tagline":"A control script for use with Sakura's Rigs","archive_hash":"sha256:98421bd610dd89103aa63177dd25a3bb04e8a71899ad0c93dcba026908e07bf0","archive_size":23119,"archive_url":"https://extensions.blender.org/download/sha256:98421bd610dd89103aa63177dd25a3bb04e8a71899ad0c93dcba026908e07bf0/add-on-sakura-rig-gui-v3.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sakura-rig-gui/","maintainer":"SakuraSedaia","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Save and Store Player Skin Information and Downloaded Rigs","network":"Download Minecraft Skin Information from minecraft.net"},"tags":["Rigging","User Interface"]},{"id":"EMU3BM","schema_version":"1.0.0","name":"Toggle Emulate 3 Button Mouse","version":"1.4.0","tagline":"Toggle Emulate 3 Button Mouse","archive_hash":"sha256:4403771643b6e2cae32cecd67a98fea219c3b89a72424207fc3c9640574d2593","archive_size":1343,"archive_url":"https://extensions.blender.org/download/sha256:4403771643b6e2cae32cecd67a98fea219c3b89a72424207fc3c9640574d2593/add-on-emu3bm-v1.4.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/emu3bm/","maintainer":"chenkin123","license":["SPDX:GPL-3.0-or-later"],"tags":["System"]},{"id":"BL_EasyCrop","schema_version":"1.0.0","name":"BL Easy Crop","version":"2.0.3","tagline":"Use handles for easy cropping in the Blender VSE Preview window","archive_hash":"sha256:f63200c2f634b927cc0ccf82af20aa4298f36f5f5bfbcfdfc85f20adf4a2d9da","archive_size":31082,"archive_url":"https://extensions.blender.org/download/sha256:f63200c2f634b927cc0ccf82af20aa4298f36f5f5bfbcfdfc85f20adf4a2d9da/add-on-bl-easycrop-v2.0.3.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/bl-easycrop/","maintainer":"usrname0","license":["SPDX:GPL-3.0-or-later"],"tags":["Sequencer","User Interface"]},{"id":"SHIRAKUMO_sf3_io","schema_version":"1.0.0","name":"Shirakumo SF3 IO","version":"1.1.0","tagline":"Export/Import support for Simple File Format Family (SF3) files","archive_hash":"sha256:ea929db922904ace800e75192ed57225db3c960f44e2d6b419bddb4041f2116c","archive_size":24064,"archive_url":"https://extensions.blender.org/download/sha256:ea929db922904ace800e75192ed57225db3c960f44e2d6b419bddb4041f2116c/add-on-shirakumo-sf3-io-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/shirakumo-sf3-io/","maintainer":"shinmera","license":["SPDX:GPL-3.0-or-later","SPDX:Zlib"],"permissions":{"files":"Import/export SF3 from/to disk"},"tags":["Import-Export"]},{"id":"normalize_resize_handles","schema_version":"1.0.0","name":"Normalize and Resize Curve Handles","version":"1.0.1","tagline":"Normalize and resize all selected bezier curve handles","archive_hash":"sha256:38d20ad9da74d2f832b4d2cf7ecbe874dc208c2cfacf2f1849ac85aed7751b4a","archive_size":1537,"archive_url":"https://extensions.blender.org/download/sha256:38d20ad9da74d2f832b4d2cf7ecbe874dc208c2cfacf2f1849ac85aed7751b4a/add-on-normalize-resize-handles-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/normalize-resize-handles/","maintainer":"TomasCJ","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"FocalLengthTweaker","schema_version":"1.0.0","name":"Focal Length Tweaker","version":"1.0.2","tagline":"Control viewport and camera focal length with your mouse","archive_hash":"sha256:c6faa64e00e65b00eb736dd21fb52544e3fafe175b77a3bdae4f83753f9c8faa","archive_size":10089,"archive_url":"https://extensions.blender.org/download/sha256:c6faa64e00e65b00eb736dd21fb52544e3fafe175b77a3bdae4f83753f9c8faa/add-on-focallengthtweaker-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/focallengthtweaker/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","User Interface"]},{"id":"Zeratul_Theme","schema_version":"1.0.0","name":"Zeratul_Theme","version":"3.2.3","tagline":"Invisible Shadow Warrior","archive_hash":"sha256:cc44f2cfc8373ea9f9443472596ba1a9f049e71227d981d0eb92985ac6e83aa1","archive_size":5665,"archive_url":"https://extensions.blender.org/download/sha256:cc44f2cfc8373ea9f9443472596ba1a9f049e71227d981d0eb92985ac6e83aa1/theme-zeratul-theme-v3.2.3.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/zeratul-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark","Colorful"]},{"id":"render_webhook","schema_version":"1.0.0","name":"Render Webhook","version":"1.0.2","tagline":"Sends a message after render events to a webhook","archive_hash":"sha256:38cc7b54f014a6cd7d3c2d6f4928372749fb2a57ffd1b87df4fbc34550c6ed58","archive_size":2567,"archive_url":"https://extensions.blender.org/download/sha256:38cc7b54f014a6cd7d3c2d6f4928372749fb2a57ffd1b87df4fbc34550c6ed58/add-on-render-webhook-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-webhook/","maintainer":"vignette","license":["SPDX:GPL-3.0-or-later"],"permissions":{"network":"Sending HTTP requests to provided webhook URL"},"tags":["Render","Pipeline"]},{"id":"Clip_Tools","schema_version":"1.0.0","name":"Clip Tools","version":"1.2.0","tagline":"Add a simple tool to the Movie Clip Editor","archive_hash":"sha256:593b3aed6333855d96a51a2372ccf82c8cd134531d72a0f7d6d95fcefa78a17a","archive_size":20301,"archive_url":"https://extensions.blender.org/download/sha256:593b3aed6333855d96a51a2372ccf82c8cd134531d72a0f7d6d95fcefa78a17a/add-on-clip-tools-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/clip-tools/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Tracking","Camera","3D View"]},{"id":"Merge_selected_cameras","schema_version":"1.0.0","name":"Merge Selected Cameras","version":"1.1.1","tagline":"Create one animated camera from your photogrammetry sequence","archive_hash":"sha256:37e9a6363b92571e6fd33f41edf887d72f63a4e64b6c0a9ca0c5014ea6a0b37d","archive_size":4219,"archive_url":"https://extensions.blender.org/download/sha256:37e9a6363b92571e6fd33f41edf887d72f63a4e64b6c0a9ca0c5014ea6a0b37d/add-on-merge-selected-cameras-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/merge-selected-cameras/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Camera","Tracking","3D View"]},{"id":"Scene_Duration_Display","schema_version":"1.0.0","name":"Scene Duration Display","version":"1.1.1","tagline":"Displays and syncs timeline duration. Set preview range with I/O","archive_hash":"sha256:ecb84336ac892b588d1fcbdb40da045ce82c73b4869630d9fec11d4cf872a940","archive_size":2361,"archive_url":"https://extensions.blender.org/download/sha256:ecb84336ac892b588d1fcbdb40da045ce82c73b4869630d9fec11d4cf872a940/add-on-scene-duration-display-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-duration-display/","maintainer":"K_Naoki","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"Gray50","schema_version":"1.0.0","name":"Gray50","version":"1.0.8","tagline":"Remake of Blender3.3 light theme","archive_hash":"sha256:194eb5ea31c0aa3ea3f7da9085a33b09bf07ccae2ece90385bda3f773d052249","archive_size":6143,"archive_url":"https://extensions.blender.org/download/sha256:194eb5ea31c0aa3ea3f7da9085a33b09bf07ccae2ece90385bda3f773d052249/theme-gray50-v1.0.8.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/gray50/","maintainer":"Nick2321","license":["SPDX:GPL-2.0-or-later"],"tags":["Light","Inspired By"]},{"id":"bl_reset_custom_properties","schema_version":"1.0.0","name":"Reset Custom Properties","version":"1.0.4","tagline":"Reset custom properties to their default values","archive_hash":"sha256:f616677a285d385eb5ae5b60791f7d33656fb6914326eac58ae1b3d069a533b4","archive_size":5646,"archive_url":"https://extensions.blender.org/download/sha256:f616677a285d385eb5ae5b60791f7d33656fb6914326eac58ae1b3d069a533b4/add-on-bl-reset-custom-properties-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/bl-reset-custom-properties/","maintainer":"Lauloque","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","3D View"]},{"id":"nla_batch_editor","schema_version":"1.0.0","name":"NLA Batch Editor","version":"1.1.0","tagline":"Batch editing for NLA Editor","archive_hash":"sha256:ab1e67b8b7f624dde678548ea94bf0378a597deccecd8745a14e130cd79770cd","archive_size":20602,"archive_url":"https://extensions.blender.org/download/sha256:ab1e67b8b7f624dde678548ea94bf0378a597deccecd8745a14e130cd79770cd/add-on-nla-batch-editor-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nla-batch-editor/","maintainer":"c4205m","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"io_import_build_map","schema_version":"1.0.0","name":"BUILD Map Importer","version":"1.4.1","tagline":"Import BUILD Engine maps as used in Duke Nukem 3D, Blood, etc","archive_hash":"sha256:d167ef8d1580c381dd1ef6378302b7918d493e67c7317be3fafaea9cf70d6c54","archive_size":57108,"archive_url":"https://extensions.blender.org/download/sha256:d167ef8d1580c381dd1ef6378302b7918d493e67c7317be3fafaea9cf70d6c54/add-on-io-import-build-map-v1.4.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-import-build-map/","maintainer":"Jens.Ne","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import .map files and textures from filesystem"},"tags":["Import-Export","Mesh","Material"]},{"id":"distribute_grease_pencil_strokes","schema_version":"1.0.0","name":"Align-Distribute Grease Pencil Strokes","version":"2.1.0","tagline":"Align-Distribute Grease Pencil strokes","archive_hash":"sha256:e8075d9b8af883ab77be48eb51d424acf51860f408970ec54393f29ec45f1ab2","archive_size":13284,"archive_url":"https://extensions.blender.org/download/sha256:e8075d9b8af883ab77be48eb51d424acf51860f408970ec54393f29ec45f1ab2/add-on-distribute-grease-pencil-strokes-v2.1.0.zip","type":"add-on","blender_version_min":"4.4.0","website":"https://extensions.blender.org/add-ons/distribute-grease-pencil-strokes/","maintainer":"JohnNyquist","license":["SPDX:GPL-3.0-or-later"],"tags":["Grease Pencil"]},{"id":"quantum_void_fluoamber","schema_version":"1.0.0","name":"Quantum Void FluoAmber","version":"1.0.2","tagline":"A monochromatic dark theme with accent","archive_hash":"sha256:6506841912f52525e1ae2d12d9ce2ac9316676f0bc7684374ab3847731dad70f","archive_size":3205,"archive_url":"https://extensions.blender.org/download/sha256:6506841912f52525e1ae2d12d9ce2ac9316676f0bc7684374ab3847731dad70f/theme-quantum-void-fluoamber-v1.0.2.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/quantum-void-fluoamber/","maintainer":"Dimona-Patrick-243","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"blueprints","schema_version":"1.0.0","name":"Blueprints","version":"1.0.3","tagline":"Manage background images ","archive_hash":"sha256:f148d686256514f105c8dfe1b240b8c189b148b47ae426c485ae35ab7d77aaa9","archive_size":3264,"archive_url":"https://extensions.blender.org/download/sha256:f148d686256514f105c8dfe1b240b8c189b148b47ae426c485ae35ab7d77aaa9/add-on-blueprints-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blueprints/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Modeling"]},{"id":"tracking_toolkit","schema_version":"1.0.0","name":"Tracking Toolkit","version":"2.0.3","tagline":"Use OpenXR trackers and devices directly in Blender","archive_hash":"sha256:8d264f25ac41fdc4d7f55df231fdf7066fb4fa3411b7618599e45da357723c7a","archive_size":23525930,"archive_url":"https://extensions.blender.org/download/sha256:8d264f25ac41fdc4d7f55df231fdf7066fb4fa3411b7618599e45da357723c7a/add-on-tracking-toolkit-v2.0.3-windows-x64.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/tracking-toolkit/","maintainer":"EthanPorcaro","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load custom shapes for tracker models"},"platforms":["windows-x64"],"tags":["Animation","Tracking"]},{"id":"batch_render_actions","schema_version":"1.0.0","name":"Batch Render Actions","version":"1.0.2","tagline":"Render each animation action to its own folder","archive_hash":"sha256:c91187783a22ac88e4847f57bc33f32f5d7954fb6564886839e9b44a4cd05cff","archive_size":2413,"archive_url":"https://extensions.blender.org/download/sha256:c91187783a22ac88e4847f57bc33f32f5d7954fb6564886839e9b44a4cd05cff/add-on-batch-render-actions-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/batch-render-actions/","maintainer":"Padraig-O-Cinneide","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Render"]},{"id":"rmKit_uv","schema_version":"1.0.0","name":"rmKitUV","version":"2.0.0","tagline":"Collection of Tools","archive_hash":"sha256:cd75170fc5d652ba6e52a70939949480ea78a7417b7608e7c2d2c1fb48b3360e","archive_size":259364,"archive_url":"https://extensions.blender.org/download/sha256:cd75170fc5d652ba6e52a70939949480ea78a7417b7608e7c2d2c1fb48b3360e/add-on-rmkit-uv-v2.0.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/rmkit-uv/","maintainer":"Timothee-Yeramian","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"read/write hotspots to disk"},"tags":["Mesh","UV","Material"]},{"id":"to_square","schema_version":"1.0.0","name":"To Square","version":"2.2.2","tagline":"Square the selection","archive_hash":"sha256:fe3f6130509d805540a80f0bab03e5bae0396de1f3bee2c08d3b84359b5baf43","archive_size":44067,"archive_url":"https://extensions.blender.org/download/sha256:fe3f6130509d805540a80f0bab03e5bae0396de1f3bee2c08d3b84359b5baf43/add-on-to-square-v2.2.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/to-square/","maintainer":"Jean-Yves-Grosbeau","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"dynamic_head_property_manager","schema_version":"1.0.0","name":"Dynamic Head Property Manager","version":"1.0.7","tagline":"Manage custom facial properties for Roblox Bundles","archive_hash":"sha256:ca7ee4063be416c9a82c1552a97efbf4227b4ce210826547e2b8cd164a418e5b","archive_size":26446,"archive_url":"https://extensions.blender.org/download/sha256:ca7ee4063be416c9a82c1552a97efbf4227b4ce210826547e2b8cd164a418e5b/add-on-dynamic-head-property-manager-v1.0.7.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dynamic-head-property-manager/","maintainer":"Cloud-Guy","license":["SPDX:GPL-3.0-or-later"]},{"id":"enhanced_svg","schema_version":"1.0.0","name":"Enhanced SVG","version":"0.2.4","tagline":"Import SVG with accurate colors and path processing","archive_hash":"sha256:b705c2ef0296b215256fcefbe87325afd61b4e0888865971df466d5dcbd2345c","archive_size":4025920,"archive_url":"https://extensions.blender.org/download/sha256:b705c2ef0296b215256fcefbe87325afd61b4e0888865971df466d5dcbd2345c/add-on-enhanced-svg-v0.2.4-windows-x64.zip","type":"add-on","blender_version_min":"5.1.0","website":"https://extensions.blender.org/add-ons/enhanced-svg/","maintainer":"Jan-Hendrik-Müller","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk"},"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"M2V","schema_version":"1.0.0","name":"MIDI To Visuals","version":"1.2.0","tagline":"With MIDI file as input create somes 3D animations in blender","archive_hash":"sha256:41df46ef9449fb6aa01515bbdc077007b472e024683bf1f62241fda5b7342ae1","archive_size":41169,"archive_url":"https://extensions.blender.org/download/sha256:41df46ef9449fb6aa01515bbdc077007b472e024683bf1f62241fda5b7342ae1/add-on-m2v-v1.2.0.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/m2v/","maintainer":"Patochun","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation"]},{"id":"separate_loose_plus","schema_version":"1.0.0","name":"Separate Loose Plus","version":"1.0.0","tagline":"Enhanced mesh separation tools with object tracking","archive_hash":"sha256:944ad096034743a6fef458b743b445f076abd55dd41698eb83f6d94d6085b7a5","archive_size":1973,"archive_url":"https://extensions.blender.org/download/sha256:944ad096034743a6fef458b743b445f076abd55dd41698eb83f6d94d6085b7a5/add-on-separate-loose-plus-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/separate-loose-plus/","maintainer":"RobbieK","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Modeling"]},{"id":"bve_import_export","schema_version":"1.0.0","name":"BVE Import/Export","version":"5.1.3","tagline":"Import/Export DirectX X (.x) or Export CSV files for BVE/OpenBVE","archive_hash":"sha256:23092e0894371d7d2fdf638fec806a949100f719eb7d39f7be2a87d693add984","archive_size":22514,"archive_url":"https://extensions.blender.org/download/sha256:23092e0894371d7d2fdf638fec806a949100f719eb7d39f7be2a87d693add984/add-on-bve-import-export-v5.1.3.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/bve-import-export/","maintainer":"Kusaanko","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export model file from/to disk"},"tags":["Import-Export"]},{"id":"symple","schema_version":"1.0.0","name":"Symple (symmetry groups)","version":"0.1.2","tagline":"Create figures with spherical symmetry with ease","archive_hash":"sha256:d896c95bba01abaaf56f2c5f6c741c51b63ca097915427aa7ade2315094376c3","archive_size":29123,"archive_url":"https://extensions.blender.org/download/sha256:d896c95bba01abaaf56f2c5f6c741c51b63ca097915427aa7ade2315094376c3/add-on-symple-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/symple/","maintainer":"Martín-Torres-Valverde","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","Modeling","Object"]},{"id":"select_by_index","schema_version":"1.0.0","name":"Select By Index","version":"1.3.0","tagline":"Select all vertices, edges, or faces within an index range","archive_hash":"sha256:bd41c77ef889b5b84174a0cf88c41ebd6526046f82eb196fc9528ed43232e050","archive_size":3131,"archive_url":"https://extensions.blender.org/download/sha256:bd41c77ef889b5b84174a0cf88c41ebd6526046f82eb196fc9528ed43232e050/add-on-select-by-index-v1.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/select-by-index/","maintainer":"Eric-Banker","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"blender_lut_exporter","schema_version":"1.0.0","name":"LUT Exporter and Importer","version":"2.0.1","tagline":"Converts adjustment layer into LUT .cube file and back","archive_hash":"sha256:7e0e7b2b951f02114cebb97c5c44ffeacb93b28278107b3ac87b9e5b6f064bcd","archive_size":5588,"archive_url":"https://extensions.blender.org/download/sha256:7e0e7b2b951f02114cebb97c5c44ffeacb93b28278107b3ac87b9e5b6f064bcd/add-on-blender-lut-exporter-v2.0.1.zip","type":"add-on","blender_version_min":"5.0.0","website":"https://extensions.blender.org/add-ons/blender-lut-exporter/","maintainer":"ichlubna","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Sequencer"]},{"id":"arc_edge","schema_version":"1.0.0","name":"Arc Edge","version":"1.1.0","tagline":"Arc Edge","archive_hash":"sha256:2a3d3700534566d81d8202a795db594b1e36f407368276319a1141e67419bb4f","archive_size":10986,"archive_url":"https://extensions.blender.org/download/sha256:2a3d3700534566d81d8202a795db594b1e36f407368276319a1141e67419bb4f/add-on-arc-edge-v1.1.0.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/arc-edge/","maintainer":"dartmeadow","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve"]},{"id":"Render_from_Terminal","schema_version":"1.0.0","name":"Render from Terminal","version":"0.1.5","tagline":"Create script to launch render from terminal","archive_hash":"sha256:4d6f2ccd813bb51a7082467919ea0b4bc95fd31d1df952747a00ed4e5fa7d0d3","archive_size":10030,"archive_url":"https://extensions.blender.org/download/sha256:4d6f2ccd813bb51a7082467919ea0b4bc95fd31d1df952747a00ed4e5fa7d0d3/add-on-render-from-terminal-v0.1.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/render-from-terminal/","maintainer":"nukkio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create script to render from terminal"},"tags":["Render","Pipeline"]},{"id":"Fabnodes","schema_version":"1.0.0","name":"Fabnodes","version":"0.0.3","tagline":"Generates G-Code from geometry node attributes","archive_hash":"sha256:ca120a678f58ef1c62a12dd4b1ac055d79d7cbdf76bf6f22b609224a62ac2281","archive_size":5343,"archive_url":"https://extensions.blender.org/download/sha256:ca120a678f58ef1c62a12dd4b1ac055d79d7cbdf76bf6f22b609224a62ac2281/add-on-fabnodes-v0.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/fabnodes/","maintainer":"luigipacheco","license":["SPDX:GPL-3.0-or-later"],"tags":["Import-Export","Geometry Nodes"]},{"id":"substance_textures_importer","schema_version":"1.0.0","name":"Substance Textures Importer","version":"7.2.0","tagline":"Import & autoassign images from 3D painting tools like Substance","archive_hash":"sha256:625b71a17605867443eb678fbe9a3f79653e01c45ed73573d957343fe868ebae","archive_size":35651,"archive_url":"https://extensions.blender.org/download/sha256:625b71a17605867443eb678fbe9a3f79653e01c45ed73573d957343fe868ebae/add-on-substance-textures-importer-v7.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/substance-textures-importer/","maintainer":"Cosmin_Planchon","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import images from disk & read/write customs presets"},"tags":["Material","Import-Export","Node"]},{"id":"slot_link","schema_version":"1.0.0","name":"Slot Link","version":"0.1.1","tagline":"Easily manage projects with multiple separate animations","archive_hash":"sha256:8dced063d38dfa97cc26049bea026a6cf4cbe02b9344322fe89fec7f2af7b746","archive_size":38571,"archive_url":"https://extensions.blender.org/download/sha256:8dced063d38dfa97cc26049bea026a6cf4cbe02b9344322fe89fec7f2af7b746/add-on-slot-link-v0.1.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/slot-link/","maintainer":"mars","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","User Interface","Import-Export"]},{"id":"mesh_planes_pro","schema_version":"1.0.0","name":"Mesh Planes Pro","version":"2.0.1","tagline":"Ultimate Background Removal for Faster, Seamless Renders","archive_hash":"sha256:5691d05b04840ede23b7116782821e73d1fd34364c1bda4a69d3daa923832d8b","archive_size":2471909,"archive_url":"https://extensions.blender.org/download/sha256:5691d05b04840ede23b7116782821e73d1fd34364c1bda4a69d3daa923832d8b/add-on-mesh-planes-pro-v2.0.1.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/mesh-planes-pro/","maintainer":"Prince_Eagle","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Load node groups from blend file"},"tags":["Material","Node","Render","Mesh"]},{"id":"developer_utilities","schema_version":"1.0.0","name":"Developer Utilities","version":"1.1.0","tagline":"Make life of addon developers easier","archive_hash":"sha256:31a9dead337ef9cd554b62f096c7b056a7b182030d4adac874f2f04b4183479c","archive_size":9006,"archive_url":"https://extensions.blender.org/download/sha256:31a9dead337ef9cd554b62f096c7b056a7b182030d4adac874f2f04b4183479c/add-on-developer-utilities-v1.1.0.zip","type":"add-on","blender_version_min":"4.3.0","website":"https://extensions.blender.org/add-ons/developer-utilities/","maintainer":"scorpion81","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Open source files of addons for editing"},"tags":["Development"]},{"id":"srtm_terrain_importer","schema_version":"1.0.0","name":"SRTM Terrain Importer","version":"1.0.5","tagline":"Import SRTM elevation data as accurate 3D terrain","archive_hash":"sha256:72299885ab8bb5623bd3643e4b918cf2e29c56fe6010ead0f55e61796498f454","archive_size":6645,"archive_url":"https://extensions.blender.org/download/sha256:72299885ab8bb5623bd3643e4b918cf2e29c56fe6010ead0f55e61796498f454/add-on-srtm-terrain-importer-v1.0.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/srtm-terrain-importer/","maintainer":"NicolasPriniotakis","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import SRTM HGT files from disk"},"tags":["Import-Export"]},{"id":"Industrial_Light_AOV_Splitter","schema_version":"1.0.0","name":"Industrial Light AOV Splitter","version":"1.0.2","tagline":"Auto create better light aovs (diffuse_env, specular_env...)","archive_hash":"sha256:3ce1511db842081ca639c1f1bceea848ace8b389759e073611e6c2cc83f22b40","archive_size":9104,"archive_url":"https://extensions.blender.org/download/sha256:3ce1511db842081ca639c1f1bceea848ace8b389759e073611e6c2cc83f22b40/add-on-industrial-light-aov-splitter-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/industrial-light-aov-splitter/","maintainer":"Roland-Vyens","license":["SPDX:GPL-3.0-or-later"],"tags":["Compositing","Import-Export","Pipeline","Render"]},{"id":"servo_animation","schema_version":"1.0.0","name":"Servo Animation","version":"2.1.1","tagline":"Export your Blender animation to servo position values","archive_hash":"sha256:407fa6cac99b8ce6dcac652d729c71be13aafb4b930ecb00fba42ec5971189d4","archive_size":161106,"archive_url":"https://extensions.blender.org/download/sha256:407fa6cac99b8ce6dcac652d729c71be13aafb4b930ecb00fba42ec5971189d4/add-on-servo-animation-v2.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/servo-animation/","maintainer":"timhendriks93","license":["SPDX:GPL-3.0-or-later"],"tags":["Animation","Import-Export","Rigging"]},{"id":"ac_tools","schema_version":"1.0.0","name":"AC Tools","version":"0.1.6","tagline":"AC Tools for track modding","archive_hash":"sha256:6bd5108411d366836d9a49d4305bebdd0ea682ed4f15aac24303de5a67f5519a","archive_size":30826,"archive_url":"https://extensions.blender.org/download/sha256:6bd5108411d366836d9a49d4305bebdd0ea682ed4f15aac24303de5a67f5519a/add-on-ac-tools-v0.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ac-tools/","maintainer":"PhinDev","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export FBX from/to disk, Manage track folders"},"tags":["Object"]},{"id":"img_alpha_to_bsdf","schema_version":"1.0.0","name":"Connect image alpha","version":"1.0.6","tagline":"Connecting image alpha to shader alpha","archive_hash":"sha256:a0d765b49e728e95012895af1bb54d12c3b4ac68ab649115685c8b4d9eb65e02","archive_size":2692,"archive_url":"https://extensions.blender.org/download/sha256:a0d765b49e728e95012895af1bb54d12c3b4ac68ab649115685c8b4d9eb65e02/add-on-img-alpha-to-bsdf-v1.0.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/img-alpha-to-bsdf/","maintainer":"Snakyboopface","license":["SPDX:GPL-3.0-or-later"],"tags":["Node","User Interface","Material"]},{"id":"link_parents","schema_version":"1.0.0","name":"Link Parents","version":"1.2.1","tagline":"Link objects parents & edit Parent Inverse Matrix in UI","archive_hash":"sha256:23a8fa704f6f5c9ae99e6bf5d8b1ac3dbc4d85b6800146f5a5c8679eb60e9395","archive_size":2883,"archive_url":"https://extensions.blender.org/download/sha256:23a8fa704f6f5c9ae99e6bf5d8b1ac3dbc4d85b6800146f5a5c8679eb60e9395/add-on-link-parents-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/link-parents/","maintainer":"Trukas","license":["SPDX:GPL-3.0-or-later"],"tags":["Object","Rigging","User Interface"]},{"id":"sco_buttobjects","schema_version":"1.0.0","name":"SCO ButtObjects","version":"2.0.10","tagline":"Easily align Objects in your scene by Active Object or 3D Cursor","archive_hash":"sha256:b2f693945760fe9aff223e41471064fce657661381c94ed6e7e1f43c3bc3e542","archive_size":138062,"archive_url":"https://extensions.blender.org/download/sha256:b2f693945760fe9aff223e41471064fce657661381c94ed6e7e1f43c3bc3e542/add-on-sco-buttobjects-v2.0.10.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/sco-buttobjects/","maintainer":"BEAST_of_BURDEN","license":["SPDX:GPL-3.0-or-later"],"tags":["Object"]},{"id":"Grid_Layout","schema_version":"1.0.0","name":"Grid Layout","version":"1.5.8","tagline":"Tools to help layout your UV layout","archive_hash":"sha256:48d1b77f5dccd0f5c05ab05ac9455da0eab6f4b0c1a6cab089ad50f7f3686524","archive_size":30681,"archive_url":"https://extensions.blender.org/download/sha256:48d1b77f5dccd0f5c05ab05ac9455da0eab6f4b0c1a6cab089ad50f7f3686524/add-on-grid-layout-v1.5.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/grid-layout/","maintainer":"Hodgson3d","license":["SPDX:GPL-3.0-or-later"],"tags":["UV"]},{"id":"b_palettes","schema_version":"1.0.0","name":"B Palettes","version":"1.1.0","tagline":"Import/Export Color Palettes","archive_hash":"sha256:59bdbb835628977b5fcd1c88f53fc0d340766f97ef2d2ed477be34d813c53ae6","archive_size":5538,"archive_url":"https://extensions.blender.org/download/sha256:59bdbb835628977b5fcd1c88f53fc0d340766f97ef2d2ed477be34d813c53ae6/add-on-b-palettes-v1.1.0.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/b-palettes/","maintainer":"Dinesh007","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Requires access to directory with color palette files"},"tags":["Import-Export"]},{"id":"Selected_Bones_To_Vertex_Group","schema_version":"1.0.0","name":"Selected_Bones_To_Vertex_Group","version":"1.0.1","tagline":"Add or delete selected bone to selected mesh","archive_hash":"sha256:e5e49539892d63b5b1ffb7108f7f6cca2884cc598010405d88b2009f40faa9b0","archive_size":2074,"archive_url":"https://extensions.blender.org/download/sha256:e5e49539892d63b5b1ffb7108f7f6cca2884cc598010405d88b2009f40faa9b0/add-on-selected-bones-to-vertex-group-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/selected-bones-to-vertex-group/","maintainer":"mochi_Lin","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"highlighter","schema_version":"1.0.0","name":"Highlighter","version":"0.1.0","tagline":"Syntax highlighting for text objects","archive_hash":"sha256:3fec762b7df4f2667d391a68a55a5b4c78c356d64855104b16d03af7802f3046","archive_size":1209500,"archive_url":"https://extensions.blender.org/download/sha256:3fec762b7df4f2667d391a68a55a5b4c78c356d64855104b16d03af7802f3046/add-on-highlighter-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/highlighter/","maintainer":"pioverfour","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Curve","Text Editor"]},{"id":"frame_focus","schema_version":"1.0.0","name":"Frame Focus","version":"2.0.1","tagline":"List All Frame Nodes And Focus Easily","archive_hash":"sha256:6b86148b65108e75bd979d3f7e65befe9afd032a9c5225fc75ac46aef7c027bc","archive_size":6600,"archive_url":"https://extensions.blender.org/download/sha256:6b86148b65108e75bd979d3f7e65befe9afd032a9c5225fc75ac46aef7c027bc/add-on-frame-focus-v2.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/frame-focus/","maintainer":"Ou_Chiang","license":["SPDX:GPL-3.0-or-later"],"tags":["Node"]},{"id":"SelectModeKeymaps","schema_version":"1.0.0","name":"Select Mode Keymaps","version":"1.0.1","tagline":"Assign keymaps to toggle Object/Edit Mode and Select Modes","archive_hash":"sha256:2700fa8cc6cb035f7458c079b5e3561e9e93bf6a2e967c2f7ba5607db88fa573","archive_size":5772,"archive_url":"https://extensions.blender.org/download/sha256:2700fa8cc6cb035f7458c079b5e3561e9e93bf6a2e967c2f7ba5607db88fa573/add-on-selectmodekeymaps-v1.0.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/selectmodekeymaps/","maintainer":"1P2D","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"skin_mesh_to_bone","schema_version":"1.0.0","name":"Skin Mesh To Bone","version":"1.0.2","tagline":"Skins selected meshes to a bone on the active armature","archive_hash":"sha256:f8e66dc89bd268aefc76ad3d05727f43f34ab9e043103d0443c061c72d707faf","archive_size":3048,"archive_url":"https://extensions.blender.org/download/sha256:f8e66dc89bd268aefc76ad3d05727f43f34ab9e043103d0443c061c72d707faf/add-on-skin-mesh-to-bone-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/skin-mesh-to-bone/","maintainer":"darknation","license":["SPDX:GPL-3.0-or-later"],"tags":["Rigging"]},{"id":"Faster_FBX_Exporter","schema_version":"1.0.0","name":"Faster FBX Exporter","version":"0.3.0","tagline":"Faster .fbx Exporter for Static Objects With Modifiers","archive_hash":"sha256:7f37c3dff44762c23cc42046599b19ff1154e708723c5850875d421eeca4ab1a","archive_size":139398,"archive_url":"https://extensions.blender.org/download/sha256:7f37c3dff44762c23cc42046599b19ff1154e708723c5850875d421eeca4ab1a/add-on-faster-fbx-exporter-v0.3.0.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/faster-fbx-exporter/","maintainer":"Dan-Gry","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export .fbx files"},"tags":["Import-Export"]},{"id":"copyshapekeys","schema_version":"1.0.0","name":"ShapeKey Copy","version":"3.4.1","tagline":"Copy shapekeys from one mesh to another","archive_hash":"sha256:769278803ab26c411354aec6ded13c4017af8c85a8e9e23eba44434c1467d24b","archive_size":7196,"archive_url":"https://extensions.blender.org/download/sha256:769278803ab26c411354aec6ded13c4017af8c85a8e9e23eba44434c1467d24b/add-on-copyshapekeys-v3.4.1.zip","type":"add-on","blender_version_min":"4.5.0","website":"https://extensions.blender.org/add-ons/copyshapekeys/","maintainer":"Blenderbob","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Animation"]},{"id":"Control_Render_Regions","schema_version":"1.0.0","name":"Control Render Regions","version":"1.0.12","tagline":"Manage renders in region","archive_hash":"sha256:e78ea3e3ee8ce9bfee2d4f8894f8338e338fc524f1eba8f3b03ce7fc06967c2d","archive_size":7059441,"archive_url":"https://extensions.blender.org/download/sha256:e78ea3e3ee8ce9bfee2d4f8894f8338e338fc524f1eba8f3b03ce7fc06967c2d/add-on-control-render-regions-v1.0.12-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/control-render-regions/","maintainer":"nukkio","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Create script to render from terminal and render regions"},"platforms":["windows-x64"],"tags":["Render","Pipeline"]},{"id":"nla_midi_copier","schema_version":"1.0.0","name":"NLA Midi Copier","version":"1.2.0","tagline":"NLA and Graph Editor tools for syncing animation to midi files","archive_hash":"sha256:4acdaac298dd38372982087e4cacfa908780bd4993be62204d9df9b194fc30b2","archive_size":115530,"archive_url":"https://extensions.blender.org/download/sha256:4acdaac298dd38372982087e4cacfa908780bd4993be62204d9df9b194fc30b2/add-on-nla-midi-copier-v1.2.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nla-midi-copier/","maintainer":"Cornerback24","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Read midi files from disk"},"tags":["Animation"]},{"id":"blender_mqo","schema_version":"1.0.0","name":"MQO (Metasequoia) Format File Importer/Exporter","version":"2.0.0","tagline":"Import/Export MQO format files","archive_hash":"sha256:986c8ad77c5e90ec3b63e5b7653a7966e97f0ada40b47416f6412c6e3afbd171","archive_size":21616,"archive_url":"https://extensions.blender.org/download/sha256:986c8ad77c5e90ec3b63e5b7653a7966e97f0ada40b47416f6412c6e3afbd171/add-on-blender-mqo-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-mqo/","maintainer":"nutti","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/Export MQO from/to disk"},"tags":["Import-Export"]},{"id":"twformats","schema_version":"1.0.0","name":"Teeworlds and DDNet Map import","version":"0.4.1","tagline":"Import Teeworlds and DDNet maps","archive_hash":"sha256:a4137b2d611a4cf25828c185a44fe21ffb370637fe8c02413681b372a8d463f5","archive_size":9592799,"archive_url":"https://extensions.blender.org/download/sha256:a4137b2d611a4cf25828c185a44fe21ffb370637fe8c02413681b372a8d463f5/add-on-twformats-v0.4.1-linux-x64-windows-x64.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/twformats/","maintainer":"Patiga","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export files from/to disk"},"platforms":["linux-x64","windows-x64"],"tags":["Import-Export"]},{"id":"Graphite_Mono_Theme","schema_version":"1.0.0","name":"Graphite_Mono_Theme","version":"3.4.1","tagline":"Bluish Undertone Metallic Gray","archive_hash":"sha256:1298074feeb7ae7d847985b7d024f3aa57d3f65a4fce1c93d9059b4854ecab34","archive_size":5836,"archive_url":"https://extensions.blender.org/download/sha256:1298074feeb7ae7d847985b7d024f3aa57d3f65a4fce1c93d9059b4854ecab34/theme-graphite-mono-theme-v3.4.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/graphite-mono-theme/","maintainer":"Raze-Demon","license":["SPDX:GPL-3.0-or-later"],"tags":["Dark"]},{"id":"io_import_pixelart","schema_version":"1.0.0","name":"Import Pixel Art","version":"1.2.1","tagline":"Imports pixel art as colored cubes or squares for each pixel","archive_hash":"sha256:de95c730dc8ef2457d0ee54e90c95acfb3232a91bc6c7e6fa321c0bd9f33f4d1","archive_size":5860,"archive_url":"https://extensions.blender.org/download/sha256:de95c730dc8ef2457d0ee54e90c95acfb3232a91bc6c7e6fa321c0bd9f33f4d1/add-on-io-import-pixelart-v1.2.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-import-pixelart/","maintainer":"bloody_albatross","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import pixel art from disk"},"tags":["Import-Export"]},{"id":"scene_workspaces","schema_version":"1.0.0","name":"Scene Workspaces","version":"1.1.1","tagline":"Filter and sort your workspaces, scene by scene","archive_hash":"sha256:7466088a97d7e6ed393001712fe09d88e13315c379e91458582a28a0e890ba0a","archive_size":8786,"archive_url":"https://extensions.blender.org/download/sha256:7466088a97d7e6ed393001712fe09d88e13315c379e91458582a28a0e890ba0a/add-on-scene-workspaces-v1.1.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-workspaces/","maintainer":"Francesco-Bellini","license":["SPDX:GPL-3.0-or-later"],"tags":["Scene","System","User Interface"]},{"id":"aligning_horizontally_mini","schema_version":"1.0.0","name":"Aligning Horizontally Mini","version":"1.0.1","tagline":"Align selected objects in a customizable grid in the 3D viewport","archive_hash":"sha256:15eaa29ad5ba5afbc4ac5c3d63966ab75f89c85de7a8444359bdabee860d3f35","archive_size":3511,"archive_url":"https://extensions.blender.org/download/sha256:15eaa29ad5ba5afbc4ac5c3d63966ab75f89c85de7a8444359bdabee860d3f35/add-on-aligning-horizontally-mini-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/aligning-horizontally-mini/","maintainer":"Hydrocallis","license":["SPDX:GPL-3.0-or-later"],"tags":["3D View","Object"]},{"id":"lead_edge_maze_ash_creator","schema_version":"1.0.0","name":"Lead Edge Maze Ash Creator","version":"2.4.1","tagline":"Lead Edge Maze Ash","archive_hash":"sha256:003291b86247ce09847fd955f2f3fcc0433162af279eb1d262a35e0fd36fb541","archive_size":11149,"archive_url":"https://extensions.blender.org/download/sha256:003291b86247ce09847fd955f2f3fcc0433162af279eb1d262a35e0fd36fb541/add-on-lead-edge-maze-ash-creator-v2.4.1.zip","type":"add-on","blender_version_min":"5.0.1","website":"https://extensions.blender.org/add-ons/lead-edge-maze-ash-creator/","maintainer":"dartmeadow","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface"]},{"id":"govietools","schema_version":"1.0.0","name":"Govie Tools","version":"1.0.22","tagline":"Optimize your model for use in the Govie Editor","archive_hash":"sha256:f62adf82bf5d385a783b432b015d7898a1599f8c37a7829639bd4bc9138ad0cc","archive_size":123377,"archive_url":"https://extensions.blender.org/download/sha256:f62adf82bf5d385a783b432b015d7898a1599f8c37a7829639bd4bc9138ad0cc/add-on-govietools-v1.0.22.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/govietools/","maintainer":"3D-Interaction-Technologies","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export GLB to disk"},"tags":["Scene","Import-Export"]},{"id":"microscopynodes","schema_version":"1.0.0","name":"Microscopy Nodes","version":"3.1.1","tagline":"Handling microscopy data in Blender, up to 5D volumes","archive_hash":"sha256:fbfc509513ba6979eef49aea89a393ceeef006a8a7135d62c12db9737aebcbe7","archive_size":52922534,"archive_url":"https://extensions.blender.org/download/sha256:fbfc509513ba6979eef49aea89a393ceeef006a8a7135d62c12db9737aebcbe7/add-on-microscopynodes-v3.1.1-windows-x64.zip","type":"add-on","blender_version_min":"5.2.0","website":"https://extensions.blender.org/add-ons/microscopynodes/","maintainer":"Aafke-Gros","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing data files from disk, writing to cache folder","network":"Loading OME-zarr files from the internet from a given URL"},"platforms":["windows-x64"],"tags":["Import-Export"]},{"id":"new_object_from_selected_geometry","schema_version":"1.0.0","name":"New Object From Selected Geometry","version":"1.0.2","tagline":"Creates a new object from the selected geometry in Edit mode","archive_hash":"sha256:c6ce3d5ff406b1cb933740ad87fff0d80debe984357fe92e6912a4f5a988b75f","archive_size":13392,"archive_url":"https://extensions.blender.org/download/sha256:c6ce3d5ff406b1cb933740ad87fff0d80debe984357fe92e6912a4f5a988b75f/add-on-new-object-from-selected-geometry-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/new-object-from-selected-geometry/","maintainer":"Giambattista-Caltabiano","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh"]},{"id":"Xromm_Tools","schema_version":"1.0.0","name":"XROMM toolkit","version":"0.9.8","tagline":"XROMM toolkit for Blender","archive_hash":"sha256:ea1375fc8caf9b991ea4e11992c0baeb999a97a2f73e3d691a5ed3bd3fcbde95","archive_size":35566,"archive_url":"https://extensions.blender.org/download/sha256:ea1375fc8caf9b991ea4e11992c0baeb999a97a2f73e3d691a5ed3bd3fcbde95/add-on-xromm-tools-v0.9.8.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/xromm-tools/","maintainer":"pfalkingham","license":["SPDX:GPL-3.0-or-later"],"tags":["Pipeline"]},{"id":"io_scene_ase","schema_version":"1.0.0","name":"ASCII Scene Export (.ase)","version":"2.3.1","tagline":"Export .ase files used in Unreal Engine 1 & 2","archive_hash":"sha256:6706417e622364381e25d7277bdb66e981ddcddfe6b685464a7d3530a057d427","archive_size":16322,"archive_url":"https://extensions.blender.org/download/sha256:6706417e622364381e25d7277bdb66e981ddcddfe6b685464a7d3530a057d427/add-on-io-scene-ase-v2.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/io-scene-ase/","maintainer":"darknation","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Export .ase files to disk"},"tags":["Game Engine","Import-Export"]},{"id":"blender_magicavoxel","schema_version":"1.0.0","name":"MagicaVoxel VOX format","version":"1.6.0","tagline":"Importer addon for MagicaVoxel vox files","archive_hash":"sha256:12f75a437ac820604692717cc9325eb0c201f05af6b0b15031856f2d817dc8ef","archive_size":27187,"archive_url":"https://extensions.blender.org/download/sha256:12f75a437ac820604692717cc9325eb0c201f05af6b0b15031856f2d817dc8ef/add-on-blender-magicavoxel-v1.6.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/blender-magicavoxel/","maintainer":"AstrorEnales","license":["SPDX:GPL-3.0-or-later","SPDX:MIT"],"permissions":{"files":"Import VOX from disk"},"tags":["Import-Export"]},{"id":"odyssey_eobet_remix","schema_version":"1.0.0","name":"Odyssey eobet Remix","version":"2.0.1","tagline":"Theme highlighting the active object","archive_hash":"sha256:44250497cdad4efef753edd6470c5a7bd411e7b9a7d9828a6cb5d071d99bf743","archive_size":5970,"archive_url":"https://extensions.blender.org/download/sha256:44250497cdad4efef753edd6470c5a7bd411e7b9a7d9828a6cb5d071d99bf743/theme-odyssey-eobet-remix-v2.0.1.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/odyssey-eobet-remix/","maintainer":"eobet","license":["SPDX:GPL-2.0-or-later"],"tags":["Dark"]},{"id":"PieMenu_Everywhere","schema_version":"1.0.0","name":"PieMenu Everywhere","version":"1.4.5","tagline":"Maximize your efficiency with PieMenu Everywhere","archive_hash":"sha256:1a79638d9774eef739be1adc281c65600c588f3915f7d9f6a20c2cbac8b07e84","archive_size":438388,"archive_url":"https://extensions.blender.org/download/sha256:1a79638d9774eef739be1adc281c65600c588f3915f7d9f6a20c2cbac8b07e84/add-on-piemenu-everywhere-v1.4.5.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/piemenu-everywhere/","maintainer":"DeathShot-747","license":["SPDX:GPL-3.0-or-later"],"tags":["User Interface","Pipeline","3D View","Node"]},{"id":"Partybots_converter","schema_version":"1.0.0","name":"Partybots converter","version":"1.0.4","tagline":"This is a addon to build partybots maps","archive_hash":"sha256:c2c2e36e9997df032739b03d49854e547fa142684c193a7332d816e68d68ab00","archive_size":5333,"archive_url":"https://extensions.blender.org/download/sha256:c2c2e36e9997df032739b03d49854e547fa142684c193a7332d816e68d68ab00/add-on-partybots-converter-v1.0.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/partybots-converter/","maintainer":"vuyghu2020","license":["SPDX:GPL-3.0-or-later"],"permissions":{"clipboard":"To write the compiled output to the clipbord"},"tags":["3D View","Object","Game Engine"]},{"id":"add_airfoil","schema_version":"1.0.0","name":"Add Airfoil","version":"2.0.0","tagline":"Import Airfoil Dat Files into Blender","archive_hash":"sha256:118dfa0e9d40af8486bea8e149e0db5518db051681aba4165d699df9868f73ae","archive_size":2356,"archive_url":"https://extensions.blender.org/download/sha256:118dfa0e9d40af8486bea8e149e0db5518db051681aba4165d699df9868f73ae/add-on-add-airfoil-v2.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-airfoil/","maintainer":"Nerk","license":["SPDX:GPL-2.0-or-later"],"tags":["Import-Export","Mesh"]},{"id":"atomic_blender_cluster","schema_version":"1.0.0","name":"Atomic Blender Cluster","version":"1.0.0","tagline":"Creating atom clusters or nanoparticles in Blender","archive_hash":"sha256:77b6176aaf69f70917b353e0f5bf183f1f0ad4ff70cc4bf92d72471fe2647d18","archive_size":11917,"archive_url":"https://extensions.blender.org/download/sha256:77b6176aaf69f70917b353e0f5bf183f1f0ad4ff70cc4bf92d72471fe2647d18/add-on-atomic-blender-cluster-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/atomic-blender-cluster/","maintainer":"Blendphys","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh"]},{"id":"add_positive_cube","schema_version":"1.0.0","name":"Add Positive Cube","version":"1.1.0","tagline":"Adds a cube with its origin at the corner","archive_hash":"sha256:860bb8ffe1cce3f120ce334b0a6daba5d2d296c84fc12445839e96d288a541a2","archive_size":1913,"archive_url":"https://extensions.blender.org/download/sha256:860bb8ffe1cce3f120ce334b0a6daba5d2d296c84fc12445839e96d288a541a2/add-on-add-positive-cube-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/add-positive-cube/","maintainer":"jefftml","license":["SPDX:GPL-3.0-or-later"],"tags":["Add Mesh","3D View"]},{"id":"theme_modo","schema_version":"1.0.0","name":"Modo","version":"2.0.0","tagline":"Community-made theme inspired by Modo","archive_hash":"sha256:b9021a0edcfc6e68474ae1bb6a8257bd83b766c97e17020f4db723ed403ebc0f","archive_size":5822,"archive_url":"https://extensions.blender.org/download/sha256:b9021a0edcfc6e68474ae1bb6a8257bd83b766c97e17020f4db723ed403ebc0f/theme-theme-modo-v2.0.0.zip","type":"theme","blender_version_min":"5.0.0","website":"https://extensions.blender.org/themes/theme-modo/","maintainer":"Community","license":["SPDX:GPL-3.0-or-later"],"tags":["Inspired By","Dark"]},{"id":"stl_format_legacy","schema_version":"1.0.0","name":"STL format (legacy)","version":"1.1.4","tagline":"Import-Export STL files","archive_hash":"sha256:ae6e839285861f6e14022ea7b5b74a93760d2055d4cc43ea63fb1951918cc1e6","archive_size":7513,"archive_url":"https://extensions.blender.org/download/sha256:ae6e839285861f6e14022ea7b5b74a93760d2055d4cc43ea63fb1951918cc1e6/add-on-stl-format-legacy-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/stl-format-legacy/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Add-on expects to have access to filesytem."},"tags":["Import-Export"]},{"id":"atomic_blender_pdb_xyz","schema_version":"1.0.0","name":"Atomic Blender PDB/XYZ","version":"1.9.1","tagline":"Importing atoms listed in PDB and XYZ files into Blender","archive_hash":"sha256:d8ec654a526001a29d0c4f7450b33d27ccc9c74fed9d665d8a8e61a052c1c268","archive_size":51000,"archive_url":"https://extensions.blender.org/download/sha256:d8ec654a526001a29d0c4f7450b33d27ccc9c74fed9d665d8a8e61a052c1c268/add-on-atomic-blender-pdb-xyz-v1.9.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/atomic-blender-pdb-xyz/","maintainer":"Blendphys","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Add-on expects to have access to filesytem."},"tags":["Import-Export"]},{"id":"geodesic_domes","schema_version":"1.0.0","name":"Geodesic Domes","version":"0.3.6","tagline":"Create geodesic dome type objects","archive_hash":"sha256:7ebd015a85ae9d7d93dcc8942b12da6b120949b550ef97d09b273388926118f0","archive_size":25222,"archive_url":"https://extensions.blender.org/download/sha256:7ebd015a85ae9d7d93dcc8942b12da6b120949b550ef97d09b273388926118f0/add-on-geodesic-domes-v0.3.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/geodesic-domes/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Mesh"]},{"id":"ui_animation_render","schema_version":"1.0.0","name":"UI Animation Render","version":"0.1.0","tagline":"Render animations of the Blender UI","archive_hash":"sha256:4cc58957a66ebe8d6649a4d2028ad6217c67b78e121e5e73e62ef739bf85eb29","archive_size":2426,"archive_url":"https://extensions.blender.org/download/sha256:4cc58957a66ebe8d6649a4d2028ad6217c67b78e121e5e73e62ef739bf85eb29/add-on-ui-animation-render-v0.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/ui-animation-render/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Render"]},{"id":"inset_straight_skeleton","schema_version":"1.0.0","name":"Inset Straight Skeleton","version":"1.1.0","tagline":"Make an inset inside selection using straight skeleton algo . . ","archive_hash":"sha256:1b7ac6364ed7bc8736a2fa5bd7da0f2c07a527a6b0a50aed4801671eddc5c553","archive_size":33199,"archive_url":"https://extensions.blender.org/download/sha256:1b7ac6364ed7bc8736a2fa5bd7da0f2c07a527a6b0a50aed4801671eddc5c553/add-on-inset-straight-skeleton-v1.1.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/inset-straight-skeleton/","maintainer":"howardt","license":["SPDX:GPL-2.0-or-later"],"tags":["Mesh"]},{"id":"refine_tracking_solution","schema_version":"1.0.0","name":"Refine tracking solution","version":"1.1.6","tagline":"Refine motion solution by adjusting track weight","archive_hash":"sha256:d04ac43654a33c8c0a78c935479cefc4c052cae6092c565ef8bcefc412418a1f","archive_size":2210,"archive_url":"https://extensions.blender.org/download/sha256:d04ac43654a33c8c0a78c935479cefc4c052cae6092c565ef8bcefc412418a1f/add-on-refine-tracking-solution-v1.1.6.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/refine-tracking-solution/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Tracking"]},{"id":"assign_shape_keys","schema_version":"1.0.0","name":"Assign Shape Keys","version":"1.0.2","tagline":"Assigns one or more Bezier curves as shape keys to another . . ","archive_hash":"sha256:a4e428cf15b9d642308a6b1fab414544e2a061abb6758c78214c42889d0de7e1","archive_size":10143,"archive_url":"https://extensions.blender.org/download/sha256:a4e428cf15b9d642308a6b1fab414544e2a061abb6758c78214c42889d0de7e1/add-on-assign-shape-keys-v1.0.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/assign-shape-keys/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"export_pointcache_formatpc2","schema_version":"1.0.0","name":"Export Pointcache Format(.pc2)","version":"1.1.4","tagline":"Export mesh Pointcache data (.pc2)","archive_hash":"sha256:5302170dc699eeaa9eb0528daba03574f99e178726cba33fda104885fd0f7805","archive_size":2683,"archive_url":"https://extensions.blender.org/download/sha256:5302170dc699eeaa9eb0528daba03574f99e178726cba33fda104885fd0f7805/add-on-export-pointcache-formatpc2-v1.1.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-pointcache-formatpc2/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory where it exports .pc2 file"},"tags":["Import-Export"]},{"id":"corrective_shape_keys","schema_version":"1.0.0","name":"Corrective Shape Keys","version":"1.0.0","tagline":"Creates a corrective shape key for the current pose","archive_hash":"sha256:23c5d539e6623f6ea266d5ca43738db668191314263480e4400944b1ed04ff19","archive_size":4821,"archive_url":"https://extensions.blender.org/download/sha256:23c5d539e6623f6ea266d5ca43738db668191314263480e4400944b1ed04ff19/add-on-corrective-shape-keys-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/corrective-shape-keys/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Animation"]},{"id":"edit_operator_source","schema_version":"1.0.0","name":"Edit Operator Source","version":"1.2.4","tagline":"Opens source file of chosen operator or call locations","archive_hash":"sha256:d1d29b06f1e0fe08fe8fa5e8802d4b3a7680af75652ca3f5f2b5f98c8d167ebc","archive_size":2897,"archive_url":"https://extensions.blender.org/download/sha256:d1d29b06f1e0fe08fe8fa5e8802d4b3a7680af75652ca3f5f2b5f98c8d167ebc/add-on-edit-operator-source-v1.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/edit-operator-source/","maintainer":"scorpion81","license":["SPDX:GPL-2.0-or-later"],"tags":["Development"]},{"id":"newtek_mdd_format","schema_version":"1.0.0","name":"NewTek MDD format","version":"1.0.3","tagline":"Import-Export MDD as mesh shape keys","archive_hash":"sha256:100f9d821900bd61ab16ffef061f9bde2162564f06ab01f07659e83cba142759","archive_size":4368,"archive_url":"https://extensions.blender.org/download/sha256:100f9d821900bd61ab16ffef061f9bde2162564f06ab01f07659e83cba142759/add-on-newtek-mdd-format-v1.0.3.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/newtek-mdd-format/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory with MDD format files"},"tags":["Import-Export"]},{"id":"demo_mode","schema_version":"1.0.0","name":"Demo Mode","version":"1.0.0","tagline":"Demo mode lets you select multiple blend files and loop ove . . ","archive_hash":"sha256:d54b9643f49a26032c9bdb35050143a818f9d0db629435a9a78e8d17198dde62","archive_size":9071,"archive_url":"https://extensions.blender.org/download/sha256:d54b9643f49a26032c9bdb35050143a818f9d0db629435a9a78e8d17198dde62/add-on-demo-mode-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/demo-mode/","maintainer":"campbell","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"scene_information","schema_version":"1.0.0","name":"Scene Information","version":"0.3.1","tagline":"Show information about the .blend","archive_hash":"sha256:fdb4bfdbc9e07e2ab29404de0cbd8e746a09b271ec4359d2934063c30ff7afe6","archive_size":1816,"archive_url":"https://extensions.blender.org/download/sha256:fdb4bfdbc9e07e2ab29404de0cbd8e746a09b271ec4359d2934063c30ff7afe6/add-on-scene-information-v0.3.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/scene-information/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["System"]},{"id":"paint_palettes","schema_version":"1.0.0","name":"Paint Palettes","version":"0.9.4","tagline":"Palettes for color and weight paint modes","archive_hash":"sha256:8c144a176ec5f4bfc530a2847a6bbb460ddd6f10048226605da97ed51ef24321","archive_size":6133,"archive_url":"https://extensions.blender.org/download/sha256:8c144a176ec5f4bfc530a2847a6bbb460ddd6f10048226605da97ed51ef24321/add-on-paint-palettes-v0.9.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/paint-palettes/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Paint"]},{"id":"nuke_animation_format_chan","schema_version":"1.0.0","name":"Nuke Animation Format (.chan)","version":"1.0.0","tagline":"Import/Export object's animation with nuke","archive_hash":"sha256:9b6eed1f16c02a3ab7647f1f18160df19035a25c4a7fac6d05c70ea7a6de90c9","archive_size":4340,"archive_url":"https://extensions.blender.org/download/sha256:9b6eed1f16c02a3ab7647f1f18160df19035a25c4a7fac6d05c70ea7a6de90c9/add-on-nuke-animation-format-chan-v1.0.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/nuke-animation-format-chan/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Import-Export"]},{"id":"btracer","schema_version":"1.0.0","name":"BTracer","version":"1.2.4","tagline":"Tools for converting/animating objects/particles into curves","archive_hash":"sha256:5a29e1daf2b2a0d8e652c84c9b56c25b1f950d92c8a24b03de5b3aa9bdb98064","archive_size":17367,"archive_url":"https://extensions.blender.org/download/sha256:5a29e1daf2b2a0d8e652c84c9b56c25b1f950d92c8a24b03de5b3aa9bdb98064/add-on-btracer-v1.2.4.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/btracer/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"tags":["Add Curve"]},{"id":"web3d_x3d_vrml2_format","schema_version":"1.0.0","name":"Web3D X3D/VRML2 format","version":"2.5.1","tagline":"Import-Export X3D, Import VRML2","archive_hash":"sha256:74bcf2cb912af4be5db550f9486b4a0470b4513ef61d4df07ba091edd1441604","archive_size":100153,"archive_url":"https://extensions.blender.org/download/sha256:74bcf2cb912af4be5db550f9486b4a0470b4513ef61d4df07ba091edd1441604/add-on-web3d-x3d-vrml2-format-v2.5.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/web3d-x3d-vrml2-format/","maintainer":"Bujus_Krachus","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Required to access files for import/export","network":"Required to download web resources for import"},"tags":["Import-Export"]},{"id":"export_camera_animation","schema_version":"1.0.0","name":"Export Camera Animation","version":"0.1.2","tagline":"Export Cameras & Markers to a Python script","archive_hash":"sha256:fae5cacd489f79872e1dd8cce0b5ad8080f6bdfdc4633133d069157ac3d790ed","archive_size":2057,"archive_url":"https://extensions.blender.org/download/sha256:fae5cacd489f79872e1dd8cce0b5ad8080f6bdfdc4633133d069157ac3d790ed/add-on-export-camera-animation-v0.1.2.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/export-camera-animation/","maintainer":"Community","license":["SPDX:GPL-2.0-or-later"],"permissions":{"files":"Requires access to directory where it exports .py file"},"tags":["Import-Export"]},{"id":"cadbase_library","schema_version":"1.0.0","name":"CADBase Library","version":"0.3.0","tagline":"Add-on enables data sync with remote storage (cloud)","archive_hash":"sha256:395e335930e4537a2d742750f571c2dbf12c6a9475d2deb22bbe92bfe819f7be","archive_size":190158,"archive_url":"https://extensions.blender.org/download/sha256:395e335930e4537a2d742750f571c2dbf12c6a9475d2deb22bbe92bfe819f7be/add-on-cadbase-library-v0.3.0.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/cadbase-library/","maintainer":"mnnxp","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Import/export library data from/to disk","network":"Need to to sync library data with a remote server","clipboard":"Copy component link to clipboard"},"tags":["Import-Export"]},{"id":"forts_map","schema_version":"1.0.0","name":"Forts Map Importer","version":"1.0.1","tagline":"Import Forts Map","archive_hash":"sha256:4657348ef634c9404c900accbe3cbc7799952cb8416f5afd6f24939483de4b66","archive_size":4234,"archive_url":"https://extensions.blender.org/download/sha256:4657348ef634c9404c900accbe3cbc7799952cb8416f5afd6f24939483de4b66/add-on-forts-map-v1.0.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/forts-map/","maintainer":"Gonnetz","license":["SPDX:GPL-3.0-or-later"],"tags":["Mesh","Import-Export"]},{"id":"democap_tools","schema_version":"1.0.0","name":"DEMoCap Tools","version":"1.8.1","tagline":"Tools for importing DEMoCap motion captures into Blender","archive_hash":"sha256:c007ea7eb409a3831edc0f4d62611c6e32c7a1320c0cfc2cafa4b9ac5b84025c","archive_size":116066,"archive_url":"https://extensions.blender.org/download/sha256:c007ea7eb409a3831edc0f4d62611c6e32c7a1320c0cfc2cafa4b9ac5b84025c/add-on-democap-tools-v1.8.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/democap-tools/","maintainer":"DragonDreams","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Loading motion capture files","network":"Connect to DEMoCap (Live Connection)"},"tags":["Import-Export","Animation"]},{"id":"dragengine_tools","schema_version":"1.0.0","name":"Drag[en]gine Import/Export","version":"1.29.1","tagline":"Import/Export Drag[en]gine Resources including helper tools","archive_hash":"sha256:b72e32bc0067170ec0865d3dc1eef9a487235043d566b286c85456f00189b14a","archive_size":115706,"archive_url":"https://extensions.blender.org/download/sha256:b72e32bc0067170ec0865d3dc1eef9a487235043d566b286c85456f00189b14a/add-on-dragengine-tools-v1.29.1.zip","type":"add-on","blender_version_min":"4.2.0","website":"https://extensions.blender.org/add-ons/dragengine-tools/","maintainer":"DragonDreams","license":["SPDX:GPL-3.0-or-later"],"permissions":{"files":"Importing/Exporting resources"},"tags":["Import-Export","3D View","Mesh","Object","Animation"]}],"version":"v1"} \ No newline at end of file diff --git a/extensions/blender_org/looptools/__init__.py b/extensions/blender_org/looptools/__init__.py deleted file mode 100644 index 4ae7cbd..0000000 --- a/extensions/blender_org/looptools/__init__.py +++ /dev/null @@ -1,5244 +0,0 @@ -# SPDX-FileCopyrightText: 2011-2023 Blender Foundation -# -# SPDX-License-Identifier: GPL-2.0-or-later - -# Maintainer: Vladimir Spivak (cwolf3d) -# Originally an addon by Bart Crouch - -bl_info = { - "name": "LoopTools", - "author": "Bart Crouch, Vladimir Spivak (cwolf3d)", - "version": (4, 7, 7), - "blender": (2, 80, 0), - "location": "View3D > Sidebar > Edit Tab / Edit Mode Context Menu", - "warning": "", - "description": "Mesh modelling toolkit. Several tools to aid modelling", - "doc_url": "{BLENDER_MANUAL_URL}/addons/mesh/looptools.html", - "category": "Mesh", -} - - -import bmesh -import bpy -import collections -import mathutils -import math -from bpy_extras import view3d_utils -from bpy.types import ( - Operator, - Menu, - Panel, - PropertyGroup, - AddonPreferences, - ) -from bpy.props import ( - BoolProperty, - EnumProperty, - FloatProperty, - IntProperty, - PointerProperty, - StringProperty, - ) - -# ######################################## -# ##### General functions ################ -# ######################################## - -# used by all tools to improve speed on reruns Unlink -looptools_cache = {} - - -def get_strokes(self, context): - looptools = context.window_manager.looptools - if looptools.gstretch_use_guide == "Annotation": - try: - strokes = bpy.data.grease_pencils[0].layers.active.active_frame.strokes - return True - except: - self.report({'WARNING'}, "active Annotation strokes not found") - return False - if looptools.gstretch_use_guide == "GPencil" and not looptools.gstretch_guide == None: - try: - strokes = looptools.gstretch_guide.data.layers.active.active_frame.strokes - return True - except: - self.report({'WARNING'}, "active GPencil strokes not found") - return False - else: - return False - -# force a full recalculation next time -def cache_delete(tool): - if tool in looptools_cache: - del looptools_cache[tool] - - -# check cache for stored information -def cache_read(tool, object, bm, input_method, boundaries): - # current tool not cached yet - if tool not in looptools_cache: - return(False, False, False, False, False) - # check if selected object didn't change - if object.name != looptools_cache[tool]["object"]: - return(False, False, False, False, False) - # check if input didn't change - if input_method != looptools_cache[tool]["input_method"]: - return(False, False, False, False, False) - if boundaries != looptools_cache[tool]["boundaries"]: - return(False, False, False, False, False) - modifiers = [mod.name for mod in object.modifiers if mod.show_viewport and - mod.type == 'MIRROR'] - if modifiers != looptools_cache[tool]["modifiers"]: - return(False, False, False, False, False) - input = [v.index for v in bm.verts if v.select and not v.hide] - if input != looptools_cache[tool]["input"]: - return(False, False, False, False, False) - # reading values - single_loops = looptools_cache[tool]["single_loops"] - loops = looptools_cache[tool]["loops"] - derived = looptools_cache[tool]["derived"] - mapping = looptools_cache[tool]["mapping"] - - return(True, single_loops, loops, derived, mapping) - - -# store information in the cache -def cache_write(tool, object, bm, input_method, boundaries, single_loops, -loops, derived, mapping): - # clear cache of current tool - if tool in looptools_cache: - del looptools_cache[tool] - # prepare values to be saved to cache - input = [v.index for v in bm.verts if v.select and not v.hide] - modifiers = [mod.name for mod in object.modifiers if mod.show_viewport - and mod.type == 'MIRROR'] - # update cache - looptools_cache[tool] = { - "input": input, "object": object.name, - "input_method": input_method, "boundaries": boundaries, - "single_loops": single_loops, "loops": loops, - "derived": derived, "mapping": mapping, "modifiers": modifiers} - - -# calculates natural cubic splines through all given knots -def calculate_cubic_splines(bm_mod, tknots, knots): - # hack for circular loops - if knots[0] == knots[-1] and len(knots) > 1: - circular = True - k_new1 = [] - for k in range(-1, -5, -1): - if k - 1 < -len(knots): - k += len(knots) - k_new1.append(knots[k - 1]) - k_new2 = [] - for k in range(4): - if k + 1 > len(knots) - 1: - k -= len(knots) - k_new2.append(knots[k + 1]) - for k in k_new1: - knots.insert(0, k) - for k in k_new2: - knots.append(k) - t_new1 = [] - total1 = 0 - for t in range(-1, -5, -1): - if t - 1 < -len(tknots): - t += len(tknots) - total1 += tknots[t] - tknots[t - 1] - t_new1.append(tknots[0] - total1) - t_new2 = [] - total2 = 0 - for t in range(4): - if t + 1 > len(tknots) - 1: - t -= len(tknots) - total2 += tknots[t + 1] - tknots[t] - t_new2.append(tknots[-1] + total2) - for t in t_new1: - tknots.insert(0, t) - for t in t_new2: - tknots.append(t) - else: - circular = False - # end of hack - - n = len(knots) - if n < 2: - return False - x = tknots[:] - locs = [bm_mod.verts[k].co[:] for k in knots] - result = [] - for j in range(3): - a = [] - for i in locs: - a.append(i[j]) - h = [] - for i in range(n - 1): - if x[i + 1] - x[i] == 0: - h.append(1e-8) - else: - h.append(x[i + 1] - x[i]) - q = [False] - for i in range(1, n - 1): - q.append(3 / h[i] * (a[i + 1] - a[i]) - 3 / h[i - 1] * (a[i] - a[i - 1])) - l = [1.0] - u = [0.0] - z = [0.0] - for i in range(1, n - 1): - l.append(2 * (x[i + 1] - x[i - 1]) - h[i - 1] * u[i - 1]) - if l[i] == 0: - l[i] = 1e-8 - u.append(h[i] / l[i]) - z.append((q[i] - h[i - 1] * z[i - 1]) / l[i]) - l.append(1.0) - z.append(0.0) - b = [False for i in range(n - 1)] - c = [False for i in range(n)] - d = [False for i in range(n - 1)] - c[n - 1] = 0.0 - for i in range(n - 2, -1, -1): - c[i] = z[i] - u[i] * c[i + 1] - b[i] = (a[i + 1] - a[i]) / h[i] - h[i] * (c[i + 1] + 2 * c[i]) / 3 - d[i] = (c[i + 1] - c[i]) / (3 * h[i]) - for i in range(n - 1): - result.append([a[i], b[i], c[i], d[i], x[i]]) - splines = [] - for i in range(len(knots) - 1): - splines.append([result[i], result[i + n - 1], result[i + (n - 1) * 2]]) - if circular: # cleaning up after hack - knots = knots[4:-4] - tknots = tknots[4:-4] - - return(splines) - - -# calculates linear splines through all given knots -def calculate_linear_splines(bm_mod, tknots, knots): - splines = [] - for i in range(len(knots) - 1): - a = bm_mod.verts[knots[i]].co - b = bm_mod.verts[knots[i + 1]].co - d = b - a - t = tknots[i] - u = tknots[i + 1] - t - splines.append([a, d, t, u]) # [locStart, locDif, tStart, tDif] - - return(splines) - - -# calculate a best-fit plane to the given vertices -def calculate_plane(bm_mod, loop, method="best_fit", object=False): - # getting the vertex locations - locs = [bm_mod.verts[v].co.copy() for v in loop[0]] - - # calculating the center of masss - com = mathutils.Vector() - for loc in locs: - com += loc - com /= len(locs) - x, y, z = com - - if method == 'best_fit': - # creating the covariance matrix - mat = mathutils.Matrix(((0.0, 0.0, 0.0), - (0.0, 0.0, 0.0), - (0.0, 0.0, 0.0), - )) - for loc in locs: - mat[0][0] += (loc[0] - x) ** 2 - mat[1][0] += (loc[0] - x) * (loc[1] - y) - mat[2][0] += (loc[0] - x) * (loc[2] - z) - mat[0][1] += (loc[1] - y) * (loc[0] - x) - mat[1][1] += (loc[1] - y) ** 2 - mat[2][1] += (loc[1] - y) * (loc[2] - z) - mat[0][2] += (loc[2] - z) * (loc[0] - x) - mat[1][2] += (loc[2] - z) * (loc[1] - y) - mat[2][2] += (loc[2] - z) ** 2 - - # calculating the normal to the plane - normal = False - try: - mat = matrix_invert(mat) - except: - ax = 2 - if math.fabs(sum(mat[0])) < math.fabs(sum(mat[1])): - if math.fabs(sum(mat[0])) < math.fabs(sum(mat[2])): - ax = 0 - elif math.fabs(sum(mat[1])) < math.fabs(sum(mat[2])): - ax = 1 - if ax == 0: - normal = mathutils.Vector((1.0, 0.0, 0.0)) - elif ax == 1: - normal = mathutils.Vector((0.0, 1.0, 0.0)) - else: - normal = mathutils.Vector((0.0, 0.0, 1.0)) - if not normal: - # warning! this is different from .normalize() - itermax = 500 - vec2 = mathutils.Vector((1.0, 1.0, 1.0)) - for i in range(itermax): - vec = vec2 - vec2 = mat @ vec - # Calculate length with double precision to avoid problems with `inf` - vec2_length = math.sqrt(vec2[0] ** 2 + vec2[1] ** 2 + vec2[2] ** 2) - if vec2_length != 0: - vec2 /= vec2_length - if vec2 == vec: - break - if vec2.length == 0: - vec2 = mathutils.Vector((1.0, 1.0, 1.0)) - normal = vec2 - - elif method == 'normal': - # averaging the vertex normals - v_normals = [bm_mod.verts[v].normal for v in loop[0]] - normal = mathutils.Vector() - for v_normal in v_normals: - normal += v_normal - normal /= len(v_normals) - normal.normalize() - - elif method == 'view': - # calculate view normal - rotation = bpy.context.space_data.region_3d.view_matrix.to_3x3().\ - inverted() - normal = rotation @ mathutils.Vector((0.0, 0.0, 1.0)) - if object: - normal = object.matrix_world.inverted().to_euler().to_matrix() @ \ - normal - - return(com, normal) - - -# calculate splines based on given interpolation method (controller function) -def calculate_splines(interpolation, bm_mod, tknots, knots): - if interpolation == 'cubic': - splines = calculate_cubic_splines(bm_mod, tknots, knots[:]) - else: # interpolations == 'linear' - splines = calculate_linear_splines(bm_mod, tknots, knots[:]) - - return(splines) - - -# check loops and only return valid ones -def check_loops(loops, mapping, bm_mod): - valid_loops = [] - for loop, circular in loops: - # loop needs to have at least 3 vertices - if len(loop) < 3: - continue - # loop needs at least 1 vertex in the original, non-mirrored mesh - if mapping: - all_virtual = True - for vert in loop: - if mapping[vert] > -1: - all_virtual = False - break - if all_virtual: - continue - # vertices can not all be at the same location - stacked = True - for i in range(len(loop) - 1): - if (bm_mod.verts[loop[i]].co - bm_mod.verts[loop[i + 1]].co).length > 1e-6: - stacked = False - break - if stacked: - continue - # passed all tests, loop is valid - valid_loops.append([loop, circular]) - - return(valid_loops) - - -# input: bmesh, output: dict with the edge-key as key and face-index as value -def dict_edge_faces(bm): - edge_faces = dict([[edgekey(edge), []] for edge in bm.edges if not edge.hide]) - for face in bm.faces: - if face.hide: - continue - for key in face_edgekeys(face): - edge_faces[key].append(face.index) - - return(edge_faces) - - -# input: bmesh (edge-faces optional), output: dict with face-face connections -def dict_face_faces(bm, edge_faces=False): - if not edge_faces: - edge_faces = dict_edge_faces(bm) - - connected_faces = dict([[face.index, []] for face in bm.faces if not face.hide]) - for face in bm.faces: - if face.hide: - continue - for edge_key in face_edgekeys(face): - for connected_face in edge_faces[edge_key]: - if connected_face == face.index: - continue - connected_faces[face.index].append(connected_face) - - return(connected_faces) - - -# input: bmesh, output: dict with the vert index as key and edge-keys as value -def dict_vert_edges(bm): - vert_edges = dict([[v.index, []] for v in bm.verts if not v.hide]) - for edge in bm.edges: - if edge.hide: - continue - ek = edgekey(edge) - for vert in ek: - vert_edges[vert].append(ek) - - return(vert_edges) - - -# input: bmesh, output: dict with the vert index as key and face index as value -def dict_vert_faces(bm): - vert_faces = dict([[v.index, []] for v in bm.verts if not v.hide]) - for face in bm.faces: - if not face.hide: - for vert in face.verts: - vert_faces[vert.index].append(face.index) - - return(vert_faces) - - -# input: list of edge-keys, output: dictionary with vertex-vertex connections -def dict_vert_verts(edge_keys): - # create connection data - vert_verts = {} - for ek in edge_keys: - for i in range(2): - if ek[i] in vert_verts: - vert_verts[ek[i]].append(ek[1 - i]) - else: - vert_verts[ek[i]] = [ek[1 - i]] - - return(vert_verts) - - -# return the edgekey ([v1.index, v2.index]) of a bmesh edge -def edgekey(edge): - return(tuple(sorted([edge.verts[0].index, edge.verts[1].index]))) - - -# returns the edgekeys of a bmesh face -def face_edgekeys(face): - return([tuple(sorted([edge.verts[0].index, edge.verts[1].index])) for edge in face.edges]) - - -# calculate input loops -def get_connected_input(object, bm, not_use_mirror, input): - # get mesh with modifiers applied - derived, bm_mod = get_derived_bmesh(object, bm, not_use_mirror) - - # calculate selected loops - edge_keys = [edgekey(edge) for edge in bm_mod.edges if edge.select and not edge.hide] - loops = get_connected_selections(edge_keys) - - # if only selected loops are needed, we're done - if input == 'selected': - return(derived, bm_mod, loops) - # elif input == 'all': - loops = get_parallel_loops(bm_mod, loops) - - return(derived, bm_mod, loops) - - -# sorts all edge-keys into a list of loops -def get_connected_selections(edge_keys): - # create connection data - vert_verts = dict_vert_verts(edge_keys) - - # find loops consisting of connected selected edges - loops = [] - while len(vert_verts) > 0: - loop = [iter(vert_verts.keys()).__next__()] - growing = True - flipped = False - - # extend loop - while growing: - # no more connection data for current vertex - if loop[-1] not in vert_verts: - if not flipped: - loop.reverse() - flipped = True - else: - growing = False - else: - extended = False - for i, next_vert in enumerate(vert_verts[loop[-1]]): - if next_vert not in loop: - vert_verts[loop[-1]].pop(i) - if len(vert_verts[loop[-1]]) == 0: - del vert_verts[loop[-1]] - # remove connection both ways - if next_vert in vert_verts: - if len(vert_verts[next_vert]) == 1: - del vert_verts[next_vert] - else: - vert_verts[next_vert].remove(loop[-1]) - loop.append(next_vert) - extended = True - break - if not extended: - # found one end of the loop, continue with next - if not flipped: - loop.reverse() - flipped = True - # found both ends of the loop, stop growing - else: - growing = False - - # check if loop is circular - if loop[0] in vert_verts: - if loop[-1] in vert_verts[loop[0]]: - # is circular - if len(vert_verts[loop[0]]) == 1: - del vert_verts[loop[0]] - else: - vert_verts[loop[0]].remove(loop[-1]) - if len(vert_verts[loop[-1]]) == 1: - del vert_verts[loop[-1]] - else: - vert_verts[loop[-1]].remove(loop[0]) - loop = [loop, True] - else: - # not circular - loop = [loop, False] - else: - # not circular - loop = [loop, False] - - loops.append(loop) - - return(loops) - - -# get the derived mesh data, if there is a mirror modifier -def get_derived_bmesh(object, bm, not_use_mirror): - # check for mirror modifiers - if 'MIRROR' in [mod.type for mod in object.modifiers if mod.show_viewport]: - derived = True - # disable other modifiers - show_viewport = [mod.name for mod in object.modifiers if mod.show_viewport] - merge = [] - for mod in object.modifiers: - if mod.type != 'MIRROR': - mod.show_viewport = False - #leave the merge points untouched - if mod.type == 'MIRROR': - merge.append(mod.use_mirror_merge) - if not_use_mirror: - mod.use_mirror_merge = False - # get derived mesh - bm_mod = bmesh.new() - depsgraph = bpy.context.evaluated_depsgraph_get() - object_eval = object.evaluated_get(depsgraph) - mesh_mod = object_eval.to_mesh() - bm_mod.from_mesh(mesh_mod) - object_eval.to_mesh_clear() - # re-enable other modifiers - for mod_name in show_viewport: - object.modifiers[mod_name].show_viewport = True - merge.reverse() - for mod in object.modifiers: - if mod.type == 'MIRROR': - mod.use_mirror_merge = merge.pop() - # no mirror modifiers, so no derived mesh necessary - else: - derived = False - bm_mod = bm - - bm_mod.verts.ensure_lookup_table() - bm_mod.edges.ensure_lookup_table() - bm_mod.faces.ensure_lookup_table() - - return(derived, bm_mod) - - -# return a mapping of derived indices to indices -def get_mapping(derived, bm, bm_mod, single_vertices, full_search, loops): - if not derived: - return(False) - - if full_search: - verts = [v for v in bm.verts if not v.hide] - else: - verts = [v for v in bm.verts if v.select and not v.hide] - - # non-selected vertices around single vertices also need to be mapped - if single_vertices: - mapping = dict([[vert, -1] for vert in single_vertices]) - verts_mod = [bm_mod.verts[vert] for vert in single_vertices] - for v in verts: - for v_mod in verts_mod: - if (v.co - v_mod.co).length < 1e-6: - mapping[v_mod.index] = v.index - break - real_singles = [v_real for v_real in mapping.values() if v_real > -1] - - verts_indices = [vert.index for vert in verts] - for face in [face for face in bm.faces if not face.select and not face.hide]: - for vert in face.verts: - if vert.index in real_singles: - for v in face.verts: - if v.index not in verts_indices: - if v not in verts: - verts.append(v) - break - - # create mapping of derived indices to indices - mapping = dict([[vert, -1] for loop in loops for vert in loop[0]]) - if single_vertices: - for single in single_vertices: - mapping[single] = -1 - verts_mod = [bm_mod.verts[i] for i in mapping.keys()] - for v in verts: - for v_mod in verts_mod: - if (v.co - v_mod.co).length < 1e-6: - mapping[v_mod.index] = v.index - verts_mod.remove(v_mod) - break - - return(mapping) - - -# calculate the determinant of a matrix -def matrix_determinant(m): - determinant = m[0][0] * m[1][1] * m[2][2] + m[0][1] * m[1][2] * m[2][0] \ - + m[0][2] * m[1][0] * m[2][1] - m[0][2] * m[1][1] * m[2][0] \ - - m[0][1] * m[1][0] * m[2][2] - m[0][0] * m[1][2] * m[2][1] - - return(determinant) - - -# custom matrix inversion, to provide higher precision than the built-in one -def matrix_invert(m): - r = mathutils.Matrix(( - (m[1][1] * m[2][2] - m[1][2] * m[2][1], m[0][2] * m[2][1] - m[0][1] * m[2][2], - m[0][1] * m[1][2] - m[0][2] * m[1][1]), - (m[1][2] * m[2][0] - m[1][0] * m[2][2], m[0][0] * m[2][2] - m[0][2] * m[2][0], - m[0][2] * m[1][0] - m[0][0] * m[1][2]), - (m[1][0] * m[2][1] - m[1][1] * m[2][0], m[0][1] * m[2][0] - m[0][0] * m[2][1], - m[0][0] * m[1][1] - m[0][1] * m[1][0]))) - - return (r * (1 / matrix_determinant(m))) - - -# returns a list of all loops parallel to the input, input included -def get_parallel_loops(bm_mod, loops): - # get required dictionaries - edge_faces = dict_edge_faces(bm_mod) - connected_faces = dict_face_faces(bm_mod, edge_faces) - # turn vertex loops into edge loops - edgeloops = [] - for loop in loops: - edgeloop = [[sorted([loop[0][i], loop[0][i + 1]]) for i in - range(len(loop[0]) - 1)], loop[1]] - if loop[1]: # circular - edgeloop[0].append(sorted([loop[0][-1], loop[0][0]])) - edgeloops.append(edgeloop[:]) - # variables to keep track while iterating - all_edgeloops = [] - has_branches = False - - for loop in edgeloops: - # initialise with original loop - all_edgeloops.append(loop[0]) - newloops = [loop[0]] - verts_used = [] - for edge in loop[0]: - if edge[0] not in verts_used: - verts_used.append(edge[0]) - if edge[1] not in verts_used: - verts_used.append(edge[1]) - - # find parallel loops - while len(newloops) > 0: - side_a = [] - side_b = [] - for i in newloops[-1]: - i = tuple(i) - forbidden_side = False - if i not in edge_faces: - # weird input with branches - has_branches = True - break - for face in edge_faces[i]: - if len(side_a) == 0 and forbidden_side != "a": - side_a.append(face) - if forbidden_side: - break - forbidden_side = "a" - continue - elif side_a[-1] in connected_faces[face] and \ - forbidden_side != "a": - side_a.append(face) - if forbidden_side: - break - forbidden_side = "a" - continue - if len(side_b) == 0 and forbidden_side != "b": - side_b.append(face) - if forbidden_side: - break - forbidden_side = "b" - continue - elif side_b[-1] in connected_faces[face] and \ - forbidden_side != "b": - side_b.append(face) - if forbidden_side: - break - forbidden_side = "b" - continue - - if has_branches: - # weird input with branches - break - - newloops.pop(-1) - sides = [] - if side_a: - sides.append(side_a) - if side_b: - sides.append(side_b) - - for side in sides: - extraloop = [] - for fi in side: - for key in face_edgekeys(bm_mod.faces[fi]): - if key[0] not in verts_used and key[1] not in \ - verts_used: - extraloop.append(key) - break - if extraloop: - for key in extraloop: - for new_vert in key: - if new_vert not in verts_used: - verts_used.append(new_vert) - newloops.append(extraloop) - all_edgeloops.append(extraloop) - - # input contains branches, only return selected loop - if has_branches: - return(loops) - - # change edgeloops into normal loops - loops = [] - for edgeloop in all_edgeloops: - loop = [] - # grow loop by comparing vertices between consecutive edge-keys - for i in range(len(edgeloop) - 1): - for vert in range(2): - if edgeloop[i][vert] in edgeloop[i + 1]: - loop.append(edgeloop[i][vert]) - break - if loop: - # add starting vertex - for vert in range(2): - if edgeloop[0][vert] != loop[0]: - loop = [edgeloop[0][vert]] + loop - break - # add ending vertex - for vert in range(2): - if edgeloop[-1][vert] != loop[-1]: - loop.append(edgeloop[-1][vert]) - break - # check if loop is circular - if loop[0] == loop[-1]: - circular = True - loop = loop[:-1] - else: - circular = False - loops.append([loop, circular]) - - return(loops) - - -# gather initial data -def initialise(): - object = bpy.context.active_object - if 'MIRROR' in [mod.type for mod in object.modifiers if mod.show_viewport]: - # ensure that selection is synced for the derived mesh - bpy.ops.object.mode_set(mode='OBJECT') - bpy.ops.object.mode_set(mode='EDIT') - bm = bmesh.from_edit_mesh(object.data) - - bm.verts.ensure_lookup_table() - bm.edges.ensure_lookup_table() - bm.faces.ensure_lookup_table() - - return(object, bm) - - -# move the vertices to their new locations -def move_verts(object, bm, mapping, move, lock, influence): - if lock: - lock_x, lock_y, lock_z = lock - orient_slot = bpy.context.scene.transform_orientation_slots[0] - custom = orient_slot.custom_orientation - if custom: - mat = custom.matrix.to_4x4().inverted() @ object.matrix_world.copy() - elif orient_slot.type == 'LOCAL': - mat = mathutils.Matrix.Identity(4) - elif orient_slot.type == 'VIEW': - mat = bpy.context.region_data.view_matrix.copy() @ \ - object.matrix_world.copy() - else: # orientation == 'GLOBAL' - mat = object.matrix_world.copy() - mat_inv = mat.inverted() - - # get all mirror vectors - mirror_Vectors = [] - if object.data.use_mirror_x: - mirror_Vectors.append(mathutils.Vector((-1, 1, 1))) - if object.data.use_mirror_y: - mirror_Vectors.append(mathutils.Vector((1, -1, 1))) - if object.data.use_mirror_x and object.data.use_mirror_y: - mirror_Vectors.append(mathutils.Vector((-1, -1, 1))) - z_mirror_Vectors = [] - if object.data.use_mirror_z: - for v in mirror_Vectors: - z_mirror_Vectors.append(mathutils.Vector((1, 1, -1)) * v) - mirror_Vectors.extend(z_mirror_Vectors) - mirror_Vectors.append(mathutils.Vector((1, 1, -1))) - - for loop in move: - for index, loc in loop: - if mapping: - if mapping[index] == -1: - continue - else: - index = mapping[index] - if lock: - delta = (loc - bm.verts[index].co) @ mat_inv - if lock_x: - delta[0] = 0 - if lock_y: - delta[1] = 0 - if lock_z: - delta[2] = 0 - delta = delta @ mat - loc = bm.verts[index].co + delta - if influence < 0: - new_loc = loc - else: - new_loc = loc * (influence / 100) + \ - bm.verts[index].co * ((100 - influence) / 100) - - for mirror_Vector in mirror_Vectors: - for vert in bm.verts: - if vert.co == mirror_Vector * bm.verts[index].co: - vert.co = mirror_Vector * new_loc - - bm.verts[index].co = new_loc - - bm.normal_update() - object.data.update() - - bm.verts.ensure_lookup_table() - bm.edges.ensure_lookup_table() - bm.faces.ensure_lookup_table() - - -# load custom tool settings -def settings_load(self): - lt = bpy.context.window_manager.looptools - tool = self.name.split()[0].lower() - keys = self.as_keywords().keys() - for key in keys: - setattr(self, key, getattr(lt, tool + "_" + key)) - - -# store custom tool settings -def settings_write(self): - lt = bpy.context.window_manager.looptools - tool = self.name.split()[0].lower() - keys = self.as_keywords().keys() - for key in keys: - setattr(lt, tool + "_" + key, getattr(self, key)) - - -# clean up and set settings back to original state -def terminate(): - # update editmesh cached data - obj = bpy.context.active_object - if obj.mode == 'EDIT': - bmesh.update_edit_mesh(obj.data, loop_triangles=True, destructive=True) - - -# ######################################## -# ##### Bridge functions ################# -# ######################################## - -# calculate a cubic spline through the middle section of 4 given coordinates -def bridge_calculate_cubic_spline(bm, coordinates): - result = [] - x = [0, 1, 2, 3] - - for j in range(3): - a = [] - for i in coordinates: - a.append(float(i[j])) - h = [] - for i in range(3): - h.append(x[i + 1] - x[i]) - q = [False] - for i in range(1, 3): - q.append(3.0 / h[i] * (a[i + 1] - a[i]) - 3.0 / h[i - 1] * (a[i] - a[i - 1])) - l = [1.0] - u = [0.0] - z = [0.0] - for i in range(1, 3): - l.append(2.0 * (x[i + 1] - x[i - 1]) - h[i - 1] * u[i - 1]) - u.append(h[i] / l[i]) - z.append((q[i] - h[i - 1] * z[i - 1]) / l[i]) - l.append(1.0) - z.append(0.0) - b = [False for i in range(3)] - c = [False for i in range(4)] - d = [False for i in range(3)] - c[3] = 0.0 - for i in range(2, -1, -1): - c[i] = z[i] - u[i] * c[i + 1] - b[i] = (a[i + 1] - a[i]) / h[i] - h[i] * (c[i + 1] + 2.0 * c[i]) / 3.0 - d[i] = (c[i + 1] - c[i]) / (3.0 * h[i]) - for i in range(3): - result.append([a[i], b[i], c[i], d[i], x[i]]) - spline = [result[1], result[4], result[7]] - - return(spline) - - -# return a list with new vertex location vectors, a list with face vertex -# integers, and the highest vertex integer in the virtual mesh -def bridge_calculate_geometry(bm, lines, vertex_normals, segments, -interpolation, cubic_strength, min_width, max_vert_index): - new_verts = [] - faces = [] - - # calculate location based on interpolation method - def get_location(line, segment, splines): - v1 = bm.verts[lines[line][0]].co - v2 = bm.verts[lines[line][1]].co - if interpolation == 'linear': - return v1 + (segment / segments) * (v2 - v1) - else: # interpolation == 'cubic' - m = (segment / segments) - ax, bx, cx, dx, tx = splines[line][0] - x = ax + bx * m + cx * m ** 2 + dx * m ** 3 - ay, by, cy, dy, ty = splines[line][1] - y = ay + by * m + cy * m ** 2 + dy * m ** 3 - az, bz, cz, dz, tz = splines[line][2] - z = az + bz * m + cz * m ** 2 + dz * m ** 3 - return mathutils.Vector((x, y, z)) - - # no interpolation needed - if segments == 1: - for i, line in enumerate(lines): - if i < len(lines) - 1: - faces.append([line[0], lines[i + 1][0], lines[i + 1][1], line[1]]) - # more than 1 segment, interpolate - else: - # calculate splines (if necessary) once, so no recalculations needed - if interpolation == 'cubic': - splines = [] - for line in lines: - v1 = bm.verts[line[0]].co - v2 = bm.verts[line[1]].co - size = (v2 - v1).length * cubic_strength - splines.append(bridge_calculate_cubic_spline(bm, - [v1 + size * vertex_normals[line[0]], v1, v2, - v2 + size * vertex_normals[line[1]]])) - else: - splines = False - - # create starting situation - virtual_width = [(bm.verts[lines[i][0]].co - - bm.verts[lines[i + 1][0]].co).length for i - in range(len(lines) - 1)] - new_verts = [get_location(0, seg, splines) for seg in range(1, - segments)] - first_line_indices = [i for i in range(max_vert_index + 1, - max_vert_index + segments)] - - prev_verts = new_verts[:] # vertex locations of verts on previous line - prev_vert_indices = first_line_indices[:] - max_vert_index += segments - 1 # highest vertex index in virtual mesh - next_verts = [] # vertex locations of verts on current line - next_vert_indices = [] - - for i, line in enumerate(lines): - if i < len(lines) - 1: - v1 = line[0] - v2 = lines[i + 1][0] - end_face = True - for seg in range(1, segments): - loc1 = prev_verts[seg - 1] - loc2 = get_location(i + 1, seg, splines) - if (loc1 - loc2).length < (min_width / 100) * virtual_width[i] \ - and line[1] == lines[i + 1][1]: - # triangle, no new vertex - faces.append([v1, v2, prev_vert_indices[seg - 1], - prev_vert_indices[seg - 1]]) - next_verts += prev_verts[seg - 1:] - next_vert_indices += prev_vert_indices[seg - 1:] - end_face = False - break - else: - if i == len(lines) - 2 and lines[0] == lines[-1]: - # quad with first line, no new vertex - faces.append([v1, v2, first_line_indices[seg - 1], - prev_vert_indices[seg - 1]]) - v2 = first_line_indices[seg - 1] - v1 = prev_vert_indices[seg - 1] - else: - # quad, add new vertex - max_vert_index += 1 - faces.append([v1, v2, max_vert_index, - prev_vert_indices[seg - 1]]) - v2 = max_vert_index - v1 = prev_vert_indices[seg - 1] - new_verts.append(loc2) - next_verts.append(loc2) - next_vert_indices.append(max_vert_index) - if end_face: - faces.append([v1, v2, lines[i + 1][1], line[1]]) - - prev_verts = next_verts[:] - prev_vert_indices = next_vert_indices[:] - next_verts = [] - next_vert_indices = [] - - return(new_verts, faces, max_vert_index) - - -# calculate lines (list of lists, vertex indices) that are used for bridging -def bridge_calculate_lines(bm, loops, mode, twist, reverse): - lines = [] - loop1, loop2 = [i[0] for i in loops] - loop1_circular, loop2_circular = [i[1] for i in loops] - circular = loop1_circular or loop2_circular - circle_full = False - - # calculate loop centers - centers = [] - for loop in [loop1, loop2]: - center = mathutils.Vector() - for vertex in loop: - center += bm.verts[vertex].co - center /= len(loop) - centers.append(center) - for i, loop in enumerate([loop1, loop2]): - for vertex in loop: - if bm.verts[vertex].co == centers[i]: - # prevent zero-length vectors in angle comparisons - centers[i] += mathutils.Vector((0.01, 0, 0)) - break - center1, center2 = centers - - # calculate the normals of the virtual planes that the loops are on - normals = [] - normal_plurity = False - for i, loop in enumerate([loop1, loop2]): - # covariance matrix - mat = mathutils.Matrix(((0.0, 0.0, 0.0), - (0.0, 0.0, 0.0), - (0.0, 0.0, 0.0))) - x, y, z = centers[i] - for loc in [bm.verts[vertex].co for vertex in loop]: - mat[0][0] += (loc[0] - x) ** 2 - mat[1][0] += (loc[0] - x) * (loc[1] - y) - mat[2][0] += (loc[0] - x) * (loc[2] - z) - mat[0][1] += (loc[1] - y) * (loc[0] - x) - mat[1][1] += (loc[1] - y) ** 2 - mat[2][1] += (loc[1] - y) * (loc[2] - z) - mat[0][2] += (loc[2] - z) * (loc[0] - x) - mat[1][2] += (loc[2] - z) * (loc[1] - y) - mat[2][2] += (loc[2] - z) ** 2 - # plane normal - normal = False - if sum(mat[0]) < 1e-6 or sum(mat[1]) < 1e-6 or sum(mat[2]) < 1e-6: - normal_plurity = True - try: - mat.invert() - except: - if sum(mat[0]) == 0: - normal = mathutils.Vector((1.0, 0.0, 0.0)) - elif sum(mat[1]) == 0: - normal = mathutils.Vector((0.0, 1.0, 0.0)) - elif sum(mat[2]) == 0: - normal = mathutils.Vector((0.0, 0.0, 1.0)) - if not normal: - # warning! this is different from .normalize() - itermax = 500 - iter = 0 - vec = mathutils.Vector((1.0, 1.0, 1.0)) - vec2 = (mat @ vec) / (mat @ vec).length - while vec != vec2 and iter < itermax: - iter += 1 - vec = vec2 - vec2 = mat @ vec - if vec2.length != 0: - vec2 /= vec2.length - if vec2.length == 0: - vec2 = mathutils.Vector((1.0, 1.0, 1.0)) - normal = vec2 - normals.append(normal) - # have plane normals face in the same direction (maximum angle: 90 degrees) - if ((center1 + normals[0]) - center2).length < \ - ((center1 - normals[0]) - center2).length: - normals[0].negate() - if ((center2 + normals[1]) - center1).length > \ - ((center2 - normals[1]) - center1).length: - normals[1].negate() - - # rotation matrix, representing the difference between the plane normals - axis = normals[0].cross(normals[1]) - axis = mathutils.Vector([loc if abs(loc) > 1e-8 else 0 for loc in axis]) - if axis.angle(mathutils.Vector((0, 0, 1)), 0) > 1.5707964: - axis.negate() - angle = normals[0].dot(normals[1]) - rotation_matrix = mathutils.Matrix.Rotation(angle, 4, axis) - - # if circular, rotate loops so they are aligned - if circular: - # make sure loop1 is the circular one (or both are circular) - if loop2_circular and not loop1_circular: - loop1_circular, loop2_circular = True, False - loop1, loop2 = loop2, loop1 - - # match start vertex of loop1 with loop2 - target_vector = bm.verts[loop2[0]].co - center2 - dif_angles = [[(rotation_matrix @ (bm.verts[vertex].co - center1) - ).angle(target_vector, 0), False, i] for - i, vertex in enumerate(loop1)] - dif_angles.sort() - if len(loop1) != len(loop2): - angle_limit = dif_angles[0][0] * 1.2 # 20% margin - dif_angles = [ - [(bm.verts[loop2[0]].co - - bm.verts[loop1[index]].co).length, angle, index] for - angle, distance, index in dif_angles if angle <= angle_limit - ] - dif_angles.sort() - loop1 = loop1[dif_angles[0][2]:] + loop1[:dif_angles[0][2]] - - # have both loops face the same way - if normal_plurity and not circular: - second_to_first, second_to_second, second_to_last = [ - (bm.verts[loop1[1]].co - center1).angle( - bm.verts[loop2[i]].co - center2) for i in [0, 1, -1] - ] - last_to_first, last_to_second = [ - (bm.verts[loop1[-1]].co - - center1).angle(bm.verts[loop2[i]].co - center2) for - i in [0, 1] - ] - if (min(last_to_first, last_to_second) * 1.1 < min(second_to_first, - second_to_second)) or (loop2_circular and second_to_last * 1.1 < - min(second_to_first, second_to_second)): - loop1.reverse() - if circular: - loop1 = [loop1[-1]] + loop1[:-1] - else: - angle = (bm.verts[loop1[0]].co - center1).\ - cross(bm.verts[loop1[1]].co - center1).angle(normals[0], 0) - target_angle = (bm.verts[loop2[0]].co - center2).\ - cross(bm.verts[loop2[1]].co - center2).angle(normals[1], 0) - limit = 1.5707964 # 0.5*pi, 90 degrees - if not ((angle > limit and target_angle > limit) or - (angle < limit and target_angle < limit)): - loop1.reverse() - if circular: - loop1 = [loop1[-1]] + loop1[:-1] - elif normals[0].angle(normals[1]) > limit: - loop1.reverse() - if circular: - loop1 = [loop1[-1]] + loop1[:-1] - - # both loops have the same length - if len(loop1) == len(loop2): - # manual override - if twist: - if abs(twist) < len(loop1): - loop1 = loop1[twist:] + loop1[:twist] - if reverse: - loop1.reverse() - - lines.append([loop1[0], loop2[0]]) - for i in range(1, len(loop1)): - lines.append([loop1[i], loop2[i]]) - - # loops of different lengths - else: - # make loop1 longest loop - if len(loop2) > len(loop1): - loop1, loop2 = loop2, loop1 - loop1_circular, loop2_circular = loop2_circular, loop1_circular - - # manual override - if twist: - if abs(twist) < len(loop1): - loop1 = loop1[twist:] + loop1[:twist] - if reverse: - loop1.reverse() - - # shortest angle difference doesn't always give correct start vertex - if loop1_circular and not loop2_circular: - shifting = 1 - while shifting: - if len(loop1) - shifting < len(loop2): - shifting = False - break - to_last, to_first = [ - (rotation_matrix @ (bm.verts[loop1[-1]].co - center1)).angle( - (bm.verts[loop2[i]].co - center2), 0) for i in [-1, 0] - ] - if to_first < to_last: - loop1 = [loop1[-1]] + loop1[:-1] - shifting += 1 - else: - shifting = False - break - - # basic shortest side first - if mode == 'basic': - lines.append([loop1[0], loop2[0]]) - for i in range(1, len(loop1)): - if i >= len(loop2) - 1: - # triangles - lines.append([loop1[i], loop2[-1]]) - else: - # quads - lines.append([loop1[i], loop2[i]]) - - # shortest edge algorithm - else: # mode == 'shortest' - lines.append([loop1[0], loop2[0]]) - prev_vert2 = 0 - for i in range(len(loop1) - 1): - if prev_vert2 == len(loop2) - 1 and not loop2_circular: - # force triangles, reached end of loop2 - tri, quad = 0, 1 - elif prev_vert2 == len(loop2) - 1 and loop2_circular: - # at end of loop2, but circular, so check with first vert - tri, quad = [(bm.verts[loop1[i + 1]].co - - bm.verts[loop2[j]].co).length - for j in [prev_vert2, 0]] - circle_full = 2 - elif len(loop1) - 1 - i == len(loop2) - 1 - prev_vert2 and \ - not circle_full: - # force quads, otherwise won't make it to end of loop2 - tri, quad = 1, 0 - else: - # calculate if tri or quad gives shortest edge - tri, quad = [(bm.verts[loop1[i + 1]].co - - bm.verts[loop2[j]].co).length - for j in range(prev_vert2, prev_vert2 + 2)] - - # triangle - if tri < quad: - lines.append([loop1[i + 1], loop2[prev_vert2]]) - if circle_full == 2: - circle_full = False - # quad - elif not circle_full: - lines.append([loop1[i + 1], loop2[prev_vert2 + 1]]) - prev_vert2 += 1 - # quad to first vertex of loop2 - else: - lines.append([loop1[i + 1], loop2[0]]) - prev_vert2 = 0 - circle_full = True - - # final face for circular loops - if loop1_circular and loop2_circular: - lines.append([loop1[0], loop2[0]]) - - return(lines) - - -# calculate number of segments needed -def bridge_calculate_segments(bm, lines, loops, segments): - # return if amount of segments is set by user - if segments != 0: - return segments - - # edge lengths - average_edge_length = [ - (bm.verts[vertex].co - - bm.verts[loop[0][i + 1]].co).length for loop in loops for - i, vertex in enumerate(loop[0][:-1]) - ] - # closing edges of circular loops - average_edge_length += [ - (bm.verts[loop[0][-1]].co - - bm.verts[loop[0][0]].co).length for loop in loops if loop[1] - ] - - # average lengths - average_edge_length = sum(average_edge_length) / len(average_edge_length) - average_bridge_length = sum( - [(bm.verts[v1].co - - bm.verts[v2].co).length for v1, v2 in lines] - ) / len(lines) - - segments = max(1, round(average_bridge_length / average_edge_length)) - - return(segments) - - -# return dictionary with vertex index as key, and the normal vector as value -def bridge_calculate_virtual_vertex_normals(bm, lines, loops, edge_faces, -edgekey_to_edge): - if not edge_faces: # interpolation isn't set to cubic - return False - - # pity reduce() isn't one of the basic functions in python anymore - def average_vector_dictionary(dic): - for key, vectors in dic.items(): - # if type(vectors) == type([]) and len(vectors) > 1: - if len(vectors) > 1: - average = mathutils.Vector() - for vector in vectors: - average += vector - average /= len(vectors) - dic[key] = [average] - return dic - - # get all edges of the loop - edges = [ - [edgekey_to_edge[tuple(sorted([loops[j][0][i], - loops[j][0][i + 1]]))] for i in range(len(loops[j][0]) - 1)] for - j in [0, 1] - ] - edges = edges[0] + edges[1] - for j in [0, 1]: - if loops[j][1]: # circular - edges.append(edgekey_to_edge[tuple(sorted([loops[j][0][0], - loops[j][0][-1]]))]) - - """ - calculation based on face topology (assign edge-normals to vertices) - - edge_normal = face_normal x edge_vector - vertex_normal = average(edge_normals) - """ - vertex_normals = dict([(vertex, []) for vertex in loops[0][0] + loops[1][0]]) - for edge in edges: - faces = edge_faces[edgekey(edge)] # valid faces connected to edge - - if faces: - # get edge coordinates - v1, v2 = [bm.verts[edgekey(edge)[i]].co for i in [0, 1]] - edge_vector = v1 - v2 - if edge_vector.length < 1e-4: - # zero-length edge, vertices at same location - continue - edge_center = (v1 + v2) / 2 - - # average face coordinates, if connected to more than 1 valid face - if len(faces) > 1: - face_normal = mathutils.Vector() - face_center = mathutils.Vector() - for face in faces: - face_normal += face.normal - face_center += face.calc_center_median() - face_normal /= len(faces) - face_center /= len(faces) - else: - face_normal = faces[0].normal - face_center = faces[0].calc_center_median() - if face_normal.length < 1e-4: - # faces with a surface of 0 have no face normal - continue - - # calculate virtual edge normal - edge_normal = edge_vector.cross(face_normal) - edge_normal.length = 0.01 - if (face_center - (edge_center + edge_normal)).length > \ - (face_center - (edge_center - edge_normal)).length: - # make normal face the correct way - edge_normal.negate() - edge_normal.normalize() - # add virtual edge normal as entry for both vertices it connects - for vertex in edgekey(edge): - vertex_normals[vertex].append(edge_normal) - - """ - calculation based on connection with other loop (vertex focused method) - - used for vertices that aren't connected to any valid faces - - plane_normal = edge_vector x connection_vector - vertex_normal = plane_normal x edge_vector - """ - vertices = [ - vertex for vertex, normal in vertex_normals.items() if not normal - ] - - if vertices: - # edge vectors connected to vertices - edge_vectors = dict([[vertex, []] for vertex in vertices]) - for edge in edges: - for v in edgekey(edge): - if v in edge_vectors: - edge_vector = bm.verts[edgekey(edge)[0]].co - \ - bm.verts[edgekey(edge)[1]].co - if edge_vector.length < 1e-4: - # zero-length edge, vertices at same location - continue - edge_vectors[v].append(edge_vector) - - # connection vectors between vertices of both loops - connection_vectors = dict([[vertex, []] for vertex in vertices]) - connections = dict([[vertex, []] for vertex in vertices]) - for v1, v2 in lines: - if v1 in connection_vectors or v2 in connection_vectors: - new_vector = bm.verts[v1].co - bm.verts[v2].co - if new_vector.length < 1e-4: - # zero-length connection vector, - # vertices in different loops at same location - continue - if v1 in connection_vectors: - connection_vectors[v1].append(new_vector) - connections[v1].append(v2) - if v2 in connection_vectors: - connection_vectors[v2].append(new_vector) - connections[v2].append(v1) - connection_vectors = average_vector_dictionary(connection_vectors) - connection_vectors = dict( - [[vertex, vector[0]] if vector else - [vertex, []] for vertex, vector in connection_vectors.items()] - ) - - for vertex, values in edge_vectors.items(): - # vertex normal doesn't matter, just assign a random vector to it - if not connection_vectors[vertex]: - vertex_normals[vertex] = [mathutils.Vector((1, 0, 0))] - continue - - # calculate to what location the vertex is connected, - # used to determine what way to flip the normal - connected_center = mathutils.Vector() - for v in connections[vertex]: - connected_center += bm.verts[v].co - if len(connections[vertex]) > 1: - connected_center /= len(connections[vertex]) - if len(connections[vertex]) == 0: - # shouldn't be possible, but better safe than sorry - vertex_normals[vertex] = [mathutils.Vector((1, 0, 0))] - continue - - # can't do proper calculations, because of zero-length vector - if not values: - if (connected_center - (bm.verts[vertex].co + - connection_vectors[vertex])).length < (connected_center - - (bm.verts[vertex].co - connection_vectors[vertex])).length: - connection_vectors[vertex].negate() - vertex_normals[vertex] = [connection_vectors[vertex].normalized()] - continue - - # calculate vertex normals using edge-vectors, - # connection-vectors and the derived plane normal - for edge_vector in values: - plane_normal = edge_vector.cross(connection_vectors[vertex]) - vertex_normal = edge_vector.cross(plane_normal) - vertex_normal.length = 0.1 - if (connected_center - (bm.verts[vertex].co + - vertex_normal)).length < (connected_center - - (bm.verts[vertex].co - vertex_normal)).length: - # make normal face the correct way - vertex_normal.negate() - vertex_normal.normalize() - vertex_normals[vertex].append(vertex_normal) - - # average virtual vertex normals, based on all edges it's connected to - vertex_normals = average_vector_dictionary(vertex_normals) - vertex_normals = dict([[vertex, vector[0]] for vertex, vector in vertex_normals.items()]) - - return(vertex_normals) - - -# add vertices to mesh -def bridge_create_vertices(bm, vertices): - for i in range(len(vertices)): - bm.verts.new(vertices[i]) - bm.verts.ensure_lookup_table() - - -# add faces to mesh -def bridge_create_faces(object, bm, faces, twist): - # have the normal point the correct way - if twist < 0: - [face.reverse() for face in faces] - faces = [face[2:] + face[:2] if face[0] == face[1] else face for face in faces] - - # eekadoodle prevention - for i in range(len(faces)): - if not faces[i][-1]: - if faces[i][0] == faces[i][-1]: - faces[i] = [faces[i][1], faces[i][2], faces[i][3], faces[i][1]] - else: - faces[i] = [faces[i][-1]] + faces[i][:-1] - # result of converting from pre-bmesh period - if faces[i][-1] == faces[i][-2]: - faces[i] = faces[i][:-1] - - new_faces = [] - for i in range(len(faces)): - try: - new_faces.append(bm.faces.new([bm.verts[v] for v in faces[i]])) - except: - # face already exists - pass - bm.normal_update() - object.data.update(calc_edges=True) # calc_edges prevents memory-corruption - - bm.verts.ensure_lookup_table() - bm.edges.ensure_lookup_table() - bm.faces.ensure_lookup_table() - - return(new_faces) - - -# calculate input loops -def bridge_get_input(bm): - # create list of internal edges, which should be skipped - eks_of_selected_faces = [ - item for sublist in [face_edgekeys(face) for - face in bm.faces if face.select and not face.hide] for item in sublist - ] - edge_count = {} - for ek in eks_of_selected_faces: - if ek in edge_count: - edge_count[ek] += 1 - else: - edge_count[ek] = 1 - internal_edges = [ek for ek in edge_count if edge_count[ek] > 1] - - # sort correct edges into loops - selected_edges = [ - edgekey(edge) for edge in bm.edges if edge.select and - not edge.hide and edgekey(edge) not in internal_edges - ] - loops = get_connected_selections(selected_edges) - - return(loops) - - -# return values needed by the bridge operator -def bridge_initialise(bm, interpolation): - if interpolation == 'cubic': - # dict with edge-key as key and list of connected valid faces as value - face_blacklist = [ - face.index for face in bm.faces if face.select or - face.hide - ] - edge_faces = dict( - [[edgekey(edge), []] for edge in bm.edges if not edge.hide] - ) - for face in bm.faces: - if face.index in face_blacklist: - continue - for key in face_edgekeys(face): - edge_faces[key].append(face) - # dictionary with the edge-key as key and edge as value - edgekey_to_edge = dict( - [[edgekey(edge), edge] for edge in bm.edges if edge.select and not edge.hide] - ) - else: - edge_faces = False - edgekey_to_edge = False - - # selected faces input - old_selected_faces = [ - face.index for face in bm.faces if face.select and not face.hide - ] - - # find out if faces created by bridging should be smoothed - smooth = False - if bm.faces: - if sum([face.smooth for face in bm.faces]) / len(bm.faces) >= 0.5: - smooth = True - - return(edge_faces, edgekey_to_edge, old_selected_faces, smooth) - - -# return a string with the input method -def bridge_input_method(loft, loft_loop): - method = "" - if loft: - if loft_loop: - method = "Loft loop" - else: - method = "Loft no-loop" - else: - method = "Bridge" - - return(method) - - -# match up loops in pairs, used for multi-input bridging -def bridge_match_loops(bm, loops): - # calculate average loop normals and centers - normals = [] - centers = [] - for vertices, circular in loops: - normal = mathutils.Vector() - center = mathutils.Vector() - for vertex in vertices: - normal += bm.verts[vertex].normal - center += bm.verts[vertex].co - normals.append(normal / len(vertices) / 10) - centers.append(center / len(vertices)) - - # possible matches if loop normals are faced towards the center - # of the other loop - matches = dict([[i, []] for i in range(len(loops))]) - matches_amount = 0 - for i in range(len(loops) + 1): - for j in range(i + 1, len(loops)): - if (centers[i] - centers[j]).length > \ - (centers[i] - (centers[j] + normals[j])).length and \ - (centers[j] - centers[i]).length > \ - (centers[j] - (centers[i] + normals[i])).length: - matches_amount += 1 - matches[i].append([(centers[i] - centers[j]).length, i, j]) - matches[j].append([(centers[i] - centers[j]).length, j, i]) - # if no loops face each other, just make matches between all the loops - if matches_amount == 0: - for i in range(len(loops) + 1): - for j in range(i + 1, len(loops)): - matches[i].append([(centers[i] - centers[j]).length, i, j]) - matches[j].append([(centers[i] - centers[j]).length, j, i]) - for key, value in matches.items(): - value.sort() - - # matches based on distance between centers and number of vertices in loops - new_order = [] - for loop_index in range(len(loops)): - if loop_index in new_order: - continue - loop_matches = matches[loop_index] - if not loop_matches: - continue - shortest_distance = loop_matches[0][0] - shortest_distance *= 1.1 - loop_matches = [ - [abs(len(loops[loop_index][0]) - - len(loops[loop[2]][0])), loop[0], loop[1], loop[2]] for loop in - loop_matches if loop[0] < shortest_distance - ] - loop_matches.sort() - for match in loop_matches: - if match[3] not in new_order: - new_order += [loop_index, match[3]] - break - - # reorder loops based on matches - if len(new_order) >= 2: - loops = [loops[i] for i in new_order] - - return(loops) - - -# remove old_selected_faces -def bridge_remove_internal_faces(bm, old_selected_faces): - # collect bmesh faces and internal bmesh edges - remove_faces = [bm.faces[face] for face in old_selected_faces] - edges = collections.Counter( - [edge.index for face in remove_faces for edge in face.edges] - ) - remove_edges = [bm.edges[edge] for edge in edges if edges[edge] > 1] - - # remove internal faces and edges - for face in remove_faces: - bm.faces.remove(face) - for edge in remove_edges: - bm.edges.remove(edge) - - bm.faces.ensure_lookup_table() - bm.edges.ensure_lookup_table() - bm.verts.ensure_lookup_table() - - -# update list of internal faces that are flagged for removal -def bridge_save_unused_faces(bm, old_selected_faces, loops): - # key: vertex index, value: lists of selected faces using it - - vertex_to_face = dict([[i, []] for i in range(len(bm.verts))]) - [[vertex_to_face[vertex.index].append(face) for vertex in - bm.faces[face].verts] for face in old_selected_faces] - - # group selected faces that are connected - groups = [] - grouped_faces = [] - for face in old_selected_faces: - if face in grouped_faces: - continue - grouped_faces.append(face) - group = [face] - new_faces = [face] - while new_faces: - grow_face = new_faces[0] - for vertex in bm.faces[grow_face].verts: - vertex_face_group = [ - face for face in vertex_to_face[vertex.index] if - face not in grouped_faces - ] - new_faces += vertex_face_group - grouped_faces += vertex_face_group - group += vertex_face_group - new_faces.pop(0) - groups.append(group) - - # key: vertex index, value: True/False (is it in a loop that is used) - used_vertices = dict([[i, 0] for i in range(len(bm.verts))]) - for loop in loops: - for vertex in loop[0]: - used_vertices[vertex] = True - - # check if group is bridged, if not remove faces from internal faces list - for group in groups: - used = False - for face in group: - if used: - break - for vertex in bm.faces[face].verts: - if used_vertices[vertex.index]: - used = True - break - if not used: - for face in group: - old_selected_faces.remove(face) - - -# add the newly created faces to the selection -def bridge_select_new_faces(new_faces, smooth): - for face in new_faces: - face.select_set(True) - face.smooth = smooth - - -# sort loops, so they are connected in the correct order when lofting -def bridge_sort_loops(bm, loops, loft_loop): - # simplify loops to single points, and prepare for pathfinding - x, y, z = [ - [sum([bm.verts[i].co[j] for i in loop[0]]) / - len(loop[0]) for loop in loops] for j in range(3) - ] - nodes = [mathutils.Vector((x[i], y[i], z[i])) for i in range(len(loops))] - - active_node = 0 - open = [i for i in range(1, len(loops))] - path = [[0, 0]] - # connect node to path, that is shortest to active_node - while len(open) > 0: - distances = [(nodes[active_node] - nodes[i]).length for i in open] - active_node = open[distances.index(min(distances))] - open.remove(active_node) - path.append([active_node, min(distances)]) - # check if we didn't start in the middle of the path - for i in range(2, len(path)): - if (nodes[path[i][0]] - nodes[0]).length < path[i][1]: - temp = path[:i] - path.reverse() - path = path[:-i] + temp - break - - # reorder loops - loops = [loops[i[0]] for i in path] - # if requested, duplicate first loop at last position, so loft can loop - if loft_loop: - loops = loops + [loops[0]] - - return(loops) - - -# remapping old indices to new position in list -def bridge_update_old_selection(bm, old_selected_faces): - """ - old_indices = old_selected_faces[:] - old_selected_faces = [] - for i, face in enumerate(bm.faces): - if face.index in old_indices: - old_selected_faces.append(i) - """ - old_selected_faces = [ - i for i, face in enumerate(bm.faces) if face.index in old_selected_faces - ] - - return(old_selected_faces) - - -# ######################################## -# ##### Circle functions ################# -# ######################################## - -# convert 3d coordinates to 2d coordinates on plane -def circle_3d_to_2d(bm_mod, loop, com, normal): - # project vertices onto the plane - verts = [bm_mod.verts[v] for v in loop[0]] - verts_projected = [[v.co - (v.co - com).dot(normal) * normal, v.index] - for v in verts] - - # calculate two vectors (p and q) along the plane - m = mathutils.Vector((normal[0] + 1.0, normal[1], normal[2])) - p = m - (m.dot(normal) * normal) - if p.dot(p) < 1e-6: - m = mathutils.Vector((normal[0], normal[1] + 1.0, normal[2])) - p = m - (m.dot(normal) * normal) - q = p.cross(normal) - - # change to 2d coordinates using perpendicular projection - locs_2d = [] - for loc, vert in verts_projected: - vloc = loc - com - x = p.dot(vloc) / p.dot(p) - y = q.dot(vloc) / q.dot(q) - locs_2d.append([x, y, vert]) - - return(locs_2d, p, q) - - -# calculate a best-fit circle to the 2d locations on the plane -def circle_calculate_best_fit(locs_2d): - # initial guess - x0 = 0.0 - y0 = 0.0 - r = 1.0 - - # calculate center and radius (non-linear least squares solution) - for iter in range(500): - jmat = [] - k = [] - for v in locs_2d: - d = (v[0] ** 2 - 2.0 * x0 * v[0] + v[1] ** 2 - 2.0 * y0 * v[1] + x0 ** 2 + y0 ** 2) ** 0.5 - jmat.append([(x0 - v[0]) / d, (y0 - v[1]) / d, -1.0]) - k.append(-(((v[0] - x0) ** 2 + (v[1] - y0) ** 2) ** 0.5 - r)) - jmat2 = mathutils.Matrix(((0.0, 0.0, 0.0), - (0.0, 0.0, 0.0), - (0.0, 0.0, 0.0), - )) - k2 = mathutils.Vector((0.0, 0.0, 0.0)) - for i in range(len(jmat)): - k2 += mathutils.Vector(jmat[i]) * k[i] - jmat2[0][0] += jmat[i][0] ** 2 - jmat2[1][0] += jmat[i][0] * jmat[i][1] - jmat2[2][0] += jmat[i][0] * jmat[i][2] - jmat2[1][1] += jmat[i][1] ** 2 - jmat2[2][1] += jmat[i][1] * jmat[i][2] - jmat2[2][2] += jmat[i][2] ** 2 - jmat2[0][1] = jmat2[1][0] - jmat2[0][2] = jmat2[2][0] - jmat2[1][2] = jmat2[2][1] - try: - jmat2.invert() - except: - pass - dx0, dy0, dr = jmat2 @ k2 - x0 += dx0 - y0 += dy0 - r += dr - # stop iterating if we're close enough to optimal solution - if abs(dx0) < 1e-6 and abs(dy0) < 1e-6 and abs(dr) < 1e-6: - break - - # return center of circle and radius - return(x0, y0, r) - - -# calculate circle so no vertices have to be moved away from the center -def circle_calculate_min_fit(locs_2d): - # center of circle - x0 = (min([i[0] for i in locs_2d]) + max([i[0] for i in locs_2d])) / 2.0 - y0 = (min([i[1] for i in locs_2d]) + max([i[1] for i in locs_2d])) / 2.0 - center = mathutils.Vector([x0, y0]) - # radius of circle - r = min([(mathutils.Vector([i[0], i[1]]) - center).length for i in locs_2d]) - - # return center of circle and radius - return(x0, y0, r) - - -# calculate the new locations of the vertices that need to be moved -def circle_calculate_verts(flatten, bm_mod, locs_2d, com, p, q, normal): - # changing 2d coordinates back to 3d coordinates - locs_3d = [] - for loc in locs_2d: - locs_3d.append([loc[2], loc[0] * p + loc[1] * q + com]) - - if flatten: # flat circle - return(locs_3d) - - else: # project the locations on the existing mesh - vert_edges = dict_vert_edges(bm_mod) - vert_faces = dict_vert_faces(bm_mod) - faces = [f for f in bm_mod.faces if not f.hide] - rays = [normal, -normal] - new_locs = [] - for loc in locs_3d: - projection = False - if bm_mod.verts[loc[0]].co == loc[1]: # vertex hasn't moved - projection = loc[1] - else: - dif = normal.angle(loc[1] - bm_mod.verts[loc[0]].co) - if -1e-6 < dif < 1e-6 or math.pi - 1e-6 < dif < math.pi + 1e-6: - # original location is already along projection normal - projection = bm_mod.verts[loc[0]].co - else: - # quick search through adjacent faces - for face in vert_faces[loc[0]]: - verts = [v.co for v in bm_mod.faces[face].verts] - if len(verts) == 3: # triangle - v1, v2, v3 = verts - v4 = False - else: # assume quad - v1, v2, v3, v4 = verts[:4] - for ray in rays: - intersect = mathutils.geometry.\ - intersect_ray_tri(v1, v2, v3, ray, loc[1]) - if intersect: - projection = intersect - break - elif v4: - intersect = mathutils.geometry.\ - intersect_ray_tri(v1, v3, v4, ray, loc[1]) - if intersect: - projection = intersect - break - if projection: - break - if not projection: - # check if projection is on adjacent edges - for edgekey in vert_edges[loc[0]]: - line1 = bm_mod.verts[edgekey[0]].co - line2 = bm_mod.verts[edgekey[1]].co - intersect, dist = mathutils.geometry.intersect_point_line( - loc[1], line1, line2 - ) - if 1e-6 < dist < 1 - 1e-6: - projection = intersect - break - if not projection: - # full search through the entire mesh - hits = [] - for face in faces: - verts = [v.co for v in face.verts] - if len(verts) == 3: # triangle - v1, v2, v3 = verts - v4 = False - else: # assume quad - v1, v2, v3, v4 = verts[:4] - for ray in rays: - intersect = mathutils.geometry.intersect_ray_tri( - v1, v2, v3, ray, loc[1] - ) - if intersect: - hits.append([(loc[1] - intersect).length, - intersect]) - break - elif v4: - intersect = mathutils.geometry.intersect_ray_tri( - v1, v3, v4, ray, loc[1] - ) - if intersect: - hits.append([(loc[1] - intersect).length, - intersect]) - break - if len(hits) >= 1: - # if more than 1 hit with mesh, closest hit is new loc - hits.sort() - projection = hits[0][1] - if not projection: - # nothing to project on, remain at flat location - projection = loc[1] - new_locs.append([loc[0], projection]) - - # return new positions of projected circle - return(new_locs) - - -# check loops and only return valid ones -def circle_check_loops(single_loops, loops, mapping, bm_mod): - valid_single_loops = {} - valid_loops = [] - for i, [loop, circular] in enumerate(loops): - # loop needs to have at least 3 vertices - if len(loop) < 3: - continue - # loop needs at least 1 vertex in the original, non-mirrored mesh - if mapping: - all_virtual = True - for vert in loop: - if mapping[vert] > -1: - all_virtual = False - break - if all_virtual: - continue - # loop has to be non-collinear - collinear = True - loc0 = mathutils.Vector(bm_mod.verts[loop[0]].co[:]) - loc1 = mathutils.Vector(bm_mod.verts[loop[1]].co[:]) - for v in loop[2:]: - locn = mathutils.Vector(bm_mod.verts[v].co[:]) - if loc0 == loc1 or loc1 == locn: - loc0 = loc1 - loc1 = locn - continue - d1 = loc1 - loc0 - d2 = locn - loc1 - if -1e-6 < d1.angle(d2, 0) < 1e-6: - loc0 = loc1 - loc1 = locn - continue - collinear = False - break - if collinear: - continue - # passed all tests, loop is valid - valid_loops.append([loop, circular]) - valid_single_loops[len(valid_loops) - 1] = single_loops[i] - - return(valid_single_loops, valid_loops) - - -# calculate the location of single input vertices that need to be flattened -def circle_flatten_singles(bm_mod, com, p, q, normal, single_loop): - new_locs = [] - for vert in single_loop: - loc = mathutils.Vector(bm_mod.verts[vert].co[:]) - new_locs.append([vert, loc - (loc - com).dot(normal) * normal]) - - return(new_locs) - - -# calculate input loops -def circle_get_input(object, bm): - # get mesh with modifiers applied - derived, bm_mod = get_derived_bmesh(object, bm, False) - - # create list of edge-keys based on selection state - faces = False - for face in bm.faces: - if face.select and not face.hide: - faces = True - break - if faces: - # get selected, non-hidden , non-internal edge-keys - eks_selected = [ - key for keys in [face_edgekeys(face) for face in - bm_mod.faces if face.select and not face.hide] for key in keys - ] - edge_count = {} - for ek in eks_selected: - if ek in edge_count: - edge_count[ek] += 1 - else: - edge_count[ek] = 1 - edge_keys = [ - edgekey(edge) for edge in bm_mod.edges if edge.select and - not edge.hide and edge_count.get(edgekey(edge), 1) == 1 - ] - else: - # no faces, so no internal edges either - edge_keys = [ - edgekey(edge) for edge in bm_mod.edges if edge.select and not edge.hide - ] - - # add edge-keys around single vertices - verts_connected = dict( - [[vert, 1] for edge in [edge for edge in - bm_mod.edges if edge.select and not edge.hide] for vert in - edgekey(edge)] - ) - single_vertices = [ - vert.index for vert in bm_mod.verts if - vert.select and not vert.hide and - not verts_connected.get(vert.index, False) - ] - - if single_vertices and len(bm.faces) > 0: - vert_to_single = dict( - [[v.index, []] for v in bm_mod.verts if not v.hide] - ) - for face in [face for face in bm_mod.faces if not face.select and not face.hide]: - for vert in face.verts: - vert = vert.index - if vert in single_vertices: - for ek in face_edgekeys(face): - if vert not in ek: - edge_keys.append(ek) - if vert not in vert_to_single[ek[0]]: - vert_to_single[ek[0]].append(vert) - if vert not in vert_to_single[ek[1]]: - vert_to_single[ek[1]].append(vert) - break - - # sort edge-keys into loops - loops = get_connected_selections(edge_keys) - - # find out to which loops the single vertices belong - single_loops = dict([[i, []] for i in range(len(loops))]) - if single_vertices and len(bm.faces) > 0: - for i, [loop, circular] in enumerate(loops): - for vert in loop: - if vert_to_single[vert]: - for single in vert_to_single[vert]: - if single not in single_loops[i]: - single_loops[i].append(single) - - return(derived, bm_mod, single_vertices, single_loops, loops) - - -# recalculate positions based on the influence of the circle shape -def circle_influence_locs(locs_2d, new_locs_2d, influence): - for i in range(len(locs_2d)): - oldx, oldy, j = locs_2d[i] - newx, newy, k = new_locs_2d[i] - altx = newx * (influence / 100) + oldx * ((100 - influence) / 100) - alty = newy * (influence / 100) + oldy * ((100 - influence) / 100) - locs_2d[i] = [altx, alty, j] - - return(locs_2d) - - -# project 2d locations on circle, respecting distance relations between verts -def circle_project_non_regular(locs_2d, x0, y0, r, angle): - for i in range(len(locs_2d)): - x, y, j = locs_2d[i] - loc = mathutils.Vector([x - x0, y - y0]) - mat_rot = mathutils.Matrix.Rotation(angle, 2, 'X') - loc.rotate(mat_rot) - loc.length = r - locs_2d[i] = [loc[0], loc[1], j] - - return(locs_2d) - - -# project 2d locations on circle, with equal distance between all vertices -def circle_project_regular(locs_2d, x0, y0, r, angle): - # find offset angle and circling direction - x, y, i = locs_2d[0] - loc = mathutils.Vector([x - x0, y - y0]) - loc.length = r - offset_angle = loc.angle(mathutils.Vector([1.0, 0.0]), 0.0) - loca = mathutils.Vector([x - x0, y - y0, 0.0]) - if loc[1] < -1e-6: - offset_angle *= -1 - x, y, j = locs_2d[1] - locb = mathutils.Vector([x - x0, y - y0, 0.0]) - if loca.cross(locb)[2] >= 0: - ccw = 1 - else: - ccw = -1 - # distribute vertices along the circle - for i in range(len(locs_2d)): - t = offset_angle + ccw * (i / len(locs_2d) * 2 * math.pi) - x = math.cos(t + angle) * r - y = math.sin(t + angle) * r - locs_2d[i] = [x, y, locs_2d[i][2]] - - return(locs_2d) - - -# shift loop, so the first vertex is closest to the center -def circle_shift_loop(bm_mod, loop, com): - verts, circular = loop - distances = [ - [(bm_mod.verts[vert].co - com).length, i] for i, vert in enumerate(verts) - ] - distances.sort() - shift = distances[0][1] - loop = [verts[shift:] + verts[:shift], circular] - - return(loop) - - -# ######################################## -# ##### Curve functions ################## -# ######################################## - -# create lists with knots and points, all correctly sorted -def curve_calculate_knots(loop, verts_selected): - knots = [v for v in loop[0] if v in verts_selected] - points = loop[0][:] - # circular loop, potential for weird splines - if loop[1]: - offset = int(len(loop[0]) / 4) - kpos = [] - for k in knots: - kpos.append(loop[0].index(k)) - kdif = [] - for i in range(len(kpos) - 1): - kdif.append(kpos[i + 1] - kpos[i]) - kdif.append(len(loop[0]) - kpos[-1] + kpos[0]) - kadd = [] - for k in kdif: - if k > 2 * offset: - kadd.append([kdif.index(k), True]) - # next 2 lines are optional, they insert - # an extra control point in small gaps - # elif k > offset: - # kadd.append([kdif.index(k), False]) - kins = [] - krot = False - for k in kadd: # extra knots to be added - if k[1]: # big gap (break circular spline) - kpos = loop[0].index(knots[k[0]]) + offset - if kpos > len(loop[0]) - 1: - kpos -= len(loop[0]) - kins.append([knots[k[0]], loop[0][kpos]]) - kpos2 = k[0] + 1 - if kpos2 > len(knots) - 1: - kpos2 -= len(knots) - kpos2 = loop[0].index(knots[kpos2]) - offset - if kpos2 < 0: - kpos2 += len(loop[0]) - kins.append([loop[0][kpos], loop[0][kpos2]]) - krot = loop[0][kpos2] - else: # small gap (keep circular spline) - k1 = loop[0].index(knots[k[0]]) - k2 = k[0] + 1 - if k2 > len(knots) - 1: - k2 -= len(knots) - k2 = loop[0].index(knots[k2]) - if k2 < k1: - dif = len(loop[0]) - 1 - k1 + k2 - else: - dif = k2 - k1 - kn = k1 + int(dif / 2) - if kn > len(loop[0]) - 1: - kn -= len(loop[0]) - kins.append([loop[0][k1], loop[0][kn]]) - for j in kins: # insert new knots - knots.insert(knots.index(j[0]) + 1, j[1]) - if not krot: # circular loop - knots.append(knots[0]) - points = loop[0][loop[0].index(knots[0]):] - points += loop[0][0:loop[0].index(knots[0]) + 1] - else: # non-circular loop (broken by script) - krot = knots.index(krot) - knots = knots[krot:] + knots[0:krot] - if loop[0].index(knots[0]) > loop[0].index(knots[-1]): - points = loop[0][loop[0].index(knots[0]):] - points += loop[0][0:loop[0].index(knots[-1]) + 1] - else: - points = loop[0][loop[0].index(knots[0]):loop[0].index(knots[-1]) + 1] - # non-circular loop, add first and last point as knots - else: - if loop[0][0] not in knots: - knots.insert(0, loop[0][0]) - if loop[0][-1] not in knots: - knots.append(loop[0][-1]) - - return(knots, points) - - -# calculate relative positions compared to first knot -def curve_calculate_t(bm_mod, knots, points, pknots, regular, circular): - tpoints = [] - loc_prev = False - len_total = 0 - - for p in points: - if p in knots: - loc = pknots[knots.index(p)] # use projected knot location - else: - loc = mathutils.Vector(bm_mod.verts[p].co[:]) - if not loc_prev: - loc_prev = loc - len_total += (loc - loc_prev).length - tpoints.append(len_total) - loc_prev = loc - tknots = [] - for p in points: - if p in knots: - tknots.append(tpoints[points.index(p)]) - if circular: - tknots[-1] = tpoints[-1] - - # regular option - if regular: - tpoints_average = tpoints[-1] / (len(tpoints) - 1) - for i in range(1, len(tpoints) - 1): - tpoints[i] = i * tpoints_average - for i in range(len(knots)): - tknots[i] = tpoints[points.index(knots[i])] - if circular: - tknots[-1] = tpoints[-1] - - return(tknots, tpoints) - - -# change the location of non-selected points to their place on the spline -def curve_calculate_vertices(bm_mod, knots, tknots, points, tpoints, splines, -interpolation, restriction): - newlocs = {} - move = [] - - for p in points: - if p in knots: - continue - m = tpoints[points.index(p)] - if m in tknots: - n = tknots.index(m) - else: - t = tknots[:] - t.append(m) - t.sort() - n = t.index(m) - 1 - if n > len(splines) - 1: - n = len(splines) - 1 - elif n < 0: - n = 0 - - if interpolation == 'cubic': - ax, bx, cx, dx, tx = splines[n][0] - x = ax + bx * (m - tx) + cx * (m - tx) ** 2 + dx * (m - tx) ** 3 - ay, by, cy, dy, ty = splines[n][1] - y = ay + by * (m - ty) + cy * (m - ty) ** 2 + dy * (m - ty) ** 3 - az, bz, cz, dz, tz = splines[n][2] - z = az + bz * (m - tz) + cz * (m - tz) ** 2 + dz * (m - tz) ** 3 - newloc = mathutils.Vector([x, y, z]) - else: # interpolation == 'linear' - a, d, t, u = splines[n] - newloc = ((m - t) / u) * d + a - - if restriction != 'none': # vertex movement is restricted - newlocs[p] = newloc - else: # set the vertex to its new location - move.append([p, newloc]) - - if restriction != 'none': # vertex movement is restricted - for p in points: - if p in newlocs: - newloc = newlocs[p] - else: - move.append([p, bm_mod.verts[p].co]) - continue - oldloc = bm_mod.verts[p].co - normal = bm_mod.verts[p].normal - dloc = newloc - oldloc - if dloc.length < 1e-6: - move.append([p, newloc]) - elif restriction == 'extrude': # only extrusions - if dloc.angle(normal, 0) < 0.5 * math.pi + 1e-6: - move.append([p, newloc]) - else: # restriction == 'indent' only indentations - if dloc.angle(normal) > 0.5 * math.pi - 1e-6: - move.append([p, newloc]) - - return(move) - - -# trim loops to part between first and last selected vertices (including) -def curve_cut_boundaries(bm_mod, loops): - cut_loops = [] - for loop, circular in loops: - if circular: - selected = [bm_mod.verts[v].select for v in loop] - first = selected.index(True) - selected.reverse() - last = -selected.index(True) - if last == 0: - if len(loop[first:]) < len(loop)/2: - cut_loops.append([loop[first:], False]) - else: - if len(loop[first:last]) < len(loop)/2: - cut_loops.append([loop[first:last], False]) - continue - selected = [bm_mod.verts[v].select for v in loop] - first = selected.index(True) - selected.reverse() - last = -selected.index(True) - if last == 0: - cut_loops.append([loop[first:], circular]) - else: - cut_loops.append([loop[first:last], circular]) - - return(cut_loops) - - -# calculate input loops -def curve_get_input(object, bm, boundaries): - # get mesh with modifiers applied - derived, bm_mod = get_derived_bmesh(object, bm, False) - - # vertices that still need a loop to run through it - verts_unsorted = [ - v.index for v in bm_mod.verts if v.select and not v.hide - ] - # necessary dictionaries - vert_edges = dict_vert_edges(bm_mod) - edge_faces = dict_edge_faces(bm_mod) - correct_loops = [] - # find loops through each selected vertex - while len(verts_unsorted) > 0: - loops = curve_vertex_loops(bm_mod, verts_unsorted[0], vert_edges, - edge_faces) - verts_unsorted.pop(0) - - # check if loop is fully selected - search_perpendicular = False - i = -1 - for loop, circular in loops: - i += 1 - selected = [v for v in loop if bm_mod.verts[v].select] - if len(selected) < 2: - # only one selected vertex on loop, don't use - loops.pop(i) - continue - elif len(selected) == len(loop): - search_perpendicular = loop - break - # entire loop is selected, find perpendicular loops - if search_perpendicular: - for vert in loop: - if vert in verts_unsorted: - verts_unsorted.remove(vert) - perp_loops = curve_perpendicular_loops(bm_mod, loop, - vert_edges, edge_faces) - for perp_loop in perp_loops: - correct_loops.append(perp_loop) - # normal input - else: - for loop, circular in loops: - correct_loops.append([loop, circular]) - - # boundaries option - if boundaries: - correct_loops = curve_cut_boundaries(bm_mod, correct_loops) - - return(derived, bm_mod, correct_loops) - - -# return all loops that are perpendicular to the given one -def curve_perpendicular_loops(bm_mod, start_loop, vert_edges, edge_faces): - # find perpendicular loops - perp_loops = [] - for start_vert in start_loop: - loops = curve_vertex_loops(bm_mod, start_vert, vert_edges, - edge_faces) - for loop, circular in loops: - selected = [v for v in loop if bm_mod.verts[v].select] - if len(selected) == len(loop): - continue - else: - perp_loops.append([loop, circular, loop.index(start_vert)]) - - # trim loops to same lengths - shortest = [ - [len(loop[0]), i] for i, loop in enumerate(perp_loops) if not loop[1] - ] - if not shortest: - # all loops are circular, not trimming - return([[loop[0], loop[1]] for loop in perp_loops]) - else: - shortest = min(shortest) - shortest_start = perp_loops[shortest[1]][2] - before_start = shortest_start - after_start = shortest[0] - shortest_start - 1 - bigger_before = before_start > after_start - trimmed_loops = [] - for loop in perp_loops: - # have the loop face the same direction as the shortest one - if bigger_before: - if loop[2] < len(loop[0]) / 2: - loop[0].reverse() - loop[2] = len(loop[0]) - loop[2] - 1 - else: - if loop[2] > len(loop[0]) / 2: - loop[0].reverse() - loop[2] = len(loop[0]) - loop[2] - 1 - # circular loops can shift, to prevent wrong trimming - if loop[1]: - shift = shortest_start - loop[2] - if loop[2] + shift > 0 and loop[2] + shift < len(loop[0]): - loop[0] = loop[0][-shift:] + loop[0][:-shift] - loop[2] += shift - if loop[2] < 0: - loop[2] += len(loop[0]) - elif loop[2] > len(loop[0]) - 1: - loop[2] -= len(loop[0]) - # trim - start = max(0, loop[2] - before_start) - end = min(len(loop[0]), loop[2] + after_start + 1) - trimmed_loops.append([loop[0][start:end], False]) - - return(trimmed_loops) - - -# project knots on non-selected geometry -def curve_project_knots(bm_mod, verts_selected, knots, points, circular): - # function to project vertex on edge - def project(v1, v2, v3): - # v1 and v2 are part of a line - # v3 is projected onto it - v2 -= v1 - v3 -= v1 - p = v3.project(v2) - return(p + v1) - - if circular: # project all knots - start = 0 - end = len(knots) - pknots = [] - else: # first and last knot shouldn't be projected - start = 1 - end = -1 - pknots = [mathutils.Vector(bm_mod.verts[knots[0]].co[:])] - for knot in knots[start:end]: - if knot in verts_selected: - knot_left = knot_right = False - for i in range(points.index(knot) - 1, -1 * len(points), -1): - if points[i] not in knots: - knot_left = points[i] - break - for i in range(points.index(knot) + 1, 2 * len(points)): - if i > len(points) - 1: - i -= len(points) - if points[i] not in knots: - knot_right = points[i] - break - if knot_left and knot_right and knot_left != knot_right: - knot_left = mathutils.Vector(bm_mod.verts[knot_left].co[:]) - knot_right = mathutils.Vector(bm_mod.verts[knot_right].co[:]) - knot = mathutils.Vector(bm_mod.verts[knot].co[:]) - pknots.append(project(knot_left, knot_right, knot)) - else: - pknots.append(mathutils.Vector(bm_mod.verts[knot].co[:])) - else: # knot isn't selected, so shouldn't be changed - pknots.append(mathutils.Vector(bm_mod.verts[knot].co[:])) - if not circular: - pknots.append(mathutils.Vector(bm_mod.verts[knots[-1]].co[:])) - - return(pknots) - - -# find all loops through a given vertex -def curve_vertex_loops(bm_mod, start_vert, vert_edges, edge_faces): - edges_used = [] - loops = [] - - for edge in vert_edges[start_vert]: - if edge in edges_used: - continue - loop = [] - circular = False - for vert in edge: - active_faces = edge_faces[edge] - new_vert = vert - growing = True - while growing: - growing = False - new_edges = vert_edges[new_vert] - loop.append(new_vert) - if len(loop) > 1: - edges_used.append(tuple(sorted([loop[-1], loop[-2]]))) - if len(new_edges) < 3 or len(new_edges) > 4: - # pole - break - else: - # find next edge - for new_edge in new_edges: - if new_edge in edges_used: - continue - eliminate = False - for new_face in edge_faces[new_edge]: - if new_face in active_faces: - eliminate = True - break - if eliminate: - continue - # found correct new edge - active_faces = edge_faces[new_edge] - v1, v2 = new_edge - if v1 != new_vert: - new_vert = v1 - else: - new_vert = v2 - if new_vert == loop[0]: - circular = True - else: - growing = True - break - if circular: - break - loop.reverse() - loops.append([loop, circular]) - - return(loops) - - -# ######################################## -# ##### Flatten functions ################ -# ######################################## - -# sort input into loops -def flatten_get_input(bm): - vert_verts = dict_vert_verts( - [edgekey(edge) for edge in bm.edges if edge.select and not edge.hide] - ) - verts = [v.index for v in bm.verts if v.select and not v.hide] - - # no connected verts, consider all selected verts as a single input - if not vert_verts: - return([[verts, False]]) - - loops = [] - while len(verts) > 0: - # start of loop - loop = [verts[0]] - verts.pop(0) - if loop[-1] in vert_verts: - to_grow = vert_verts[loop[-1]] - else: - to_grow = [] - # grow loop - while len(to_grow) > 0: - new_vert = to_grow[0] - to_grow.pop(0) - if new_vert in loop: - continue - loop.append(new_vert) - verts.remove(new_vert) - to_grow += vert_verts[new_vert] - # add loop to loops - loops.append([loop, False]) - - return(loops) - - -# calculate position of vertex projections on plane -def flatten_project(bm, loop, com, normal): - verts = [bm.verts[v] for v in loop[0]] - verts_projected = [ - [v.index, mathutils.Vector(v.co[:]) - - (mathutils.Vector(v.co[:]) - com).dot(normal) * normal] for v in verts - ] - - return(verts_projected) - - -# ######################################## -# ##### Gstretch functions ############### -# ######################################## - -# fake stroke class, used to create custom strokes if no GP data is found -class gstretch_fake_stroke(): - def __init__(self, points): - self.points = [gstretch_fake_stroke_point(p) for p in points] - - -# fake stroke point class, used in fake strokes -class gstretch_fake_stroke_point(): - def __init__(self, loc): - self.co = loc - - -# flips loops, if necessary, to obtain maximum alignment to stroke -def gstretch_align_pairs(ls_pairs, object, bm_mod, method): - # returns total distance between all verts in loop and corresponding stroke - def distance_loop_stroke(loop, stroke, object, bm_mod, method): - stroke_lengths_cache = False - loop_length = len(loop[0]) - total_distance = 0 - - if method != 'regular': - relative_lengths = gstretch_relative_lengths(loop, bm_mod) - - for i, v_index in enumerate(loop[0]): - if method == 'regular': - relative_distance = i / (loop_length - 1) - else: - relative_distance = relative_lengths[i] - - loc1 = object.matrix_world @ bm_mod.verts[v_index].co - loc2, stroke_lengths_cache = gstretch_eval_stroke(stroke, - relative_distance, stroke_lengths_cache) - total_distance += (loc2 - loc1).length - - return(total_distance) - - if ls_pairs: - for (loop, stroke) in ls_pairs: - total_dist = distance_loop_stroke(loop, stroke, object, bm_mod, - method) - loop[0].reverse() - total_dist_rev = distance_loop_stroke(loop, stroke, object, bm_mod, - method) - if total_dist_rev > total_dist: - loop[0].reverse() - - return(ls_pairs) - - -# calculate vertex positions on stroke -def gstretch_calculate_verts(loop, stroke, object, bm_mod, method): - move = [] - stroke_lengths_cache = False - loop_length = len(loop[0]) - matrix_inverse = object.matrix_world.inverted() - - # return intersection of line with stroke, or None - def intersect_line_stroke(vec1, vec2, stroke): - for i, p in enumerate(stroke.points[1:]): - intersections = mathutils.geometry.intersect_line_line(vec1, vec2, - p.co, stroke.points[i].co) - if intersections and \ - (intersections[0] - intersections[1]).length < 1e-2: - x, dist = mathutils.geometry.intersect_point_line( - intersections[0], p.co, stroke.points[i].co) - if -1 < dist < 1: - return(intersections[0]) - return(None) - - if method == 'project': - vert_edges = dict_vert_edges(bm_mod) - - for v_index in loop[0]: - intersection = None - for ek in vert_edges[v_index]: - v1, v2 = ek - v1 = bm_mod.verts[v1] - v2 = bm_mod.verts[v2] - if v1.select + v2.select == 1 and not v1.hide and not v2.hide: - vec1 = object.matrix_world @ v1.co - vec2 = object.matrix_world @ v2.co - intersection = intersect_line_stroke(vec1, vec2, stroke) - if intersection: - break - if not intersection: - v = bm_mod.verts[v_index] - intersection = intersect_line_stroke(v.co, v.co + v.normal, - stroke) - if intersection: - move.append([v_index, matrix_inverse @ intersection]) - - else: - if method == 'irregular': - relative_lengths = gstretch_relative_lengths(loop, bm_mod) - - for i, v_index in enumerate(loop[0]): - if method == 'regular': - relative_distance = i / (loop_length - 1) - else: # method == 'irregular' - relative_distance = relative_lengths[i] - loc, stroke_lengths_cache = gstretch_eval_stroke(stroke, - relative_distance, stroke_lengths_cache) - loc = matrix_inverse @ loc - move.append([v_index, loc]) - - return(move) - - -# create new vertices, based on GP strokes -def gstretch_create_verts(object, bm_mod, strokes, method, conversion, -conversion_distance, conversion_max, conversion_min, conversion_vertices): - move = [] - stroke_verts = [] - mat_world = object.matrix_world.inverted() - singles = gstretch_match_single_verts(bm_mod, strokes, mat_world) - - for stroke in strokes: - stroke_verts.append([stroke, []]) - min_end_point = 0 - if conversion == 'vertices': - min_end_point = conversion_vertices - end_point = conversion_vertices - elif conversion == 'limit_vertices': - min_end_point = conversion_min - end_point = conversion_max - else: - end_point = len(stroke.points) - # creation of new vertices at fixed user-defined distances - if conversion == 'distance': - method = 'project' - prev_point = stroke.points[0] - stroke_verts[-1][1].append(bm_mod.verts.new(mat_world @ prev_point.co)) - distance = 0 - limit = conversion_distance - for point in stroke.points: - new_distance = distance + (point.co - prev_point.co).length - iteration = 0 - while new_distance > limit: - to_cover = limit - distance + (limit * iteration) - new_loc = prev_point.co + to_cover * \ - (point.co - prev_point.co).normalized() - stroke_verts[-1][1].append(bm_mod.verts.new(mat_world * new_loc)) - new_distance -= limit - iteration += 1 - distance = new_distance - prev_point = point - # creation of new vertices for other methods - else: - # add vertices at stroke points - for point in stroke.points[:end_point]: - stroke_verts[-1][1].append(bm_mod.verts.new(mat_world @ point.co)) - # add more vertices, beyond the points that are available - if min_end_point > min(len(stroke.points), end_point): - for i in range(min_end_point - - (min(len(stroke.points), end_point))): - stroke_verts[-1][1].append(bm_mod.verts.new(mat_world @ point.co)) - # force even spreading of points, so they are placed on stroke - method = 'regular' - bm_mod.verts.ensure_lookup_table() - bm_mod.verts.index_update() - for stroke, verts_seq in stroke_verts: - if len(verts_seq) < 2: - continue - # spread vertices evenly over the stroke - if method == 'regular': - loop = [[vert.index for vert in verts_seq], False] - move += gstretch_calculate_verts(loop, stroke, object, bm_mod, - method) - # create edges - for i, vert in enumerate(verts_seq): - if i > 0: - bm_mod.edges.new((verts_seq[i - 1], verts_seq[i])) - vert.select = True - # connect single vertices to the closest stroke - if singles: - for vert, m_stroke, point in singles: - if m_stroke != stroke: - continue - bm_mod.edges.new((vert, verts_seq[point])) - bm_mod.edges.ensure_lookup_table() - bmesh.update_edit_mesh(object.data) - - return(move) - - -# erases the grease pencil stroke -def gstretch_erase_stroke(stroke, context): - # change 3d coordinate into a stroke-point - def sp(loc, context): - lib = {'name': "", - 'pen_flip': False, - 'is_start': False, - 'location': (0, 0, 0), - 'mouse': ( - view3d_utils.location_3d_to_region_2d( - context.region, context.space_data.region_3d, loc) - ), - 'pressure': 1, - 'size': 0, - 'time': 0} - return(lib) - - if type(stroke) != bpy.types.GPencilStroke: - # fake stroke, there is nothing to delete - return - - erase_stroke = [sp(p.co, context) for p in stroke.points] - if erase_stroke: - erase_stroke[0]['is_start'] = True - #bpy.ops.gpencil.draw(mode='ERASER', stroke=erase_stroke) - bpy.ops.gpencil.data_unlink() - - - -# get point on stroke, given by relative distance (0.0 - 1.0) -def gstretch_eval_stroke(stroke, distance, stroke_lengths_cache=False): - # use cache if available - if not stroke_lengths_cache: - lengths = [0] - for i, p in enumerate(stroke.points[1:]): - lengths.append((p.co - stroke.points[i].co).length + lengths[-1]) - total_length = max(lengths[-1], 1e-7) - stroke_lengths_cache = [length / total_length for length in - lengths] - stroke_lengths = stroke_lengths_cache[:] - - if distance in stroke_lengths: - loc = stroke.points[stroke_lengths.index(distance)].co - elif distance > stroke_lengths[-1]: - # should be impossible, but better safe than sorry - loc = stroke.points[-1].co - else: - stroke_lengths.append(distance) - stroke_lengths.sort() - stroke_index = stroke_lengths.index(distance) - interval_length = stroke_lengths[ - stroke_index + 1] - stroke_lengths[stroke_index - 1 - ] - distance_relative = (distance - stroke_lengths[stroke_index - 1]) / interval_length - interval_vector = stroke.points[stroke_index].co - stroke.points[stroke_index - 1].co - loc = stroke.points[stroke_index - 1].co + distance_relative * interval_vector - - return(loc, stroke_lengths_cache) - - -# create fake grease pencil strokes for the active object -def gstretch_get_fake_strokes(object, bm_mod, loops): - strokes = [] - for loop in loops: - p1 = object.matrix_world @ bm_mod.verts[loop[0][0]].co - p2 = object.matrix_world @ bm_mod.verts[loop[0][-1]].co - strokes.append(gstretch_fake_stroke([p1, p2])) - - return(strokes) - -# get strokes -def gstretch_get_strokes(self, context): - looptools = context.window_manager.looptools - gp = get_strokes(self, context) - if not gp: - return(None) - if looptools.gstretch_use_guide == "Annotation": - layer = bpy.data.grease_pencils[0].layers.active - if looptools.gstretch_use_guide == "GPencil" and not looptools.gstretch_guide == None: - layer = looptools.gstretch_guide.data.layers.active - if not layer: - return(None) - frame = layer.active_frame - if not frame: - return(None) - strokes = frame.strokes - if len(strokes) < 1: - return(None) - - return(strokes) - -# returns a list with loop-stroke pairs -def gstretch_match_loops_strokes(loops, strokes, object, bm_mod): - if not loops or not strokes: - return(None) - - # calculate loop centers - loop_centers = [] - bm_mod.verts.ensure_lookup_table() - for loop in loops: - center = mathutils.Vector() - for v_index in loop[0]: - center += bm_mod.verts[v_index].co - center /= len(loop[0]) - center = object.matrix_world @ center - loop_centers.append([center, loop]) - - # calculate stroke centers - stroke_centers = [] - for stroke in strokes: - center = mathutils.Vector() - for p in stroke.points: - center += p.co - center /= len(stroke.points) - stroke_centers.append([center, stroke, 0]) - - # match, first by stroke use count, then by distance - ls_pairs = [] - for lc in loop_centers: - distances = [] - for i, sc in enumerate(stroke_centers): - distances.append([sc[2], (lc[0] - sc[0]).length, i]) - distances.sort() - best_stroke = distances[0][2] - ls_pairs.append([lc[1], stroke_centers[best_stroke][1]]) - stroke_centers[best_stroke][2] += 1 # increase stroke use count - - return(ls_pairs) - - -# match single selected vertices to the closest stroke endpoint -# returns a list of tuples, constructed as: (vertex, stroke, stroke point index) -def gstretch_match_single_verts(bm_mod, strokes, mat_world): - # calculate stroke endpoints in object space - endpoints = [] - for stroke in strokes: - endpoints.append((mat_world @ stroke.points[0].co, stroke, 0)) - endpoints.append((mat_world @ stroke.points[-1].co, stroke, -1)) - - distances = [] - # find single vertices (not connected to other selected verts) - for vert in bm_mod.verts: - if not vert.select: - continue - single = True - for edge in vert.link_edges: - if edge.other_vert(vert).select: - single = False - break - if not single: - continue - # calculate distances from vertex to endpoints - distance = [((vert.co - loc).length, vert, stroke, stroke_point, - endpoint_index) for endpoint_index, (loc, stroke, stroke_point) in - enumerate(endpoints)] - distance.sort() - distances.append(distance[0]) - - # create matches, based on shortest distance first - singles = [] - while distances: - distances.sort() - singles.append((distances[0][1], distances[0][2], distances[0][3])) - endpoints.pop(distances[0][4]) - distances.pop(0) - distances_new = [] - for (i, vert, j, k, l) in distances: - distance_new = [((vert.co - loc).length, vert, stroke, stroke_point, - endpoint_index) for endpoint_index, (loc, stroke, - stroke_point) in enumerate(endpoints)] - distance_new.sort() - distances_new.append(distance_new[0]) - distances = distances_new - - return(singles) - - -# returns list with a relative distance (0.0 - 1.0) of each vertex on the loop -def gstretch_relative_lengths(loop, bm_mod): - lengths = [0] - for i, v_index in enumerate(loop[0][1:]): - lengths.append( - (bm_mod.verts[v_index].co - - bm_mod.verts[loop[0][i]].co).length + lengths[-1] - ) - total_length = max(lengths[-1], 1e-7) - relative_lengths = [length / total_length for length in - lengths] - - return(relative_lengths) - - -# convert cache-stored strokes into usable (fake) GP strokes -def gstretch_safe_to_true_strokes(safe_strokes): - strokes = [] - for safe_stroke in safe_strokes: - strokes.append(gstretch_fake_stroke(safe_stroke)) - - return(strokes) - - -# convert a GP stroke into a list of points which can be stored in cache -def gstretch_true_to_safe_strokes(strokes): - safe_strokes = [] - for stroke in strokes: - safe_strokes.append([p.co.copy() for p in stroke.points]) - - return(safe_strokes) - - -# force consistency in GUI, max value can never be lower than min value -def gstretch_update_max(self, context): - # called from operator settings (after execution) - if 'conversion_min' in self.keys(): - if self.conversion_min > self.conversion_max: - self.conversion_max = self.conversion_min - # called from toolbar - else: - lt = context.window_manager.looptools - if lt.gstretch_conversion_min > lt.gstretch_conversion_max: - lt.gstretch_conversion_max = lt.gstretch_conversion_min - - -# force consistency in GUI, min value can never be higher than max value -def gstretch_update_min(self, context): - # called from operator settings (after execution) - if 'conversion_max' in self.keys(): - if self.conversion_max < self.conversion_min: - self.conversion_min = self.conversion_max - # called from toolbar - else: - lt = context.window_manager.looptools - if lt.gstretch_conversion_max < lt.gstretch_conversion_min: - lt.gstretch_conversion_min = lt.gstretch_conversion_max - - -# ######################################## -# ##### Relax functions ################## -# ######################################## - -# create lists with knots and points, all correctly sorted -def relax_calculate_knots(loops): - all_knots = [] - all_points = [] - for loop, circular in loops: - knots = [[], []] - points = [[], []] - if circular: - if len(loop) % 2 == 1: # odd - extend = [False, True, 0, 1, 0, 1] - else: # even - extend = [True, False, 0, 1, 1, 2] - else: - if len(loop) % 2 == 1: # odd - extend = [False, False, 0, 1, 1, 2] - else: # even - extend = [False, False, 0, 1, 1, 2] - for j in range(2): - if extend[j]: - loop = [loop[-1]] + loop + [loop[0]] - for i in range(extend[2 + 2 * j], len(loop), 2): - knots[j].append(loop[i]) - for i in range(extend[3 + 2 * j], len(loop), 2): - if loop[i] == loop[-1] and not circular: - continue - if len(points[j]) == 0: - points[j].append(loop[i]) - elif loop[i] != points[j][0]: - points[j].append(loop[i]) - if circular: - if knots[j][0] != knots[j][-1]: - knots[j].append(knots[j][0]) - if len(points[1]) == 0: - knots.pop(1) - points.pop(1) - for k in knots: - all_knots.append(k) - for p in points: - all_points.append(p) - - return(all_knots, all_points) - - -# calculate relative positions compared to first knot -def relax_calculate_t(bm_mod, knots, points, regular): - all_tknots = [] - all_tpoints = [] - for i in range(len(knots)): - amount = len(knots[i]) + len(points[i]) - mix = [] - for j in range(amount): - if j % 2 == 0: - mix.append([True, knots[i][round(j / 2)]]) - elif j == amount - 1: - mix.append([True, knots[i][-1]]) - else: - mix.append([False, points[i][int(j / 2)]]) - len_total = 0 - loc_prev = False - tknots = [] - tpoints = [] - for m in mix: - loc = mathutils.Vector(bm_mod.verts[m[1]].co[:]) - if not loc_prev: - loc_prev = loc - len_total += (loc - loc_prev).length - if m[0]: - tknots.append(len_total) - else: - tpoints.append(len_total) - loc_prev = loc - if regular: - tpoints = [] - for p in range(len(points[i])): - tpoints.append((tknots[p] + tknots[p + 1]) / 2) - all_tknots.append(tknots) - all_tpoints.append(tpoints) - - return(all_tknots, all_tpoints) - - -# change the location of the points to their place on the spline -def relax_calculate_verts(bm_mod, interpolation, tknots, knots, tpoints, -points, splines): - change = [] - move = [] - for i in range(len(knots)): - for p in points[i]: - m = tpoints[i][points[i].index(p)] - if m in tknots[i]: - n = tknots[i].index(m) - else: - t = tknots[i][:] - t.append(m) - t.sort() - n = t.index(m) - 1 - if n > len(splines[i]) - 1: - n = len(splines[i]) - 1 - elif n < 0: - n = 0 - - if interpolation == 'cubic': - ax, bx, cx, dx, tx = splines[i][n][0] - x = ax + bx * (m - tx) + cx * (m - tx) ** 2 + dx * (m - tx) ** 3 - ay, by, cy, dy, ty = splines[i][n][1] - y = ay + by * (m - ty) + cy * (m - ty) ** 2 + dy * (m - ty) ** 3 - az, bz, cz, dz, tz = splines[i][n][2] - z = az + bz * (m - tz) + cz * (m - tz) ** 2 + dz * (m - tz) ** 3 - change.append([p, mathutils.Vector([x, y, z])]) - else: # interpolation == 'linear' - a, d, t, u = splines[i][n] - if u == 0: - u = 1e-8 - change.append([p, ((m - t) / u) * d + a]) - for c in change: - move.append([c[0], (bm_mod.verts[c[0]].co + c[1]) / 2]) - - return(move) - - -# ######################################## -# ##### Space functions ################## -# ######################################## - -# calculate relative positions compared to first knot -def space_calculate_t(bm_mod, knots): - tknots = [] - loc_prev = False - len_total = 0 - for k in knots: - loc = mathutils.Vector(bm_mod.verts[k].co[:]) - if not loc_prev: - loc_prev = loc - len_total += (loc - loc_prev).length - tknots.append(len_total) - loc_prev = loc - amount = len(knots) - t_per_segment = len_total / (amount - 1) - tpoints = [i * t_per_segment for i in range(amount)] - - return(tknots, tpoints) - - -# change the location of the points to their place on the spline -def space_calculate_verts(bm_mod, interpolation, tknots, tpoints, points, -splines): - move = [] - for p in points: - m = tpoints[points.index(p)] - if m in tknots: - n = tknots.index(m) - else: - t = tknots[:] - t.append(m) - t.sort() - n = t.index(m) - 1 - if n > len(splines) - 1: - n = len(splines) - 1 - elif n < 0: - n = 0 - - if interpolation == 'cubic': - ax, bx, cx, dx, tx = splines[n][0] - x = ax + bx * (m - tx) + cx * (m - tx) ** 2 + dx * (m - tx) ** 3 - ay, by, cy, dy, ty = splines[n][1] - y = ay + by * (m - ty) + cy * (m - ty) ** 2 + dy * (m - ty) ** 3 - az, bz, cz, dz, tz = splines[n][2] - z = az + bz * (m - tz) + cz * (m - tz) ** 2 + dz * (m - tz) ** 3 - move.append([p, mathutils.Vector([x, y, z])]) - else: # interpolation == 'linear' - a, d, t, u = splines[n] - move.append([p, ((m - t) / u) * d + a]) - - return(move) - - -# ######################################## -# ##### Operators ######################## -# ######################################## - -# bridge operator -class Bridge(Operator): - bl_idname = 'mesh.looptools_bridge' - bl_label = "Bridge / Loft" - bl_description = "Bridge two, or loft several, loops of vertices" - bl_options = {'REGISTER', 'UNDO'} - - cubic_strength: FloatProperty( - name="Strength", - description="Higher strength results in more fluid curves", - default=1.0, - soft_min=-3.0, - soft_max=3.0 - ) - interpolation: EnumProperty( - name="Interpolation mode", - items=(('cubic', "Cubic", "Gives curved results"), - ('linear', "Linear", "Basic, fast, straight interpolation")), - description="Interpolation mode: algorithm used when creating " - "segments", - default='cubic' - ) - loft: BoolProperty( - name="Loft", - description="Loft multiple loops, instead of considering them as " - "a multi-input for bridging", - default=False - ) - loft_loop: BoolProperty( - name="Loop", - description="Connect the first and the last loop with each other", - default=False - ) - min_width: IntProperty( - name="Minimum width", - description="Segments with an edge smaller than this are merged " - "(compared to base edge)", - default=0, - min=0, - max=100, - subtype='PERCENTAGE' - ) - mode: EnumProperty( - name="Mode", - items=(('basic', "Basic", "Fast algorithm"), - ('shortest', "Shortest edge", "Slower algorithm with better vertex matching")), - description="Algorithm used for bridging", - default='shortest' - ) - remove_faces: BoolProperty( - name="Remove faces", - description="Remove faces that are internal after bridging", - default=True - ) - reverse: BoolProperty( - name="Reverse", - description="Manually override the direction in which the loops " - "are bridged. Only use if the tool gives the wrong result", - default=False - ) - segments: IntProperty( - name="Segments", - description="Number of segments used to bridge the gap (0=automatic)", - default=1, - min=0, - soft_max=20 - ) - twist: IntProperty( - name="Twist", - description="Twist what vertices are connected to each other", - default=0 - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return (ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - layout = self.layout - # layout.prop(self, "mode") # no cases yet where 'basic' mode is needed - - # top row - col_top = layout.column(align=True) - row = col_top.row(align=True) - col_left = row.column(align=True) - col_right = row.column(align=True) - col_right.active = self.segments != 1 - col_left.prop(self, "segments") - col_right.prop(self, "min_width", text="") - # bottom row - bottom_left = col_left.row() - bottom_left.active = self.segments != 1 - bottom_left.prop(self, "interpolation", text="") - bottom_right = col_right.row() - bottom_right.active = self.interpolation == 'cubic' - bottom_right.prop(self, "cubic_strength") - # boolean properties - col_top.prop(self, "remove_faces") - if self.loft: - col_top.prop(self, "loft_loop") - - # override properties - col_top.separator() - row = layout.row(align=True) - row.prop(self, "twist") - row.prop(self, "reverse") - - def invoke(self, context, event): - # load custom settings - context.window_manager.looptools.bridge_loft = self.loft - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - edge_faces, edgekey_to_edge, old_selected_faces, smooth = \ - bridge_initialise(bm, self.interpolation) - settings_write(self) - - # check cache to see if we can save time - input_method = bridge_input_method(self.loft, self.loft_loop) - cached, single_loops, loops, derived, mapping = cache_read("Bridge", - object, bm, input_method, False) - if not cached: - # get loops - loops = bridge_get_input(bm) - if loops: - # reorder loops if there are more than 2 - if len(loops) > 2: - if self.loft: - loops = bridge_sort_loops(bm, loops, self.loft_loop) - else: - loops = bridge_match_loops(bm, loops) - - # saving cache for faster execution next time - if not cached: - cache_write("Bridge", object, bm, input_method, False, False, - loops, False, False) - - if loops: - # calculate new geometry - vertices = [] - faces = [] - max_vert_index = len(bm.verts) - 1 - for i in range(1, len(loops)): - if not self.loft and i % 2 == 0: - continue - lines = bridge_calculate_lines(bm, loops[i - 1:i + 1], - self.mode, self.twist, self.reverse) - vertex_normals = bridge_calculate_virtual_vertex_normals(bm, - lines, loops[i - 1:i + 1], edge_faces, edgekey_to_edge) - segments = bridge_calculate_segments(bm, lines, - loops[i - 1:i + 1], self.segments) - new_verts, new_faces, max_vert_index = \ - bridge_calculate_geometry( - bm, lines, vertex_normals, - segments, self.interpolation, self.cubic_strength, - self.min_width, max_vert_index - ) - if new_verts: - vertices += new_verts - if new_faces: - faces += new_faces - # make sure faces in loops that aren't used, aren't removed - if self.remove_faces and old_selected_faces: - bridge_save_unused_faces(bm, old_selected_faces, loops) - # create vertices - if vertices: - bridge_create_vertices(bm, vertices) - # delete internal faces - if self.remove_faces and old_selected_faces: - bridge_remove_internal_faces(bm, old_selected_faces) - # create faces - if faces: - new_faces = bridge_create_faces(object, bm, faces, self.twist) - bridge_select_new_faces(new_faces, smooth) - # edge-data could have changed, can't use cache next run - if faces and not vertices: - cache_delete("Bridge") - # make sure normals are facing outside - bmesh.update_edit_mesh(object.data, loop_triangles=False, destructive=True) - bpy.ops.mesh.normals_make_consistent() - - # cleaning up - terminate() - - return{'FINISHED'} - - -# circle operator -class Circle(Operator): - bl_idname = "mesh.looptools_circle" - bl_label = "Circle" - bl_description = "Move selected vertices into a circle shape" - bl_options = {'REGISTER', 'UNDO'} - - custom_radius: BoolProperty( - name="Radius", - description="Force a custom radius", - default=False - ) - fit: EnumProperty( - name="Method", - items=(("best", "Best fit", "Non-linear least squares"), - ("inside", "Fit inside", "Only move vertices towards the center")), - description="Method used for fitting a circle to the vertices", - default='best' - ) - flatten: BoolProperty( - name="Flatten", - description="Flatten the circle, instead of projecting it on the mesh", - default=True - ) - influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - lock_z: BoolProperty(name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - radius: FloatProperty( - name="Radius", - description="Custom radius for circle", - default=1.0, - min=0.0, - soft_max=1000.0 - ) - angle: FloatProperty( - name="Angle", - description="Rotate a circle by an angle", - unit='ROTATION', - default=math.radians(0.0), - soft_min=math.radians(-360.0), - soft_max=math.radians(360.0) - ) - regular: BoolProperty( - name="Regular", - description="Distribute vertices at constant distances along the circle", - default=True - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return(ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - layout = self.layout - col = layout.column() - - col.prop(self, "fit") - col.separator() - - col.prop(self, "flatten") - row = col.row(align=True) - row.prop(self, "custom_radius") - row_right = row.row(align=True) - row_right.active = self.custom_radius - row_right.prop(self, "radius", text="") - col.prop(self, "regular") - col.prop(self, "angle") - col.separator() - - col_move = col.column(align=True) - row = col_move.row(align=True) - if self.lock_x: - row.prop(self, "lock_x", text="X", icon='LOCKED') - else: - row.prop(self, "lock_x", text="X", icon='UNLOCKED') - if self.lock_y: - row.prop(self, "lock_y", text="Y", icon='LOCKED') - else: - row.prop(self, "lock_y", text="Y", icon='UNLOCKED') - if self.lock_z: - row.prop(self, "lock_z", text="Z", icon='LOCKED') - else: - row.prop(self, "lock_z", text="Z", icon='UNLOCKED') - col_move.prop(self, "influence") - - def invoke(self, context, event): - # load custom settings - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - settings_write(self) - # check cache to see if we can save time - cached, single_loops, loops, derived, mapping = cache_read("Circle", - object, bm, False, False) - if cached: - derived, bm_mod = get_derived_bmesh(object, bm, False) - else: - # find loops - derived, bm_mod, single_vertices, single_loops, loops = \ - circle_get_input(object, bm) - mapping = get_mapping(derived, bm, bm_mod, single_vertices, - False, loops) - single_loops, loops = circle_check_loops(single_loops, loops, - mapping, bm_mod) - - # saving cache for faster execution next time - if not cached: - cache_write("Circle", object, bm, False, False, single_loops, - loops, derived, mapping) - - move = [] - for i, loop in enumerate(loops): - # best fitting flat plane - com, normal = calculate_plane(bm_mod, loop) - # if circular, shift loop so we get a good starting vertex - if loop[1]: - loop = circle_shift_loop(bm_mod, loop, com) - # flatten vertices on plane - locs_2d, p, q = circle_3d_to_2d(bm_mod, loop, com, normal) - # calculate circle - if self.fit == 'best': - x0, y0, r = circle_calculate_best_fit(locs_2d) - else: # self.fit == 'inside' - x0, y0, r = circle_calculate_min_fit(locs_2d) - # radius override - if self.custom_radius: - r = self.radius / p.length - # calculate positions on circle - if self.regular: - new_locs_2d = circle_project_regular(locs_2d[:], x0, y0, r, self.angle) - else: - new_locs_2d = circle_project_non_regular(locs_2d[:], x0, y0, r, self.angle) - # take influence into account - locs_2d = circle_influence_locs(locs_2d, new_locs_2d, - self.influence) - # calculate 3d positions of the created 2d input - move.append(circle_calculate_verts(self.flatten, bm_mod, - locs_2d, com, p, q, normal)) - # flatten single input vertices on plane defined by loop - if self.flatten and single_loops: - move.append(circle_flatten_singles(bm_mod, com, p, q, - normal, single_loops[i])) - - # move vertices to new locations - if self.lock_x or self.lock_y or self.lock_z: - lock = [self.lock_x, self.lock_y, self.lock_z] - else: - lock = False - move_verts(object, bm, mapping, move, lock, -1) - - # cleaning up - if derived: - bm_mod.free() - terminate() - - return{'FINISHED'} - - -# curve operator -class Curve(Operator): - bl_idname = "mesh.looptools_curve" - bl_label = "Curve" - bl_description = "Turn a loop into a smooth curve" - bl_options = {'REGISTER', 'UNDO'} - - boundaries: BoolProperty( - name="Boundaries", - description="Limit the tool to work within the boundaries of the selected vertices", - default=False - ) - influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - interpolation: EnumProperty( - name="Interpolation", - items=(("cubic", "Cubic", "Natural cubic spline, smooth results"), - ("linear", "Linear", "Simple and fast linear algorithm")), - description="Algorithm used for interpolation", - default='cubic' - ) - lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - regular: BoolProperty( - name="Regular", - description="Distribute vertices at constant distances along the curve", - default=True - ) - restriction: EnumProperty( - name="Restriction", - items=(("none", "None", "No restrictions on vertex movement"), - ("extrude", "Extrude only", "Only allow extrusions (no indentations)"), - ("indent", "Indent only", "Only allow indentation (no extrusions)")), - description="Restrictions on how the vertices can be moved", - default='none' - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return(ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - layout = self.layout - col = layout.column() - - col.prop(self, "interpolation") - col.prop(self, "restriction") - col.prop(self, "boundaries") - col.prop(self, "regular") - col.separator() - - col_move = col.column(align=True) - row = col_move.row(align=True) - if self.lock_x: - row.prop(self, "lock_x", text="X", icon='LOCKED') - else: - row.prop(self, "lock_x", text="X", icon='UNLOCKED') - if self.lock_y: - row.prop(self, "lock_y", text="Y", icon='LOCKED') - else: - row.prop(self, "lock_y", text="Y", icon='UNLOCKED') - if self.lock_z: - row.prop(self, "lock_z", text="Z", icon='LOCKED') - else: - row.prop(self, "lock_z", text="Z", icon='UNLOCKED') - col_move.prop(self, "influence") - - def invoke(self, context, event): - # load custom settings - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - settings_write(self) - # check cache to see if we can save time - cached, single_loops, loops, derived, mapping = cache_read("Curve", - object, bm, False, self.boundaries) - if cached: - derived, bm_mod = get_derived_bmesh(object, bm, False) - else: - # find loops - derived, bm_mod, loops = curve_get_input(object, bm, self.boundaries) - mapping = get_mapping(derived, bm, bm_mod, False, True, loops) - loops = check_loops(loops, mapping, bm_mod) - verts_selected = [ - v.index for v in bm_mod.verts if v.select and not v.hide - ] - - # saving cache for faster execution next time - if not cached: - cache_write("Curve", object, bm, False, self.boundaries, False, - loops, derived, mapping) - - move = [] - for loop in loops: - knots, points = curve_calculate_knots(loop, verts_selected) - pknots = curve_project_knots(bm_mod, verts_selected, knots, - points, loop[1]) - tknots, tpoints = curve_calculate_t(bm_mod, knots, points, - pknots, self.regular, loop[1]) - splines = calculate_splines(self.interpolation, bm_mod, - tknots, knots) - move.append(curve_calculate_vertices(bm_mod, knots, tknots, - points, tpoints, splines, self.interpolation, - self.restriction)) - - # move vertices to new locations - if self.lock_x or self.lock_y or self.lock_z: - lock = [self.lock_x, self.lock_y, self.lock_z] - else: - lock = False - move_verts(object, bm, mapping, move, lock, self.influence) - - # cleaning up - if derived: - bm_mod.free() - terminate() - - return{'FINISHED'} - - -# flatten operator -class Flatten(Operator): - bl_idname = "mesh.looptools_flatten" - bl_label = "Flatten" - bl_description = "Flatten vertices on a best-fitting plane" - bl_options = {'REGISTER', 'UNDO'} - - influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - lock_z: BoolProperty(name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - plane: EnumProperty( - name="Plane", - items=(("best_fit", "Best fit", "Calculate a best fitting plane"), - ("normal", "Normal", "Derive plane from averaging vertex normals"), - ("view", "View", "Flatten on a plane perpendicular to the viewing angle")), - description="Plane on which vertices are flattened", - default='best_fit' - ) - restriction: EnumProperty( - name="Restriction", - items=(("none", "None", "No restrictions on vertex movement"), - ("bounding_box", "Bounding box", "Vertices are restricted to " - "movement inside the bounding box of the selection")), - description="Restrictions on how the vertices can be moved", - default='none' - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return(ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - layout = self.layout - col = layout.column() - - col.prop(self, "plane") - # col.prop(self, "restriction") - col.separator() - - col_move = col.column(align=True) - row = col_move.row(align=True) - if self.lock_x: - row.prop(self, "lock_x", text="X", icon='LOCKED') - else: - row.prop(self, "lock_x", text="X", icon='UNLOCKED') - if self.lock_y: - row.prop(self, "lock_y", text="Y", icon='LOCKED') - else: - row.prop(self, "lock_y", text="Y", icon='UNLOCKED') - if self.lock_z: - row.prop(self, "lock_z", text="Z", icon='LOCKED') - else: - row.prop(self, "lock_z", text="Z", icon='UNLOCKED') - col_move.prop(self, "influence") - - def invoke(self, context, event): - # load custom settings - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - settings_write(self) - # check cache to see if we can save time - cached, single_loops, loops, derived, mapping = cache_read("Flatten", - object, bm, False, False) - if not cached: - # order input into virtual loops - loops = flatten_get_input(bm) - loops = check_loops(loops, mapping, bm) - - # saving cache for faster execution next time - if not cached: - cache_write("Flatten", object, bm, False, False, False, loops, - False, False) - - move = [] - for loop in loops: - # calculate plane and position of vertices on them - com, normal = calculate_plane(bm, loop, method=self.plane, - object=object) - to_move = flatten_project(bm, loop, com, normal) - if self.restriction == 'none': - move.append(to_move) - else: - move.append(to_move) - - # move vertices to new locations - if self.lock_x or self.lock_y or self.lock_z: - lock = [self.lock_x, self.lock_y, self.lock_z] - else: - lock = False - move_verts(object, bm, False, move, lock, self.influence) - - # cleaning up - terminate() - - return{'FINISHED'} - - -# Annotation operator -class RemoveAnnotation(Operator): - bl_idname = "remove.annotation" - bl_label = "Remove Annotation" - bl_description = "Remove all Annotation Strokes" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - - try: - bpy.data.grease_pencils[0].layers.active.clear() - except: - self.report({'INFO'}, "No Annotation data to Unlink") - return {'CANCELLED'} - - return{'FINISHED'} - -# GPencil operator -class RemoveGPencil(Operator): - bl_idname = "remove.gp" - bl_label = "Remove GPencil" - bl_description = "Remove all GPencil Strokes" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - - try: - looptools = context.window_manager.looptools - looptools.gstretch_guide.data.layers.data.clear() - looptools.gstretch_guide.data.update_tag() - except: - self.report({'INFO'}, "No GPencil data to Unlink") - return {'CANCELLED'} - - return{'FINISHED'} - - -class GStretch(Operator): - bl_idname = "mesh.looptools_gstretch" - bl_label = "Gstretch" - bl_description = "Stretch selected vertices to active stroke" - bl_options = {'REGISTER', 'UNDO'} - - conversion: EnumProperty( - name="Conversion", - items=(("distance", "Distance", "Set the distance between vertices " - "of the converted stroke"), - ("limit_vertices", "Limit vertices", "Set the minimum and maximum " - "number of vertices that converted strokes will have"), - ("vertices", "Exact vertices", "Set the exact number of vertices " - "that converted strokes will have. Short strokes " - "with few points may contain less vertices than this number."), - ("none", "No simplification", "Convert each point " - "to a vertex")), - description="If strokes are converted to geometry, " - "use this simplification method", - default='limit_vertices' - ) - conversion_distance: FloatProperty( - name="Distance", - description="Absolute distance between vertices along the converted " - " stroke", - default=0.1, - min=0.000001, - soft_min=0.01, - soft_max=100 - ) - conversion_max: IntProperty( - name="Max Vertices", - description="Maximum number of vertices strokes will " - "have, when they are converted to geometry", - default=32, - min=3, - soft_max=500, - update=gstretch_update_min - ) - conversion_min: IntProperty( - name="Min Vertices", - description="Minimum number of vertices strokes will " - "have, when they are converted to geometry", - default=8, - min=3, - soft_max=500, - update=gstretch_update_max - ) - conversion_vertices: IntProperty( - name="Vertices", - description="Number of vertices strokes will " - "have, when they are converted to geometry. If strokes have less " - "points than required, the 'Spread evenly' method is used", - default=32, - min=3, - soft_max=500 - ) - delete_strokes: BoolProperty( - name="Delete strokes", - description="Remove strokes if they have been used." - "WARNING: DOES NOT SUPPORT UNDO", - default=False - ) - influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - method: EnumProperty( - name="Method", - items=(("project", "Project", "Project vertices onto the stroke, " - "using vertex normals and connected edges"), - ("irregular", "Spread", "Distribute vertices along the full " - "stroke, retaining relative distances between the vertices"), - ("regular", "Spread evenly", "Distribute vertices at regular " - "distances along the full stroke")), - description="Method of distributing the vertices over the " - "stroke", - default='regular' - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return(ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - looptools = context.window_manager.looptools - layout = self.layout - col = layout.column() - - col.prop(self, "method") - col.separator() - - col_conv = col.column(align=True) - col_conv.prop(self, "conversion", text="") - if self.conversion == 'distance': - col_conv.prop(self, "conversion_distance") - elif self.conversion == 'limit_vertices': - row = col_conv.row(align=True) - row.prop(self, "conversion_min", text="Min") - row.prop(self, "conversion_max", text="Max") - elif self.conversion == 'vertices': - col_conv.prop(self, "conversion_vertices") - col.separator() - - col_move = col.column(align=True) - row = col_move.row(align=True) - if self.lock_x: - row.prop(self, "lock_x", text="X", icon='LOCKED') - else: - row.prop(self, "lock_x", text="X", icon='UNLOCKED') - if self.lock_y: - row.prop(self, "lock_y", text="Y", icon='LOCKED') - else: - row.prop(self, "lock_y", text="Y", icon='UNLOCKED') - if self.lock_z: - row.prop(self, "lock_z", text="Z", icon='LOCKED') - else: - row.prop(self, "lock_z", text="Z", icon='UNLOCKED') - col_move.prop(self, "influence") - col.separator() - if looptools.gstretch_use_guide == "Annotation": - col.operator("remove.annotation", text="Delete annotation strokes") - if looptools.gstretch_use_guide == "GPencil": - col.operator("remove.gp", text="Delete GPencil strokes") - - def invoke(self, context, event): - # flush cached strokes - if 'Gstretch' in looptools_cache: - looptools_cache['Gstretch']['single_loops'] = [] - # load custom settings - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - settings_write(self) - - # check cache to see if we can save time - cached, safe_strokes, loops, derived, mapping = cache_read("Gstretch", - object, bm, False, False) - if cached: - straightening = False - if safe_strokes: - strokes = gstretch_safe_to_true_strokes(safe_strokes) - # cached strokes were flushed (see operator's invoke function) - elif get_strokes(self, context): - strokes = gstretch_get_strokes(self, context) - else: - # straightening function (no GP) -> loops ignore modifiers - straightening = True - derived = False - bm_mod = bm.copy() - bm_mod.verts.ensure_lookup_table() - bm_mod.edges.ensure_lookup_table() - bm_mod.faces.ensure_lookup_table() - strokes = gstretch_get_fake_strokes(object, bm_mod, loops) - if not straightening: - derived, bm_mod = get_derived_bmesh(object, bm, False) - else: - # get loops and strokes - if get_strokes(self, context): - # find loops - derived, bm_mod, loops = get_connected_input(object, bm, False, input='selected') - mapping = get_mapping(derived, bm, bm_mod, False, False, loops) - loops = check_loops(loops, mapping, bm_mod) - # get strokes - strokes = gstretch_get_strokes(self, context) - else: - # straightening function (no GP) -> loops ignore modifiers - derived = False - mapping = False - bm_mod = bm.copy() - bm_mod.verts.ensure_lookup_table() - bm_mod.edges.ensure_lookup_table() - bm_mod.faces.ensure_lookup_table() - edge_keys = [ - edgekey(edge) for edge in bm_mod.edges if - edge.select and not edge.hide - ] - loops = get_connected_selections(edge_keys) - loops = check_loops(loops, mapping, bm_mod) - # create fake strokes - strokes = gstretch_get_fake_strokes(object, bm_mod, loops) - - # saving cache for faster execution next time - if not cached: - if strokes: - safe_strokes = gstretch_true_to_safe_strokes(strokes) - else: - safe_strokes = [] - cache_write("Gstretch", object, bm, False, False, - safe_strokes, loops, derived, mapping) - - # pair loops and strokes - ls_pairs = gstretch_match_loops_strokes(loops, strokes, object, bm_mod) - ls_pairs = gstretch_align_pairs(ls_pairs, object, bm_mod, self.method) - - move = [] - if not loops: - # no selected geometry, convert GP to verts - if strokes: - move.append(gstretch_create_verts(object, bm, strokes, - self.method, self.conversion, self.conversion_distance, - self.conversion_max, self.conversion_min, - self.conversion_vertices)) - for stroke in strokes: - gstretch_erase_stroke(stroke, context) - elif ls_pairs: - for (loop, stroke) in ls_pairs: - move.append(gstretch_calculate_verts(loop, stroke, object, - bm_mod, self.method)) - if self.delete_strokes: - if type(stroke) != bpy.types.GPencilStroke: - # in case of cached fake stroke, get the real one - if get_strokes(self, context): - strokes = gstretch_get_strokes(self, context) - if loops and strokes: - ls_pairs = gstretch_match_loops_strokes(loops, - strokes, object, bm_mod) - ls_pairs = gstretch_align_pairs(ls_pairs, - object, bm_mod, self.method) - for (l, s) in ls_pairs: - if l == loop: - stroke = s - break - gstretch_erase_stroke(stroke, context) - - # move vertices to new locations - if self.lock_x or self.lock_y or self.lock_z: - lock = [self.lock_x, self.lock_y, self.lock_z] - else: - lock = False - bmesh.update_edit_mesh(object.data, loop_triangles=True, destructive=True) - move_verts(object, bm, mapping, move, lock, self.influence) - - # cleaning up - if derived: - bm_mod.free() - terminate() - - return{'FINISHED'} - - -# relax operator -class Relax(Operator): - bl_idname = "mesh.looptools_relax" - bl_label = "Relax" - bl_description = "Relax the loop, so it is smoother" - bl_options = {'REGISTER', 'UNDO'} - - input: EnumProperty( - name="Input", - items=(("all", "Parallel (all)", "Also use non-selected " - "parallel loops as input"), - ("selected", "Selection", "Only use selected vertices as input")), - description="Loops that are relaxed", - default='selected' - ) - interpolation: EnumProperty( - name="Interpolation", - items=(("cubic", "Cubic", "Natural cubic spline, smooth results"), - ("linear", "Linear", "Simple and fast linear algorithm")), - description="Algorithm used for interpolation", - default='cubic' - ) - iterations: EnumProperty( - name="Iterations", - items=(("1", "1", "One"), - ("3", "3", "Three"), - ("5", "5", "Five"), - ("10", "10", "Ten"), - ("25", "25", "Twenty-five")), - description="Number of times the loop is relaxed", - default="1" - ) - regular: BoolProperty( - name="Regular", - description="Distribute vertices at constant distances along the loop", - default=True - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return(ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - layout = self.layout - col = layout.column() - - col.prop(self, "interpolation") - col.prop(self, "input") - col.prop(self, "iterations") - col.prop(self, "regular") - - def invoke(self, context, event): - # load custom settings - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - settings_write(self) - # check cache to see if we can save time - cached, single_loops, loops, derived, mapping = cache_read("Relax", - object, bm, self.input, False) - if cached: - derived, bm_mod = get_derived_bmesh(object, bm, False) - else: - # find loops - derived, bm_mod, loops = get_connected_input(object, bm, False, self.input) - mapping = get_mapping(derived, bm, bm_mod, False, False, loops) - loops = check_loops(loops, mapping, bm_mod) - knots, points = relax_calculate_knots(loops) - - # saving cache for faster execution next time - if not cached: - cache_write("Relax", object, bm, self.input, False, False, loops, - derived, mapping) - - for iteration in range(int(self.iterations)): - # calculate splines and new positions - tknots, tpoints = relax_calculate_t(bm_mod, knots, points, - self.regular) - splines = [] - for i in range(len(knots)): - splines.append(calculate_splines(self.interpolation, bm_mod, - tknots[i], knots[i])) - move = [relax_calculate_verts(bm_mod, self.interpolation, - tknots, knots, tpoints, points, splines)] - move_verts(object, bm, mapping, move, False, -1) - - # cleaning up - if derived: - bm_mod.free() - terminate() - - return{'FINISHED'} - - -# space operator -class Space(Operator): - bl_idname = "mesh.looptools_space" - bl_label = "Space" - bl_description = "Space the vertices in a regular distribution on the loop" - bl_options = {'REGISTER', 'UNDO'} - - influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - input: EnumProperty( - name="Input", - items=(("all", "Parallel (all)", "Also use non-selected " - "parallel loops as input"), - ("selected", "Selection", "Only use selected vertices as input")), - description="Loops that are spaced", - default='selected' - ) - interpolation: EnumProperty( - name="Interpolation", - items=(("cubic", "Cubic", "Natural cubic spline, smooth results"), - ("linear", "Linear", "Vertices are projected on existing edges")), - description="Algorithm used for interpolation", - default='cubic' - ) - lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - - @classmethod - def poll(cls, context): - ob = context.active_object - return(ob and ob.type == 'MESH' and context.mode == 'EDIT_MESH') - - def draw(self, context): - layout = self.layout - col = layout.column() - - col.prop(self, "interpolation") - col.prop(self, "input") - col.separator() - - col_move = col.column(align=True) - row = col_move.row(align=True) - if self.lock_x: - row.prop(self, "lock_x", text="X", icon='LOCKED') - else: - row.prop(self, "lock_x", text="X", icon='UNLOCKED') - if self.lock_y: - row.prop(self, "lock_y", text="Y", icon='LOCKED') - else: - row.prop(self, "lock_y", text="Y", icon='UNLOCKED') - if self.lock_z: - row.prop(self, "lock_z", text="Z", icon='LOCKED') - else: - row.prop(self, "lock_z", text="Z", icon='UNLOCKED') - col_move.prop(self, "influence") - - def invoke(self, context, event): - # load custom settings - settings_load(self) - return self.execute(context) - - def execute(self, context): - # initialise - object, bm = initialise() - settings_write(self) - # check cache to see if we can save time - cached, single_loops, loops, derived, mapping = cache_read("Space", - object, bm, self.input, False) - if cached: - derived, bm_mod = get_derived_bmesh(object, bm, True) - else: - # find loops - derived, bm_mod, loops = get_connected_input(object, bm, True, self.input) - mapping = get_mapping(derived, bm, bm_mod, False, False, loops) - loops = check_loops(loops, mapping, bm_mod) - - # saving cache for faster execution next time - if not cached: - cache_write("Space", object, bm, self.input, False, False, loops, - derived, mapping) - - move = [] - for loop in loops: - # calculate splines and new positions - if loop[1]: # circular - loop[0].append(loop[0][0]) - tknots, tpoints = space_calculate_t(bm_mod, loop[0][:]) - splines = calculate_splines(self.interpolation, bm_mod, - tknots, loop[0][:]) - move.append(space_calculate_verts(bm_mod, self.interpolation, - tknots, tpoints, loop[0][:-1], splines)) - # move vertices to new locations - if self.lock_x or self.lock_y or self.lock_z: - lock = [self.lock_x, self.lock_y, self.lock_z] - else: - lock = False - move_verts(object, bm, mapping, move, lock, self.influence) - - # cleaning up - if derived: - bm_mod.free() - terminate() - - cache_delete("Space") - - return{'FINISHED'} - - -# ######################################## -# ##### GUI and registration ############# -# ######################################## - -# menu containing all tools -class VIEW3D_MT_edit_mesh_looptools(Menu): - bl_label = "LoopTools" - - def draw(self, context): - layout = self.layout - - layout.operator("mesh.looptools_bridge", text="Bridge").loft = False - layout.operator("mesh.looptools_circle") - layout.operator("mesh.looptools_curve") - layout.operator("mesh.looptools_flatten") - layout.operator("mesh.looptools_gstretch") - layout.operator("mesh.looptools_bridge", text="Loft").loft = True - layout.operator("mesh.looptools_relax") - layout.operator("mesh.looptools_space") - - -# panel containing all tools -class VIEW3D_PT_tools_looptools(Panel): - bl_space_type = 'VIEW_3D' - bl_region_type = 'UI' - bl_category = 'Edit' - bl_context = "mesh_edit" - bl_label = "LoopTools" - bl_options = {'DEFAULT_CLOSED'} - - def draw(self, context): - layout = self.layout - col = layout.column(align=True) - lt = context.window_manager.looptools - - # bridge - first line - split = col.split(factor=0.15, align=True) - if lt.display_bridge: - split.prop(lt, "display_bridge", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_bridge", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_bridge", text="Bridge").loft = False - # bridge - settings - if lt.display_bridge: - box = col.column(align=True).box().column() - # box.prop(self, "mode") - - # top row - col_top = box.column(align=True) - row = col_top.row(align=True) - col_left = row.column(align=True) - col_right = row.column(align=True) - col_right.active = lt.bridge_segments != 1 - col_left.prop(lt, "bridge_segments") - col_right.prop(lt, "bridge_min_width", text="") - # bottom row - bottom_left = col_left.row() - bottom_left.active = lt.bridge_segments != 1 - bottom_left.prop(lt, "bridge_interpolation", text="") - bottom_right = col_right.row() - bottom_right.active = lt.bridge_interpolation == 'cubic' - bottom_right.prop(lt, "bridge_cubic_strength") - # boolean properties - col_top.prop(lt, "bridge_remove_faces") - - # override properties - col_top.separator() - row = box.row(align=True) - row.prop(lt, "bridge_twist") - row.prop(lt, "bridge_reverse") - - # circle - first line - split = col.split(factor=0.15, align=True) - if lt.display_circle: - split.prop(lt, "display_circle", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_circle", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_circle") - # circle - settings - if lt.display_circle: - box = col.column(align=True).box().column() - box.prop(lt, "circle_fit") - box.separator() - - box.prop(lt, "circle_flatten") - row = box.row(align=True) - row.prop(lt, "circle_custom_radius") - row_right = row.row(align=True) - row_right.active = lt.circle_custom_radius - row_right.prop(lt, "circle_radius", text="") - box.prop(lt, "circle_regular") - box.separator() - - col_move = box.column(align=True) - row = col_move.row(align=True) - if lt.circle_lock_x: - row.prop(lt, "circle_lock_x", text="X", icon='LOCKED') - else: - row.prop(lt, "circle_lock_x", text="X", icon='UNLOCKED') - if lt.circle_lock_y: - row.prop(lt, "circle_lock_y", text="Y", icon='LOCKED') - else: - row.prop(lt, "circle_lock_y", text="Y", icon='UNLOCKED') - if lt.circle_lock_z: - row.prop(lt, "circle_lock_z", text="Z", icon='LOCKED') - else: - row.prop(lt, "circle_lock_z", text="Z", icon='UNLOCKED') - col_move.prop(lt, "circle_influence") - - # curve - first line - split = col.split(factor=0.15, align=True) - if lt.display_curve: - split.prop(lt, "display_curve", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_curve", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_curve") - # curve - settings - if lt.display_curve: - box = col.column(align=True).box().column() - box.prop(lt, "curve_interpolation") - box.prop(lt, "curve_restriction") - box.prop(lt, "curve_boundaries") - box.prop(lt, "curve_regular") - box.separator() - - col_move = box.column(align=True) - row = col_move.row(align=True) - if lt.curve_lock_x: - row.prop(lt, "curve_lock_x", text="X", icon='LOCKED') - else: - row.prop(lt, "curve_lock_x", text="X", icon='UNLOCKED') - if lt.curve_lock_y: - row.prop(lt, "curve_lock_y", text="Y", icon='LOCKED') - else: - row.prop(lt, "curve_lock_y", text="Y", icon='UNLOCKED') - if lt.curve_lock_z: - row.prop(lt, "curve_lock_z", text="Z", icon='LOCKED') - else: - row.prop(lt, "curve_lock_z", text="Z", icon='UNLOCKED') - col_move.prop(lt, "curve_influence") - - # flatten - first line - split = col.split(factor=0.15, align=True) - if lt.display_flatten: - split.prop(lt, "display_flatten", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_flatten", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_flatten") - # flatten - settings - if lt.display_flatten: - box = col.column(align=True).box().column() - box.prop(lt, "flatten_plane") - # box.prop(lt, "flatten_restriction") - box.separator() - - col_move = box.column(align=True) - row = col_move.row(align=True) - if lt.flatten_lock_x: - row.prop(lt, "flatten_lock_x", text="X", icon='LOCKED') - else: - row.prop(lt, "flatten_lock_x", text="X", icon='UNLOCKED') - if lt.flatten_lock_y: - row.prop(lt, "flatten_lock_y", text="Y", icon='LOCKED') - else: - row.prop(lt, "flatten_lock_y", text="Y", icon='UNLOCKED') - if lt.flatten_lock_z: - row.prop(lt, "flatten_lock_z", text="Z", icon='LOCKED') - else: - row.prop(lt, "flatten_lock_z", text="Z", icon='UNLOCKED') - col_move.prop(lt, "flatten_influence") - - # gstretch - first line - split = col.split(factor=0.15, align=True) - if lt.display_gstretch: - split.prop(lt, "display_gstretch", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_gstretch", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_gstretch") - # gstretch settings - if lt.display_gstretch: - box = col.column(align=True).box().column() - box.prop(lt, "gstretch_use_guide") - if lt.gstretch_use_guide == "GPencil": - box.prop(lt, "gstretch_guide") - box.prop(lt, "gstretch_method") - - col_conv = box.column(align=True) - col_conv.prop(lt, "gstretch_conversion", text="") - if lt.gstretch_conversion == 'distance': - col_conv.prop(lt, "gstretch_conversion_distance") - elif lt.gstretch_conversion == 'limit_vertices': - row = col_conv.row(align=True) - row.prop(lt, "gstretch_conversion_min", text="Min") - row.prop(lt, "gstretch_conversion_max", text="Max") - elif lt.gstretch_conversion == 'vertices': - col_conv.prop(lt, "gstretch_conversion_vertices") - box.separator() - - col_move = box.column(align=True) - row = col_move.row(align=True) - if lt.gstretch_lock_x: - row.prop(lt, "gstretch_lock_x", text="X", icon='LOCKED') - else: - row.prop(lt, "gstretch_lock_x", text="X", icon='UNLOCKED') - if lt.gstretch_lock_y: - row.prop(lt, "gstretch_lock_y", text="Y", icon='LOCKED') - else: - row.prop(lt, "gstretch_lock_y", text="Y", icon='UNLOCKED') - if lt.gstretch_lock_z: - row.prop(lt, "gstretch_lock_z", text="Z", icon='LOCKED') - else: - row.prop(lt, "gstretch_lock_z", text="Z", icon='UNLOCKED') - col_move.prop(lt, "gstretch_influence") - if lt.gstretch_use_guide == "Annotation": - box.operator("remove.annotation", text="Delete Annotation Strokes") - if lt.gstretch_use_guide == "GPencil": - box.operator("remove.gp", text="Delete GPencil Strokes") - - # loft - first line - split = col.split(factor=0.15, align=True) - if lt.display_loft: - split.prop(lt, "display_loft", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_loft", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_bridge", text="Loft").loft = True - # loft - settings - if lt.display_loft: - box = col.column(align=True).box().column() - # box.prop(self, "mode") - - # top row - col_top = box.column(align=True) - row = col_top.row(align=True) - col_left = row.column(align=True) - col_right = row.column(align=True) - col_right.active = lt.bridge_segments != 1 - col_left.prop(lt, "bridge_segments") - col_right.prop(lt, "bridge_min_width", text="") - # bottom row - bottom_left = col_left.row() - bottom_left.active = lt.bridge_segments != 1 - bottom_left.prop(lt, "bridge_interpolation", text="") - bottom_right = col_right.row() - bottom_right.active = lt.bridge_interpolation == 'cubic' - bottom_right.prop(lt, "bridge_cubic_strength") - # boolean properties - col_top.prop(lt, "bridge_remove_faces") - col_top.prop(lt, "bridge_loft_loop") - - # override properties - col_top.separator() - row = box.row(align=True) - row.prop(lt, "bridge_twist") - row.prop(lt, "bridge_reverse") - - # relax - first line - split = col.split(factor=0.15, align=True) - if lt.display_relax: - split.prop(lt, "display_relax", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_relax", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_relax") - # relax - settings - if lt.display_relax: - box = col.column(align=True).box().column() - box.prop(lt, "relax_interpolation") - box.prop(lt, "relax_input") - box.prop(lt, "relax_iterations") - box.prop(lt, "relax_regular") - - # space - first line - split = col.split(factor=0.15, align=True) - if lt.display_space: - split.prop(lt, "display_space", text="", icon='DOWNARROW_HLT') - else: - split.prop(lt, "display_space", text="", icon='RIGHTARROW') - split.operator("mesh.looptools_space") - # space - settings - if lt.display_space: - box = col.column(align=True).box().column() - box.prop(lt, "space_interpolation") - box.prop(lt, "space_input") - box.separator() - - col_move = box.column(align=True) - row = col_move.row(align=True) - if lt.space_lock_x: - row.prop(lt, "space_lock_x", text="X", icon='LOCKED') - else: - row.prop(lt, "space_lock_x", text="X", icon='UNLOCKED') - if lt.space_lock_y: - row.prop(lt, "space_lock_y", text="Y", icon='LOCKED') - else: - row.prop(lt, "space_lock_y", text="Y", icon='UNLOCKED') - if lt.space_lock_z: - row.prop(lt, "space_lock_z", text="Z", icon='LOCKED') - else: - row.prop(lt, "space_lock_z", text="Z", icon='UNLOCKED') - col_move.prop(lt, "space_influence") - - -# property group containing all properties for the gui in the panel -class LoopToolsProps(PropertyGroup): - """ - Fake module like class - bpy.context.window_manager.looptools - """ - # general display properties - display_bridge: BoolProperty( - name="Bridge settings", - description="Display settings of the Bridge tool", - default=False - ) - display_circle: BoolProperty( - name="Circle settings", - description="Display settings of the Circle tool", - default=False - ) - display_curve: BoolProperty( - name="Curve settings", - description="Display settings of the Curve tool", - default=False - ) - display_flatten: BoolProperty( - name="Flatten settings", - description="Display settings of the Flatten tool", - default=False - ) - display_gstretch: BoolProperty( - name="Gstretch settings", - description="Display settings of the Gstretch tool", - default=False - ) - display_loft: BoolProperty( - name="Loft settings", - description="Display settings of the Loft tool", - default=False - ) - display_relax: BoolProperty( - name="Relax settings", - description="Display settings of the Relax tool", - default=False - ) - display_space: BoolProperty( - name="Space settings", - description="Display settings of the Space tool", - default=False - ) - - # bridge properties - bridge_cubic_strength: FloatProperty( - name="Strength", - description="Higher strength results in more fluid curves", - default=1.0, - soft_min=-3.0, - soft_max=3.0 - ) - bridge_interpolation: EnumProperty( - name="Interpolation mode", - items=(('cubic', "Cubic", "Gives curved results"), - ('linear', "Linear", "Basic, fast, straight interpolation")), - description="Interpolation mode: algorithm used when creating segments", - default='cubic' - ) - bridge_loft: BoolProperty( - name="Loft", - description="Loft multiple loops, instead of considering them as " - "a multi-input for bridging", - default=False - ) - bridge_loft_loop: BoolProperty( - name="Loop", - description="Connect the first and the last loop with each other", - default=False - ) - bridge_min_width: IntProperty( - name="Minimum width", - description="Segments with an edge smaller than this are merged " - "(compared to base edge)", - default=0, - min=0, - max=100, - subtype='PERCENTAGE' - ) - bridge_mode: EnumProperty( - name="Mode", - items=(('basic', "Basic", "Fast algorithm"), - ('shortest', "Shortest edge", "Slower algorithm with " - "better vertex matching")), - description="Algorithm used for bridging", - default='shortest' - ) - bridge_remove_faces: BoolProperty( - name="Remove faces", - description="Remove faces that are internal after bridging", - default=True - ) - bridge_reverse: BoolProperty( - name="Reverse", - description="Manually override the direction in which the loops " - "are bridged. Only use if the tool gives the wrong result", - default=False - ) - bridge_segments: IntProperty( - name="Segments", - description="Number of segments used to bridge the gap (0=automatic)", - default=1, - min=0, - soft_max=20 - ) - bridge_twist: IntProperty( - name="Twist", - description="Twist what vertices are connected to each other", - default=0 - ) - - # circle properties - circle_custom_radius: BoolProperty( - name="Radius", - description="Force a custom radius", - default=False - ) - circle_fit: EnumProperty( - name="Method", - items=(("best", "Best fit", "Non-linear least squares"), - ("inside", "Fit inside", "Only move vertices towards the center")), - description="Method used for fitting a circle to the vertices", - default='best' - ) - circle_flatten: BoolProperty( - name="Flatten", - description="Flatten the circle, instead of projecting it on the mesh", - default=True - ) - circle_influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - circle_lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - circle_lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - circle_lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - circle_radius: FloatProperty( - name="Radius", - description="Custom radius for circle", - default=1.0, - min=0.0, - soft_max=1000.0 - ) - circle_regular: BoolProperty( - name="Regular", - description="Distribute vertices at constant distances along the circle", - default=True - ) - circle_angle: FloatProperty( - name="Angle", - description="Rotate a circle by an angle", - unit='ROTATION', - default=math.radians(0.0), - soft_min=math.radians(-360.0), - soft_max=math.radians(360.0) - ) - # curve properties - curve_boundaries: BoolProperty( - name="Boundaries", - description="Limit the tool to work within the boundaries of the " - "selected vertices", - default=False - ) - curve_influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - curve_interpolation: EnumProperty( - name="Interpolation", - items=(("cubic", "Cubic", "Natural cubic spline, smooth results"), - ("linear", "Linear", "Simple and fast linear algorithm")), - description="Algorithm used for interpolation", - default='cubic' - ) - curve_lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - curve_lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - curve_lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - curve_regular: BoolProperty( - name="Regular", - description="Distribute vertices at constant distances along the curve", - default=True - ) - curve_restriction: EnumProperty( - name="Restriction", - items=(("none", "None", "No restrictions on vertex movement"), - ("extrude", "Extrude only", "Only allow extrusions (no indentations)"), - ("indent", "Indent only", "Only allow indentation (no extrusions)")), - description="Restrictions on how the vertices can be moved", - default='none' - ) - - # flatten properties - flatten_influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - flatten_lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False) - flatten_lock_y: BoolProperty(name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - flatten_lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - flatten_plane: EnumProperty( - name="Plane", - items=(("best_fit", "Best fit", "Calculate a best fitting plane"), - ("normal", "Normal", "Derive plane from averaging vertex " - "normals"), - ("view", "View", "Flatten on a plane perpendicular to the " - "viewing angle")), - description="Plane on which vertices are flattened", - default='best_fit' - ) - flatten_restriction: EnumProperty( - name="Restriction", - items=(("none", "None", "No restrictions on vertex movement"), - ("bounding_box", "Bounding box", "Vertices are restricted to " - "movement inside the bounding box of the selection")), - description="Restrictions on how the vertices can be moved", - default='none' - ) - - # gstretch properties - gstretch_conversion: EnumProperty( - name="Conversion", - items=(("distance", "Distance", "Set the distance between vertices " - "of the converted stroke"), - ("limit_vertices", "Limit vertices", "Set the minimum and maximum " - "number of vertices that converted GP strokes will have"), - ("vertices", "Exact vertices", "Set the exact number of vertices " - "that converted strokes will have. Short strokes " - "with few points may contain less vertices than this number."), - ("none", "No simplification", "Convert each point " - "to a vertex")), - description="If strokes are converted to geometry, " - "use this simplification method", - default='limit_vertices' - ) - gstretch_conversion_distance: FloatProperty( - name="Distance", - description="Absolute distance between vertices along the converted " - "stroke", - default=0.1, - min=0.000001, - soft_min=0.01, - soft_max=100 - ) - gstretch_conversion_max: IntProperty( - name="Max Vertices", - description="Maximum number of vertices strokes will " - "have, when they are converted to geometry", - default=32, - min=3, - soft_max=500, - update=gstretch_update_min - ) - gstretch_conversion_min: IntProperty( - name="Min Vertices", - description="Minimum number of vertices strokes will " - "have, when they are converted to geometry", - default=8, - min=3, - soft_max=500, - update=gstretch_update_max - ) - gstretch_conversion_vertices: IntProperty( - name="Vertices", - description="Number of vertices strokes will " - "have, when they are converted to geometry. If strokes have less " - "points than required, the 'Spread evenly' method is used", - default=32, - min=3, - soft_max=500 - ) - gstretch_delete_strokes: BoolProperty( - name="Delete strokes", - description="Remove Grease Pencil strokes if they have been used " - "for Gstretch. WARNING: DOES NOT SUPPORT UNDO", - default=False - ) - gstretch_influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - gstretch_lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - gstretch_lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - gstretch_lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - gstretch_method: EnumProperty( - name="Method", - items=(("project", "Project", "Project vertices onto the stroke, " - "using vertex normals and connected edges"), - ("irregular", "Spread", "Distribute vertices along the full " - "stroke, retaining relative distances between the vertices"), - ("regular", "Spread evenly", "Distribute vertices at regular " - "distances along the full stroke")), - description="Method of distributing the vertices over the Grease " - "Pencil stroke", - default='regular' - ) - gstretch_use_guide: EnumProperty( - name="Use guides", - items=(("None", "None", "None"), - ("Annotation", "Annotation", "Annotation"), - ("GPencil", "GPencil", "GPencil")), - default="None" - ) - gstretch_guide: PointerProperty( - name="GPencil object", - description="Set GPencil object", - type=bpy.types.Object - ) - - # relax properties - relax_input: EnumProperty(name="Input", - items=(("all", "Parallel (all)", "Also use non-selected " - "parallel loops as input"), - ("selected", "Selection", "Only use selected vertices as input")), - description="Loops that are relaxed", - default='selected' - ) - relax_interpolation: EnumProperty( - name="Interpolation", - items=(("cubic", "Cubic", "Natural cubic spline, smooth results"), - ("linear", "Linear", "Simple and fast linear algorithm")), - description="Algorithm used for interpolation", - default='cubic' - ) - relax_iterations: EnumProperty(name="Iterations", - items=(("1", "1", "One"), - ("3", "3", "Three"), - ("5", "5", "Five"), - ("10", "10", "Ten"), - ("25", "25", "Twenty-five")), - description="Number of times the loop is relaxed", - default="1" - ) - relax_regular: BoolProperty( - name="Regular", - description="Distribute vertices at constant distances along the loop", - default=True - ) - - # space properties - space_influence: FloatProperty( - name="Influence", - description="Force of the tool", - default=100.0, - min=0.0, - max=100.0, - precision=1, - subtype='PERCENTAGE' - ) - space_input: EnumProperty( - name="Input", - items=(("all", "Parallel (all)", "Also use non-selected " - "parallel loops as input"), - ("selected", "Selection", "Only use selected vertices as input")), - description="Loops that are spaced", - default='selected' - ) - space_interpolation: EnumProperty( - name="Interpolation", - items=(("cubic", "Cubic", "Natural cubic spline, smooth results"), - ("linear", "Linear", "Vertices are projected on existing edges")), - description="Algorithm used for interpolation", - default='cubic' - ) - space_lock_x: BoolProperty( - name="Lock X", - description="Lock editing of the x-coordinate", - default=False - ) - space_lock_y: BoolProperty( - name="Lock Y", - description="Lock editing of the y-coordinate", - default=False - ) - space_lock_z: BoolProperty( - name="Lock Z", - description="Lock editing of the z-coordinate", - default=False - ) - -# draw function for integration in menus -def menu_func(self, context): - self.layout.menu("VIEW3D_MT_edit_mesh_looptools") - self.layout.separator() - - -# Add-ons Preferences Update Panel - -# Define Panel classes for updating -panels = ( - VIEW3D_PT_tools_looptools, - ) - - -def update_panel(self, context): - message = "LoopTools: Updating Panel locations has failed" - try: - for panel in panels: - if "bl_rna" in panel.__dict__: - bpy.utils.unregister_class(panel) - - for panel in panels: - panel.bl_category = context.preferences.addons[__name__].preferences.category - bpy.utils.register_class(panel) - - except Exception as e: - print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e)) - pass - - -class LoopPreferences(AddonPreferences): - # this must match the addon name, use '__package__' - # when defining this in a submodule of a python package. - bl_idname = __name__ - - category: StringProperty( - name="Tab Category", - description="Choose a name for the category of the panel", - default="Edit", - update=update_panel - ) - - def draw(self, context): - layout = self.layout - - row = layout.row() - col = row.column() - col.label(text="Tab Category:") - col.prop(self, "category", text="") - - -# define classes for registration -classes = ( - VIEW3D_MT_edit_mesh_looptools, - VIEW3D_PT_tools_looptools, - LoopToolsProps, - Bridge, - Circle, - Curve, - Flatten, - GStretch, - Relax, - Space, - LoopPreferences, - RemoveAnnotation, - RemoveGPencil, -) - - -# registering and menu integration -def register(): - for cls in classes: - bpy.utils.register_class(cls) - bpy.types.VIEW3D_MT_edit_mesh_context_menu.prepend(menu_func) - bpy.types.WindowManager.looptools = PointerProperty(type=LoopToolsProps) - update_panel(None, bpy.context) - - -# unregistering and removing menus -def unregister(): - for cls in reversed(classes): - bpy.utils.unregister_class(cls) - bpy.types.VIEW3D_MT_edit_mesh_context_menu.remove(menu_func) - try: - del bpy.types.WindowManager.looptools - except Exception as e: - print('unregister fail:\n', e) - pass - - -if __name__ == "__main__": - register() diff --git a/extensions/blender_org/looptools/blender_manifest.toml b/extensions/blender_org/looptools/blender_manifest.toml deleted file mode 100644 index 28181e9..0000000 --- a/extensions/blender_org/looptools/blender_manifest.toml +++ /dev/null @@ -1,12 +0,0 @@ -schema_version = "1.0.0" -id = "looptools" -name = "LoopTools" -version = "4.7.7" -tagline = "Mesh modelling toolkit. Several tools to aid modelling" -maintainer = "Community" -type = "add-on" -tags = ["Mesh"] -blender_version_min = "4.2.0" -license = ["SPDX:GPL-2.0-or-later"] -website = "https://projects.blender.org/extensions/mesh_looptools" -copyright = ["2024 Bart Crouch", "2024 Vladimir Spivak (cwolf3d)"] diff --git a/extensions/rainys_extensions/.blender_ext/index.json b/extensions/rainys_extensions/.blender_ext/index.json index 2ac3902..eee467a 100644 --- a/extensions/rainys_extensions/.blender_ext/index.json +++ b/extensions/rainys_extensions/.blender_ext/index.json @@ -54,13 +54,13 @@ "id": "rainclouds_bulk_scene_tools", "name": "Raincloud's Bulk Scene Tools", "tagline": "Bulk utilities for optimizing scene data", - "version": "0.17.0", + "version": "0.18.0", "type": "add-on", "maintainer": "RaincloudTheDragon ", "license": [ "GPL-3.0-or-later" ], - "blender_version_min": "4.2.0", + "blender_version_min": "4.5.0", "website": "https://github.com/RaincloudTheDragon/Rainys-Bulk-Scene-Tools", "permissions": { "files": "Read and write external resources referenced by scenes" @@ -70,9 +70,9 @@ "Workflow", "Materials" ], - "archive_url": "https://github.com/RaincloudTheDragon/Rainys-Bulk-Scene-Tools/releases/download/v0.17.0/Rainys_Bulk_Scene_Tools.v0.17.0.zip", - "archive_size": 80981, - "archive_hash": "sha256:419433069465b45ea903bd7bb46d89aa28b9c96c541d587d5f3be651a762811f" + "archive_url": "https://github.com/RaincloudTheDragon/Rainys-Bulk-Scene-Tools/releases/download/0.18.0/Rainys_Bulk_Scene_Tools.v0.18.0.zip", + "archive_size": 75599, + "archive_hash": "sha256:6653a01b9ac5822e51113609b5a2970102715ec5f7816a9dccd80ecb4c755ea5" }, { "schema_version": "1.0.0", @@ -92,7 +92,7 @@ "submission", "utility" ], - "archive_url": "https://github.com/RaincloudTheDragon/sheepit_project_submitter/releases/download/v0.0.8/SheepIt_Project_Submitter.v0.0.8.zip", + "archive_url": "https://github.com/RaincloudTheDragon/based-blendfile-packer/releases/download/v0.0.8/SheepIt_Project_Submitter.v0.0.8.zip", "archive_size": 47667, "archive_hash": "sha256:93cd8f18456079130c48c66cfd40235f7fe6414f929f59f90670e7a864821110" } diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/__init__.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/__init__.py index 3df03bd..d2fbe7c 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/__init__.py +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/__init__.py @@ -8,7 +8,6 @@ from .panels import bulk_scene_general from .ops.AutoMatExtractor import RBST_AutoMat_OT_AutoMatExtractor, RBST_AutoMat_OT_summary_dialog from .ops.Rename_images_by_mat import RBST_RenameImg_OT_Rename_images_by_mat, RBST_RenameImg_OT_summary_dialog from .ops.FreeGPU import RBST_FreeGPU -from .ops import ghost_buster from . import rainys_repo_bootstrap from .utils import compat @@ -77,7 +76,6 @@ def register(): bulk_viewport_display.register() bulk_data_remap.register() bulk_path_management.register() - ghost_buster.register() # Add keybind for Free GPU (global context) wm = bpy.context.window_manager @@ -106,10 +104,6 @@ def unregister(): delattr(bpy.types.Scene, '_bst_keymaps') # Unregister modules - try: - ghost_buster.unregister() - except Exception: - pass try: bulk_path_management.unregister() except Exception: diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/blender_manifest.toml b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/blender_manifest.toml index c08b79d..d476794 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/blender_manifest.toml +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/blender_manifest.toml @@ -3,12 +3,12 @@ schema_version = "1.0.0" id = "rainclouds_bulk_scene_tools" name = "Raincloud's Bulk Scene Tools" tagline = "Bulk utilities for optimizing scene data" -version = "0.17.0" +version = "0.18.0" type = "add-on" maintainer = "RaincloudTheDragon " license = ["GPL-3.0-or-later"] -blender_version_min = "4.2.0" +blender_version_min = "4.5.0" website = "https://github.com/RaincloudTheDragon/Rainys-Bulk-Scene-Tools" diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/changelog.md b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/changelog.md index a380452..f37ab4d 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/changelog.md +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/changelog.md @@ -1,3 +1,9 @@ +# v0.18.0 2026-07-14 + - Official support: Blender 4.5 and 5.2 LTS only; minimum version raised to 4.5 (#9) + - Bulk Data Remap: native node group rename/merge for numbered duplicates (#16) + - Ghost Buster removed; use Atomic instead (#17) + - Remapper UI: larger Purge Unused button, fixed post-Ghost-Buster spacing + # v0.17.0 2026-03-13 - Remove Action FU: new operator in Animation Data section—clears fake users from all actions so only used animations are kept diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/delete_single_keyframe_actions.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/delete_single_keyframe_actions.py index e2c25b7..c043675 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/delete_single_keyframe_actions.py +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/delete_single_keyframe_actions.py @@ -4,7 +4,7 @@ from ..utils import version def _collect_keyframe_stats(action): - """Return (total_keyframes, keyframe_frames_set). Compatible with 4.2/4.5 (action.fcurves) and 5.0 (layers/strips/channelbags).""" + """Return (total_keyframes, keyframe_frames_set). Compatible with 4.5 (action.fcurves) and 5.0+ (layers/strips/channelbags).""" keyframe_frames = set() total_keyframes = 0 if version.is_version_less_than(5, 0, 0): diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/ghost_buster.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/ghost_buster.py deleted file mode 100644 index 9b3d6a8..0000000 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/ops/ghost_buster.py +++ /dev/null @@ -1,688 +0,0 @@ -import bpy -from ..utils import compat - -def safe_wgt_removal(): - """Safely remove only WGT widget objects that are clearly ghosts""" - - print("="*80) - print("CONSERVATIVE WGT GHOST REMOVAL") - print("="*80) - - # Find all WGT objects - wgt_objects = [] - for obj in bpy.data.objects: - if obj.name.startswith('WGT-'): - wgt_objects.append(obj) - - print(f"Found {len(wgt_objects)} WGT objects") - - # Check which ones are actually being used by armatures - used_wgts = set() - for armature in bpy.data.armatures: - for bone in armature.bones: - if bone.use_deform and hasattr(bone, 'custom_shape') and bone.custom_shape: - used_wgts.add(bone.custom_shape.name) - - print(f"Found {len(used_wgts)} WGT objects actually used by armatures") - - # Remove unused WGT objects - removed_wgts = 0 - for obj in wgt_objects: - if obj.name not in used_wgts: - try: - # Skip linked objects (they're legitimate library content) - if hasattr(obj, 'library') and obj.library is not None: - print(f" Skipping linked WGT: {obj.name} (from {obj.library.name})") - continue - - # Check if it's in the WGTS collection (typical ghost pattern) - in_wgts_collection = False - for collection in bpy.data.collections: - if 'WGTS' in collection.name and obj in collection.objects.values(): - in_wgts_collection = True - break - - if in_wgts_collection: - print(f" Removing unused WGT: {obj.name}") - bpy.data.objects.remove(obj, do_unlink=True) - removed_wgts += 1 - except Exception as e: - print(f" Failed to remove {obj.name}: {e}") - - print(f"Removed {removed_wgts} unused WGT objects") - return removed_wgts - -def is_collection_in_scene_hierarchy(collection, scene_collection): - """Recursively check if a collection exists anywhere in the scene collection hierarchy""" - if collection == scene_collection: - return True - - for child_collection in scene_collection.children: - if child_collection == collection: - return True - if is_collection_in_scene_hierarchy(collection, child_collection): - return True - - return False - -def clean_empty_collections(): - """Remove empty collections that are not linked to scenes""" - - print("\n" + "="*80) - print("CLEANING EMPTY COLLECTIONS") - print("="*80) - - removed_collections = 0 - collections_to_remove = [] - - for collection in bpy.data.collections: - # Check if collection is empty - if len(collection.objects) == 0 and len(collection.children) == 0: - # Skip linked collections (they're legitimate library content) - if hasattr(collection, 'library') and collection.library is not None: - print(f" Skipping linked empty collection: {collection.name}") - continue - - # Check if it's anywhere in any scene's collection hierarchy - linked_to_scene = False - for scene in bpy.data.scenes: - if is_collection_in_scene_hierarchy(collection, scene.collection): - linked_to_scene = True - print(f" Preserving empty collection: {collection.name} (in scene '{scene.name}')") - break - - if not linked_to_scene: - collections_to_remove.append(collection) - - for collection in collections_to_remove: - try: - print(f" Removing empty collection: {collection.name}") - bpy.data.collections.remove(collection) - removed_collections += 1 - except Exception as e: - print(f" Failed to remove collection {collection.name}: {e}") - - print(f"Removed {removed_collections} empty collections") - return removed_collections - -def is_object_used_by_scene_instance_collections(obj): - """Check if object is in a collection that's being instanced by objects in scenes""" - - # Find all collections that contain this object - obj_collections = [] - for collection in bpy.data.collections: - if obj in collection.objects.values(): - obj_collections.append(collection) - - if not obj_collections: - return False - - # Check if any of these collections are being instanced by objects in scenes - for collection in obj_collections: - # Find objects that instance this collection - for other_obj in bpy.data.objects: - if (other_obj.instance_type == 'COLLECTION' and - other_obj.instance_collection == collection): - - # Check if the instancing object is in any scene - for scene in bpy.data.scenes: - if other_obj in scene.objects.values(): - return True - - return False - -def is_object_legitimate_outside_scene(obj): - """Check if an object has legitimate reasons to exist outside scenes""" - - # WGT objects (rig widgets) are legitimate outside scenes - if obj.name.startswith('WGT-'): - return True - - # Collection instance objects (linked collection references) are legitimate - if obj.instance_type == 'COLLECTION' and obj.instance_collection is not None: - return True - - # Objects that are being used by instance collections in scenes are legitimate - if is_object_used_by_scene_instance_collections(obj): - return True - - # Objects used as curve modifiers, constraints targets, etc. - # Check if object is used by modifiers on other objects that are in scenes - for other_obj in bpy.data.objects: - # Check if the other object is in any scene - in_scene = False - for scene in bpy.data.scenes: - if other_obj in scene.objects.values(): - in_scene = True - break - - if in_scene: - for modifier in other_obj.modifiers: - if hasattr(modifier, 'object') and modifier.object == obj: - return True - if hasattr(modifier, 'target') and modifier.target == obj: - return True - - # Check if object is used by constraints on other objects that are in scenes - for other_obj in bpy.data.objects: - # Check if the other object is in any scene - in_scene = False - for scene in bpy.data.scenes: - if other_obj in scene.objects.values(): - in_scene = True - break - - if in_scene: - for constraint in other_obj.constraints: - if hasattr(constraint, 'target') and constraint.target == obj: - return True - if hasattr(constraint, 'subtarget') and constraint.subtarget == obj.name: - return True - - # Check if object is used in particle systems on objects that are in scenes - for other_obj in bpy.data.objects: - # Check if the other object is in any scene - in_scene = False - for scene in bpy.data.scenes: - if other_obj in scene.objects.values(): - in_scene = True - break - - if in_scene: - for modifier in other_obj.modifiers: - if modifier.type == 'PARTICLE_SYSTEM': - settings = modifier.particle_system.settings - if hasattr(settings, 'object') and settings.object == obj: - return True - if hasattr(settings, 'instance_object') and settings.instance_object == obj: - return True - - return False - -def clean_object_ghosts(delete_low_priority=False): - """Remove objects that are not in any scene and have no legitimate purpose (potential ghosts)""" - - print("\n" + "="*80) - print("OBJECT GHOST CLEANUP") - print("="*80) - - # Get all objects, excluding cameras and lights by default (they're often not in scenes for good reasons) - candidate_objects = [obj for obj in bpy.data.objects if obj.type not in ['CAMERA', 'LIGHT']] - - if not candidate_objects: - print("No candidate objects found") - return 0 - - print(f"Found {len(candidate_objects)} candidate objects") - - removed_objects = 0 - ghosts_to_remove = [] - - for obj in candidate_objects: - # Skip linked objects (they're legitimate library content) - if hasattr(obj, 'library') and obj.library is not None: - continue - - # Check which scenes contain it - in_scenes = [] - for scene in bpy.data.scenes: - if obj in scene.objects.values(): - in_scenes.append(scene.name) - - # If not in any scene, check if it has legitimate reasons to exist - if len(in_scenes) == 0: - if is_object_legitimate_outside_scene(obj): - print(f" Preserving object: {obj.name} (legitimate use outside scene)") - continue - - # If not legitimate, it's a ghost - but be conservative with low user count objects - should_remove = False - removal_reason = "" - - if obj.users >= 2: - # Higher user count ghosts are definitely safe to remove - should_remove = True - removal_reason = "ghost (users >= 2, no legitimate use found)" - elif obj.users < 2 and delete_low_priority: - # Low user count ghosts only if user enables the option - should_remove = True - removal_reason = "low priority ghost (users < 2, no legitimate use found)" - elif obj.users < 2: - print(f" Skipping low priority object: {obj.name} (users < 2, enable 'Delete Low Priority' to remove)") - - if should_remove: - ghosts_to_remove.append(obj) - print(f" Marking ghost for removal: {obj.name} (type: {obj.type}) - {removal_reason}") - - # Remove the ghost objects - for obj in ghosts_to_remove: - try: - print(f" Removing object ghost: {obj.name}") - bpy.data.objects.remove(obj, do_unlink=True) - removed_objects += 1 - except Exception as e: - print(f" Failed to remove object {obj.name}: {e}") - - print(f"Removed {removed_objects} ghost objects") - return removed_objects - -def manual_object_analysis(): - """Manual analysis of objects - show info but don't auto-remove""" - - print("\n" + "="*80) - print("OBJECT GHOST ANALYSIS (MANUAL REVIEW)") - print("="*80) - - # Get all objects, excluding cameras and lights (they're often legitimately not in scenes) - candidate_objects = [obj for obj in bpy.data.objects if obj.type not in ['CAMERA', 'LIGHT']] - - # Filter to only objects not in scenes for analysis - objects_not_in_scenes = [] - for obj in candidate_objects: - # Skip linked objects for analysis - if hasattr(obj, 'library') and obj.library is not None: - continue - - # Check which scenes contain it - in_scenes = [] - for scene in bpy.data.scenes: - if obj in scene.objects.values(): - in_scenes.append(scene.name) - - if len(in_scenes) == 0: - objects_not_in_scenes.append(obj) - - if not objects_not_in_scenes: - print("No local objects found outside scenes") - return - - print(f"Found {len(objects_not_in_scenes)} local objects not in any scene:") - - for obj in objects_not_in_scenes: - print(f"\n Object: {obj.name} (type: {obj.type})") - print(f" Users: {obj.users}") - print(f" Parent: {obj.parent.name if obj.parent else 'None'}") - - # Check collections - in_collections = [] - for collection in bpy.data.collections: - if obj in collection.objects.values(): - in_collections.append(collection.name) - print(f" In collections: {in_collections}") - - # Show recommendation - if is_object_legitimate_outside_scene(obj): - print(f" -> LEGITIMATE: Has valid use outside scenes") - elif obj.users >= 2: - print(f" -> GHOST: No legitimate use found, users >= 2 (will be removed)") - elif obj.users < 2: - print(f" -> LOW PRIORITY: No legitimate use found, users < 2 (needs option enabled)") - else: - print(f" -> UNCLEAR: Manual review needed") - -def main(delete_low_priority=False): - """Main conservative cleanup function""" - - print("CONSERVATIVE GHOST DATA CLEANUP") - print("="*80) - print("This script removes:") - print("1. Unused local WGT widget objects") - print("2. Empty unlinked collections") - print("3. Objects not in any scene with no legitimate use") - if delete_low_priority: - print(" - Including low priority ghosts (no legitimate use, users < 2)") - else: - print(" - Excluding low priority ghosts (no legitimate use, users < 2)") - print("="*80) - - initial_objects = len(list(bpy.data.objects)) - initial_collections = len(list(bpy.data.collections)) - - # Safe operations only - wgts_removed = safe_wgt_removal() - collections_removed = clean_empty_collections() - object_ghosts_removed = clean_object_ghosts(delete_low_priority) - - # Show remaining object analysis - manual_object_analysis() - - # Final purge - print("\n" + "="*80) - print("FINAL SAFE PURGE") - print("="*80) - - try: - bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True) - print("Safe purge completed") - except: - print("Purge had issues") - - final_objects = len(list(bpy.data.objects)) - final_collections = len(list(bpy.data.collections)) - - print(f"\n" + "="*80) - print("CONSERVATIVE CLEANUP SUMMARY") - print("="*80) - print(f"Objects: {initial_objects} -> {final_objects} (removed {initial_objects - final_objects})") - print(f"Collections: {initial_collections} -> {final_collections} (removed {collections_removed})") - print(f"WGT objects removed: {wgts_removed}") - print(f"Object ghosts removed: {object_ghosts_removed}") - print("="*80) - -class RBST_Bustin_OT_GhostBuster(bpy.types.Operator): - """Conservative cleanup of ghost data (unused WGT objects, empty collections)""" - bl_idname = "bst.ghost_buster" - bl_label = "Ghost Buster" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - try: - # Get the delete low priority setting from scene properties - delete_low_priority = getattr(context.scene, "ghost_buster_delete_low_priority", False) - - # Call the main ghost buster function - main(delete_low_priority) - self.report({'INFO'}, "Ghost data cleanup completed") - return {'FINISHED'} - except Exception as e: - self.report({'ERROR'}, f"Ghost buster failed: {str(e)}") - return {'CANCELLED'} - -class RBST_Bustin_OT_GhostDetector(bpy.types.Operator): - """Detect and analyze ghost data without removing it""" - bl_idname = "bst.ghost_detector" - bl_label = "Ghost Detector" - bl_options = {'REGISTER', 'INTERNAL'} - - # Properties to store analysis data - total_wgt_objects: bpy.props.IntProperty(default=0) - unused_wgt_objects: bpy.props.IntProperty(default=0) - used_wgt_objects: bpy.props.IntProperty(default=0) - empty_collections: bpy.props.IntProperty(default=0) - ghost_objects: bpy.props.IntProperty(default=0) - ghost_potential: bpy.props.IntProperty(default=0) - ghost_legitimate: bpy.props.IntProperty(default=0) - ghost_low_priority: bpy.props.IntProperty(default=0) - wgt_details: bpy.props.StringProperty(default="") - collection_details: bpy.props.StringProperty(default="") - ghost_details: bpy.props.StringProperty(default="") - - def analyze_ghost_data(self): - """Analyze ghost data similar to ghost_buster functions""" - - # Analyze WGT objects - wgt_objects = [] - for obj in bpy.data.objects: - if obj.name.startswith('WGT-'): - wgt_objects.append(obj) - - self.total_wgt_objects = len(wgt_objects) - - # Check which WGT objects are used by armatures - used_wgts = set() - for armature in bpy.data.armatures: - for bone in armature.bones: - if bone.use_deform and hasattr(bone, 'custom_shape') and bone.custom_shape: - used_wgts.add(bone.custom_shape.name) - - self.used_wgt_objects = len(used_wgts) - - # Count unused WGT objects - unused_wgts = [] - wgt_details_list = [] - for obj in wgt_objects: - if obj.name not in used_wgts: - # Skip linked objects (they're legitimate library content) - if hasattr(obj, 'library') and obj.library is not None: - continue - - # Check if it's in the WGTS collection (typical ghost pattern) - in_wgts_collection = False - for collection in bpy.data.collections: - if 'WGTS' in collection.name and obj in collection.objects.values(): - in_wgts_collection = True - break - - if in_wgts_collection: - unused_wgts.append(obj) - wgt_details_list.append(f"• {obj.name} (in WGTS collection)") - - self.unused_wgt_objects = len(unused_wgts) - self.wgt_details = "\n".join(wgt_details_list[:10]) # Limit to first 10 - if len(unused_wgts) > 10: - self.wgt_details += f"\n... and {len(unused_wgts) - 10} more" - - # Analyze empty collections - empty_collections = [] - collection_details_list = [] - for collection in bpy.data.collections: - if len(collection.objects) == 0 and len(collection.children) == 0: - # Skip linked collections (they're legitimate library content) - if hasattr(collection, 'library') and collection.library is not None: - continue - - # Check if it's anywhere in any scene's collection hierarchy - linked_to_scene = False - for scene in bpy.data.scenes: - if is_collection_in_scene_hierarchy(collection, scene.collection): - linked_to_scene = True - break - - if not linked_to_scene: - empty_collections.append(collection) - collection_details_list.append(f"• {collection.name}") - - self.empty_collections = len(empty_collections) - self.collection_details = "\n".join(collection_details_list[:10]) # Limit to first 10 - if len(empty_collections) > 10: - self.collection_details += f"\n... and {len(empty_collections) - 10} more" - - # Analyze ghost objects (objects not in scenes) - candidate_objects = [obj for obj in bpy.data.objects if obj.type not in ['CAMERA', 'LIGHT']] - - potential_ghosts = 0 - legitimate = 0 - low_priority = 0 - ghost_details_list = [] - - for obj in candidate_objects: - # Skip linked objects (they're legitimate library content) - if hasattr(obj, 'library') and obj.library is not None: - continue - - # Check which scenes contain it - in_scenes = [] - for scene in bpy.data.scenes: - if obj in scene.objects.values(): - in_scenes.append(scene.name) - - # Only analyze objects not in scenes - if len(in_scenes) == 0: - # Classify object - status = "" - if is_object_legitimate_outside_scene(obj): - legitimate += 1 - status = "LEGITIMATE (has valid use outside scenes)" - elif obj.users >= 2: - potential_ghosts += 1 - status = "GHOST (no legitimate use found, users >= 2)" - elif obj.users < 2: - low_priority += 1 - status = "LOW PRIORITY (no legitimate use found, users < 2)" - else: - status = "UNCLEAR" - - ghost_details_list.append(f"• {obj.name} ({obj.type}): {status}") - - self.ghost_objects = len([obj for obj in candidate_objects if len([s for s in bpy.data.scenes if obj in s.objects.values()]) == 0 and not (hasattr(obj, 'library') and obj.library is not None)]) - self.ghost_potential = potential_ghosts - self.ghost_legitimate = legitimate - self.ghost_low_priority = low_priority - self.ghost_details = "\n".join(ghost_details_list[:10]) # Limit to first 10 - if len(ghost_details_list) > 10: - self.ghost_details += f"\n... and {len(ghost_details_list) - 10} more" - - def draw(self, context): - layout = self.layout - - # Title - layout.label(text="Ghost Data Analysis", icon='GHOST_ENABLED') - layout.separator() - - # WGT Objects section - box = layout.box() - box.label(text="WGT Widget Objects", icon='ARMATURE_DATA') - col = box.column(align=True) - col.label(text=f"Total WGT objects: {self.total_wgt_objects}") - col.label(text=f"Used by armatures: {self.used_wgt_objects}", icon='CHECKMARK') - if self.unused_wgt_objects > 0: - col.label(text=f"Unused (potential ghosts): {self.unused_wgt_objects}", icon='ERROR') - if self.wgt_details: - box.separator() - details_col = box.column(align=True) - for line in self.wgt_details.split('\n'): - if line.strip(): - details_col.label(text=line) - else: - col.label(text="No unused WGT objects found", icon='CHECKMARK') - - # Empty Collections section - box = layout.box() - box.label(text="Empty Collections", icon='OUTLINER_COLLECTION') - col = box.column(align=True) - if self.empty_collections > 0: - col.label(text=f"Empty unlinked collections: {self.empty_collections}", icon='ERROR') - if self.collection_details: - box.separator() - details_col = box.column(align=True) - for line in self.collection_details.split('\n'): - if line.strip(): - details_col.label(text=line) - else: - col.label(text="No empty unlinked collections found", icon='CHECKMARK') - - # Ghost Objects section - box = layout.box() - box.label(text="Ghost Objects Analysis", icon='OBJECT_DATA') - col = box.column(align=True) - col.label(text=f"Objects not in scenes: {self.ghost_objects}") - if self.ghost_objects > 0: - if self.ghost_potential > 0: - col.label(text=f"Ghosts (users >= 2): {self.ghost_potential}", icon='ERROR') - if self.ghost_legitimate > 0: - col.label(text=f"Legitimate objects: {self.ghost_legitimate}", icon='CHECKMARK') - if self.ghost_low_priority > 0: - col.label(text=f"Low priority (users < 2): {self.ghost_low_priority}", icon='QUESTION') - - if self.ghost_details: - box.separator() - details_col = box.column(align=True) - for line in self.ghost_details.split('\n'): - if line.strip(): - details_col.label(text=line) - else: - col.label(text="No ghost objects found", icon='CHECKMARK') - - # Summary - layout.separator() - summary_box = layout.box() - summary_box.label(text="Summary", icon='INFO') - total_issues = self.unused_wgt_objects + self.empty_collections + self.ghost_potential - if total_issues > 0: - summary_box.label(text=f"Found {total_issues} ghost data issues that will be removed", icon='ERROR') - if self.ghost_low_priority > 0: - summary_box.label(text=f"+ {self.ghost_low_priority} low priority issues (optional)", icon='QUESTION') - summary_box.label(text="Use Ghost Buster to clean up safely") - else: - summary_box.label(text="No ghost data issues detected!", icon='CHECKMARK') - if self.ghost_low_priority > 0: - summary_box.label(text=f"({self.ghost_low_priority} low priority issues available)", icon='INFO') - - def execute(self, context): - return {'FINISHED'} - - def invoke(self, context, event): - # Analyze the ghost data before showing the dialog - self.analyze_ghost_data() - return context.window_manager.invoke_popup(self, width=500) - -class RBST_Bustin_OT_ResyncEnforce(bpy.types.Operator): - """Resync Enforce: Fix broken library override hierarchies by rebuilding from linked references""" - bl_idname = "bst.resync_enforce" - bl_label = "Resync Enforce" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - # Only available if there are selected objects - return context.selected_objects - - def execute(self, context): - # Get selected objects - selected_objects = context.selected_objects.copy() - - if not selected_objects: - self.report({'WARNING'}, "No objects selected for resync enforce") - return {'CANCELLED'} - - # Count library override objects - override_objects = [] - for obj in selected_objects: - if obj.override_library: - override_objects.append(obj) - - if not override_objects: - self.report({'WARNING'}, "No library override objects found in selection") - return {'CANCELLED'} - - try: - # Store the current selection - original_selection = set(context.selected_objects) - - # Select only the override objects - bpy.ops.object.select_all(action='DESELECT') - for obj in override_objects: - obj.select_set(True) - - # Call Blender's resync enforce operation - result = bpy.ops.object.library_override_operation( - 'INVOKE_DEFAULT', - type='OVERRIDE_LIBRARY_RESYNC_HIERARCHY_ENFORCE', - selection_set='SELECTED' - ) - - if result == {'FINISHED'}: - self.report({'INFO'}, f"Resync enforce completed on {len(override_objects)} override objects") - return_code = {'FINISHED'} - else: - self.report({'WARNING'}, "Resync enforce operation was cancelled or failed") - return_code = {'CANCELLED'} - - # Restore original selection - bpy.ops.object.select_all(action='DESELECT') - for obj in original_selection: - if obj.name in bpy.data.objects: # Check if object still exists - obj.select_set(True) - - return return_code - - except Exception as e: - self.report({'ERROR'}, f"Resync enforce failed: {str(e)}") - return {'CANCELLED'} - -# Note: main() is called by the operator, not automatically - -# List of classes to register -classes = ( - RBST_Bustin_OT_GhostBuster, - RBST_Bustin_OT_GhostDetector, - RBST_Bustin_OT_ResyncEnforce, -) - -def register(): - for cls in classes: - compat.safe_register_class(cls) - -def unregister(): - for cls in reversed(classes): - compat.safe_unregister_class(cls) \ No newline at end of file diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_data_remap.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_data_remap.py index 845c354..3e05414 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_data_remap.py +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_data_remap.py @@ -4,8 +4,6 @@ import os import sys import subprocess -# Import ghost buster functionality -from ..ops.ghost_buster import RBST_Bustin_OT_GhostBuster, RBST_Bustin_OT_GhostDetector, RBST_Bustin_OT_ResyncEnforce from ..utils import compat # Regular expression to match numbered suffixes like .001, .002, _001, _0001, etc. @@ -45,6 +43,12 @@ def RBST_DatRem_register_properties(): default=True ) + bpy.types.Scene.dataremap_node_groups = bpy.props.BoolProperty( # type: ignore + name="Node Groups", + description="Find and remap duplicate node groups", + default=True + ) + # Add properties for showing duplicate lists bpy.types.Scene.show_image_duplicates = bpy.props.BoolProperty( # type: ignore name="Show Image Duplicates", @@ -70,6 +74,12 @@ def RBST_DatRem_register_properties(): default=False ) + bpy.types.Scene.show_node_group_duplicates = bpy.props.BoolProperty( # type: ignore + name="Show Node Group Duplicates", + description="Show list of duplicate node groups", + default=False + ) + # Sort by selected properties for each data type bpy.types.Scene.dataremap_sort_images = bpy.props.BoolProperty( # type: ignore name="Sort Images by Selected", @@ -91,6 +101,11 @@ def RBST_DatRem_register_properties(): description="Show selected world groups at the top of the list", default=False ) + bpy.types.Scene.dataremap_sort_node_groups = bpy.props.BoolProperty( # type: ignore + name="Sort Node Groups by Selected", + description="Show selected node group groups at the top of the list", + default=False + ) # Search filter properties for each data type bpy.types.Scene.dataremap_search_images = bpy.props.StringProperty( # type: ignore @@ -117,6 +132,12 @@ def RBST_DatRem_register_properties(): default="" ) + bpy.types.Scene.dataremap_search_node_groups = bpy.props.StringProperty( # type: ignore + name="Search Node Groups", + description="Filter node groups by name (case-insensitive)", + default="" + ) + # Dictionary to store excluded groups if not hasattr(bpy.types.Scene, "excluded_remap_groups"): bpy.types.Scene.excluded_remap_groups = {} @@ -128,23 +149,18 @@ def RBST_DatRem_register_properties(): # Store the last clicked group for shift-click range selection if not hasattr(bpy.types.Scene, "last_clicked_group"): bpy.types.Scene.last_clicked_group = {} - - # Ghost Buster properties - bpy.types.Scene.ghost_buster_delete_low_priority = bpy.props.BoolProperty( # type: ignore - name="Delete Low Priority Ghosts", - description="Delete objects not in scenes with no legitimate use and users < 2", - default=False - ) def RBST_DatRem_unregister_properties(): del bpy.types.Scene.dataremap_images del bpy.types.Scene.dataremap_materials del bpy.types.Scene.dataremap_fonts del bpy.types.Scene.dataremap_worlds + del bpy.types.Scene.dataremap_node_groups del bpy.types.Scene.show_image_duplicates del bpy.types.Scene.show_material_duplicates del bpy.types.Scene.show_font_duplicates del bpy.types.Scene.show_world_duplicates + del bpy.types.Scene.show_node_group_duplicates if hasattr(bpy.types.Scene, "excluded_remap_groups"): del bpy.types.Scene.excluded_remap_groups if hasattr(bpy.types.Scene, "expanded_remap_groups"): @@ -157,10 +173,7 @@ def RBST_DatRem_unregister_properties(): del bpy.types.Scene.dataremap_sort_materials del bpy.types.Scene.dataremap_sort_fonts del bpy.types.Scene.dataremap_sort_worlds - - # Delete ghost buster properties - if hasattr(bpy.types.Scene, "ghost_buster_delete_low_priority"): - del bpy.types.Scene.ghost_buster_delete_low_priority + del bpy.types.Scene.dataremap_sort_node_groups def RBST_DatRem_get_base_name(name): """Extract the base name without numbered suffix""" @@ -194,6 +207,56 @@ def RBST_DatRem_find_data_groups(data_collection): return {name: items for name, items in groups.items() if len(items) > 1 and any(not (hasattr(item, 'library') and item.library is not None) for item in items)} +def RBST_DatRem_get_node_group_tree_label(node_group): + """Return a short label for a node group's tree type.""" + tree_id = getattr(node_group, 'bl_idname', '') or '' + if tree_id.endswith('NodeTree'): + return tree_id[:-8] + return tree_id or 'Unknown' + +def RBST_DatRem_format_node_group_group_key(group_key): + """Format a node group group key for display.""" + if ':' not in group_key: + return group_key + tree_id, base_name = group_key.split(':', 1) + tree_label = tree_id.replace('NodeTree', '') if tree_id.endswith('NodeTree') else tree_id + return f"{base_name} ({tree_label})" + +def RBST_DatRem_find_node_group_data_groups(): + """Group node groups by tree type and base name.""" + groups = {} + + for node_group in bpy.data.node_groups: + if node_group.users == 0: + continue + if hasattr(node_group, 'library') and node_group.library is not None: + continue + + base_name = RBST_DatRem_get_base_name(node_group.name) + tree_id = getattr(node_group, 'bl_idname', 'UnknownNodeTree') + group_key = f"{tree_id}:{base_name}" + + if group_key not in groups: + groups[group_key] = [] + groups[group_key].append(node_group) + + return {name: items for name, items in groups.items() + if len(items) > 1 and any(not (hasattr(item, 'library') and item.library is not None) for item in items)} + +def RBST_DatRem_get_duplicate_groups(data_type): + """Return duplicate groups for a remapper data type.""" + if data_type == "images": + return RBST_DatRem_find_data_groups(bpy.data.images) + if data_type == "materials": + return RBST_DatRem_find_data_groups(bpy.data.materials) + if data_type == "fonts": + return RBST_DatRem_find_data_groups(bpy.data.fonts) + if data_type == "worlds": + return RBST_DatRem_find_data_groups(bpy.data.worlds) + if data_type == "node_groups": + return RBST_DatRem_find_node_group_data_groups() + return {} + def RBST_DatRem_find_target_data(data_group): """Find the target data block to remap to""" # Filter out linked datablocks @@ -242,7 +305,7 @@ def RBST_DatRem_clean_data_names(data_collection): return cleaned_count -def RBST_DatRem_remap_data_blocks(context, remap_images, remap_materials, remap_fonts, remap_worlds): +def RBST_DatRem_remap_data_blocks(context, remap_images, remap_materials, remap_fonts, remap_worlds, remap_node_groups): """Remap redundant data blocks to their base versions like Blender's Remap Users function, and clean up names.""" remapped_count = 0 cleaned_count = 0 @@ -587,6 +650,35 @@ def RBST_DatRem_remap_data_blocks(context, remap_images, remap_materials, remap_ # Then clean up any remaining numbered suffixes cleaned_count += RBST_DatRem_clean_data_names(bpy.data.worlds) + # Process node groups + if remap_node_groups: + node_group_groups = RBST_DatRem_find_node_group_data_groups() + for group_key, node_groups in node_group_groups.items(): + if f"node_groups:{group_key}" in context.scene.excluded_remap_groups: + continue + + target_group = RBST_DatRem_find_target_data(node_groups) + + if RBST_DatRem_get_base_name(target_group.name) != target_group.name: + try: + target_group.name = RBST_DatRem_get_base_name(target_group.name) + except AttributeError: + print(f"Warning: Cannot rename linked node group {target_group.name}") + continue + + try: + for node_group in node_groups: + if node_group != target_group: + try: + node_group.user_remap(target_group) + remapped_count += 1 + except AttributeError: + print(f"Warning: Cannot remap linked node group {node_group.name}") + except Exception as e: + print(f"Error using built-in remap for node groups: {e}") + + cleaned_count += RBST_DatRem_clean_data_names(bpy.data.node_groups) + # Force an update of the dependency graph to ensure all users are properly updated if context.view_layer: context.view_layer.update() @@ -605,14 +697,20 @@ class RBST_DatRem_OT_RemapData(bpy.types.Operator): remap_materials = context.scene.dataremap_materials remap_fonts = context.scene.dataremap_fonts remap_worlds = context.scene.dataremap_worlds + remap_node_groups = context.scene.dataremap_node_groups # Count duplicates before remapping (only for local datablocks) image_groups = RBST_DatRem_find_data_groups(bpy.data.images) if remap_images else {} material_groups = RBST_DatRem_find_data_groups(bpy.data.materials) if remap_materials else {} font_groups = RBST_DatRem_find_data_groups(bpy.data.fonts) if remap_fonts else {} world_groups = RBST_DatRem_find_data_groups(bpy.data.worlds) if remap_worlds else {} + node_group_groups = RBST_DatRem_find_node_group_data_groups() if remap_node_groups else {} - total_duplicates = sum(len(group) - 1 for groups in [image_groups, material_groups, font_groups, world_groups] for group in groups.values()) + total_duplicates = sum( + len(group) - 1 + for groups in [image_groups, material_groups, font_groups, world_groups, node_group_groups] + for group in groups.values() + ) # Count data blocks with numbered suffixes (only for local datablocks) total_numbered = 0 @@ -636,6 +734,11 @@ class RBST_DatRem_OT_RemapData(bpy.types.Operator): if world.users > 0 and not (hasattr(world, 'library') and world.library is not None) and RBST_DatRem_get_base_name(world.name) != world.name) + if remap_node_groups: + total_numbered += sum(1 for node_group in bpy.data.node_groups + if node_group.users > 0 + and not (hasattr(node_group, 'library') and node_group.library is not None) + and RBST_DatRem_get_base_name(node_group.name) != node_group.name) if total_duplicates == 0 and total_numbered == 0: self.report({'INFO'}, "No local data blocks to process") @@ -647,7 +750,8 @@ class RBST_DatRem_OT_RemapData(bpy.types.Operator): remap_images, remap_materials, remap_fonts, - remap_worlds + remap_worlds, + remap_node_groups, ) # Report results @@ -808,15 +912,7 @@ class RBST_DatRem_OT_SelectAllGroups(bpy.types.Operator): context.scene.excluded_remap_groups = {} # Get the appropriate data groups based on data_type - data_groups = {} - if self.data_type == "images": - data_groups = RBST_DatRem_find_data_groups(bpy.data.images) - elif self.data_type == "materials": - data_groups = RBST_DatRem_find_data_groups(bpy.data.materials) - elif self.data_type == "fonts": - data_groups = RBST_DatRem_find_data_groups(bpy.data.fonts) - elif self.data_type == "worlds": - data_groups = RBST_DatRem_find_data_groups(bpy.data.worlds) + data_groups = RBST_DatRem_get_duplicate_groups(self.data_type) # Process only groups with more than one item for base_name, items in data_groups.items(): @@ -873,15 +969,7 @@ class RBST_DatRem_OT_ToggleGroupSelection(bpy.types.Operator): last_group = context.scene.last_clicked_group[self.data_type] # Get all data groups for this data type - data_groups = [] - if self.data_type == "images": - data_groups = list(RBST_DatRem_find_data_groups(bpy.data.images).keys()) - elif self.data_type == "materials": - data_groups = list(RBST_DatRem_find_data_groups(bpy.data.materials).keys()) - elif self.data_type == "fonts": - data_groups = list(RBST_DatRem_find_data_groups(bpy.data.fonts).keys()) - elif self.data_type == "worlds": - data_groups = list(RBST_DatRem_find_data_groups(bpy.data.worlds).keys()) + data_groups = list(RBST_DatRem_get_duplicate_groups(self.data_type).keys()) # Find the indices of the last clicked group and the current group try: @@ -966,6 +1054,10 @@ def RBST_DatRem_search_matches_group(group, search_string): # Check base name if search_lower in base_name.lower(): return True + if ':' in base_name: + formatted_name = RBST_DatRem_format_node_group_group_key(base_name) + if search_lower in formatted_name.lower(): + return True # Check all item names in group for item in items: if search_lower in item.name.lower(): @@ -1075,9 +1167,13 @@ def RBST_DatRem_draw_data_duplicates(layout, context, data_type, data_groups): row.template_icon(icon_value=target_item.preview.icon_id, scale=1.0) else: row.label(text="", icon='WORLD') + elif data_type == "node_groups": + row.label(text="", icon='NODETREE') + + display_name = RBST_DatRem_format_node_group_group_key(base_name) if data_type == "node_groups" else base_name # Add rename operator for the group name - rename_op = row.operator("bst.rename_datablock_remap", text=f"{base_name}: {len(items)} versions", emboss=False) + rename_op = row.operator("bst.rename_datablock_remap", text=f"{display_name}: {len(items)} versions", emboss=False) rename_op.data_type = data_type rename_op.old_name = target_item.name @@ -1112,9 +1208,15 @@ def RBST_DatRem_draw_data_duplicates(layout, context, data_type, data_groups): sub_row.template_icon(icon_value=item.preview.icon_id, scale=1.0) else: sub_row.label(text="", icon='WORLD') + elif data_type == "node_groups": + sub_row.label(text="", icon='NODETREE') + + item_label = item.name + if data_type == "node_groups": + item_label = f"{item.name} ({RBST_DatRem_get_node_group_tree_label(item)})" # Add rename operator for each item - rename_op = sub_row.operator("bst.rename_datablock_remap", text=f"{item.name}", emboss=False) + rename_op = sub_row.operator("bst.rename_datablock_remap", text=item_label, emboss=False) rename_op.data_type = data_type rename_op.old_name = item.name @@ -1160,9 +1262,14 @@ class RBST_DatRem_PT_BulkDataRemap(bpy.types.Panel): linked_types.append("worlds") linked_paths.update(RBST_DatRem_get_linked_file_paths(bpy.data.worlds)) - # Display warning about linked datablocks in a separate section if found + if context.scene.dataremap_node_groups and RBST_DatRem_has_linked_datablocks(bpy.data.node_groups): + linked_datablocks_found = True + linked_types.append("node groups") + linked_paths.update(RBST_DatRem_get_linked_file_paths(bpy.data.node_groups)) + + # Display warning about linked datablocks inside the remapper box if linked_datablocks_found: - warning_box = layout.box() + warning_box = box.box() warning_box.alert = True warning_box.label(text="Warning: Linked datablocks detected", icon='ERROR') warning_box.label(text=f"Types: {', '.join(linked_types)}") @@ -1192,16 +1299,19 @@ class RBST_DatRem_PT_BulkDataRemap(bpy.types.Panel): material_groups = RBST_DatRem_find_data_groups(bpy.data.materials) font_groups = RBST_DatRem_find_data_groups(bpy.data.fonts) world_groups = RBST_DatRem_find_data_groups(bpy.data.worlds) + node_group_groups = RBST_DatRem_find_node_group_data_groups() image_duplicates = sum(len(group) - 1 for group in image_groups.values()) material_duplicates = sum(len(group) - 1 for group in material_groups.values()) font_duplicates = sum(len(group) - 1 for group in font_groups.values()) world_duplicates = sum(len(group) - 1 for group in world_groups.values()) + node_group_duplicates = sum(len(group) - 1 for group in node_group_groups.values()) image_numbered = sum(1 for img in bpy.data.images if img.users > 0 and RBST_DatRem_get_base_name(img.name) != img.name) material_numbered = sum(1 for mat in bpy.data.materials if mat.users > 0 and RBST_DatRem_get_base_name(mat.name) != mat.name) font_numbered = sum(1 for font in bpy.data.fonts if font.users > 0 and RBST_DatRem_get_base_name(font.name) != font.name) world_numbered = sum(1 for world in bpy.data.worlds if world.users > 0 and RBST_DatRem_get_base_name(world.name) != world.name) + node_group_numbered = sum(1 for node_group in bpy.data.node_groups if node_group.users > 0 and RBST_DatRem_get_base_name(node_group.name) != node_group.name) # Initialize excluded_remap_groups if it doesn't exist if not hasattr(context.scene, "excluded_remap_groups"): @@ -1332,6 +1442,33 @@ class RBST_DatRem_PT_BulkDataRemap(bpy.types.Panel): if context.scene.show_world_duplicates and world_duplicates > 0 and context.scene.dataremap_worlds: RBST_DatRem_draw_data_duplicates(col, context, "worlds", world_groups) + # Node Groups + row = col.row() + split = row.split(factor=0.6) + sub_row = split.row() + + op = sub_row.operator("bst.toggle_data_type", text="", icon='NODETREE', depress=context.scene.dataremap_node_groups) + op.data_type = "node_groups" + + if context.scene.dataremap_node_groups: + sub_row.label(text="Node Groups") + else: + sub_row.label(text="Node Groups", icon='RADIOBUT_OFF') + + sub_row = split.row() + if node_group_duplicates > 0: + sub_row.prop(context.scene, "show_node_group_duplicates", + text=f"{node_group_duplicates} duplicates", + icon='DISCLOSURE_TRI_DOWN' if context.scene.show_node_group_duplicates else 'DISCLOSURE_TRI_RIGHT', + emboss=False) + elif node_group_numbered > 0: + sub_row.label(text=f"{node_group_numbered} numbered") + else: + sub_row.label(text="0 duplicates") + + if context.scene.show_node_group_duplicates and node_group_duplicates > 0 and context.scene.dataremap_node_groups: + RBST_DatRem_draw_data_duplicates(col, context, "node_groups", node_group_groups) + # Add the operator button row = box.row() row.scale_y = 1.5 @@ -1355,8 +1492,8 @@ class RBST_DatRem_PT_BulkDataRemap(bpy.types.Panel): dbu_box.label(text="Data-block utilities addon not installed", icon='ERROR') # Show total counts - total_duplicates = image_duplicates + material_duplicates + font_duplicates + world_duplicates - total_numbered = image_numbered + material_numbered + font_numbered + world_numbered + total_duplicates = image_duplicates + material_duplicates + font_duplicates + world_duplicates + node_group_duplicates + total_numbered = image_numbered + material_numbered + font_numbered + world_numbered + node_group_numbered if total_duplicates > 0 or total_numbered > 0: box.separator() @@ -1367,37 +1504,9 @@ class RBST_DatRem_PT_BulkDataRemap(bpy.types.Panel): else: box.label(text="No data blocks to process") - # Add a separator and purge button - box.separator() - row = box.row() - row.operator("bst.purge_unused_data", icon='TRASH') - - # Ghost Buster section - layout.separator() - ghost_box = layout.box() - ghost_box.label(text="Ghost Buster - Experimental") - - col = ghost_box.column() - col.label(text="Ghost data cleanup & library override fixes:") - col.label(text="• Unused local WGT widget objects") - col.label(text="• Empty unlinked collections") - col.label(text="• Objects not in scenes with no legitimate use") - col.label(text="• Fix broken library override hierarchies") - - # Two button layout - row = ghost_box.row(align=True) + row = layout.row() row.scale_y = 1.5 - row.operator("bst.ghost_detector", text="Ghost Detector", icon='ZOOM_IN') - row.operator("bst.ghost_buster", text="Ghost Buster", icon='GHOST_ENABLED') - - # Ghost Buster option - ghost_box.prop(context.scene, "ghost_buster_delete_low_priority", text="Delete Low Priority Ghosts") - - # Resync Enforce button - ghost_box.separator() - row = ghost_box.row() - row.scale_y = 1.2 - row.operator("bst.resync_enforce", text="Resync Enforce", icon='FILE_REFRESH') + row.operator("bst.purge_unused_data", icon='TRASH') # Add a new operator for toggling data types class RBST_DatRem_OT_ToggleDataType(bpy.types.Operator): @@ -1421,6 +1530,8 @@ class RBST_DatRem_OT_ToggleDataType(bpy.types.Operator): context.scene.dataremap_fonts = not context.scene.dataremap_fonts elif self.data_type == "worlds": context.scene.dataremap_worlds = not context.scene.dataremap_worlds + elif self.data_type == "node_groups": + context.scene.dataremap_node_groups = not context.scene.dataremap_node_groups return {'FINISHED'} @@ -1543,6 +1654,8 @@ class RBST_DatRem_OT_RenameDatablock(bpy.types.Operator): data_collection = bpy.data.fonts elif self.data_type == "worlds": data_collection = bpy.data.worlds + elif self.data_type == "node_groups": + data_collection = bpy.data.node_groups if not data_collection: self.report({'ERROR'}, "Invalid data type") diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_viewport_display.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_viewport_display.py index ab105e3..a1e3a4b 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_viewport_display.py +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/panels/bulk_viewport_display.py @@ -395,7 +395,7 @@ class RBST_ViewDisp_OT_RefreshMaterialPreviews(bpy.types.Operator): if hasattr(material, 'preview_ensure'): try: preview = material.preview_ensure() - # In Blender 4.2/4.5, accessing icon_id is safe and helps ensure generation + # In Blender 4.5, accessing icon_id is safe and helps ensure generation # In Blender 5.0+, we skip this to avoid crashes if not version.is_version_5_0() and preview and hasattr(preview, 'icon_id'): try: diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/readme.md b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/readme.md index 3429d00..783fd42 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/readme.md +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/readme.md @@ -7,7 +7,7 @@ A couple Blender tools to help me automate some tedious tasks in scene optimizat - Bulk Data Remap - Bulk Viewport Display -Officially supports Blender 4.2, 4.4, 4.5, and 5.0. +Officially supports Blender 4.5 and 5.2. ## Installation diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/compat.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/compat.py index 2259ad4..b80d95e 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/compat.py +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/compat.py @@ -1,6 +1,6 @@ """ This module provides API compatibility functions for handling differences -between Blender 4.2, 4.4, 4.5, and 5.0. +between Blender 4.5 and 5.2. """ diff --git a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/version.py b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/version.py index 0a5b1cc..f1a97c7 100644 --- a/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/version.py +++ b/extensions/rainys_extensions/rainclouds_bulk_scene_tools/utils/version.py @@ -1,16 +1,14 @@ """ This module provides version detection and comparison utilities for -multi-version Blender support (4.2, 4.4, 4.5, and 5.0). - +multi-version Blender support (4.5 and 5.2). """ import bpy # Version constants -VERSION_4_2 = (4, 2, 0) -VERSION_4_4 = (4, 4, 0) VERSION_4_5 = (4, 5, 0) VERSION_5_0 = (5, 0, 0) +VERSION_5_2 = (5, 2, 0) def get_blender_version(): @@ -25,7 +23,7 @@ def get_blender_version(): def get_version_string(): """ - Returns the current Blender version as a string (e.g., "4.2.0"). + Returns the current Blender version as a string (e.g., "4.5.0"). Returns: str: Version string in format "major.minor.patch" @@ -76,35 +74,16 @@ def get_version_category(): Returns the version category string for the current Blender version. Returns: - str: '4.2', '4.4', '4.5', or '5.0' based on the current version + str: '4.5' or '5.2' for officially supported versions; otherwise 'major.minor' """ version = get_blender_version() major, minor = version[0], version[1] - if major == 4: - if minor < 4: - return '4.2' - elif minor < 5: - return '4.4' - else: - return '4.5' - elif major >= 5: - return '5.0' - else: - # Fallback for older versions - return f"{major}.{minor}" - - -def is_version_4_2(): - """Check if running Blender 4.2 (4.2.x only, not 4.3 or 4.4).""" - version = get_blender_version() - return version[0] == 4 and version[1] == 2 - - -def is_version_4_4(): - """Check if running Blender 4.4 (4.4.x only, not 4.5).""" - version = get_blender_version() - return version[0] == 4 and version[1] == 4 + if major == 4 and minor >= 5: + return '4.5' + if major >= 5 and is_version_at_least(5, 2, 0): + return '5.2' + return f"{major}.{minor}" def is_version_4_5(): @@ -116,3 +95,7 @@ def is_version_5_0(): """Check if running Blender 5.0 or later.""" return is_version_at_least(5, 0, 0) + +def is_version_5_2(): + """Check if running Blender 5.2 LTS or later.""" + return is_version_at_least(5, 2, 0) diff --git a/extensions/www_blenderkit_com/.blender_ext/index.json b/extensions/www_blenderkit_com/.blender_ext/index.json index af57d55..6a22582 100644 --- a/extensions/www_blenderkit_com/.blender_ext/index.json +++ b/extensions/www_blenderkit_com/.blender_ext/index.json @@ -1 +1 @@ -{"data":[{"id":"blenderkit","name":"BlenderKit [FREE]","tagline":"BlenderKit official add-on","version":"3.21.0-260628","type":"add-on","archive_size":39143952,"archive_hash":"sha256:fbeee0f603b5ca23aeb493d7826051d0d47ec2dd28ce1469b1a0f3197d2e1e8c","archive_url":"https://www.blendkit.com/addon-download/blenderkit.zip","blender_version_min":"4.2.0","maintainer":"Petr Dlouhý","tags":["blenderkit"],"license":["gpl"],"website":"https://www.blendkit.com/get-blendkit/","schema_version":"1.0.0"},{"id":"threed_print_prep_wizard","name":"3D Print Prep Wizard [FREE]","tagline":"Auto-detect thin walls, non-watertight meshes, overhangs; offer","version":"0.1.1","type":"add-on","archive_size":3221,"archive_hash":"sha256:290e3502ded6546478da53ca321a15e1594a2b2bcef260bc02bc9cfcbcd28c31","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bd4dac1f-f36d-4316-8680-efe9f4bb23d1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["3DPrint","MeshRepair","Workflow","Utility","Addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a85bc12b-33c3-46d0-a7b7-ed15cc5689c3/","schema_version":"1.0.0"},{"id":"ThreeMF_io","name":"3MF Import/Export with Material/Paint data [FREE]","tagline":"Import and export 3MF - Material and Paint supported, Orca/Bambu","version":"2.7.0","type":"add-on","archive_size":357801,"archive_hash":"sha256:0821a1b427ac6433ebb2ef0b802c50a48d8e5d268a70743fcec1f1e4c768307f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b9a4a456-14ab-48c8-8942-1b387e386163/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["3mf","multicolor","3d","print","import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9a5b095b-304a-461f-b3ec-6e4a8044f9c0/","schema_version":"1.0.0"},{"id":"ActionBlocks","name":"Action Blocks - Preview [FREE]","tagline":"Use nodes to quickly create animation variations, block outs, ga","version":"2.0.2","type":"add-on","archive_size":2854741,"archive_hash":"sha256:d925ad69670118b04c21d28ab90bc39e60c434b8b6ba403d59b863459b51c812","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/81dbf135-1be2-4ffe-a9c5-b039e4cf4103/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["Animation","nodes","mocap"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0b612037-1902-43e0-9a4c-1189bf7315de/","schema_version":"1.0.0"},{"id":"addon_install_button","name":"Add-on Install button [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.1","type":"add-on","archive_size":1751,"archive_hash":"sha256:a048d9b9d6565cd2529473da667423ad920b7eed03114ce6ecdc801a6377e12b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6c24661e-b400-4caa-8152-e69f7323bf86/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Grimmotron","tags":["UI","legacy","install","button"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/11a6fbc6-93ea-4e3a-a61f-d3b54878701a/","schema_version":"1.0.0"},{"id":"advanced_plot_equation","name":"Advanced Plot Equation [FREE]","tagline":"Plot explicit, parametric curves & surfaces in Blender","version":"1.3.0","type":"add-on","archive_size":951033,"archive_hash":"sha256:66e4575e3eb0739897f1ea0fda81ae9c9884fb525b355b651ff31adc5c1305a5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9ccce277-2d26-445d-96b1-4c7b5d3c5ba9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["plotting","visualization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f1f71ba8-847f-4dd4-a0b6-fc957ff608be/","schema_version":"1.0.0"},{"id":"ai_material_generator","name":"AI Material Generator [FREE]","tagline":"Generate seamless PBR materials from text prompts","version":"0.2.0","type":"add-on","archive_size":3855,"archive_hash":"sha256:87a4d1d421f9065336845998c3ac5f4967d4b521f2d0f3ac8b6f020747a5b1dc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f63360ca-ffdf-4ad3-bbd3-1f769c0392eb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Material","PBR","Textures","AI","StableDiffusion","HuggingFace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5db37e26-e59f-4638-bf34-1993d171ac70/","schema_version":"1.0.0"},{"id":"render_estimator","name":"Animation Render Time Estimation [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"2.3.0","type":"add-on","archive_size":3561,"archive_hash":"sha256:f40d8268bc11f6b7b294dbd9c0f2e14322365857fc5aaa0be35e84fd82dcedea","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/395dad33-5261-443a-9d42-11dc2de83075/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"UnicornHunter MC","tags":["render","animation","time","progress"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/27990883-4149-4ae1-9a9e-a25ffdb50f16/","schema_version":"1.0.0"},{"id":"annotate_to_christmas_lights_gn","name":"Annotate to Christmas Lights (GN) [FREE]","tagline":"Convert Annotate strokes into non-destructive Christmas lights w","version":"0.4.5","type":"add-on","archive_size":9390,"archive_hash":"sha256:d283cea78c26d58101e5ba437df4a2e0ac222065039dd4ff33a9f0edb03c7b16","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f9a3918a-02d1-426b-ba81-03df1a150136/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["GeometryNodes","GreasePencil","Annotate","Lighting","Procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b865fd92-7f89-4ca8-8e86-de85511de369/","schema_version":"1.0.0"},{"id":"SK0001","name":"Arrange objects evenly in a circle [FREE]","tagline":"The addon arranges all selected objects evenly in a circle. The","version":"1.0.0","type":"add-on","archive_size":1497,"archive_hash":"sha256:89883f484061eeaa1d810a7675211f87a62807f7d59e7e6bc4f10ed949595421","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8d448a51-4290-4168-9891-a20db1909950/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["circle","align","even","objects","round","circular","automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5f94585d-ce76-49e1-b390-4fd6696c2d80/","schema_version":"1.0.0"},{"id":"aspect_ratio","name":"Aspect Ratio [FREE]","tagline":"A Blender addon for managing aspect ratios and camera settings w","version":"1.0.2","type":"add-on","archive_size":7039,"archive_hash":"sha256:d9323c5ba0a4a3d6443a0091369f3e77a541dcfe14910bf13c54b90c97c55e97","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/24a7395a-67d2-46aa-a21a-613f801a21f4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Dimona Patrick","tags":["Render","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/13ae67a5-e751-4e40-99f0-b3e4631d9f97/","schema_version":"1.0.0"},{"id":"auto_file_cleaner","name":"Auto File Cleaner - Remove Unused Materials, Images & Meshes | Blender 4.0–5.0+ [FREE]","tagline":"Auto File Cleaner scans your .blend file for unused materials, i","version":"2.0.0","type":"add-on","archive_size":7669,"archive_hash":"sha256:06e0ba15d24ea745cc5f70dbdb127899d8cc8abf425c5ecdfbbe98b8bebb4c54","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2de4d389-0f76-4b8c-b1ee-d1b5526e395e/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["System","Pipeline","file","cleaner","blender","cleanup","unused","materials","datablocks","optimize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d7f60920-88bf-4e93-8ba9-2c1d978c7a17/","schema_version":"1.0.0"},{"id":"auto_paint_boundaries","name":"Auto Paint Boundaries [FREE]","tagline":"Paint cleanly inside smart, selection-limited regions with quick","version":"1.1.1","type":"add-on","archive_size":14645,"archive_hash":"sha256:5db1c2668d80db2e149ac3dd75fc2d15b7a6603e2da184468bd3588f29edb496","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b5efacec-5ae6-46af-9576-79e2cefd69cb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["Paint","weight","vertex"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45dcce2c-0aa2-4fd7-a989-104d9c074165/","schema_version":"1.0.0"},{"id":"babylon_scene_preview","name":"Babylon Scene Preview Pro [FREE]","tagline":"All-in-one .glb exporter & live-preview with screenshot + grid t","version":"0.2.3","type":"add-on","archive_size":3489,"archive_hash":"sha256:ee0eb525953c0cf7c259636f1b747bc94c5e5f324bd61a1b54fd3c68bfa608bd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e827736b-8659-4afa-a9de-bf4974f06fb5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["glTF","Export","Live","Preview","Screenshot","Grid"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1bfa2a9d-f914-4264-9629-ae083b18789d/","schema_version":"1.0.0"},{"id":"Bagapie","name":"BagaPie [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"10.4.7","type":"add-on","archive_size":10378340,"archive_hash":"sha256:c80359064314761b9fb4bc3198e36d80ac64d4634f2aa2e54210988836d6cad6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8ee1a84e-fe6e-44a7-b710-be7c9355ed45/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Antoine Bagattini","tags":["scatter","ivy","architecture","addon","free","array","window","stairs","environment","scattering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd109ea6-b261-4aaa-b572-c69ee296d86c/","schema_version":"1.0.0"},{"id":"basedplayblast","name":"BasedPlayblast [FREE]","tagline":"Easily create playblasts within Blender and Flamenco","version":"2.6.2","type":"add-on","archive_size":48968,"archive_hash":"sha256:c359a24fccb10b9d8df2941b0d75435eb0f7ac89db61836edb6d993b86354952","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d0f24e8e-5666-4821-81f7-b68d63379f03/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"RaincloudTheDragon","tags":["Animation","Render","Workflow","Video"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/967c5989-0d66-402a-a1ca-56be2299f718/","schema_version":"1.0.0"},{"id":"batch_bg_cams","name":"Batch BG Cams [FREE]","tagline":"Automate multi-camera setups: Batch import clips, auto-configure","version":"2.3.1","type":"add-on","archive_size":5729,"archive_hash":"sha256:5b9c970deea58baf77051ba10d84244744e4f1ad5c425560a9630664ce3a2e0c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/74b24024-c0c4-40b0-b200-400c078cde58/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Hannes Werner","tags":["addon","camera","layout","background","import","timeline","productivity","automation","animation","video"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a30ce0f8-752f-4a55-b0e0-1cee72949d24/","schema_version":"1.0.0"},{"id":"batch_render_manager","name":"batch_render_manager [FREE]","tagline":"A Blender addon for efficient batch rendering from multiple came","version":"1.0.0","type":"add-on","archive_size":14882,"archive_hash":"sha256:9be8f16641985d1efab5f68c4d5c3a1b36c5a0f7a373df1a2f5aa3f13e5a909b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1bb5147-c249-4eea-b7f5-98b2599cfa59/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Dimona Patrick","tags":["batch","management","rendering","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/476811fa-611c-4869-8653-14a830376e63/","schema_version":"1.0.0"},{"id":"BRVLayers","name":"Batch Render View Layers [FREE]","tagline":"Create multiple render jobs, each with its own specific View Lay","version":"1.2.3","type":"add-on","archive_size":4335,"archive_hash":"sha256:63187cc826a44655a1f20a4647aacf7c6967bf7007b91ceeb7291725dff35f17","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6090842f-0113-4d5d-a1c2-fab6f6a877ab/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Kin Chen","tags":["Batch","Render","ViewLayer","Queue"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/052f32bc-4fdb-412c-8eb9-cd158434f84e/","schema_version":"1.0.0"},{"id":"benchmark_fps_v1","name":"Benchmark FPS & Vram refresher helps reduce crashes [FREE]","tagline":"Unlock real-time performance insights in Blender with the Viewpo","version":"1.0.5","type":"add-on","archive_size":7924,"archive_hash":"sha256:b3f167cd024e33a75f6b014429097d8910ad54b87e7cabce765b203a676d8332","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e3f39d7e-5eff-4703-a412-1a4b76006714/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["memory","fps","gpu","cpu","test","addon","2025","blender","vram","refresh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/47c7ca2c-4a53-4a7f-a858-34c5fa29dbb8/","schema_version":"1.0.0"},{"id":"motion_path","name":"Better Motion Path [FREE]","tagline":"A blender add-on that allows motion path adjustment inside the 3","version":"1.5.8","type":"add-on","archive_size":13164,"archive_hash":"sha256:c293b0fde8bc921e4ef7bdf8494e5a23d3cb6055f168d8f8ccff1f7c28488ea4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4f549895-734c-4ff0-85d1-ed79feac9976/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"ジディー Jideeh","tags":["Animation","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/eba7a4e2-886b-48be-a304-4f7c69916793/","schema_version":"1.0.0"},{"id":"blender_revision_lite","name":"Blender Render Lite [FREE]","tagline":"BlenderRevision Lite is a free community edition that lets you r","version":"1.0.0","type":"add-on","archive_size":7727,"archive_hash":"sha256:ae14b80c7ec559f0c88eedf2b48fff0844e336d02789b8dc3a914b70f87738ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7925961a-194c-4612-bc12-72e38bed2abd/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["render","compositing","workflow","optimization","revision","blender","addon","vfx","pipeline","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e6ea1e56-5d03-45de-a0f8-463c7bf6d731/","schema_version":"1.0.0"},{"id":"shader_switcher","name":"Blender Shader Switcher Addon [FREE]","tagline":"The Ultimate Shader & Color Switcher Node System","version":"4.0.2","type":"add-on","archive_size":11114,"archive_hash":"sha256:03b4aed110d4613695a60fd94fd8f7a8d98c358dd5f2b2a813afc093ff642640","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cbff50ec-bbc5-40d4-99c3-633e110c502c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Aimen Zaied","tags":["Node","ShaderEditor","Materials","Shading"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3466f4d7-caf6-45a9-b9ac-b3bcaccc9920/","schema_version":"1.0.0"},{"id":"BLeQ_Extension_Pro","name":"BLeQ Extension Pro [FREE]","tagline":"The Extension offers a simple queue manager and will provide mor","version":"1.1.0","type":"add-on","archive_size":274896,"archive_hash":"sha256:531f8552ec19afeb5c55d7fecbeefa97fd456effe6310df0c696457969fab8d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/89454c41-a65c-4392-a341-d3c939a8c071/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Christian Makarski","tags":["Queue","Pipeline","Renderqueue","Sequence","Rendersequence","chain","Rendermanage"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d7529892-10a8-4f96-86de-933d584bb9f5/","schema_version":"1.0.0"},{"id":"body_sculptor","name":"Body_Sculptor [FREE]","tagline":"A powerful Blender addon for advanced body proportions editing","version":"1.0.0","type":"add-on","archive_size":14676,"archive_hash":"sha256:af709f55a754174d26230a8f3cbcacff154bc3c651f46a9851f3aa93c91e174c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c26ff3b2-7474-451e-b957-cfa80dfd8a6f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"ANDRIY LIA$HKEVI$H","tags":["blender","addon","body_sculptor","3d_modeling","character_design","character_creator","rigging","proportions","armature","non_destructive"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/75280d36-9b63-45bf-952b-bfa0f2d00a6d/","schema_version":"1.0.0"},{"id":"fbx_vault","name":"Bulk FBX Importer [FREE]","tagline":"FBX Vault is a bulk FBX importer for Blender that lets you load","version":"1.0.0","type":"add-on","archive_size":1858,"archive_hash":"sha256:3c9b99fda4e7b5345fbf151c0db1fc14bdb7bcce44f65753ba4c14bb8f4d0666","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7723df72-9455-4901-b89e-4fdf1aae86c9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Zuhaib Khoso","tags":["addon","tool","fbx","blender","import","management","bulk"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/87284cbd-2f95-44d8-9e38-c7ccaa07354c/","schema_version":"1.0.0"},{"id":"Cad_measure_extension","name":"Cad measuring tool [FREE]","tagline":"It's a geo nodes based tool that lets you make measurements and","version":"2.0.0","type":"add-on","archive_size":251303,"archive_hash":"sha256:fdc1a528d7808c897d7cf3469b09921a5b29174cfa6293400f82a1cd0eb65efb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4747fbe1-c279-4462-8854-2f6175d70c38/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mr.Nobody covers.mp4","tags":["blender","measure","geonodes","geometry"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/87bc995f-2eff-4b3f-8561-fb73086b4c9a/","schema_version":"1.0.0"},{"id":"Cake_Particles","name":"Cake Particles [FREE]","tagline":"Allows you to bake the motion of particles into key-framed objec","version":"4.3.0","type":"add-on","archive_size":6791,"archive_hash":"sha256:eab0f22f85eeb43acd57024e2f967002c09f335c83a8163bcc64ff0005fa7510","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/671368cd-1458-4197-81d1-9049ada81ac1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Scary Plasmon","tags":["Animation","Objects","Simulation","Physics","Baking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/82e87770-6569-4873-bef5-8621a1fecdc9/","schema_version":"1.0.0"},{"id":"SK0005","name":"Camera bookmark manager [FREE]","tagline":"Remember camera positions and orientation and conveniently assig","version":"1.0.0","type":"add-on","archive_size":1838,"archive_hash":"sha256:c066fafb8e07e092ad7f5f806f042f71662cc6183657be1ef1f2a0c861cc08f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6bcc1463-538f-46c1-8dff-a765955fa97b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["camera","bookmark","manager","position","rotation","workflow","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1a9af258-e75e-44c8-81e9-869249addb8d/","schema_version":"1.0.0"},{"id":"camera_switcher","name":"Camera switcher [FREE]","tagline":"Quickly switch between all cameras in the scene from a dedicated","version":"1.0.0","type":"add-on","archive_size":2308,"archive_hash":"sha256:fe505d31d4cbc6a364c8a48b63aafc8d04e816b041fcbe852f5da61bddc1025d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/68c92d93-988d-48f7-95c1-bdb084c22362/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.00.0","maintainer":"Remigiusz Waluś","tags":["camera","view","active"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/056e30fd-f62d-4fb4-9a53-95be346475c3/","schema_version":"1.0.0"},{"id":"nfc_card_keychain_generator","name":"Card/Keychain w/ Custom Design and QR Generation and opt. NFC Cavity for 3D Printing [FREE]","tagline":"This add-on lets you design 3D-printable housings for NFC chips","version":"1.2.2","type":"add-on","archive_size":513576,"archive_hash":"sha256:61fc9b726002f7cd17ffb5b1e54bfa1827e8edf538881e72749f4faf931dc384","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/992bef23-da87-44ec-a710-bc61d13aa8b9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["nfc","qr","card","generator","keychain","custom"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/09bd7d56-efdb-4e25-b4d8-68c8ee65f422/","schema_version":"1.0.0"},{"id":"centerocd","name":"CenterOCD [FREE]","tagline":"CenterOCD is a simple Blender addon that aligns selected objects","version":"1.0.0","type":"add-on","archive_size":1490,"archive_hash":"sha256:607cf00fe41582b4eaeb640cb6ad8dc9944731be643022c810fbb2a799abef0b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3753d182-5607-44fe-a376-6bdbf0bde2f5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mostafa Heikal","tags":["align","center","grid","haykol"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8a92d1eb-c1c8-4357-886d-5c765a1214d1/","schema_version":"1.0.0"},{"id":"cgaxis_blender_addon","name":"Cgaxis Add-On For Blender - Browse & Import Assets Directly In Blender [FREE]","tagline":"Browse 12,500+ Premium Assets directly in Blender and Get starte","version":"1.0.0","type":"add-on","archive_size":135827,"archive_hash":"sha256:d2d49d2c9665add7c55181a343759dde9bfa5de723d4bb3075b93694822d46ac","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c135e35-0484-4805-8562-7d9eb8705471/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"CGAxis","tags":["assets","pbr","material","3d","models","hdri","decals","browser","imperfections","plugin"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f8432983-2d65-4d16-a7ef-36ee5fcc7220/","schema_version":"1.0.0"},{"id":"cgheven_blender","name":"CGHEVEN Asset Library [FREE]","tagline":"100+ Cloud VDBs (fire, smoke, tornado, portals, explosions, dust","version":"1.0.0","type":"add-on","archive_size":138712,"archive_hash":"sha256:f4f3d8461ac1edb6f56b6e3a56b5047784bb854606fa01cdbc40cf99255cdfe4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c16124bd-9c82-44c8-82eb-51dc2cc79e7f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"CGHEVEN","tags":["free","VFX","VDB","Flipbooks","clouds","fire","explosion","Magicfx","3dscan"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ba084cd6-c1af-459f-8d71-f645489708ba/","schema_version":"1.0.0"},{"id":"cleanx","name":"CleanX [FREE]","tagline":"CleanX is a Blender right-click menu addon designed for 3D asset","version":"1.0.0","type":"add-on","archive_size":13355,"archive_hash":"sha256:4e312c21ac1dbb00023ab28c841ff7acd14ea714250363ae6b32f8fbba538cb3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/797da2fb-3b8a-49dd-8bb0-62e0474258a0/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Free poly","tags":["clean","texture","delete","pack","model","packages","compress","resize","snap","hierarchy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/307f20ee-8d34-4371-9bb0-5f417f43e870/","schema_version":"1.0.0"},{"id":"img_alpha_to_bsdf","name":"Connect image alpha [FREE]","tagline":"Connecting image alpha to shader alpha","version":"1.0.6","type":"add-on","archive_size":2692,"archive_hash":"sha256:a0d765b49e728e95012895af1bb54d12c3b4ac68ab649115685c8b4d9eb65e02","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4b1a347-b3e0-4ec8-96e8-7039f03d475a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Snaky Boop face","tags":["automation","automate","node","material","image","alpha","QofL"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5d0c171c-9ff3-4834-b610-0b39d8fd0191/","schema_version":"1.0.0"},{"id":"Copy_transforms_extension","name":"Copy Transforms [FREE]","tagline":"The Copy Transforms add-on mimic the Autodesk Maya copy transfor","version":"2.0.0","type":"add-on","archive_size":1925,"archive_hash":"sha256:0b5ea205238edbd92d77f10ac909b9e66fda38c14bdc05a52e4253c10bece865","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ea9ad2d2-eb15-4da2-b5e5-531c34a7e8c4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Luiz Lobato","tags":["Object","transforms","location","rotation","scale","copy","camera","lights"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e4d8305e-3eca-477f-8b08-afa17bf621ce/","schema_version":"1.0.0"},{"id":"copyx","name":"CopyX — Cross-Version Copy & Paste for Blender Objects [FREE]","tagline":"CopyX lets you copy selected objects from one Blender file and p","version":"1.0.0","type":"add-on","archive_size":5027,"archive_hash":"sha256:af90abab4b0fdeba0b41982697f3b28b08cb549a4465e9e1da7fba52e090f0db","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1031b3ec-dfbc-415f-b0c0-d7954d7596af/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Free poly","tags":["3DView","Object","copy","paste"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a97311ce-49fa-4191-b7aa-ce3e70f1beef/","schema_version":"1.0.0"},{"id":"CountDown3d","name":"Countdown 3d [FREE]","tagline":"Quickly add customizable 3D timers (countdown or count‑up) to yo","version":"1.5.0","type":"add-on","archive_size":4799,"archive_hash":"sha256:49bbf5981614ed4fef283a4501654b98312dc61ea0790cab12e856f66f875a84","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a8071da5-87fe-4105-9961-f926ec69b81b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Fabio Malvaldi","tags":["3D","Countdown","Customizable","UI","Python","Script","Animation","TextObject","counter","Timer"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cafb5d64-82e6-45d5-ae1f-2a6c504a3838/","schema_version":"1.0.0"},{"id":"custom_snap","name":"Custom Snap [FREE]","tagline":"Custom Snap is a fast addon that enhances the default snap syste","version":"1.0.0","type":"add-on","archive_size":2927,"archive_hash":"sha256:4b3745f1bc6df4dd0f9575248ded2a3a11ed5858bfa3d5e85a99396d0b1baf65","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/053f20f2-683f-46c3-b7d1-79c47453eb13/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Jeslin Paul","tags":["3DView","snap","origin","selection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0e6e9617-b4f3-4267-adca-e8a2d557f509/","schema_version":"1.0.0"},{"id":"Delete_Loose","name":"Delete Loose [FREE]","tagline":"with this handy addon, you eliminate smaller and loose parts of","version":"1.2.3","type":"add-on","archive_size":2391,"archive_hash":"sha256:9fdf99f92ab399377ec92a0d3bf25bce5891384b9a0ed61ce8def18314b60f58","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d46ee8be-144e-4a60-be40-4b348539e4e0/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Łukasz Wilkoń","tags":["cleaning","cleanup","topology","fix","fixing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a88d7b63-11e7-4415-b717-8944eef0bd63/","schema_version":"1.0.0"},{"id":"delete_static_animation_channels","name":"Delete Static Animation Channels [FREE]","tagline":"Automatically identify and remove redundant F-Curves with consta","version":"1.0.0","type":"add-on","archive_size":2873,"archive_hash":"sha256:9d0cb8dbcfadb9e4e70c7ba952299be23f179d4d458951db659f0a5a551f7670","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0e649649-adc7-40c7-b56b-b0a0f22d94f6/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vaishakh Vinod","tags":["Animation","graph","cleanup","fcurve","mocap","motioncapture"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f7a51ab2-f758-464f-817b-ad010cb643bd/","schema_version":"1.0.0"},{"id":"dice_forge_pro","name":"Dice Forge Pro [FREE]","tagline":"Generate canonical polyhedral dice (D4–D20, D100) with text, cus","version":"1.1.1","type":"add-on","archive_size":36003,"archive_hash":"sha256:75344c4ace13fa032f5cb7cc4a0c823bc09057180faeb77c68cc026055f0b865","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9e97f36d-99ac-4e8f-807b-e0f09fccfa8f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Fabio Malvaldi","tags":["ttrpg","rpgdice","dicemaker","dicegenerator","tabletoprpg","dnd","3dprinting","customdice","RPG","DICE"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fbf85f8a-1963-420d-a8d7-6c54b538fcf0/","schema_version":"1.0.0"},{"id":"down_to_earth","name":"Down-To-Earth [FREE]","tagline":"Auto-snap any object to the nearest surface in your scene — no s","version":"1.0.0","type":"add-on","archive_size":6404,"archive_hash":"sha256:8e008319495acce4379943ad4ee198a531d7a6367cffdc245b8a8e23c5f410f7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dab12edc-301b-4772-b1fd-a5abe89bf212/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"GoldFish CG","tags":["Snap","Tool","base","surface_snap","placement","object_tool","scene_assemble","one_click","grounding","productivity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/81e4af0c-b0a4-4c7d-b7b4-190afdbd1e99/","schema_version":"1.0.0"},{"id":"easy_measure_tool","name":"Easy Measure Tool [FREE]","tagline":"A lightweight add-on for quick measurements","version":"1.8.3","type":"add-on","archive_size":11147,"archive_hash":"sha256:d8e8f97500e44d4e9c77fe133dccca151df3f1c08f7aa50e7e7feaa0adbb8010","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8142dce2-f9c4-4f20-a5c6-402460d5f145/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jungle Ham","tags":["3DView","Object","Modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7ac627dc-ca87-4a3b-92e7-b00a752a037e/","schema_version":"1.0.0"},{"id":"easy_scatter_tool","name":"Easy Scatter Tool [FREE]","tagline":"Easy Scatter Tool is a Blender add-on that scatters one object a","version":"1.0.0","type":"add-on","archive_size":4790,"archive_hash":"sha256:2aad46cd10d876e3ab5d5f69a927c9b423a0f2d14eb47fbedbd6c380f65293cc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a7cdf987-8b42-47e9-a066-3e407ebf0512/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jungle Ham","tags":["Object","Modeling","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f31d8f0b-ee2b-45ec-9f4b-4aae75a7160f/","schema_version":"1.0.0"},{"id":"Eyes_of_Masyaf","name":"Eyes of Masyaf [FREE]","tagline":"Asset inspection and workflow guardian for Blender","version":"0.5.2","type":"add-on","archive_size":20333,"archive_hash":"sha256:d6f4f04d0420347b0cc1270796776e010304250caa82c77c8998fac4ef4b3791","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/61711621-e714-497b-9b3e-67a9354eaf0b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Reza NeoMasyaf","tags":["Object","Mesh","UV","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e26feba5-e5df-469b-98cc-076cfc3c5748/","schema_version":"1.0.0"},{"id":"facemesh_capture","name":"FaceMesh Capture (MediaPipe) [FREE]","tagline":"Create a textured FaceMesh from webcam or photo using MediaPipe,","version":"0.4.0","type":"add-on","archive_size":11286,"archive_hash":"sha256:8714eff32dcda7ff8fc554d0714ae815805c17f6def1b4e45027d6ff0e3a9dc8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/aa5efe63-320f-4551-af8c-e3bd2070cb2d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Mesh","Animation","3DView","UV"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9b174a1c-d3c5-4979-b36a-cbfc40616f5e/","schema_version":"1.0.0"},{"id":"flicker_light_fixed","name":"Flickering Light Simulator [FREE]","tagline":"Customizable flickering light animation with multilingual suppor","version":"2.0.0","type":"add-on","archive_size":4059,"archive_hash":"sha256:77bbac7d17fd132350d9bf065ef2c2de2f4f575fec639d72149d7cb0d5ab77d3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2ad04975-a7e3-40f3-84a5-adfac5baf07c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Fabio Malvaldi","tags":["Light","Flicker","Animation","Localization","UI"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7d69be65-9004-4469-bd9c-beb29e1ec99b/","schema_version":"1.0.0"},{"id":"global_clip_sync","name":"Global Clip Sync [FREE]","tagline":"Adjust Clip Start and Clip End across all Blender workspaces fro","version":"1.2.0","type":"add-on","archive_size":1725,"archive_hash":"sha256:928d5139fbc88bd54e54eafa1d46833264d8ef7d622ebfb7c4991729588645d5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1112186c-ba61-43b7-83d3-e607ef234c4d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"5.1.0","maintainer":"Leo Villanueva","tags":["Viewport","Clipping","UI","View","Tools","Clip","Display","Distance"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d673a38f-4133-495e-9875-fb020048cef0/","schema_version":"1.0.0"},{"id":"graph_editor_timeline_controls","name":"Graph Editor Timeline Controls [FREE]","tagline":"Adds Timeline playback controls (Play, Reverse, Pause, Frame Sta","version":"1.0.0","type":"add-on","archive_size":2292946,"archive_hash":"sha256:b77a68f7e34b9c5f9c66fafef6825a0575fe8605c8da51a567dff3cd94fa358f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f2c93a71-097b-4054-8067-f2b58e3b2572/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"NOOB 3D","tags":["animation","graph","editor","timeline","playback","ui","workflow","keyframe","animation","userinterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/26a86759-a4b3-4545-ad67-106a89737f54/","schema_version":"1.0.0"},{"id":"graphi_free","name":"Graphi Free [FREE]","tagline":"Graphi Free is a lightweight Blender add-on for shaping easing c","version":"1.0.0","type":"add-on","archive_size":5009,"archive_hash":"sha256:f1336e92f03ccf6314eab0c9cf739b95316d9da669e10294e146b5d1c5495b3d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e508361c-87aa-4460-8427-f354e4cdf83d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["Animation","GraphEditor","Keyframes","Addon","Easing","Bezier","FCurves","MotionDesign","Workflow","3DAnimation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a3ac0ded-6b76-40bb-83d3-9a8ef1d547f6/","schema_version":"1.0.0"},{"id":"item_transform","name":"item transform [FREE]","tagline":"A Blender addon that provides quick transform operations for sel","version":"1.0.2","type":"add-on","archive_size":6957,"archive_hash":"sha256:6a78724c1d6cb68d9a691c6f2e8403844860a064f9257d0b22eac7a124bc7ecf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cccfe7d1-1df5-4927-87af-a10e00a1c34e/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Dimona Patrick","tags":["Modeling","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b97c7a3c-93cb-4cea-8186-6e1cbcb47bd5/","schema_version":"1.0.0"},{"id":"joinforce_render","name":"JoinForce Animation Render [FREE]","tagline":"This add-on helps you use all your computers to render animation","version":"1.3.1","type":"add-on","archive_size":6538,"archive_hash":"sha256:afe900cdb0a244c3f4aadab240cbfc5ce0942f68673803924e7ed72d4023d406","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/21a1e2f2-a21d-4ea2-87a6-01d906bc50a1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Liam Xee","tags":["pipeline","Batch","rendering","animation","cloud","Production","Computing","Workstation","Team","Network"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/74798440-6854-4a90-9872-ec08da8d0ce3/","schema_version":"1.0.0"},{"id":"k_tools_render_preset_manager","name":"K-Tools Render Preset Manager [FREE]","tagline":"An easy and intuitive for saving, loading, and managing complete","version":"1.1.1","type":"add-on","archive_size":54772,"archive_hash":"sha256:2ef9d7ad94bce0ff2e811677230a5daa4f8fc607fa1123478d923f624fa933d0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6f054995-d5d9-4718-90b7-5c191d22a671/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Robert Kezives","tags":["render","preset","cycles","addon","load","save"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8626f2ca-193c-4f15-8011-200c5d0a2e9b/","schema_version":"1.0.0"},{"id":"Lets_turn_on_fake_user","name":"Let's turn on Fake User [FREE]","tagline":"Are you tired of Blender delete your file(s)?, Even though you s","version":"1.0.3","type":"add-on","archive_size":6837,"archive_hash":"sha256:3815d47845cdb03a46c26891a69e7be9b4fd2952e88081a327f92244bf4ec4e1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4bfd4128-90b5-40cc-aa29-3b48be5b8b14/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Theiyn tnz","tags":["System","Workflow","Animation","Save","FakeUser"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e1c19457-113b-4f5d-b1f2-317318942cb7/","schema_version":"1.0.0"},{"id":"marker_highlight_pro","name":"Marker Highlight Pro [FREE]","tagline":"allows you to add highlight color to your marker text for easy n","version":"1.0.0","type":"add-on","archive_size":2046,"archive_hash":"sha256:46ac6e96e5eb3cda09a1ad70342f492abcc28b276ceba020a2c891e50c016820","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1745b88d-d4cf-4386-b84d-747b41186e07/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"saman","tags":["marker","color","markercolor","colour","coloured","markermanager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e5ceb861-fa61-4aec-8605-f585df3ebf48/","schema_version":"1.0.0"},{"id":"SK0002","name":"Material Organizer [FREE]","tagline":"Overview of all materials in the scene. Easy deletion of unused","version":"1.0.0","type":"add-on","archive_size":2026,"archive_hash":"sha256:07c076a2f8e842a5eb167a7e90f64a5805ccd2582d78625da664d833a61e1b82","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4e5281c0-822c-4625-a151-02acbe8fd7e5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["Material","organizer","overview","delete","help","sort","list","shader"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/21a85005-f5d1-4f4b-9e9a-5087838d1a44/","schema_version":"1.0.0"},{"id":"ColorFromMaterial","name":"Material Viewport Color from Nodes [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"0.1.3","type":"add-on","archive_size":23002,"archive_hash":"sha256:bb0e68146c79fe2c4b5c1c6e91cb5945c9303dc3a4f9920d2e1ba60d5561a936","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/88edb35c-c79a-4263-9cc9-082f6282f1a6/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Spencer Magnusson","tags":["color","material","metallic","roughness","viewport","workbench"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/15250641-5030-4e65-8988-385adbee7a04/","schema_version":"1.0.0"},{"id":"math_3d_equations_pro","name":"Math 3D Equations Pro [FREE]","tagline":"Math 3D Equations Pro lets you turn math formulas into 3D geomet","version":"1.3.0","type":"add-on","archive_size":10274,"archive_hash":"sha256:1293382cde627aa9f16c8c25e9e2e2775ee8b1793ebf672f87ccbc60e5f672cf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0bb57bc4-d52a-4d17-a038-3c6b44fca17f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Mesh","Curves","Math","Procedural","Scientific","Visualization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0b934918-ccac-45f9-9502-5190908b13c9/","schema_version":"1.0.0"},{"id":"maya_viewport_operation","name":"Maya Viewport Operations [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":18860,"archive_hash":"sha256:67f88925c3fee1af6c056e2b82ef80dc18167d8735381c3af54434a5dedc6c9d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c1148a64-7337-4872-86b7-57a990df5300/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"TinkerBoi","tags":["maya","smooth","preview"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/427e1d25-6b74-487b-bb39-856e70a74ea5/","schema_version":"1.0.0"},{"id":"maze_generator","name":"Maze Generator [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.11.0","type":"add-on","archive_size":6240,"archive_hash":"sha256:40c08393a2402f4a5f24c4b12f3baae24eba9b7d97b48a72283e7e94c3892669","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1ed3d85-db05-4f7f-a0e8-f7d87cae2e39/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Giorgi Samukashvili","tags":["Procedural","Maze","Modeling","Geometry","Nodes","Curves","Addon","Blender","Game","Algorithm"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/88fb5e50-584d-4b24-ad32-5f2c24634963/","schema_version":"1.0.0"},{"id":"measure_and_scale","name":"Measure and Scale [FREE]","tagline":"Measure and Scale object uniformaly","version":"1.1.4","type":"add-on","archive_size":8680,"archive_hash":"sha256:355656e1c08f41bfb3eb4886ddd61af3476e0a8a0fa667dfe8635f207d5d8263","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78183613-8e2a-4d4e-ad99-76c342df4080/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"belaid ziane","tags":["modeling","measurements","scale"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/82da7c42-ce33-4be3-82ea-a58b31880502/","schema_version":"1.0.0"},{"id":"MeLiDA","name":"MeLiDA - Measure LiDAR System [FREE]","tagline":"MeLiDA integrates LiDAR sensors with Blender to create professio","version":"0.1.0-beta","type":"add-on","archive_size":107115,"archive_hash":"sha256:fc2a66562a83772e8752a1d4acad647634ef20c09e117578924b3adc62d249f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/44944eb3-0fb2-4ec9-9fea-88c9e6edc23b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"MeLiDA","tags":["point_cloud","laser_scan","survey","building_surveys","LiDAR","scanning","measure_device","stl_14p","stl_19p","d500_lidar_kit"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/20da5129-5479-4f45-a450-ef70cfc0ee5e/","schema_version":"1.0.0"},{"id":"teca3d_mesh_welder","name":"Mesh Welder - Merges Two Meshes into One, and Vice Versa [FREE]","tagline":"Mesh Welder is a simple add-on for merging and splitting models;","version":"1.1.0","type":"add-on","archive_size":10360,"archive_hash":"sha256:f3e75ef3a17e04447cf9a2ae943654026ab15fcf431029722a57de242d5bb385","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cd7b88aa-a1f9-4c7a-a027-bbb6c84a2f0e/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"5.0.0","maintainer":"TECA 3D","tags":["3DView","Mesh","UserInterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a467e686-8d87-473a-9aa6-39154f685dfa/","schema_version":"1.0.0"},{"id":"multi_object_export","name":"Multi Object Export [FREE]","tagline":"Export multiple selected objects individually in one click using","version":"1.3.0","type":"add-on","archive_size":7107,"archive_hash":"sha256:54acc7d04a2938e3da46c303d15f131960209d60c4e91fb8792410ff4342c04f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/16a86afb-d33f-488c-a772-1308bf8241b6/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Fabio Malvaldi","tags":["Object","Workflow","Export","MultiExport"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/125220ca-109c-4105-9ac3-cac4fedc9985/","schema_version":"1.0.0"},{"id":"music_generator","name":"Music Generator [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":93889081,"archive_hash":"sha256:e91db7197c1eecad6e40aee9fcfff703406b6b0dd67a75466a9854bbd46d9ae1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/46174bc3-0515-46b9-b0cc-4aa0f24e6cd1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Music","Audio","Generation","Sequencer","Sound","AI","MusicGen","Gradio","Synthesis","Creation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9076e710-cedc-4b37-92b2-16b38fa0997b/","schema_version":"1.0.0"},{"id":"NeonSignPro","name":"NeonSignPro (Development) [FREE]","tagline":"Professional Neon Sign Generator with HEX, Flicker & Custom Font","version":"0.0.1","type":"add-on","archive_size":3465,"archive_hash":"sha256:a6d40a2c6245256a1a6a76b9b3636f55e955a7e0bcfb47502aa1c0f31f0dc103","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/65c1c0b5-a3ad-49bc-8af9-903817e9ddcd/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"5.0.0","maintainer":"Wikz B","tags":["easywaytogenerateaneonsign","neonsignpro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/36f58375-aa62-4424-bfb0-51c80302bb4f/","schema_version":"1.0.0"},{"id":"node_color_tools","name":"Node Color Tools Pie [FREE]","tagline":"Elevate your workflow with the Pie Menus of Node Color Tools Pie","version":"1.0.3","type":"add-on","archive_size":4752,"archive_hash":"sha256:e59fd49dbc701c9f45705e7f28dcf4d5d93dc13bf8820a5c8bf813a50c33b1e7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/66128702-2ca7-413d-b245-accb9e1b447b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Johannes Kollmer","tags":["Colors","UserInterface","UI","Organize","Pie","PieMenu","Menu","Nodes","Node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/37d15d8e-ba8d-470d-8c06-f8d7c75424c9/","schema_version":"1.0.0"},{"id":"number_generator","name":"Number Generator [FREE]","tagline":"Create sequential numbers as text objects","version":"0.1.0","type":"add-on","archive_size":2339,"archive_hash":"sha256:dbf74bb429c01aaa0b0a77e6ca987c3e75093c20daa3bf71e94c40c06606625e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b66a740b-80a7-4e7a-abe0-da229ded13b1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Number","Generator","Text","Objects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd9d56d5-2d05-4d8d-8b8e-87c759253481/","schema_version":"1.0.0"},{"id":"object_mode_hierarchy_select","name":"Object Mode v1.2 – Hierarchy Selection [FREE]","tagline":"Hold O + Click anywhere to instantly select the full object hier","version":"1.2.1","type":"add-on","archive_size":2022,"archive_hash":"sha256:92acc75cacffd655deae6760fe888a19acfbc48e5366bb232adb202a28c1b8ac","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/da7cfd8c-36eb-44ef-b5b5-44cf92c63506/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["object_mode","hierarchy","selection","workflow","tool","transform","animation","utility","blender","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/67ab12d4-3e48-4bce-affb-30a6b6095fb2/","schema_version":"1.0.0"},{"id":"pinned_modifiers","name":"Pinned Modifiers [FREE]","tagline":"Pinned Modifiers is a Blender add-on designed to speed up our mo","version":"1.0.0","type":"add-on","archive_size":21507,"archive_hash":"sha256:c17a73e1a8c07ffc63c9c58626fd38e72e939fc23a2b6f122b59a20374ea77e6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb576247-2e8e-4b41-9b81-b82243cf9e4a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.3.0","maintainer":"Francesco Yoshi Gobbo","tags":["UserInterface","Modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2f242640-80dc-45d1-9baf-bc0de85e1fc5/","schema_version":"1.0.0"},{"id":"pomodoro_timer","name":"Pomodoro Timer [FREE]","tagline":"Boost your productivity with this amazing N-Panel widget! If you","version":"1.0.0","type":"add-on","archive_size":5004,"archive_hash":"sha256:3ae73f0701bbae44934d253689dea84f7858f61f3a5e88c02966623c911cede3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6c8e140d-7f72-448a-b5eb-3aaf7fcedb99/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"DJ SOLANA","tags":["Pomodoro","Timer","Boost","Focus","Concentration","Productivity","Efficiency","Smart","Creative","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e382a037-62c0-4266-a312-9c4fecf2e494/","schema_version":"1.0.0"},{"id":"procedural_building_generator","name":"Procedural Building Generator [FREE]","tagline":"Create instant, game-ready 3D cities with the Procedural Buildin","version":"1.0.0","type":"add-on","archive_size":10370,"archive_hash":"sha256:cc91376be52c17e60fd7657b12eb03e49da8b020571610a6a86147cc55d5cce3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/429bb6e8-0c26-400b-8545-c60984c390b7/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Zuhaib Khoso","tags":["AddMesh","Modeling","addon","procedural","building","generator","plugin","city"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/040d9c18-3746-4987-a087-8257751611a4/","schema_version":"1.0.0"},{"id":"procedural_scatter_brush","name":"Procedural Scatter Brush [FREE]","tagline":"Scatter objects on surfaces using brush strokes","version":"0.1.6","type":"add-on","archive_size":3522,"archive_hash":"sha256:14afe4d18a7065311a9bf825c16e8227af69e960371242b5e7e73d58999445f2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/94e7c35b-9a6c-468a-a74f-358dbc770073/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["ScatterBrush","Procedural","Geometry","Tool","Instancing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/55e372d8-5d9d-4e43-aa7f-1bb8dbf70be5/","schema_version":"1.0.0"},{"id":"SK0003","name":"Project time tracker [FREE]","tagline":"Saves the time you spend working on different projects so you ca","version":"1.0.0","type":"add-on","archive_size":2587,"archive_hash":"sha256:bd88afe070d59e6df44c4d7e2f6a264508f31cb96d67edda45d5dc5adbd22dab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/19070979-b821-42c8-9d22-92057c438066/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["time","tracker","project","budget","client","organize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b062a8ff-c085-45ff-bd8b-1c260d6fe20d/","schema_version":"1.0.0"},{"id":"quad_bridge","name":"Quad Bridge [FREE]","tagline":"Quad edge flow without any hurdle,","version":"1.1.0","type":"add-on","archive_size":5948,"archive_hash":"sha256:7cd0d15de0a31d89fa52284f109c191164e99f4ac31ef151f9b32f5d362413c9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ccd02f6-fd7a-40dc-8551-fde00f771788/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"abd3d","tags":["Mesh","Modeling","Bridge","quad","join","edgeloop","loops","retopology"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8da31723-08d8-48bc-803d-550657841ee8/","schema_version":"1.0.0"},{"id":"Quick_Asset_Saver","name":"Quick Asset Manager [FREE]","tagline":"Quickly Create, Edit, Organize, or Delete your local asset files","version":"2.0.3","type":"add-on","archive_size":66307,"archive_hash":"sha256:34196edd29b75d18cca2c3cd001fa751781314ee608d025ef702669cee0b5973","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/50726fd4-575b-40af-a857-f09ab96d0e96/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["UserInterface","System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a8dd11c1-54ce-4497-9691-5d5846af5939/","schema_version":"1.0.0"},{"id":"quick_groups","name":"Quick Groups (Instances) [FREE]","tagline":"Group objects with Ctrl+G using instances","version":"1.0.3","type":"add-on","archive_size":6862,"archive_hash":"sha256:f9da4f1267c480b5fd252e2d61573e1ebbd3e4fafa723547b93f032d7292d01c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1a7bb8b0-cd62-4216-ad5d-33e1139fd10c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"John Wick","tags":["Object","Modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d275c96d-a459-4904-a843-58f21b2f9ab6/","schema_version":"1.0.0"},{"id":"bake_material_lite","name":"QuickMat Bake Lite - Material to Texture Converter [FREE]","tagline":"Bake procedural materials into image textures in one click. Simp","version":"1.3.0","type":"add-on","archive_size":3248,"archive_hash":"sha256:9a6d7fcdf5ab075c3731d5253413f71fc7b5b92c4e8ccec5ebbb2d8100380720","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ac3962a-6b6c-4cb4-b4ae-d2e0e1a4fe6a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Studio156","tags":["bake","baking","texture","textures","export","material","procedural","render","uv","image"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6541c818-0c1d-4d3d-bb66-668309193c5e/","schema_version":"1.0.0"},{"id":"quick_origin","name":"Quick Origin Power Suite: Ultimate Pivot & Alignment Tools [FREE]","tagline":"Stop tedious alignment! 1-Click Origin to Bottom, World Snap, Sm","version":"1.0.0","type":"add-on","archive_size":3266,"archive_hash":"sha256:d1bbf787a368b4f2dd956c1cb14710bc9b3caa76fd1ca56b9a4fbdc56b4ea6c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/96371023-31d6-48cd-8214-343e0b980ae4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/30272b4a-f645-4447-9880-44b5f3934a65/","schema_version":"1.0.0"},{"id":"quickundo","name":"QuickUndo: Sidebar Undo/Redo for All Modes [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":2768,"archive_hash":"sha256:9895a4ce788ff7ef200361eb3f8a7cc24d58ff38928cbde3e2ca90d8e338858e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2b634e76-a618-43d6-a37c-c743ed04e844/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Elodie Anglade","tags":["undo","ui","tablet","ux","ipad","sidecar"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/df248e69-51d6-4847-bd63-5718b152ff90/","schema_version":"1.0.0"},{"id":"random_design_for_abstract_art","name":"Random Design For Abstract Art 1.1.4 [FREE]","tagline":"Generate abstract art with randomized shapes, remixable layouts,","version":"1.1.4","type":"add-on","archive_size":182021,"archive_hash":"sha256:d62a0e5ac70943ea42fa5d54d7e047792b45b16cb0e602f8278369c3e1fb5500","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/712f172f-5cdd-43ca-bcec-32b0129bd801/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["geometry","nodes","random","primitives","organic","instances","design","abstract"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/287f4b56-b2ec-436e-8b6e-032e8cf8361f/","schema_version":"1.0.0"},{"id":"Randomize_Bones_Pose","name":"Randomize_Bones_Pose [FREE]","tagline":"Inject spontaneity into your character and particle animations b","version":"2.0.0","type":"add-on","archive_size":16684,"archive_hash":"sha256:5b3b0b59abad0e887e6b5b9511ef3ef64830b75e0ddfabaabdbdf82283efabdb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/799484e5-be09-4cfb-8d2c-71ca49ffe1ee/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"IZ. MdVerz","tags":["Animation","Rigging","random","bone","bones","armatuer","particle","dance","character","pose"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b5b1d26c-d9e0-4945-94e1-b0923ec3ce04/","schema_version":"1.0.0"},{"id":"rastercrafter","name":"Raster Crafter v1.3.3 [FREE]","tagline":"Transform images into art with adaptive resolution & displacemen","version":"1.3.3","type":"add-on","archive_size":161147,"archive_hash":"sha256:9efc25e28b0dd1199d59f501ad1625e046cbb5616c1634660e6166bf96076199","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/706dc323-491c-46da-bc43-4e8fb2f09500/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["image","rastering","abstract","art","mosaic","grunge","pixel","creative","displace","fractal"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a2d0027b-8cc7-450e-9e6e-18e4c8e7f734/","schema_version":"1.0.0"},{"id":"ReadyScene_addon","name":"Ready Scene 1.0 [FREE]","tagline":"Ready Scene– Blender Addon for Quick Scene Setup","version":"1.0.0","type":"add-on","archive_size":4741,"archive_hash":"sha256:6c17f1d4f95da37b2375b5a26890db5cc21eb8cc4dbd620187aeccb89582a928","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f2eacecd-ef95-4fa2-b6ef-8d25415f29a9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"ANDRIY LIA$HKEVI$H","tags":["parallax","scene","camera","layers"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f55cc80-1fdd-4d66-9346-9614039486d6/","schema_version":"1.0.0"},{"id":"reflectiveaudiomachine","name":"Reflective Audio Machine v1.3.4 [FREE]","tagline":"Reflective Audio Machine - Turn Your Music Into 3D Visuals in Bl","version":"1.3.4","type":"add-on","archive_size":36299830,"archive_hash":"sha256:1695810a6bb5809540f9d07093a5d3acad3215b683450c01fc25560827ececc6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6455ae0e-e1af-42df-81b9-e3b73f7cc4cb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.5","maintainer":"Jacques Durocher","tags":["audio","sound","music","wav","visualisation","reaction","react","animation","pulse","wave"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/11608830-074c-4fc8-94ba-4fbd90a87531/","schema_version":"1.0.0"},{"id":"reflux_addon","name":"ReFlux Render Optimizer [FREE]","tagline":"⚡ ReFlux — Faster Renders, Smarter Workflow","version":"1.0.0","type":"add-on","archive_size":6105,"archive_hash":"sha256:319dd16b471cf3e1e9254952ae12851b5f3a63381372b548282c4a13aee49c24","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/35d38941-00bf-4349-b7aa-f88f41339dc4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Swastik Rout","tags":["rendering","render","fast"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5aefa8de-dde0-4c0f-a7d6-8b01b75ea519/","schema_version":"1.0.0"},{"id":"render_alert","name":"Render Alert [FREE]","tagline":"An addon that alerts the user once blender is done rendering","version":"1.1.2","type":"add-on","archive_size":2979,"archive_hash":"sha256:3f749a92dff7e039724e9a8b9f1d08700f282c0671eace50ac0a0dd8a86e0394","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e162ae62-7936-45a4-adb6-a4aa222e4d80/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"ジディー Jideeh","tags":["Render","UserInterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bdc3f751-d493-4997-847b-77f328d560f5/","schema_version":"1.0.0"},{"id":"rendermanager","name":"Render Manager [FREE]","tagline":"Render Manager - A render queue management tool for Blender. Cre","version":"1.7.0","type":"add-on","archive_size":4101,"archive_hash":"sha256:d657357fbdb72f75d28157d2d98cc0dd58e93e7e9966f1dba9121b8ca4da4530","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/41afa7ce-b9fd-4db3-aaa5-5dd200765adb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vixymiles","tags":["Render","Animation","Queue","Manager","Workflow","Productivity","Batch","Sequential"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e774a939-504a-42db-ab02-36e3a8d42ce0/","schema_version":"1.0.0"},{"id":"RenderSceneKit","name":"RenderSceneKit [FREE]","tagline":"Quickly add pre-built studio scenes for render","version":"1.3.0","type":"add-on","archive_size":18677644,"archive_hash":"sha256:f6cef93aa29aea90f3691357b7a591e70b3259a844dd3a03b56fb4a14023c138","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9074f928-894f-44b4-837a-4cadecbc210f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"5555dnl_3d","tags":["render","scene","studio","toolkit","preview","libary","asset","lighting","presets","setup"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5238fe33-ff61-4add-bee5-27c885666c89/","schema_version":"1.0.0"},{"id":"scatter_directional","name":"Scatter Directional [FREE]","tagline":"Precise density and orientation controls (primarily to follow th","version":"1.2.0","type":"add-on","archive_size":9904,"archive_hash":"sha256:88676fc546dd29d363628a11a83ad2d03d21735fbf2f5b348910ef3ab7851592","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3d6829ba-ee12-445d-93a7-a4ffcf10b336/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"3DFIGURES rian","tags":["scatter","directional","proxy","previewer","trianglepreviewer","randomize","convertmesh","aligntonormalorientation","orientation","normal"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0facc425-e629-414c-b30b-397abf1a01ce/","schema_version":"1.0.0"},{"id":"scene_data_exporter","name":"Scene Data Exporter [FREE]","tagline":"Exports scene data for AI analysis (TXT/JSON)","version":"1.26.0","type":"add-on","archive_size":9942,"archive_hash":"sha256:08675fc6fa158c3d99eb5c47f19186237d58608d42dc8681bf045e7294bf44ef","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f6b80d0-8db7-47e8-9e56-e16e55aed861/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Joachim Bornemann","tags":["ai","export","json","data","workflow","scene","python","automation","analysis","development"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2c90b1d0-f252-4510-abc5-880d1aa6826b/","schema_version":"1.0.0"},{"id":"scriptpilot","name":"ScriptPilot [FREE]","tagline":"A lightweight add-on to increase search and navigation functiona","version":"1.2.0","type":"add-on","archive_size":12017,"archive_hash":"sha256:417168679a551ce8c6ec5a74e6955efa953bef5bf80fe7a83157b03e303eb5d8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/28687bd4-d8c7-4af3-8e11-25596fc848c5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"The Doctor By Design","tags":["scripts","text","coding","design","bpy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d3738457-8a97-4ebf-9625-f8adc339781c/","schema_version":"1.0.0"},{"id":"set_to_wire","name":"Set to wire Boolean quick set [FREE]","tagline":"This addon simply sets the selected object to wireframe, addons","version":"1.0.4","type":"add-on","archive_size":4277,"archive_hash":"sha256:56b28e5fb681ea4ab21f6539c6264e5eaa209a30df9ce3b1fb58a70ee2ffc748","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/79e38c3b-dfa7-4495-8681-201d95eda4e3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["blender","boolean","easy","quick"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0ea1433-d356-4f38-96c2-8f91209d71dc/","schema_version":"1.0.0"},{"id":"shapekeysbatchtransfer_addon","name":"Shape Keys Batch Transfer Addon [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":2776,"archive_hash":"sha256:c0ea8afa1d950bb6962e8d88754f1ba25aa5ee4aebb0e8013eb047b2fdd34f8a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a28ff77a-b3b8-4be5-ad54-4d64aec72874/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"cg.xenon Lauróva","tags":["shapekeys","transfer","blendshapes","morphtargets"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c047db7a-3b7c-4369-9b1e-99f616bb8830/","schema_version":"1.0.0"},{"id":"Shot_Handler_Lite","name":"Shot Handler Lite [FREE]","tagline":"Create Presets or different Shot Settings","version":"3.0.2","type":"add-on","archive_size":49645,"archive_hash":"sha256:cd64d1e255d54f373ee9220c0a208ce299dc0169faa307af642de46cd402c51f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb1cbb06-ecac-4705-9c36-07eb98720885/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"dubCUT","tags":["shot","manager","camera","setting","render","filename","batch","collection","button","scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4986d4c3-65c1-433a-8359-2a7e83519a2f/","schema_version":"1.0.0"},{"id":"shot_manager","name":"Shot Manager 2 Lite [FREE]","tagline":"Render, layer and camera management","version":"2.0.8","type":"add-on","archive_size":551003,"archive_hash":"sha256:86b18a7ba0d743812eb871e1a573b3d58ca66bdfc78077aa1cf7a59f65d3e11b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5bfc561c-3796-4225-899d-efed286bd197/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["shot","takes","macros","states","batch","render","burnin","burntin","stamp"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/30c9a568-79f8-4551-b71a-d4915ecccf52/","schema_version":"1.0.0"},{"id":"smart_apply_scale","name":"Smart Apply Scale: Rig & Animation Fixer [FREE]","tagline":"The Smart Apply Scale Addon that automatically fixes animations","version":"1.5.3","type":"add-on","archive_size":9723,"archive_hash":"sha256:d278b9416739f1baf80bc178f8b621cc198bd2353a22b0b8da5a0188115357ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4043ed89-4af5-4502-828b-5fc3f5ec55e1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"2.80.0","blender_version_max":"5.0.0","maintainer":"Yakiv Sankov","tags":["gamedev","rigging","animation","addon","scale","unity","unreal","fix_animation","armature"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8d205ca1-cbf6-4a10-903f-0148e9d631a0/","schema_version":"1.0.0"},{"id":"smart_material_painter","name":"Smart Material Painter [FREE]","tagline":"​Smart Material Painter","version":"4.2.0","type":"add-on","archive_size":25766,"archive_hash":"sha256:f9f5ab77f2a434cfbdbc6f3533abb2058de2faa82487c2a7c3c5df5700fc73ea","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e95a879a-6837-4a56-944b-b331d0777c09/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Meshmind egwoba","tags":["Material","Paint","UV","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5a7e38f5-4ea4-4f65-b2c6-5b96d9344c4f/","schema_version":"1.0.0"},{"id":"sol","name":"SOL [FREE]","tagline":"8 one-click particle presets for Blender: sparks, fire, firework","version":"1.11.0","type":"add-on","archive_size":59092,"archive_hash":"sha256:9383c79b02a06833c6c7fdfd7bcb4f5e4124c8b72fb3ad1c209a8cec5ab1a60c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/562ad6a9-f189-4bb9-8d66-18bff85d1c34/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","blender_version_max":"5.2.0","maintainer":"Cloudy Sky","tags":["Object","Physics","presets","particles","fx","Fx","Vfx","VFX"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b2ad94d-559b-4705-9009-323d60693976/","schema_version":"1.0.0"},{"id":"solo_mode","name":"Solo Mode [FREE]","tagline":"Solo Mode helps Blender artists work faster by isolating selecte","version":"1.0.3","type":"add-on","archive_size":3323,"archive_hash":"sha256:8890473d4c81ed5b3c9e66a25c4c0205cca146e3e48e9c050fb3d5a2c256166a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ed1a7e7a-b8bf-457f-9dd7-c07bdd5aa89b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"3.6.0","maintainer":"Vincent Ilagan","tags":["3DView","Object","3D","View","Workflow","Productivity","Viewport","Solo","Solomode"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd8b8c65-7ded-48f1-afa7-b2908baafcdc/","schema_version":"1.0.0"},{"id":"subdivide_selected","name":"Subdivide Selected [FREE]","tagline":"This plugin applies subdivision to a selection with clean topolo","version":"1.2.3","type":"add-on","archive_size":2597,"archive_hash":"sha256:f964bb44f8f1dccfa4cb7c880b5fc3b742b749190e88ec0b39b57842c0097bf8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a371ba92-b0d4-426e-bcaf-4bb93df74414/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Łukasz Wilkoń","tags":["subdivide","weight","paint","vertex","mesh","edit","misc"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ed9859ac-9425-4619-a3ce-654c65ae7faa/","schema_version":"1.0.0"},{"id":"blenderdefender_spm","name":"Super Project Manager [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.3.1","type":"add-on","archive_size":64910,"archive_hash":"sha256:01d50d97d07f68a9e7e676754b5dbad1f1749af9c9248ee3e656d4671f552d8b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5ca45a76-b0ba-4a42-ab5c-a6039131b80d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Beedy","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d3edf068-7e94-4308-ba6a-df9184a20520/","schema_version":"1.0.0"},{"id":"survey_image_aligner","name":"Survey Image Aligner – Geodetic & Construction Workflow [FREE]","tagline":"Survey Image Aligner is a Blender add-on designed for precise al","version":"1.0.0","type":"add-on","archive_size":19532,"archive_hash":"sha256:1cfb365cb2667c8d5a600275a81ba033c21e426423885d228fd57aa85c525d3d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b1613ead-2102-4441-9b9e-25f2115961c3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","UserInterface","Object","Survey","Image"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0d06c297-1456-4c32-8a3a-450951bf0907/","schema_version":"1.0.0"},{"id":"swap_render_orientation","name":"Swap Render Orientation [FREE]","tagline":"Swap Render Orientation lets you instantly switch between Landsc","version":"2.1.0","type":"add-on","archive_size":1891,"archive_hash":"sha256:e6bc031d13a16343fd7f0672f97edbb5567ef29600b457881be11c477cfa1c42","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fa16455e-35c5-4f93-9478-72771e9e268c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Nathan Jones","tags":["Render","Resolution","Orientation","Swap","Landscape","Portrait","Shortcut","Camera","Addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a039fc1a-6af0-48f7-8165-ce6b5b2d7f6f/","schema_version":"1.0.0"},{"id":"tabs_interface","name":"Tabs interface [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"4.0.0","type":"add-on","archive_size":23870,"archive_hash":"sha256:0add617da4273ebfca87db38efff95df16f691c4cd9e2baa407cd41b10f0afbf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/441ac3e4-075c-497a-83bd-7ba66bffeece/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"2.92.0","maintainer":"Vilém Duha","tags":["System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d55d15f7-22f3-433f-9e6a-e7b3544256c0/","schema_version":"1.0.0"},{"id":"texture_bakery_image_buddy","name":"Texture baking image buddy [FREE]","tagline":"Add-on for creating empty images and their image texture nodes i","version":"1.6.8","type":"add-on","archive_size":134546,"archive_hash":"sha256:384048dd9e5c08c899b7d19c453a5be841b9b8ba89064ed607d5ba21fe479204","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4c531eb1-ecd6-4b20-835c-85e8bcce698f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jungle Ham","tags":["Material","Node","Workflow","Baking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c52a840f-f69b-48c9-92ff-520bd166ecab/","schema_version":"1.0.0"},{"id":"texture_upscaler","name":"Texture Upscaler - Offine Image Upscaler For Blender [FREE]","tagline":"This addon lets you upscale your textures in image editor","version":"1.3.0","type":"add-on","archive_size":200727626,"archive_hash":"sha256:6a71e383d902259c98be3deed66ebb7426c32aa2faf638295e6e4a0ab15078e5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6964e35b-6cf3-484e-ab91-e8600f5b418f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["upscale","texture","PBR"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/999f5f40-469c-4d46-8647-42babafe320e/","schema_version":"1.0.0"},{"id":"amazing_hypotrochoid","name":"The Amazing Hypotrochoid 1.0.9 [FREE]","tagline":"Generates intricate hypotrochoid curves with adjustable paramete","version":"1.0.9","type":"add-on","archive_size":28189,"archive_hash":"sha256:25a502b65b9332a0b53c601d66096dc8a1ceaf7af82ea7cf510d832b0b910c0e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a6bee5b1-fc21-463a-b65d-78349d7185c4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["spirograph","curves","hypotrochoid","math","equation","circle","swirl","abstract","art","random"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/95f41ca3-5d8a-40ef-9b7b-2c89978e42b2/","schema_version":"1.0.0"},{"id":"timeline_buttons","name":"Timeline Buttons [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":15158,"archive_hash":"sha256:3aac330381de15d2f69641f0f6c7f0dcaec42371e014ca70889cad899d27d815","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a70a4693-3fa2-4901-88cb-00a7c87e12ff/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"TinkerBoi","tags":["timeline","framerate","ui","dopesheet","graph","sequencer","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/efb9a92c-fe00-40dd-a3cd-70c4086143c0/","schema_version":"1.0.0"},{"id":"tmeasure","name":"Tmeasure v1.1 [FREE]","tagline":"It accurately calculates the curved or linear edge paths of the","version":"1.1.2","type":"add-on","archive_size":4978,"archive_hash":"sha256:112307b7d10a7d3e66ca7245e8f52aa4a5df709d1c453bcd1ffc268472f4b9bf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/26d14398-683e-48ff-8c34-dd15191bcae3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Otonkart Tonka","tags":["Mesh","Modeling","3DView","measure","calculation","measurement","precision","tools","hardsurface","editmode"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bcfa86cb-798b-4fdf-80bb-3024eb5cadb9/","schema_version":"1.0.0"},{"id":"EMU3BM","name":"Toggle Emulate 3 Button Mouse [FREE]","tagline":"Adds a button with mouse icon next to topbar menus to toggle Emu","version":"1.4.0","type":"add-on","archive_size":1343,"archive_hash":"sha256:e0eb54d5bc012e9d262c255df472ac0cdcf194a366f914d4c488525ed795c497","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2cb0b47c-afea-4165-97e4-92a1a91f2085/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Kin Chen","tags":["mouse","Graphicstablet","DRAWING","toggle","PEN"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fa48f8c8-ccf7-4053-89d6-a4f065ca2709/","schema_version":"1.0.0"},{"id":"tryon_clothes_2","name":"Try On Clothes 2.0 [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"2.0.0","type":"add-on","archive_size":93895383,"archive_hash":"sha256:f0f5505c3252b090b9cb50cc04a9c0a20def4970b3441c21ad1983932f0e4c7f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/beb0b63c-6f62-4fdd-a56f-fe1164022d60/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Clothing","Tryon","Garment","Customization","Image","Model","Style","FashionTech","Virtual"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fb812bd3-5913-4549-91fc-1ff8e5c486b7/","schema_version":"1.0.0"},{"id":"tuberig","name":"TubeRig — Make your rig controls actually visible [FREE]","tagline":"TubeRig takes your existing Custom Bone Shapes and wraps them in","version":"1.1.0","type":"add-on","archive_size":24455,"archive_hash":"sha256:02d6cec8b3486cbe1e84272c5af48e13b78d8e801feb1b1ff7b39ed155cb32f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d1cd8f43-1581-4de9-97dc-326c0bcfd853/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Yakiv Sankov","tags":["Rigging","Animation","Addon","bone_widget","custom_bone_shape","geometry_nodes","rig_controls","tuberig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e2da7972-168a-4dd1-a415-f971c73a8503/","schema_version":"1.0.0"},{"id":"WeightPaintToolForBlender","name":"Weight Paint Tool for Blender [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.2.0","type":"add-on","archive_size":3855,"archive_hash":"sha256:ab7411de691858c94764273515a13f0a5768b78cca48a1c44554eee0d78380ed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f24f5077-e24a-4e25-9e75-84a974d720f3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Peter Harmatiy","tags":["Blender","Weights","Paint","Tool","3Ds","Max","skinning","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8ebcbb43-4807-42e2-9ae1-9bef04b58aea/","schema_version":"1.0.0"},{"id":"xcut","name":"XCut [FREE]","tagline":"Cut (Ctrl+X) for Blender's Outliner and animation editors","version":"1.0.0","type":"add-on","archive_size":4238,"archive_hash":"sha256:4065b43f89015d76880252c2d8e2b3a2e91ed19a304f71c5c11f5c60a1c5bc11","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c0561ccb-79ea-4633-86e7-122673f9a21a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["Object","Scene","Animation","cut","edit","useful","Cut","shortcut"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/73d5e3e9-c9e5-43d6-91e6-11ea780a3004/","schema_version":"1.0.0"},{"id":"cobweb","name":"Cobweb [FULL]","tagline":"FULL plan required - upgrade to download","version":"2.2.1","type":"add-on","archive_size":50711,"archive_hash":"sha256:0706d2533db72a8d7e824ede71d7bfe84e3fea73a6454b3c3672900d7a8b8b41","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/28c5d4df-a8b9-478f-94cc-a2bd4decf1ef/addon.zip","verification_status":"validated","can_download":"Rejected in this plan","is_private":false,"is_free":false,"is_for_sale":false,"base_price":null,"blender_version_min":"2.79.0","maintainer":"Vilém Duha","tags":["System"],"license":["royalty_free"],"website":"https://www.blendkit.com/asset-gallery-detail/20d48d8d-39a5-4d1f-9fb0-994401b2a9c2/","schema_version":"1.0.0"},{"id":"final_topology","name":"Final Topology for Artists [FULL]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":627177,"archive_hash":"sha256:0a9d55a9a02cb026fa969eeaf7f7eb11258732eeb8322e09c136e28da0aa8a4f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/46d5cd8f-b93c-4786-8e4b-51b3b6ebb645/addon.zip","verification_status":"validated","can_download":"User is anonymous","is_private":false,"is_free":false,"is_for_sale":false,"base_price":null,"blender_version_min":"2.92.0","maintainer":"Blendkit Community","tags":["System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/388b195c-5a7d-4d9f-a632-0dac12c9198c/","schema_version":"1.0.0"},{"id":"two_d_people_archviz","name":"2D People [Before: $11.99, Now: $10.19]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":256485,"archive_hash":"sha256:ab84c4836a19c106c9c4cc64772b1a793c71c119258eacb7efaf532d9857d4cd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2f40621f-a3c3-4b2f-9266-11e3b7e3be2c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.19","blender_version_min":"4.3.0","blender_version_max":"5.2.0","maintainer":"Sérgio Merêces","tags":["2d","people","assets","elements","trees","architecture","archviz","real","placement","projects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0fc2f9a-fb4f-4980-afb5-32f07d5c0cb8/","schema_version":"1.0.0"},{"id":"object_3d_comparison_video_generator","name":"3D Data Comparison Addon [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":42045461,"archive_hash":"sha256:9b8c84af187c955f914a5b0b78e1e4284e0b59c0c1fe1a9c2ac28f18ee7d1e2d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5abad072-0cfa-43f4-9e8b-a57814831497/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"3D COMPARISON Musk","tags":["3d","data","comparison","visualization","addon","blender","3dbar","3d_data_comparison"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6ae0f491-2109-4e05-b1d8-e075bc0ea07b/","schema_version":"1.0.0"},{"id":"procedural_pattern_generator","name":"3DQuads Texture Maps Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":73577,"archive_hash":"sha256:b1aff6a799bce2cb9891d217dc2795c1b57830f81d430e40fd15fbd613798a92","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9be78010-98d0-4180-9fc7-1316a565e139/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"3dquads blender","tags":["Material","Texturing","Procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ae4162bc-84bb-4e48-b2b9-4072a990f873/","schema_version":"1.0.0"},{"id":"abo_connect","name":"ABO Connect [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":41658,"archive_hash":"sha256:d1e2b4545aafd73466c8f3525f2f7baf2ac4fc418e20fb31c9eed4ead61cf0f1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9bd45216-230c-442c-a0c7-ba898c2258f9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Andrew Luzhetskyi","tags":["library","furniture","ABO","assets","models","archviz","electronics","free","interior"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0bc8018-886c-4c41-ae18-2097088e3b48/","schema_version":"1.0.0"},{"id":"advanced_modifier_tools","name":"Advanced Modifier Tools (AMT) [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":26641,"archive_hash":"sha256:390d9e74a4786fd18958d7bf5adb8f9eb9bbc60527a136e8b6f8da045d63e054","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6dfdafb8-34bf-4fd4-88cb-1b98e7b896dd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Soheil Mahmoudi","tags":["Modifier","ModifierTools","AdvancedModifierTools","BulkOperations","Bulk","Preset","Snapshot","SoloMode","Modifiers","Selection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0fd579a3-d75a-4ca3-9e44-154f571858b8/","schema_version":"1.0.0"},{"id":"ai_geometry_node","name":"AI Nodes [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":12066,"archive_hash":"sha256:52f11f2ebfd2f323c7f6d0497bc4cf7f9e182c956a59bc06f8333316769f3b24","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c03e5769-59f1-4c19-a610-f2cfa150cc61/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["ai","llm","chatgpt","claude","gemini","artificial","intelligence","dynamice","text","procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7de3fba7-ce57-4124-b1e1-d146e7855b0d/","schema_version":"1.0.0"},{"id":"ai_shortcuts","name":"AI Shortcuts: Add new buttons to blender [Before: $6.99, Now: $5.94]","tagline":"FULL plan required - upgrade to download","version":"2.8.0","type":"add-on","archive_size":11078,"archive_hash":"sha256:99844c2df0e2bd04d5f1326e199a57507ad60affc64223a7b5809b33e0c23997","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2d892b56-86b1-45b9-b1f6-355b28a7993f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.94","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["ai","gemini","addon","blender","shortcut"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4f4adf7a-d4c9-400d-85ee-53b73a3cc14f/","schema_version":"1.0.0"},{"id":"align_distribute_objects_pro","name":"Align & Distribute Objects Pro ULTIMATE [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":4516,"archive_hash":"sha256:198a0ba8b51c2fea507da48921704fdc39f6f506420881efd7b3b689c543f7f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9f79e7e7-f980-427d-88fb-96b0ef350e39/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.0.0","maintainer":"isac lima","tags":["Object","Modeling","Scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14106c2f-74a6-4d17-9447-a93f2bd0b56f/","schema_version":"1.0.0"},{"id":"align_toolkit","name":"Align Toolkit [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":15041,"archive_hash":"sha256:024b25133b7ba4de512a7043fcd1fdf4e1dda61fb407db9118d477cb293743b4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ae77c204-58c0-452a-a391-c8573c2b0bdc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["alignment","ux","align","distribute","ui","toolkit","user","interface","experience"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/68a1366b-51bc-40b3-af32-9b38d3292e47/","schema_version":"1.0.0"},{"id":"alt_tab_colorful","name":"Alt Tab Colorful [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":20121,"archive_hash":"sha256:393d1f896b9aba97226956a59a1b15cc0d0ae501517ab8c54a46603f967b3eb9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/96b0ebc8-38c7-4f1d-a3cd-34a2cfa4402b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","colors","colour","palette","generator","color"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/de7931c2-31d6-473f-982e-728a1a735269/","schema_version":"1.0.0"},{"id":"easy_fog","name":"Alt Tab Easy Fog 2 [Before: $40.00, Now: $34.00]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":64598868,"archive_hash":"sha256:2c2840bbfceada6d70b37dfac28bae7e3b347be5ad871d64332b24c91bb647a8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7b56f9ad-1df7-4803-be2b-f74a32dd1690/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"34.00","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","addon","fog","volume","clouds","mist","explosion","godray","smoke"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5ba4cad8-7db8-4235-a5f7-bd264a60e489/","schema_version":"1.0.0"},{"id":"alt_tab_easy_hdri","name":"Alt Tab Easy Hdri [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":385592,"archive_hash":"sha256:b72f2d7159a888113322cda4646363adb8e52698b1af624e0e4c4fcdcf380133","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9f3c1e2a-bfbe-4286-84c4-ec44b98109e8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","HDRI","World","Lighting","GroundProjection","HDRISphere","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2347b643-69bd-4f8d-8008-ffba17e706e3/","schema_version":"1.0.0"},{"id":"alt_tab_lighting","name":"Alt Tab Lighting [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11811259,"archive_hash":"sha256:a6da266309f0c9e57df4ac8c73c96a8cc539751b413283b5d8c53c42bc055236","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ede8deaa-d482-4eaf-88ed-59baf96d81c7/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","lighting","presets","cinematic","lights","light","addon","manager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fccb81d9-10b2-40ad-b46e-9d3a4b88f8ef/","schema_version":"1.0.0"},{"id":"alt_tab_pixel","name":"Alt Tab Pixel [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":187750,"archive_hash":"sha256:ab0672cd273718e0b180a0b62885c7700f3a9c87e012368f4aaa56135563802b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e8e63c9f-bfb2-4b1f-ab48-6f215a471b00/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","pixel","pixelart","2d","shader","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/846e4c3e-6227-405d-8682-fbbf080d9dcb/","schema_version":"1.0.0"},{"id":"animates","name":"Animates Complete Animation Suite [Before: $65.00, Now: $55.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.4","type":"add-on","archive_size":174446,"archive_hash":"sha256:6ba53c2008f5ebbe9eb4cd5a58b37f2cf008729a95875a37dffc32628af00b6d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/67fafa3c-a1d2-4a62-882f-67051513e2ca/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"55.25","blender_version_min":"4.2.0","maintainer":"David Hallows","tags":["animation","character","keyframing","graph","editor","motion","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fe9df247-5dd5-441d-91dc-aafdde63db3e/","schema_version":"1.0.0"},{"id":"animation_layers","name":"Animation Layers [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"2.4.1","type":"add-on","archive_size":99251,"archive_hash":"sha256:9c20bef2b59833a0663a26d96dabb2eceaa71760be15bd49922c5e132c3584b6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/14f01b6a-4082-4c6c-8229-9ac05d0d3158/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Tal Hershkovich","tags":["Animation","layers","motion","capture","mocap","nla"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/797ac060-785e-49dc-a98f-d0ecf4abc555/","schema_version":"1.0.0"},{"id":"anime_outline","name":"Anime Outline [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":740454,"archive_hash":"sha256:be4d38ab3ece3bc788ffa1ada8dfd9883925db1ecd6916a34937adfa56aab70c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5d916717-58fe-4e6e-b6b8-1d10ee208c75/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"3.6.23","maintainer":"Andy Hellgrim","tags":["Modelling","Import","Export","Outline","Anime","Eevee"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6a6bb31d-7a31-456f-a05c-dae63d03a1c5/","schema_version":"1.0.0"},{"id":"animtex","name":"AnimTex - Animate Texture Transitions [BETA] [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.8","type":"add-on","archive_size":1581140,"archive_hash":"sha256:880d8c49a4b1f7dcfec4993eeb2e07e027f302f5bf515e8393a6aad62c3dceb9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b3201024-25d6-49d2-b71b-cd12e619e139/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["3DView","Material","Animation","Texture","Disolve","Disintegrate","Effect"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f1f0d459-3a41-45bb-a502-8eb0fc86fd85/","schema_version":"1.0.0"},{"id":"archiform","name":"ArchiForm [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":42977,"archive_hash":"sha256:85b7c71aea23717ad2cd040897a2cf31a74b22b23691d2b00bf1c9cf5bfd25f6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7a0535ba-38c2-44b6-b3a0-390d56398a70/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Abbos Mirzaev","tags":["RoofGenerator","WindowGenerator","parametricdesign","floorgenerator","FastModeling","ProceduralModeling","ArchViz","WallGenerator"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7ce6dc77-79fc-4a75-8f35-f241946e834c/","schema_version":"1.0.0"},{"id":"archviz_camera","name":"Archviz Camera [Before: $28.00, Now: $23.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":7573,"archive_hash":"sha256:4b1731b758ae452d3b7e94e18041181660942afd3c57ccf16e374a6d1231679a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/149ff6da-8fe3-49ca-9afb-8630afebe62c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"23.80","blender_version_min":"4.2.0","maintainer":"Daniel Farjoun","tags":["archviz","camera","tilt","correction","manager","render","shot","architecture","pro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd4522ac-f70a-4d3a-9955-7c133b4572b3/","schema_version":"1.0.0"},{"id":"arkit_toolset","name":"ARKit Toolset [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":5563553,"archive_hash":"sha256:352d8627021d11aaa88347e0492e8e4d3c82ff8f45a54be7466ed5b62951f91e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7ecd80cc-66ca-4be5-b7fd-0dd688097110/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"2.83.0","maintainer":"Andy Hellgrim","tags":["Animation","Modelling","Rigging"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c6250a59-cb9b-4040-8dec-74df05e04bd4/","schema_version":"1.0.0"},{"id":"Arrowify","name":"Arrowify FULL VERSION [Before: $50.00, Now: $42.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":4692987,"archive_hash":"sha256:e95bd263c94ac3bcf6b4499b202ca195b722d6d77e5edc1d36e804340f196073","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6b514bc5-7041-4155-851b-d62cb6a712f1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"42.50","blender_version_min":"4.2.0","maintainer":"RR3D","tags":["arrows","spline","procedual","animated","annotation","nodes","customizable","technical","guide","visual"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7e5c82e6-ddbd-48d1-98d2-c7077a0a4261/","schema_version":"1.0.0"},{"id":"defoq_assetify","name":"Assetify | The Ultimate Bake & Export Tool [Before: $34.99, Now: $29.74]","tagline":"FULL plan required - upgrade to download","version":"2.1.5","type":"add-on","archive_size":438131,"archive_hash":"sha256:bf0fcb963fe97edf240ab8f350102829bcaaca07880e30b4ebe5a08ec6ac3b12","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4b54309-7911-4dd9-bc33-ec7b633000f3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"29.74","blender_version_min":"4.2.0","maintainer":"Defoq Nino","tags":["bake","export","game","engine","materials","optimization","unity","ue5","textures","fbx"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/82a1fc6a-bb0a-4162-bf87-ce2d6f1d80bb/","schema_version":"1.0.0"},{"id":"quick_lighting_presets","name":"AT_Quick Lighting Presets [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4208,"archive_hash":"sha256:f401b70f3a58b2dafa039b4d4458bbb3e5b6e287a53ea04e9c956ee667d24f20","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ff81e91c-8620-41e6-9dfe-f2b12a6b352b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.0.0","maintainer":"Alireza Taherpor","tags":["LightingSetups","LightingStudio","StudioLighting","RenderSetup","BlenderLighting","CinematicStudio","CinematicLighting","ProductLighting","DramaticLighting","RimLighting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dc146555-325d-4adc-ba04-71d982d85781/","schema_version":"1.0.0"},{"id":"auto_apply_scale","name":"Auto Apply Scale [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3401,"archive_hash":"sha256:ee30a47355275e1eef8b09809bf0afd33c8e21a648101523992fd22e5cd77f73","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4e63abb-980f-4bd2-9d5b-8d58e40ceb02/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","scale","autoapply","workflow","modeling","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e9e08a2f-273e-4dc1-833a-9bb00e7c0140/","schema_version":"1.0.0"},{"id":"auto_displacement_and_bump","name":"Automatically set material to \"Displacement and Bump\" [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"2.7.0","type":"add-on","archive_size":4305,"archive_hash":"sha256:5cfd1524435be43a647fa5867e72f99ebb7961675ad78b4c19365c44f4e4d591","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/af628f62-4440-4bad-ae9f-0faeac8bcd61/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Alhakam Kain","tags":["Material","Displacement","Bump","Cycles","Auto","Workflow","Subdivide"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ba32fb3-ac0b-4119-a0e0-ce2d83c04170/","schema_version":"1.0.0"},{"id":"automatic_fake_user","name":"Automatic Fake User [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":4268,"archive_hash":"sha256:938ba462e6a0bcef16a7150db22fd86bd823f80c73846ac946cf20e502165c10","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a6f43cc3-6202-4572-becf-eb6238949665/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["asset","data","ui","ux","datablock","autosave","fake","user","automatically"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/90f0e757-41db-4a42-8d9a-c4ddf93b81bd/","schema_version":"1.0.0"},{"id":"autoremesher","name":"Autoremesher NOW! | Automatic Remeshing [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":13478980,"archive_hash":"sha256:f89242c71ba41ab17fb1938b94e8cd82e0e8a3aaeb6536755dff6fdf97a088b1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9409b4d6-59e4-4f7b-93bf-9b51a9811b8e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"5.1.1","maintainer":"Giambattista Von Nettesheim","tags":["optimization","decimation","tool","topology","cleanup","quad","remesher","mesh","repair","remesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/86e86fab-5c54-4e8b-8ad9-4db6aa160784/","schema_version":"1.0.0"},{"id":"auto_save_file_checker","name":"Auto-Save File Checker - Browse all the Temp Files [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":11826,"archive_hash":"sha256:97bbf97c0794a1fe1a71563ccb04287667b32ca08dc579436757408fc6f04668","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/84632576-75d1-4ca3-9bcb-becbe3884a98/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["System","Development","autosave","blendchecker"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/18ba6214-e44c-4603-a654-19123100e06f/","schema_version":"1.0.0"},{"id":"auto_uv_unwrap_3_pro","name":"Auto Uv Unwrap & Pack 3 - Create clean UVs in seconds [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":28163,"archive_hash":"sha256:1fc915d1effc311bdb98272a78c866dc61d2e596114c6ebaa304e34f723391ce","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/402c8540-9b3f-44a8-a1db-fe11518d62f9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"3.6.0","maintainer":"Studio156","tags":["blender_addon_for_uv_mapping","tools","seamless_texturing","seamless_uv_unwrap","uv_mapping","uv_unwrap","uv_unwrapping","auto_uv_unwrapping","auto_uv_mapping"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3915ee47-7c9f-4349-9981-cef51ba1c19c/","schema_version":"1.0.0"},{"id":"basic_wire_rig","name":"Basic Wire Rig [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":8971,"archive_hash":"sha256:a52e5ed61919cfceabcc799a50ddf9ef0bfd143ea8a891f08b1dec71820d0ee3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/efa10129-754e-4d6d-8ccb-e709a206fe14/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["Animation","tools","cable","rig","wire","puppet","inverse","Kinematics","chain","ikrig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5683ae75-d590-4756-8292-1ecbb4aa66cf/","schema_version":"1.0.0"},{"id":"batch_export_selected","name":"Batch Export Selected [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2703,"archive_hash":"sha256:6998f2db2bd89bf52d165e69566e97cbb1e21c2bd6ea48af63bf5978669b44b8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dfc42df0-8211-43ec-ba42-4fb4a1eb7b89/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["export","selected","objects","bulk","multiple","format","addon","obj","fbx","stl"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/110a268e-9661-4a69-b1b0-0970e718bb99/","schema_version":"1.0.0"},{"id":"BatchGenie","name":"Batchgenie: Asset Assistant [Before: $1000.00, Now: $850.00]","tagline":"FULL plan required - upgrade to download","version":"1.3.1","type":"add-on","archive_size":14941835,"archive_hash":"sha256:6b510374f080da157ad4a432507f68ad9832f80c7870c47510b2cf98e484d322","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4c40dbb1-424c-4197-9e8f-fbc43deb89da/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"850.00","blender_version_min":"4.2.0","maintainer":"Roberd Palm","tags":["Asset","Library","Batch","Rendering","Import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/32b07916-3a38-46d5-8e25-544926d8fd5d/","schema_version":"1.0.0"},{"id":"batch_rename_addon","name":"Batch Rename [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1745,"archive_hash":"sha256:1b4be6000c75875c5db989d606cf9dafc4ae84b29829b9ec656b041ab9bf365a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e974a06-e3ca-4107-ae67-23c57fa81231/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Batch","Rename","Prefix","Suffix","Organize","Interface","Efficiency","Naming","Scene","Automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0ce1d7c-858a-48a2-84e5-2765dc617bda/","schema_version":"1.0.0"},{"id":"batch_rename","name":"Batch Rename & Replace Pro Blender addon [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2746,"archive_hash":"sha256:87eff844dff87b5aece9b41f3c2fee5a1de0baa8837ce4a88b85560996cb328c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/639f709c-2c21-4022-b4a0-a71a6bbc8096/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["batch_rename","find_and_replace","object_naming","prefix","rename","scene_organization","suffix"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2bb18442-9a82-4a5a-abdc-a09f90c400b7/","schema_version":"1.0.0"},{"id":"kamildobrek_batch_render_manager","name":"Batch Render Manager [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":58465,"archive_hash":"sha256:1869ac939e037aac1143217cfa2a8eea118f1d3b30c5d3df6e53b5efe45e2f98","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e1ed6b2c-c614-4e21-af32-ef412127d6d9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"K","tags":["Material","Object","Render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ff85ef84-9287-465c-a30f-4ed43fe442e1/","schema_version":"1.0.0"},{"id":"bb_toolkit_pro","name":"BB Toolkit Pro [Before: $8.99, Now: $7.64]","tagline":"FULL plan required - upgrade to download","version":"1.0.8","type":"add-on","archive_size":56758,"archive_hash":"sha256:412b2098d35238a1766808a2d49895488e42f8bb98df0bde33cd1ba5fc5e6cb6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e1252aad-c6c5-42eb-a389-cbefdcb6aa8e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.64","blender_version_min":"4.2.0","maintainer":"Theo","tags":["threelights","overlays","productivity","modelling","tools","quickaccess","modifiers","fixscale","wireframe","facenormals"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f953d832-362d-4e0c-9caf-208f6e7936b0/","schema_version":"1.0.0"},{"id":"better_bend","name":"Better Bend - Geometry Nodes Bend Modifier with Intuitive Controls [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":25767,"archive_hash":"sha256:be4346fef203ac6c042afee66e50722aee1f7b765a2dc8225bc0a8eaa7d37aef","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d44ed407-bd2f-45e3-ae58-5aa57482461b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Mesh","Modeling","GeometryNodes"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c1cf022-c9a5-4e7f-b821-057c1c4abe99/","schema_version":"1.0.0"},{"id":"better_cutter","name":"Better Cutter V1.1 [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":32438,"archive_hash":"sha256:d8a1153ba01c79e55c1ba97c79a1982415e47e77d41c5742cca7e01636212f0f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cc4a77cd-92c1-4ae7-9da4-d04038e8e715/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Bala Murugan","tags":["cutting","addon","better","cutter","hardsurface","modeling","blender","3dmodeling","boolean","looptools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/85b19cc5-4a46-46f8-8f1e-e399a8458ac1/","schema_version":"1.0.0"},{"id":"bevel_joints_v7","name":"Bevel Joints - Join Meshes - Weld - Bevel V2 compatible - Set Mesh normal - Edge attributs [Before: $15.50, Now: $13.18]","tagline":"FULL plan required - upgrade to download","version":"7.1.4","type":"add-on","archive_size":5098125,"archive_hash":"sha256:24f90dd72619dfe4d9aaf8b459afb6d4891112017332c909483514da91533a44","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9ed7281e-0ef8-4c7d-9d19-641ace4aae44/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.18","blender_version_min":"3.6.0","maintainer":"Mr Steve Lee","tags":["bevel","join","mesh","blender","manifold","clean","2025"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8f021e02-4605-4a46-ad46-3aff2abadae8/","schema_version":"1.0.0"},{"id":"bildeform","name":"Bildeform | Bas Relief Maker From Your Images And 3D Models [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.5.2","type":"add-on","archive_size":3428172806,"archive_hash":"sha256:d92474aa863833fe86450406a8be876c00e87e70a97f08938947899b4986358d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/99036cb8-dde5-4767-b670-5e1b2ccd4c0d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"5.1.1","maintainer":"Giambattista Von Nettesheim","tags":["basrelief","heightmap","zbrush","reliefmaker","depthmap","bildeform","displacement","3dprinting","CNC","maps"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4f0e25d1-7c9d-4a77-bf6d-60df3dc5b7a2/","schema_version":"1.0.0"},{"id":"blenderkit_translator","name":"BlenderKit Translate [Before: $6.90, Now: $5.86]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":2506,"archive_hash":"sha256:efb37d88992f8a1271da4c4e0012fd4992b4306dfc50382aeb5e6494a048ae11","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/da53acdc-2eaa-4b3b-ad15-dfe1acec4ba3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.86","blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["translation","search","assets","tools","language","utilities","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c58bdee2-6fae-4164-8dab-2786202b3e76/","schema_version":"1.0.0"},{"id":"blender_light_mixer","name":"Blender Light Mixer add-on [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11478,"archive_hash":"sha256:ca92bbdafac363ea15437189b1555e4fc52d97f62ceb0a14a67876fdb1b1ef02","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3ba1716a-2ef7-43f6-9c80-fe65bd0987c6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Lighting","Render","Compositing","Cycles","Mixer","Addon","Realtime","Rendering","HDRI","Emission"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7b131c57-7e52-42f0-a1c0-9bcfcd38b182/","schema_version":"1.0.0"},{"id":"blender_luts","name":"Blender LUTs [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5883785,"archive_hash":"sha256:117804828d165ade5fed594f79a3f4c17e292297a6beae975915d2f6b096b416","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3b02592a-8adf-4be4-9255-387cc5f59072/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["LUTs","Compositor","Renders","Color","Effects","Nodes","Filters","Cinema","Grading","processing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/02dacd43-eafd-435f-badf-d01756834f35/","schema_version":"1.0.0"},{"id":"blendermcp_pro","name":"BlenderMCP Pro [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":72361,"archive_hash":"sha256:32aba972d1ab39cf45271a511277987628eaf5721ce36dbde7d9868a84fa3d1e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c9032bf-1d16-4a87-be09-1e77e6ee7036/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"5.0.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["Interface","Pipeline","MCP","automation","AI","Chat"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2119db70-e04f-4bf6-bd8e-a38675987a98/","schema_version":"1.0.0"},{"id":"blender_revision","name":"Blender Revision V 2.1.0 [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.2.0","type":"add-on","archive_size":14849,"archive_hash":"sha256:382d4beed3837ab319fb112ebea32de5aa1e5f5ab911c0ce679ccca4fb29137a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9e625b8f-41e1-4494-bdc0-2b7eb5dfa078/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["render","revision","compositing","cycles","eevee","optimization","selected","objects","pipeline","vfx"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/476556b5-ed65-485f-b566-16ff3c967291/","schema_version":"1.0.0"},{"id":"rizom_livelink","name":"Blender - RizomUV Live Link [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":8979,"archive_hash":"sha256:23be20e366669ef8256b5e80087fd134b49dc4cb8ed9d49877bef38900c4d4ee","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8f53f3ac-b38f-469f-856a-99b9a72fe6c7/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"5.1.0","blender_version_max":"5.1.99","maintainer":"Milad Kambari","tags":["rizomuv","uv","mapping","bridge","live","link","pipeline","uv","unwrap","uv"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/abd3b5f4-b476-4104-a791-aeac6a1573ba/","schema_version":"1.0.0"},{"id":"blender_sp_live_link","name":"BLENDER <-> Substance Painter Live Link [Before: $18.00, Now: $15.30]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":25427070,"archive_hash":"sha256:375ff3ee561d16e1ba47e809c660a75c6f0901796dd9de698c4addd2d782ba53","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c443b576-8673-4247-aaa3-0b96ce40ffaf/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.30","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["blender","addon","livelink","bridge","substance","substancepainter","blendertosubstancepainter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8653c075-2f7a-418b-b228-c5cabbf5ba0e/","schema_version":"1.0.0"},{"id":"blender_to_godot","name":"Blender to Godot [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":431945,"archive_hash":"sha256:b09ee9b1ebbb6ee2701103945d9d1957c7027372e48d8227545bd02e6c1f58c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/26a91aca-41d3-471b-a71b-8fb1a5da3fce/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["object_export","collection_export","collision_export","component_export","animation_export","godot_exporter","gltf_exporter","godot_workflow","godot_pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0bc81975-693c-42e6-8465-ad0e2e37d9d7/","schema_version":"1.0.0"},{"id":"blender_to_unity","name":"Blender to Unity [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.6.4","type":"add-on","archive_size":445627,"archive_hash":"sha256:b38ae9ef546719c5be97fdbe07d7b726d8d338b3f457039c59624cf4f6368f36","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e3743448-3cd0-4ccd-85ae-16c918350590/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["blender_to_unity_export","fbx_exporter","batch_exporter","unity","unity_3d","lod_exporter","collider_exporter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c884710-57d8-438e-a89f-1c51bb88bb9c/","schema_version":"1.0.0"},{"id":"blender_to_unreal","name":"Blender to Unreal [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.5.8","type":"add-on","archive_size":439859,"archive_hash":"sha256:7f96e285c9fd83e4f5a8b5a2c0a77f3b25d5fe14e1f7f430de6b4c92cd3aa5c5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e24e7aec-90ce-4344-b981-910f066797e8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["blender_to_unreal_exporter","unreal","unreal_5","fbx_exporter","batch_exporter","collision_exporter","LOD_exporter","socket_exporter","animation_exporter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c047180-1c4f-4280-b4dd-56953673651a/","schema_version":"1.0.0"},{"id":"vse_lottie_exporter","name":"Blender VSE To Lottie Json Exporter [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":478198,"archive_hash":"sha256:df934207034410d289ecaa5a0560701937fd4710c4136d657c6b0e2550b37eee","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/758a98ec-23fa-4a16-beef-8bf64f69a8b1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"Dynos Std","tags":["export","vse","motion","ui","json","lottie","animation","video"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/624848c3-08c0-438b-8177-a4bb8680e563/","schema_version":"1.0.0"},{"id":"blendoptimizer","name":"BlendOptimizer [Before: $4.49, Now: $3.82]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":44178,"archive_hash":"sha256:6d92091fd9695d3b2e93f05ef43ae4cf203364ddc14cffea5606ff444c0d9bab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1f5bc0d6-e10e-478a-8e6a-a69efe1953b0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.82","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["Pipeline","System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bfd43647-78e8-4252-92bf-a5c349b82f15/","schema_version":"1.0.0"},{"id":"blenquick_autorigger_v2","name":"BlenQuick Auto-Rigger [Before: $30.80, Now: $26.18]","tagline":"FULL plan required - upgrade to download","version":"2.7.3","type":"add-on","archive_size":7306982,"archive_hash":"sha256:ffd7a5221adbbc41e75c09b427de6a18a51c4fda4308941d03a9df9ec174f9cd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/46f3ba7b-a4da-4064-98b0-ed9b4c6c960b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"26.18","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["rig","rigging","autorig","autorigger","advanced","detection","export","character","smart","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8844f27d-31e1-44a6-ab42-9518a22f0490/","schema_version":"1.0.0"},{"id":"bl_objector","name":"BL Objector [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"0.1.2","type":"add-on","archive_size":48724,"archive_hash":"sha256:e99fa9a3ed65ab17d0c113a57b950b083b1cdcba1f918489791d178ce00a3c4e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ff7aaa8f-20f5-4c4c-813f-bfc57ce8c652/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"3.0.0","maintainer":"Michal Hons","tags":["3DView","style","dressing","random","scene","blenderkit","replace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0ba0acf6-cd24-4aa1-b677-d3ea874ccd5d/","schema_version":"1.0.0"},{"id":"booleanbite","name":"Booleanbite: 1-Click Procedural Edge Damage For Blender [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":8394,"archive_hash":"sha256:c7f3318eeea5cc01f51bd76af0afb1c74275f0b331cf261891cac5a9f042a536","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d0b2bbfa-bc8c-41b9-9ebd-4480955e13f1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Shift4Cube","tags":["hard","surface","blender","addon","edge","wear","boolean","procedural","damage"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e7644b82-c95d-4c06-b3f3-fb7b804ea64f/","schema_version":"1.0.0"},{"id":"boon_shader_lite","name":"Boon shader lite [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.9","type":"add-on","archive_size":11944507,"archive_hash":"sha256:52b7f858bb8dbf122f7e8b04e5556cc199844b6ec5a1f1f20bbe0e378bf54c89","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cbdbb779-e0ca-4d62-8b31-85274f0c2077/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Applebharath","tags":["Material","Render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3b9c924f-a11c-4d6f-af86-bafeb474d5ac/","schema_version":"1.0.0"},{"id":"bounding_box","name":"Bounding Box - Fixed, Dynamically, Shrinkwrapping - Easy to use [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":380172,"archive_hash":"sha256:8eb955f27e800b3fca95a09efccfc6cfde49bcfbdc7409479f7f76c99dce579d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/32700b65-aa85-49be-a0e8-282c87d30d58/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["3DView","AddMesh","Object","bounding","box","surround","wrap","shrink","dimensions","resizing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f5948370-e94d-4662-83e0-261f2c5dcb29/","schema_version":"1.0.0"},{"id":"bpm_marker_toolkit","name":"BPM Marker Toolkit [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":6263,"archive_hash":"sha256:442334badc75322a02f1b12e047930c9deff79bd99f1496517c9241597936cec","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/500fa12b-eb94-4e33-9dd9-73dbab309978/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"AL3K Insouratselou","tags":["Animation","Timeline","Markers","videoclips","music","sync","bpm","rythm","synchronization","timing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/99529f45-bc25-4e04-8ff0-792af864a549/","schema_version":"1.0.0"},{"id":"breakdown_master","name":"Breakdown Master [Before: $10.96, Now: $9.32]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":318236,"archive_hash":"sha256:77d5adad2e2ab51fbc5b2cb83c695f8f09ee2074dea3da1b7801d951aef67b51","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4f4435fe-f3f9-4b5e-b8e3-80f898e0f551/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.32","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["breakdown","animation","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a5602d43-74dd-4210-add4-c2699480f169/","schema_version":"1.0.0"},{"id":"breeze_sway","name":"Breeze Animaiton Tool [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":22657,"archive_hash":"sha256:a2030b664b8b229e59b89bd097644e7ae1dc70cbedd0c5af0670c528b9983cb8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a9f0915d-ea4f-44ee-8805-b9e908719323/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dde3c942-917f-4d40-a8a4-535aecc2717a/","schema_version":"1.0.0"},{"id":"bsat_reference_plan","name":"BSAT - Reference plan scaling [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":339168,"archive_hash":"sha256:2c677a7a66aa6bec8aa6ebdbbc83b183a40a0c6cd6cfce83c2582cb0fc7632bd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/45c91b7e-4536-48e1-8686-6823b91d7b73/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Julien Winé","tags":["architecture","reference","plan","scale","distance"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e7a459b1-81e4-4869-b684-d23bbe22c20e/","schema_version":"1.0.0"},{"id":"bslicer","name":"B.slicer [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.4.1","type":"add-on","archive_size":1678975,"archive_hash":"sha256:4765df4bbf8d2fc1660a86ed662abedf62e334437033cfea920ae977a6236dca","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3c1d581e-77fa-43f3-a63a-018fd2186025/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"3.5.0","maintainer":"belaid ziane","tags":["slice","slicing","export","svg","flatten","modeling","parametric"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45e0a112-b302-4020-881b-3a91fc139236/","schema_version":"1.0.0"},{"id":"b_working_pivot","name":"B- Working Pivot [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.8","type":"add-on","archive_size":18308,"archive_hash":"sha256:d03208917bb899d6e9ab99cb1956c37524dc354f8523d761dc56fee5656826c7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d4ae5882-e7bc-4a66-8b05-5b071f86165a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Robert Ross","tags":["modo","pivot","snapping","gizmo","3D","cursor"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/94bc13f4-fd31-4a84-8dcc-b7caf7b3648b/","schema_version":"1.0.0"},{"id":"camera_autofocus","name":"Camera Autofocus [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.9.0-20251005","type":"add-on","archive_size":5307,"archive_hash":"sha256:56752e1d4365f09bf9ce871f8d1c41fc499b943f794913698b96878065f09989","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0bf968a5-802c-48af-8350-05afbcc19ff8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Vixymiles","tags":["camera","autofocus","dof","focus"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2b81f79c-ab9d-4d7c-8181-cb4236963e5a/","schema_version":"1.0.0"},{"id":"camera_director_pro","name":"Camera Director Pro [Before: $4.49, Now: $3.82]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":32145,"archive_hash":"sha256:50119c301834ae33a304447005d11da04aca913722e4ff6a05020a028cc501ce","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a1dbe7b6-312d-417f-906b-ca40df8e1560/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.82","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["Camera","Animation","Scene","Optimization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d807b46e-842f-4a7d-8f83-773d73ecaa94/","schema_version":"1.0.0"},{"id":"camera_orbit_render","name":"Camera Orbit Render [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":10074,"archive_hash":"sha256:684a165b077372fe487504ac7314ff822817b24193fe0be962c8333bb4990682","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d7a8f513-be82-48b4-83f3-35c878b5d128/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["3dview","camera","orbit","render","product","cursor","objects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/69fdf172-290b-4b86-8b48-0c06bc312be9/","schema_version":"1.0.0"},{"id":"camera_preview","name":"Camera Preview [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.5.3","type":"add-on","archive_size":38959,"archive_hash":"sha256:aeb2eb83fe7690228387c899c8d25e8e3135e15fcaecb86bd8e2236bfc08d6bf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c7ee8ddf-3aee-440d-9148-a7807360aa6e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["preview","camera","3dviewport","viewport_preview","camera_preview","viewport_overlay","camera_addon","camera_view"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c4e22853-8e2f-4895-a813-390c1289a4b0/","schema_version":"1.0.0"},{"id":"camera_render_settings","name":"Camera Render Settings - Settings per camera! [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9056,"archive_hash":"sha256:eb1b21ea9778e55cd6e341aeb92473d301e3655bb2a0f10374d16f48dce6b771","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/15be96bb-fe63-4ef8-b6eb-108ee1a18bf1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["camera","render","rendering","settings"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/81384cea-a973-4bcf-879c-4289acbecac7/","schema_version":"1.0.0"},{"id":"camera_switcher_pro","name":"Camera Switcher Pro [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":13521,"archive_hash":"sha256:5c1e20ea372426f7299a477dc73f08bd44e7d2504ddfc47ffea36ee8bacec14a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/144b63b2-da09-4dba-a23b-f44a3bcf5515/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["camera","animation","shaking","3danimation","viewport","addons","tools","3dcameratools","switchingcameras","cameras"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/035556c6-4189-45dc-9249-be5558d0c54e/","schema_version":"1.0.0"},{"id":"car_rigger_v1","name":"Car Rigger [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1803530,"archive_hash":"sha256:aede98204f16af8773b3230007b1e002e12906b6cb99d8ccc38adf50fe6f53f2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0d9bbe47-7189-460b-85e1-71aec35d524e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["blender","rig","rigging","rigger","car","truck","vehicle","animation","4x4","autorig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ae20ae9a-4004-4920-8daf-c69ad0a1c0aa/","schema_version":"1.0.0"},{"id":"cgp_editor_switch","name":"CGP: Editor Switch [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.6.2","type":"add-on","archive_size":31881,"archive_hash":"sha256:be48e1779b44df451e744e99c2008526c7685124ef7617e4cc88bc82ffe50b88","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/23b6989d-84f3-4018-a0d7-2fe6e8fc9555/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Chaitanya Garg","tags":["editors","nodes","compisitor","faster","workflow","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/266ba176-1a93-49b2-888b-2af27b8304f3/","schema_version":"1.0.0"},{"id":"cgp_super_z","name":"Cgp: Super Z [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":23262,"archive_hash":"sha256:eb2fd1e49c3ef09eb2ef931671ee5529b55510c9b1fea4d846fa7f41023f9dd7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8a3b051c-c2a9-4301-97ca-77906d16b6f2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Chaitanya Garg","tags":["shading","faster","worklow","viewport","super","z","materials","screen","overlays","wireframe"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dc9d076e-b83a-4132-b48c-03a863c17e7a/","schema_version":"1.0.0"},{"id":"chain_generator","name":"Chain Generator [Before: $26.00, Now: $22.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":16909104,"archive_hash":"sha256:038d7bcb0ac96b490ab2f97d1a4d06be5e0d1e07903fc40bcd17fdc487ab5cc9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1131e3b7-e751-41db-9727-a9286b9ce02d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.10","blender_version_min":"4.2.0","maintainer":"Liryc Creative Design Studio","tags":["fashion","metallic","accessory","art","chain","geometrynode","animation","modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/323235cb-5286-42b0-85eb-d36eb388674a/","schema_version":"1.0.0"},{"id":"cid","name":"CID [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":22352,"archive_hash":"sha256:826b68d462541991755bf30491319ce46059185838f22098774171e897ccf25e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ff94167b-9038-46d9-9015-033870cf6daa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"Parametr Studio","tags":["color","id","element","channel","mask","pass","colour","postproduction","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aeb02b02-f395-4310-a629-6a864b3c4a6c/","schema_version":"1.0.0"},{"id":"cinespline","name":"CineSpline – Cinematic Camera Rig for Blender [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":70651,"archive_hash":"sha256:a3760b42bc393b1bc519ccfa93dc4a8cca340b48ba8cfe552b4f5aa3585d0722","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9c9e5311-af14-4e01-90d2-8f8b3a31918c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Mazen Lawand","tags":["camera","cinematic","animation","storytelling","motion","timeline","morph"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cc20ab37-417f-4a5a-ba54-0a74f46fdff8/","schema_version":"1.0.0"},{"id":"clean_addons","name":"Clean Addons [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"0.2.1","type":"add-on","archive_size":1501,"archive_hash":"sha256:4a9e91da91039e184f87e65411130cef1f621b9d40d7ca0d30114e0f98c2966a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a1b50628-4588-4cba-b82e-c1cee2dc90a4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Addons","Interface","Management","Toggle","Panel","Preferences","Customize","Tools","Enable","Disable"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0462ad01-9d76-4cdf-80cd-d408df81b69d/","schema_version":"1.0.0"},{"id":"cleaner_ps","name":"Cleaner [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":2818,"archive_hash":"sha256:ccc8d13da56ecca03a61b904561135e6197ccb5da32292cb20dcf5cd126ef2f1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/81217f29-9bb3-4cf5-abb3-789cdc86990c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"Parametr Studio","tags":["cleaner","pure","purge","topology","modeling","optimize","scene","cleanup","materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/99558ea3-aa07-4857-b623-f636dfbc6179/","schema_version":"1.0.0"},{"id":"clippy","name":"Clippy [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4360,"archive_hash":"sha256:983e222541b1c79a60e5d98c7d03667322ddbc60217caf299008f15d8829e8c8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7ea35ee2-12d7-4e70-931c-b96d7bb2809c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["ux","ui","camera","presets","viewport","clipping","user","interface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14658df6-0976-4e12-8bef-5496b444c437/","schema_version":"1.0.0"},{"id":"clip_speed","name":"Clip Speed [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2346,"archive_hash":"sha256:4b0b1cc4ffc72ef8935b2158641226855e4bfb02f642cfe462350008fd5290ef","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/57c36e54-5ad0-4da7-8624-13ab4e53fd96/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Sequencer","Speed","Duration","Playback","Video","Editor","Time","Clip","Reverse","Effect"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/161371d5-eb46-4252-b994-b74517b6e336/","schema_version":"1.0.0"},{"id":"cloth_collision_visualizer","name":"Cloth Collision Visualizer [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"4.0.0","type":"add-on","archive_size":5527,"archive_hash":"sha256:e7ac994e09d05b5a2ee7d642807dd031d24255af9574b55e384971bba6995f98","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ac45edb8-1e56-4afd-a680-81169b2fddfc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"3DFIGURES rian","tags":["Cloth","Physics","collision","Viewport","simulation","visualizer","debugging","selfcollision","realtime"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bd8326c9-879d-4e41-a462-12dcdb0ce6c3/","schema_version":"1.0.0"},{"id":"code_completer","name":"Code Completer [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":56500,"archive_hash":"sha256:4b79233d8c715d61e47af89c3737a56236e9240a46018c5dfce62d8046e85228","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3b82d2d9-ce19-42fc-9b68-979061dbcef6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["Blender","python","plugin","load","operator","Text","Editor","Essentials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d0dd08e8-57ac-4fb3-85cd-f7c5e40f88b5/","schema_version":"1.0.0"},{"id":"collection_colorizer","name":"Collection colorizer - auto-assigning viewport colors to meshes in specified collections [Before: $0.99, Now: $0.84]","tagline":"FULL plan required - upgrade to download","version":"3.4.1","type":"add-on","archive_size":2128,"archive_hash":"sha256:d749ef1fba32ceb555db5b35e7b7089b64632e253e2f00e2792bc8d07f0b16f7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78d30dc9-9667-4559-b7fa-d789c89c690b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.84","blender_version_min":"4.2.0","maintainer":"Mesk911","tags":["color","viewport","collection","display","object","solid","tool","search","visibility","optimise"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aef8a90b-e532-4020-bda5-a0c62336b9f4/","schema_version":"1.0.0"},{"id":"collection_zones","name":"Collection Zones [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":47447,"archive_hash":"sha256:3b90e6f0b6311866ace35b299a5f8f1699e92dfc77a1eb167357b890981da4b4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/efaae058-471b-43ec-bcf2-f18b94310c57/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"5.0.0","maintainer":"Giorgi Samukashvili","tags":["collection","zones","sorting","layout","outliner","organization","automation","kitbashing","assist","hierarchy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b723716-c093-494a-ae03-9fe0c49f4c10/","schema_version":"1.0.0"},{"id":"collision_director_pro","name":"Collision Director Pro [Before: $6.49, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":14838,"archive_hash":"sha256:d8af64aba17b04dd0d233bb67aea6ab39fbcd6fc90b8ea8027c9ac3859cbf2b6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9424fb67-776b-4c97-b392-74d0c7e0ddb7/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["collision","gamedev"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/12025de8-850a-411d-a840-5ba053539670/","schema_version":"1.0.0"},{"id":"colormatrixel","name":"Colormatixel - Advanced Material & Color Management Add-On For Blender [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":166059,"archive_hash":"sha256:eda137854baf27d4e75648abde8dfae400aa0d03d16aa07482d587e8284cde36","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/116a189a-7787-4727-9b06-72490bc551d3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"4.2.0","maintainer":"Mohid Tahir","tags":["pixelart","color","gradient","randomization","colormatrixel","addon","blender","palette"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c31ef79f-2a05-41c6-9bad-963d95c51128/","schema_version":"1.0.0"},{"id":"compositor_mask","name":"Compositor Mask [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":3209,"archive_hash":"sha256:5c26e2e4fdd7fabebad3f5293d5c7a8ffdbf3b61ead6b59323a436ef08d79a1b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7acfb099-a2d4-4422-a939-7c6b723749d1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Jeslin Paul","tags":["Compositing","compositor_mask","mask","cryptomattee","layer_mask"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ea16769d-5c28-4c21-ba68-26171929bd1c/","schema_version":"1.0.0"},{"id":"Cool_Addons_Menu","name":"Cool Addons Menu [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":18495,"archive_hash":"sha256:7df4cf79cda76ee6dda75c26877773126c7ed510aec208b723de88500a6d2adc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/39899790-5926-4c33-9f62-ff6ff1e741bb/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"4.2.0","maintainer":"Kito Studio","tags":["blender","menu","ui","addons"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d9969b05-b35a-4e28-be9d-461e99a6c260/","schema_version":"1.0.0"},{"id":"Cool_Magic_Shader","name":"Cool Magic Shader [Before: $3.99, Now: $3.39]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":8831991,"archive_hash":"sha256:4852ac6c2dcea0e7e287f79628438b59fdc87a7c16f696386aae6ee215588d1c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1c7f6c35-ee04-40c1-8189-afe629444eae/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.39","blender_version_min":"4.2.0","maintainer":"Kito Studio","tags":["blender","shader","toon","style","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2ea6e2ac-96c8-4579-b998-7c833227dacd/","schema_version":"1.0.0"},{"id":"cracks_pro","name":"\"Cracks\" Damage addon 💥Windows, Linux, Mac approved [Before: $14.95, Now: $12.71]","tagline":"FULL plan required - upgrade to download","version":"5.2.2","type":"add-on","archive_size":12392962,"archive_hash":"sha256:82a0ff40df509898f687d5b31524686432783ff976132a31f99937c2c4ae231d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0f3aae67-2a39-47c0-82d6-a983945ed330/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.71","blender_version_min":"3.6.0","maintainer":"Mr Steve Lee","tags":["Damage","blender4","simulation","geometry","nodes","addon","2025","cracks","crack","modifier"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d303f488-d48d-407b-8615-ebf1a5e0883b/","schema_version":"1.0.0"},{"id":"creator_export_toolkit","name":"Creator Export Toolkit [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"0.1.2","type":"add-on","archive_size":5747,"archive_hash":"sha256:f9a8bbc437b9b66743679964f43f93af23e07f27bd870d7e84914c80437f3d7e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ffdf2b59-8ec2-450e-92ee-d394c1c66f0a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Yassine elyaakoub","tags":["blender","addon","export","fbx","glb","asset","cleanup","thumbnail","roblox","vrcha"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/702e4481-4b33-4588-a593-4c0b03241f33/","schema_version":"1.0.0"},{"id":"credit_manager_pro","name":"Credit Manager Pro [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":11780,"archive_hash":"sha256:bd8c24779461eba6babb5089b8d754b79ef3a0cf2c04b5131c4c2ade5adbea9c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/622b813a-5ea9-402c-9fab-25eea64ed096/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Vavrinec Foltan","tags":["Interface","3DView","AssetManagement","credit","manager","license","production","workflow","attribution","pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/de99702b-347b-4ce9-bc88-4998e9d37916/","schema_version":"1.0.0"},{"id":"cursor_history","name":"Cursor History [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1880,"archive_hash":"sha256:be9e467bd7b3356bc1235fa8bd1ef798760c5a9d194c620f901ec316e9ead34e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e17d7a63-a056-4445-8865-70d383d19285/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Cursor","Bookmark","Navigation","History","Undo","Location","Position","3DView","Tool","Scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ed7f83a4-147e-42f7-bc3c-8e6fd0721bc5/","schema_version":"1.0.0"},{"id":"custom_light","name":"Custom Lights V2 [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.1.5","type":"add-on","archive_size":200094,"archive_hash":"sha256:fc3db31bb619eed9048c299878c280a657791860cf94987b4100278c652755bb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fe1be7d3-4283-4337-8f86-60268bb5e4ee/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Đức Mạnh Huỳnh","tags":["Lighting","product","softbox"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8ee2c9f9-4f18-49d7-b5d0-f7b70e8c4e22/","schema_version":"1.0.0"},{"id":"cut_and_wrap","name":"Cut & Wrap (One Click Image To Cutout And Shrinkwrap) [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":14282,"archive_hash":"sha256:66848a0091fb86b52516cb5c6ef7d8670998c5d2162957c806ff2c9ffdbd5209","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/27651c4b-223b-4ff1-b731-fd453565c458/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Bala Murugan","tags":["blender","addon","image","cutout","imagetocutout","oneclickimagetocutout","cutandwrap","emission","alpha"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3600d73e-4bb8-4742-888e-4cde99610da0/","schema_version":"1.0.0"},{"id":"dae_exporter","name":"DAE (Collada) Exporter (Blender 5.0+ Compatible) [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":395378,"archive_hash":"sha256:bbefa64d4240f963f3d2b743d1f67754414cad8fe1556e1923c49acc3621d353","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/926dc1f4-c0e3-4862-be23-6b7aa08040ee/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.0.0","maintainer":"The Smart King","tags":["3DView","sketchup","export","dae","collada"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c2f30c32-8f22-422b-bbf4-7637b3b383d1/","schema_version":"1.0.0"},{"id":"dae_import","name":"DAE Importer for Blender 5.0+ (COLLADA Restore) [Before: $11.25, Now: $9.56]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9801,"archive_hash":"sha256:d58e2539454969c9490afa8d38a90defef9a549863d38083b136bc9efc8aa246","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/569e678d-5a8c-45ad-80db-9f0cedfce5d2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.56","blender_version_min":"4.0.0","maintainer":"The Smart King","tags":["3DView","dae","dae_import","blender_dae_import","collada_import","dae_restore","sketchup_to_blender","dae_to_blender","dae_collada_import"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/92fb0bcc-f2d1-4c18-814c-1f2ef721526d/","schema_version":"1.0.0"},{"id":"daexport","name":"DaeXport | One-click DAE (Collada) export [Before: $10.99, Now: $9.34]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":30036,"archive_hash":"sha256:7046dddcfa457e38907929879ebbe20a93b295f56527cf4cc6b78dc4c944c966","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4d75ca6-fb54-424f-9f79-10fdbd817ad8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.34","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["Baking","GameEngine"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e5652919-6e8c-4d24-aeb5-cf64403e2455/","schema_version":"1.0.0"},{"id":"damtools","name":"damTools [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.6.955","type":"add-on","archive_size":1246131,"archive_hash":"sha256:2da8052b74e032b9b06600a7c2af845c937dc9b9292ed2d2cf92818ca2b7362e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1984951e-bb76-436b-be20-b610d9f27bf2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"SynrgStudio","tags":["hardsurface","tools","toolkit","suite","modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/924db361-635f-4c0c-a9d9-78e907b0e56b/","schema_version":"1.0.0"},{"id":"decal_creator_pro","name":"Decal Creator Pro - One-Click Decals & Normal Stamps from Mesh [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":170084,"archive_hash":"sha256:400cfa84c860cbb746cac72d7693f651cc4c6a14d09032076b2ade2a7beb462c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6992b786-cd58-466b-83c5-56c58dfb8417/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"H3D","tags":["decal","export","meshtoimage","decalcreator","normalmap","oneclick"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e3dcfcad-3efa-468a-9f27-ddf695e12313/","schema_version":"1.0.0"},{"id":"dem_blender","name":"DEM Blender – Easy Animation [Before: $39.00, Now: $33.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":103506,"archive_hash":"sha256:8762d3865db1823a84159c18cbf2c74bff0bae077362a62bdb1baa1a632677f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/326256ac-562b-49cd-9d67-ab40e2f7110e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"33.15","blender_version_min":"4.5.0","maintainer":"Giuliano Dasky","tags":["Animation","keyframes","Timeline","Motion","3D","Tools","Workflow","Layers","Spline","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1933a851-cf9f-49e0-854c-1489b3a1db6c/","schema_version":"1.0.0"},{"id":"dimensions_and_lines","name":"Dimensions and Lines [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":109377,"archive_hash":"sha256:4c240fa5d716732363b067c72696c334aca67f5f7885b4cc5ee326c2e231f9bb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d7bbda8f-bcb3-446e-a7ef-f3ce6a2d7e4a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["dimensions","cad","dimension","lines","draw","drawing","technical","blueprint","paper","print"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a2846c5c-f395-4bfe-aaca-a53cc9ac6400/","schema_version":"1.0.0"},{"id":"dovetail_key","name":"Dovetail Key [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.13.2","type":"add-on","archive_size":8390,"archive_hash":"sha256:3d4a06e308392ccdffb9bfd0783b52521e6a3b979cea9c037c209c4ea722879d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/200aedb0-216f-4a30-afbb-1202ffc9d361/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Mesh","Modeling","3dprint","dovetail","joint"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5329ff47-74d3-4db3-ad1b-a696e9849c0b/","schema_version":"1.0.0"},{"id":"drh_addons_audit","name":"DRH - Add-ons Audit [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":88690,"archive_hash":"sha256:b21fe34d058611bc6bc306323e46fb212b838033f0b44e3c86dd275aa25a6ad4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4dd9a00d-77f3-4832-a7ee-02a9e955c905/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Paco Salas","tags":["addons","audit","snapshot","reporting","maintenance","packaging","troubleshooting","extensions","pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4436e85f-073d-4eb2-8271-d58648303a3f/","schema_version":"1.0.0"},{"id":"drh_color_ramp_studio","name":"DRH - Color Ramp Studio [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":148730,"archive_hash":"sha256:3a823a0772546fb37338b3606861828c10ac53857986a68b717ce4c426c08660","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/26d3b56d-f2ac-402b-9b5b-ccb8515597dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Paco Salas","tags":["colorramp","gradient","palette","nodes","shader","geometrynodes","compositor","workflow","utility","ramp"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45ca1690-0ca4-4265-8a35-8b0d69f5dbb6/","schema_version":"1.0.0"},{"id":"drh_dual_units","name":"DRH - Dual Units [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":38935,"archive_hash":"sha256:7ddf08c4bb6c857cb5c4711bdf8f9b2207ac7b9bbd03c6324f08b911db421896","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4b229646-35a8-4447-a72b-829ae5ba0fd0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Paco Salas","tags":["3DView","Updated","Tags","units","transform","npanel","measurement","metric","imperial","dimensions"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4c29e51b-2fc4-4b44-86f4-20139299b434/","schema_version":"1.0.0"},{"id":"lorenzofranciosi_droplets_gen","name":"Droplets GENERATOR [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":5318931,"archive_hash":"sha256:11bfc221585d101bb52e1b4918ddc8535575fd95fec7ccc2d74a5c50541d197c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/98cbe92d-132c-4dc9-8dbb-d64596f4dff4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"5.0.0","blender_version_max":"5.9.0","maintainer":"Lorenzo Franciosi","tags":["GeometryNodes","Object","FX","Drops","Droplets","Wet","Water"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b242f91c-884f-4a7f-901c-20373ed1910a/","schema_version":"1.0.0"},{"id":"dxf_import_export","name":"DXF Import Export [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":16203551,"archive_hash":"sha256:fd478752118247bca42a485638370ccb1e259bc7a3a0adb3950c43c7cfbe49cb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/43bec026-0fa3-4bdf-9ced-1f47d0456330/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","DXF","CAD","Survey","construction","drafting","geodetic","underlay","import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1a9d77d5-a9a5-4b03-970c-93897884b2bd/","schema_version":"1.0.0"},{"id":"dynamic_lighting_setup_pro","name":"Dynamic Light Setup Pro [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":12768,"archive_hash":"sha256:c0c6990da08608037f8305dccf3d37f9e1ff8f01c20aab699ba3907a171f59cc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fc172129-8e49-4e31-b7dc-e8b022cf3559/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["lighting","3dlighting","lightingpreset","preset","render","renderpreset","dynamiclighting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/79bb28ab-94b2-450c-88d6-3440587d4946/","schema_version":"1.0.0"},{"id":"esm_sim","name":"Earth-Sun-Moon Simulator [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"0.8.0","type":"add-on","archive_size":75988305,"archive_hash":"sha256:213ba1a25aeb6e3e4cd54127a73b6cac17ec6bcf64f717f20bb0d69ad993514c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dce38c48-fc7d-4fa6-9be1-c3e40024b706/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Animation","3DView","education","Solareclipse","astronomy","stem","earthorbit","moonorbit","solarsystem","simulator"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a7ebdb0b-8828-41ee-9c4c-5dfb564fc14e/","schema_version":"1.0.0"},{"id":"easy_bake","name":"Easy Bake + Batch Baking [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":23263,"archive_hash":"sha256:6d80600a51aabfd83df414de15917846092dd8fc182ef727a35f702c167ec8ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/aa60f6fc-5d15-4a04-b86a-15f1736c250f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Render","UV","Bake","Material","Blender3D","TextureBaking","EasyBake","GameDev","PBRWorkflow","3DArtist"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c379e9e-95f2-4b1e-8eab-90739fd1e70e/","schema_version":"1.0.0"},{"id":"easy_batch_render","name":"Easy Batch Render [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":6875,"archive_hash":"sha256:15e7ff505530560cfdb9177046e0d8473413f8a80777e46f4ff50bcbc6ad0142","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a426042c-2fcd-4829-a53e-7527987b17fd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Vaishakh Vinod","tags":["Render","Pipeline","Workflow","Batch","Automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/03b93d66-510b-441b-a0d3-14b5935f5e32/","schema_version":"1.0.0"},{"id":"easycameramatcher","name":"Easy Camera Matcher [Before: $12.50, Now: $10.62]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":505906,"archive_hash":"sha256:ec28a2e76724965042c0ad063bb79d9e9d9215bc73b2dda63497f6dcf1b71cdb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f0a38b54-e9ee-4f98-b103-905e5391cf07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.62","blender_version_min":"4.3.0","maintainer":"Sander Wit","tags":["Camera","Matching","Lens","Calibration","Perspective","Tracking","VFX","fSpy","plotter","plotting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/70090236-772f-4576-8a24-187a2ff3f31e/","schema_version":"1.0.0"},{"id":"texture_pro_paint","name":"Easy Texture Paint - One-Click UV, Paint Modes & AO Shadows [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.6.5","type":"add-on","archive_size":4309,"archive_hash":"sha256:e95b13538c5906c23d4b616b6ca757cc7e29e14c6a57827fbc45406c7674d770","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/400c4632-1a26-414d-b4b6-2b78800f58c1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Paint","Texture","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dc893ce9-b31f-4def-acee-641d73ae8579/","schema_version":"1.0.0"},{"id":"easy_transfer","name":"Easy Transfer [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2083,"archive_hash":"sha256:b0b2cc453e1195bb49f617e39b0d21193dc6c597cdcc367fc49424d4e09663a0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/59cc0c05-510e-431e-9ef9-e637b4832030/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Transfer","Modifiers","Constraints","Materials","Animation","Mesh","Copy","Synchronize","Attributes","Context"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3ff54d70-d514-4eea-8d58-062f5318d060/","schema_version":"1.0.0"},{"id":"EC_Light","name":"ECLight - The one click dual and triple lighting solution [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":13668,"archive_hash":"sha256:9f7ecbf98f690f5571627cb80f8794210b6606ed20686f821a21946cc9c25c6f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b8760f19-3e3d-41cb-9522-9a6e005997f2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Abishek Raja","tags":["light","easylighting","Cinematic","Neon","Cyberpunk"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c13e5d41-2380-42a2-806a-1b287dd221cc/","schema_version":"1.0.0"},{"id":"editor_swap","name":"Editor Swap [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.3.1","type":"add-on","archive_size":18012,"archive_hash":"sha256:7d3157c242859fc7aee71d91adfbf03207020ebf8be4c43f3a001425e088edc6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2ca8e842-6368-4c58-b49b-515ac48b7b22/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["interface","ui","ux","swap","editors","area","customization","user"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cf07859b-366d-493c-9128-010b74fcf874/","schema_version":"1.0.0"},{"id":"enable_disable_in_render","name":"Enable / Disable in Render [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1464,"archive_hash":"sha256:791964a72a51067d429f9b17bb6287798ba5012e966f7ebb1234f14558fbfcee","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bc076c54-a76c-41d4-99a1-fe5db4c998dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Collection","Render","Toggle","Objects","Visibility","Keyframe","Scene","Control","Animation","Efficiency"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a993b9b8-37ce-4b99-8371-83f0d161c969/","schema_version":"1.0.0"},{"id":"essentials_addon","name":"Essentials [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":42799,"archive_hash":"sha256:9d76e27ff1a5f5b160780a537af067d4661418258e7ef20065e141b259f552d0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e60ed199-9239-4c4d-8924-b9aa96402314/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Jackson Zheng","tags":["essentials","align_camera","auto_highlight","camera_essentials","surface_snap","camera_perspective_reset","drop_snap","gravity_snap","outliner_visibility_sync"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f34a339-e478-4d6c-b328-9be1daa65f67/","schema_version":"1.0.0"},{"id":"essential_tools","name":"Essential Tools - Ultimate Blender Workflow Utility Addon [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":8386,"archive_hash":"sha256:82f74b1ca38610307c632f973a30b46d1b657debd85c64db871d01b69c98ad74","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/56c9a4f9-8a62-420b-9434-90fe387ae942/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"3.0.0","maintainer":"The Smart King","tags":["Mesh","blender","blender","workflow","batch","booster","origin","essential","batchrename"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/80aefc7f-9502-4e57-8cb9-6a3e3ec089f3/","schema_version":"1.0.0"},{"id":"export_director_pro","name":"Export Director Pro [Before: $6.49, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":25356,"archive_hash":"sha256:e644eb8adff6b35fda1e89c2cb8b463ce4f1b7d0cbfab0714b807a28330f3191","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c119ec48-fb8f-4a72-b864-73d847628183/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["export","gamedev"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/35d745dc-cf9d-4d51-8be3-139c69351042/","schema_version":"1.0.0"},{"id":"export_each","name":"Export Each - Batch Export Collections / Object with One Click [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":13844,"archive_hash":"sha256:39cd568a69a765b3962796e66f0491d700db90cb5542570084e69568e8df2ed5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/873e9048-1759-4fb3-9653-42a025deface/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Pipeline","AssetManagement"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f2dc078b-d6ac-4cb3-a750-4d6c1a834ac9/","schema_version":"1.0.0"},{"id":"face_layers","name":"Face Layers v1.5 Add-on [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":45390,"archive_hash":"sha256:501b57c7dd8cd9549b3d93cce966fbc3effccec925b75e19168274c8bb0ef088","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/481d4b7e-3ffd-4157-a38d-1dc26763a075/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["face","layers","facelayers","mesh","faces","addon","extension","selections","meshfaces","matetials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8996ef60-23df-44c7-98f0-7161c54ba379/","schema_version":"1.0.0"},{"id":"face_swapper","name":"Face Swapper 2.0 [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":6571,"archive_hash":"sha256:630a58f6b0aaceb22b647de1997b13ab887c3dfb98b2e4e826f6846c5301e3a2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/07d93e51-07e9-4499-a432-0cec88ec9bc4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.0.0","maintainer":"Georges Dahdouh","tags":["Animation","Material","2D","image","texture","keyframing","character","expressions","facial","face"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/16562180-0830-4138-9d70-a9db074c493e/","schema_version":"1.0.0"},{"id":"facial_tools","name":"Facial Tools [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1655706,"archive_hash":"sha256:154d3764584593e419e06789e9a7aee4a9916a83c3d65e2469fb4387cc3cf682","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb138716-7e6b-4545-9045-768caa5c7aad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"5.0.0","maintainer":"Stellart","tags":["facialrig","autorig","animation","facial","rig","rigging","rigger","export","bind","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0c790066-7eb7-477a-80d9-1296f8fd3ca0/","schema_version":"1.0.0"},{"id":"falcon_cam","name":"Falconcam [Before: $8.98, Now: $7.63]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1022399,"archive_hash":"sha256:5d655a371dba853226c36680e7e9b15f917bb4c2f8e223138cf8c7502911dab1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/594352e2-91bc-4a7c-9e4e-2856ca0b7f37/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.63","blender_version_min":"4.2.0","maintainer":"Liryc Creative Design Studio","tags":["camera","cameraanimation","animation","auto_camera","movie","cameraaddon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/74f64128-e395-4c0a-ad4d-2cf86cdd0eee/","schema_version":"1.0.0"},{"id":"fast_screenshot","name":"Fast Screenshot [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.8.0","type":"add-on","archive_size":29599,"archive_hash":"sha256:53c1f5ca9ea2f7f7c17a8ab85d9710eef21ca451825f56e06f9055fbaa0b5047","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c592450-778c-4c2d-b6e0-751782e55a0c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Fast","Screenshot","quicksc","fastscreenshot","quickcapture","viewportscreenshot"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c9bdda64-41ec-468b-91e2-9bf877284f54/","schema_version":"1.0.0"},{"id":"final_topology_pro","name":"Final Topology for CAD professionals [Before: $99.00, Now: $84.15]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":646630,"archive_hash":"sha256:e8383b08b908f263d0aae7acda685acf991ceeeb65d65682b9f9bae7147ddd3f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c244bea6-3f65-4951-832d-42a8fb5410a4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"84.15","blender_version_min":"2.92.0","maintainer":"Blendkit Community","tags":["System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/69f95fba-5b1d-48c7-87ad-d8093b24436b/","schema_version":"1.0.0"},{"id":"alexdepario_find_objects","name":"Find Objects [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2888,"archive_hash":"sha256:2f2384e5a2f3c1f45829c43df6cff9b34d9867f0de677b5f9f1b972f03d62376","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6a896900-e55d-465e-b248-917ae241c673/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["find","search","object","management","interface","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7cd259e6-5a4c-485d-8095-da2d56c56e79/","schema_version":"1.0.0"},{"id":"fire_maze","name":"FireMaze [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"3.3.0","type":"add-on","archive_size":119891,"archive_hash":"sha256:e71f6535f3a51ab8062baf61d043ec91cff7481eecdadde838f34bbc96dc4da1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1a5d42c-86f2-483e-a4ee-86bb1f90da5f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"FireRat","tags":["Maze"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/195283e4-b066-4d52-a01d-d6bcd5d0d097/","schema_version":"1.0.0"},{"id":"fixamo2","name":"FIXAMO 2 - Combine , Loop, Create [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":5033,"archive_hash":"sha256:1d3192b6ac527e5ee2a86dc7fd938e0e370b786cca2d492cce507a2a437ede5f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0bbe493a-8c37-435f-b14e-1cba86d86c54/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Kohdy mcintyre","tags":["Animation","Addon","Bossposes","Tools","New","Mixamo"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f4fd714-0c97-401f-bcea-bbb42ab9fbdd/","schema_version":"1.0.0"},{"id":"FlowProManager","name":"Flow5 - The Ultimate Asset Tool [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"5.0.0","type":"add-on","archive_size":25884218,"archive_hash":"sha256:bb89d1998a97e7ccbdfc79a045ea7ea86e6e9ff328b27d7a79aecc69ae24153f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/266f9e83-b74b-4242-940a-b446bc513f2e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.3.0","maintainer":"polyspaace","tags":["assets","flow","workflow","scatter","asset_browser","asset_library","polyspaace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/542f1515-6422-4da3-bf4d-05803f890e1b/","schema_version":"1.0.0"},{"id":"fog_planes","name":"Fog Planes Addon [Before: $35.00, Now: $29.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":198697240,"archive_hash":"sha256:8fa4132df3fd070aa5a3b58a8a0aebca811315a8f0da5a22ff106619780c79bb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4a0b950e-d206-49f4-b27b-23557df0e3b5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"29.75","blender_version_min":"4.2.0","maintainer":"Besa Art","tags":["fog","haze","environment","nature","atmosphere","mist","moody"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2cd70353-b642-43fb-9d1e-0928ecc16a20/","schema_version":"1.0.0"},{"id":"hotkeyboard_azerty","name":"French Keyboard Shortcuts - HotkeyBoard AZERTY [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":44112,"archive_hash":"sha256:62071024eaa41b615793d482d62813f100c2a2a54271fac6db7891c0f06eca11","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5e2b46f7-a888-40ff-b09b-e93041de9bc0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Interface","UserInterface","Hotkeys","Keyboard","AZERTY","French"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/105400e9-bac4-46d4-8c08-616dbf54f334/","schema_version":"1.0.0"},{"id":"frosting","name":"Frosting [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":44908,"archive_hash":"sha256:bb914e82bc2228ef36e862e437aa40eb83d4b6ecdc68c6fe6a1176dd64e9c090","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3f1186c6-6dde-4a5b-9f62-c562e605bbfa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","blender_version_max":"5.2.0","maintainer":"Cloudy Sky","tags":["physics","scatter","simulation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14c8c8d0-a3f4-402d-8e7f-97df5aab476c/","schema_version":"1.0.0"},{"id":"fsx3d_blueprint_tool","name":"FSX3D Blueprint Tool [Before: $18.99, Now: $16.14]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":465117,"archive_hash":"sha256:2a70844d12b9de6ae5803f535ee2c77935a67e33df14d59bee1b6732f0e6fa36","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e4a7a85-7dc8-4ce0-a149-6217dc659b4b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.14","blender_version_min":"4.2.0","maintainer":"Eric Bauduin","tags":["Blender","Blueprint","Vehicle","Car","Modeling","UV","Mapping","Game","Low","Poly"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/152e3275-74ed-44dc-aa4e-6eac6d7be8ac/","schema_version":"1.0.0"},{"id":"fusion","name":"Fusion: Extension For Blender [Before: $59.99, Now: $50.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":24640,"archive_hash":"sha256:57beb6af17e7d10f8331d39e8e75b7f678cdd182ae0342d628c24e483e8b1d26","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/598e9407-781e-4079-9ff6-7643b2ba0d1a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"50.99","blender_version_min":"5.0.0","maintainer":"Egret Studios","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a812dae2-08e7-47f6-b981-878077f5780c/","schema_version":"1.0.0"},{"id":"fz_material_kit","name":"F.Z. Material Kit – Ultimate Material Manager For Blender [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":3828,"archive_hash":"sha256:8f4e5c94a8adf3ee9e104b3030c60f797f7d7365d767cbec08f8e56496b830de","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0da4c36f-dcc9-49f3-a916-97dcfe1f9765/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.4.0","blender_version_max":"5.9.9","maintainer":"F.Z Studio","tags":["Material","Management","Texture","Import","Viewport","Shading","PBR","Workflow","Shader","Tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8bb6fcca-2914-468e-9eb9-d7a2ed30628d/","schema_version":"1.0.0"},{"id":"garlandery","name":"Garlandery (Addon) v2.3 | Quick hanging garlands | Connect objects and vertices together [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.3.0","type":"add-on","archive_size":5658312,"archive_hash":"sha256:373a4e01e4a65587a73ad699e43663a1d6ee511947f364f3a4a5042d173f6d60","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4b7aa647-53be-46df-a59b-558d2cacb625/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["addon","connect","vertices","hanging","garland","wrapping","fir","ivy","fairy","particles"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/acc1fd8e-e8a8-465e-864d-0c6a09c32077/","schema_version":"1.0.0"},{"id":"GLBOptimizer","name":"GLB Optmizer [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"0.0.5","type":"add-on","archive_size":192462,"archive_hash":"sha256:3d43e5fd646576f31643e616c0712c5d227d7ad38a3902df011f1c68fc104748","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cb11a1ea-65a9-4678-a7c2-79ca4f6c8e4e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Lorenz Wieseke","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a9c5e7a1-c70f-45a4-8183-d683aa5560e7/","schema_version":"1.0.0"},{"id":"glbxport","name":"glbXport | One-click GLB export [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":29212,"archive_hash":"sha256:1740ab04111b0aeb6289e20e8e2e1d2bc65605640aa6a5df2305e6f5f42f8818","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb42426d-21d2-4264-b6d8-e415e01d430a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["Baking","GameEngine","AR","GLB","Export","Texture","WebAR"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b653b4f-5424-4cb1-9ed5-0067daafe581/","schema_version":"1.0.0"},{"id":"anime_shader_studio","name":"GOE Anime Shader Studio [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"3.3.1","type":"add-on","archive_size":2235826,"archive_hash":"sha256:2b01c90a83c694134090684c555be3334bbab3fac03ed7b85ccd5254ad40193e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b46b4ae5-c5b8-4969-ba08-0533f25f8f83/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.1.0","blender_version_max":"5.9.0","maintainer":"DanilGoE Goe","tags":["Mesh","Modeling","anime","toon","shader","cel","shading","manga","shader","materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/33aa65d8-331c-4c98-a5af-7ae7f379660d/","schema_version":"1.0.0"},{"id":"body_type_generator_pro","name":"GOE Body Type Generator Pro [Before: $29.99, Now: $25.49]","tagline":"FULL plan required - upgrade to download","version":"3.0.3","type":"add-on","archive_size":79093,"archive_hash":"sha256:cab65c3f09bfcba0663c70b8e895f6466223784ceb69d3cf48ef4ec9f46b61f0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f6978ebf-7532-49de-9426-3b60a9ee2368/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.49","blender_version_min":"4.0.0","maintainer":"DanilGoE Goe","tags":["Mesh","Rigging","Animation","body","generator","character","creator","shape","keys","body"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a9f4f3d2-e0a9-407b-ae2b-985ac28ff7e7/","schema_version":"1.0.0"},{"id":"goe_jiggle_studio_adult","name":"GOE Jiggle Studio: Body Physics [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":38237,"archive_hash":"sha256:18cfb23987127959a342b242a8d56b6582382c3bd8f1d544510e2dba7ec11d3b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/81192bdf-5d33-48f3-a4aa-cc7107d1d43d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"3.6.0","maintainer":"DanilGoE Goe","tags":["Animation","Rigging","jiggle","physics","soft","body","cloth","simulation","secondary","motion"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f1ed260b-ec35-42a6-99a7-f8a9efa86c75/","schema_version":"1.0.0"},{"id":"portfolio_creator_pro","name":"GOE Portfolio Creator Pro [Before: $39.99, Now: $33.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":60393,"archive_hash":"sha256:f1aab33d72a97e645f795c499f3a958e3f719e97434c4832d6a1460e4f44805a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c00cdd22-6755-4c81-be38-8a557210cc60/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"33.99","blender_version_min":"4.2.0","maintainer":"DanilGoE Goe","tags":["Render","Camera","Lighting","portfolio","render","automation","studio","lighting","turntable"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9fa7c636-5276-4fad-8324-9fa437ba47b5/","schema_version":"1.0.0"},{"id":"shapekey_doctor_pro","name":"GOE Shape Key Doctor Pro [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":24098,"archive_hash":"sha256:ecc8d24acb316b900bb12628d30396176d1b8d5b003c7b238aa7ea408e95690f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f3fb4af2-e4d4-4aec-b49d-53c2270b6435/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"3.2.0","maintainer":"DanilGoE Goe","tags":["Mesh","Rigging","shape","keys","blendshapes","morph","targets","repair","transfer","mirror"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a7712c16-600c-4165-ad9e-63a165be51e8/","schema_version":"1.0.0"},{"id":"graphi","name":"Graphi [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":13816,"archive_hash":"sha256:3255ac67672bd68ef09dd22a1d0e67e1c55402a27c1c4710feb4569a0c1eae3f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/86af64b7-5820-47bd-af13-df1464479124/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["Animation","GraphEditor","Keyframes"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0b94a38b-1ad9-4c9d-888c-96ab43ed6a44/","schema_version":"1.0.0"},{"id":"Greaseliner","name":"Greaseliner [Before: $23.00, Now: $19.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":3377084,"archive_hash":"sha256:5f33f69cfe2fc7749e205abd4e84c7f46010d927f32c040763d566f6baa2bd94","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/919ec96c-8f8f-4ac7-8d8e-a7bd4c819c87/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"19.55","blender_version_min":"4.2.0","maintainer":"Kito Studio","tags":["blender","addon","outlines","greasepencil","stylized","toon","anime","blueprint"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1cc36d5a-82e3-48d4-a195-abc5d9f9549c/","schema_version":"1.0.0"},{"id":"Hatchliner","name":"Hatchliner [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":53789715,"archive_hash":"sha256:cb1cb3557c12f856e99e7b7b53de9c99d25327e720c24b4dd01c6f6fcedcf9eb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a4542fa7-ded6-40b8-90b9-aea923676312/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"5.1.0","maintainer":"Kito Studio","tags":["anime","hatching","style","npr","cellshading","preset","EEVEE","material","shader","node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e9c5c7f5-ccea-48b1-8b86-eb8c9b549b3c/","schema_version":"1.0.0"},{"id":"hedge_it","name":"Hedge It! [Before: $7.99, Now: $6.79]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11478819,"archive_hash":"sha256:e0c9a2a1686e7af794326772826984fc49997f9118bef2ad29df7fd58e804004","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/054f346f-e681-41e9-b85f-890addaa26b0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.79","blender_version_min":"4.2.0","maintainer":"Blender Bits","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1c3016b4-f975-48c2-b6b7-a28d3a5d20d2/","schema_version":"1.0.0"},{"id":"hidden_objects","name":"Hidden Object Manager [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.5","type":"add-on","archive_size":4247,"archive_hash":"sha256:13a22d85fcf61dee646bd011d7a99878667070cdb7b9e8137ad70eed2c9c3fa3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bb0682cc-5b60-469d-af99-9f523ec7fa7b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["3DView","Hidden","Object","Viewport","Animation","Tools","Addons","2026","Cheap","Functional"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/633e1b7f-01a9-41ff-93f3-573ea6a82469/","schema_version":"1.0.0"},{"id":"hollow_object","name":"Hollow Object Creator – Blender Add-on for Easy Hollowing & Cutouts [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3256,"archive_hash":"sha256:a5f443eae0fbcea81787b8237618c0a73b6e8678578c8a81ac4fc9d0b4b30e5c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ec6d3d81-7764-4fac-bf67-4f369f69caab/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["3d_modeling","3d_printing","boolean_operations","cutout","game_development","mesh_editing","procedural_modeling","quick_modeling","hollow_object","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1c3970c0-c0b0-41ca-9fb3-b27e2f3a3421/","schema_version":"1.0.0"},{"id":"hotkeyboard","name":"HotkeyBoard - All Blender Keyboard Shortcut Overlay [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":50182,"archive_hash":"sha256:a9b6ccf44294677f275adb4b504e9f562b1bf17eeb2fca48a799967ce6685ffe","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b30f43a6-2a9b-405c-b029-e6e46180005d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Interface","UserInterface","KeyboardShortcuts","Visualization","LearningTool","Education","Productivity","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7e838867-0ce1-4f38-9081-037c097fc723/","schema_version":"1.0.0"},{"id":"house_designer_AL","name":"House Designer (AL) — Procedural Building Generator. [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":22654,"archive_hash":"sha256:3a2f1b99a80ee5f03c4ff1e67f39eb9b6cb98ce82e3c4dd0fd6b8638fcc4d6b8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/01d0a001-2345-4b4a-bf7f-0f929874ca42/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.0.0","maintainer":"ANDRIY LIA$HKEVI$H","tags":["architecture","procedural","facade","urban","geometry_nodes","building_generator","city_builder"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aa8829b7-2059-4fe0-9f5a-468318daed3a/","schema_version":"1.0.0"},{"id":"hud_and_ui_elements","name":"HUD & UI Elements [Before: $18.98, Now: $16.13]","tagline":"FULL plan required - upgrade to download","version":"1.16.3","type":"add-on","archive_size":3054185,"archive_hash":"sha256:bc9b4cba6292a78bd51ab4d4c3b4fc2003d9a4300ac00259c960c71aed467526","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/11422bca-41d3-401c-9d50-59d2af96f91e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.13","blender_version_min":"2.81.0","maintainer":"N. Emmanuel","tags":["huduielements","hud","ui","fui","motion","design","Animation","Modeling","Mesh","AddMesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e01a622f-9495-4e9b-81f3-cba574349e1e/","schema_version":"1.0.0"},{"id":"ideagen","name":"Idea Gen [Before: $3.99, Now: $3.39]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":7498,"archive_hash":"sha256:195787a0aeb3237fa8ca14a73aded6c12d329b3f8c88318b7b2ba458209d8048","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8fe664e7-6966-4eaa-a6ca-eecc375b4a44/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.39","blender_version_min":"4.2.0","maintainer":"Ace Of 3D","tags":["ideagen","idea","generation","creative","concept","art","random","ideas","concepts"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6b03f814-3bb0-4442-80b2-f50e24e7e116/","schema_version":"1.0.0"},{"id":"imago_gif","name":"Imago Gif | Render And Import Gif Animations [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":78889498,"archive_hash":"sha256:bfdd9d71934e2fe77fe67245976ddf895aaee05f7618db9c0ef952486180cf48","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/53737df1-9a6c-4cc4-b628-4f06961ec2c3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Giambattista Von Nettesheim","tags":["gif","animation","blender","addon","rendering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/655a3cfa-ee24-432a-a34a-d2c1859d19b0/","schema_version":"1.0.0"},{"id":"inkto3d","name":"Inkto3D [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":6737,"archive_hash":"sha256:60c50ea7c6ca171a5c0c2e5fa70591b5e1436b9e9bf367133fa0d07ede30c2be","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f5a633f4-559b-45d3-82ca-4e152c6c74f3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"F.Z Studio","tags":["image","trace","imagetrace","imagetomesh","mesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ad75f77-de59-42f1-b371-f81a02e61fa7/","schema_version":"1.0.0"},{"id":"instantclean","name":"Instant Clean - The Ultimate Mesh Clean [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"2.2.3","type":"add-on","archive_size":125029,"archive_hash":"sha256:0ee941a43e27b95d0ae41d9f179c7b00bcf497c125392ef604e27bfd752c9d93","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ce53098e-071c-45de-849a-57938317534b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["mesh_clean","mesh","clean","print","manifold","cleanup"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/44c1aeac-bf6d-4c0a-a575-54b0466f25a2/","schema_version":"1.0.0"},{"id":"jigglegen","name":"JiggleGen [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.5","type":"add-on","archive_size":28952230,"archive_hash":"sha256:300b3ba9f8e40ef93c7e0a4b4d15e26589ba566eabfd2914ff8b2f183b84f7b5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cbdf07dd-1b8f-4ee7-bf67-b01dc686d599/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"pathnode","tags":["simulation","cloth","cage","generator","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/57d51658-1be8-4e1e-8210-e0b75c2a7341/","schema_version":"1.0.0"},{"id":"keyframe_decimator","name":"Keyframe Decimator [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":16383,"archive_hash":"sha256:edeade332c49b82882fb46ea8e42656c6765df317b574b0261fcdf852f72ee7d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1f35b35f-1f45-4437-8161-b0971400eb9d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Animation","Decimator","VFX","Keyframe","addon","optimize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/06cd9d46-6fc4-4bce-8a9a-9755b71f96dc/","schema_version":"1.0.0"},{"id":"knife_circle","name":"Knife Circle [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":36340,"archive_hash":"sha256:57ae3b0b9dbee06ac3ecbbd630beb3065e95862f0f4d5966176aad01895d0f38","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/075476a8-e82e-4ff2-b459-3b1e772091cc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["knife","knife_circle","knife_cut","knife_project","knife_tool","knife_polygon","knife_circular","knife_cut_through"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/71398fc7-49e8-4e42-b533-6c9941132c48/","schema_version":"1.0.0"},{"id":"landxml_import_export","name":"LandXML Import Export [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":21438,"archive_hash":"sha256:e498afbddd68d78eb73b0b4cbf95ab07db05d99d15f3f78daa81600fabf144bd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9b338025-8d27-447d-aa3b-25acc6673e25/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["Survey","CAD","coordinates","landxml","tin","breaklines","construction","geodesy","import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/39505adc-0694-4efe-a77f-d982d53bfb5e/","schema_version":"1.0.0"},{"id":"daexport_legacy","name":"Legacy DAE Export for Blender 5 [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"2.0.1","type":"add-on","archive_size":29090,"archive_hash":"sha256:8e40598f64128c7336754ba29bb2c3ff9515b9406cdf2b75f3c04cce253c95f2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7f96c5ae-1312-417b-9d3a-7cf33641616a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9253938a-d7de-4892-9831-832c2697e4f6/","schema_version":"1.0.0"},{"id":"letter_board_text_creator","name":"Letter board - Text creator [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":562941,"archive_hash":"sha256:8c12f39662866981da9dc9ec4b06b2e680ec069a62ba71f112d365a259838a59","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ea92700e-9cfb-4d6b-be72-e877ecab286e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["Blender","text","letter","thumbnail","mesh","object","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/22cc8f57-c605-4a4e-b537-6967e56d908f/","schema_version":"1.0.0"},{"id":"lightforge","name":"LightForge - Professional Studio Lighting System [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.4.22","type":"add-on","archive_size":22743109,"archive_hash":"sha256:f8aff9c92a1a5e06f06b57afd968f233c7302c95c6badf6df3ac581edb0c1faf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/35e39639-e571-4466-9ae6-31e3d75519e1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"John Cheluva","tags":["Light","Lighting","Addon","Studio","Productvisualization","Reflector","Gobo","HDRI","Photography"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ecb49b0-9be7-4b4c-8fd8-901bf7c8e655/","schema_version":"1.0.0"},{"id":"light_painter","name":"Light Painter [Before: $45.00, Now: $38.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":149404,"archive_hash":"sha256:49578f00c20b4263adfd81ee3f7032d3b682d8847f3d6a6d632688861c351d67","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/69119226-0d05-4ef8-a088-3a7b1d7ab106/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"38.25","blender_version_min":"3.6.0","maintainer":"ShaderError","tags":["lighting","Light","painting","light","texture","gobo","viewport","shadows"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/454164f1-182f-419f-ac8f-3139b1eea769/","schema_version":"1.0.0"},{"id":"livecut","name":"Live Cut [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5961,"archive_hash":"sha256:344e826b17c18f8c85f0d608ce004b5c60f464767415f9fc8452da5de19b760c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ddbe436-5f33-4f2f-ad73-145f4be40360/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Modeling","Mesh","addon","cut","slice","window","door","frame","slicer"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd172489-a974-4246-a792-81d1360074f4/","schema_version":"1.0.0"},{"id":"lm_studio_pro","name":"LM Studio Gobos & Volumetrics [Before: $9.50, Now: $8.08]","tagline":"FULL plan required - upgrade to download","version":"1.0.8","type":"add-on","archive_size":267095919,"archive_hash":"sha256:2a52ce50df73acc701de918a4f649090e986b6a0531a9047f1d7c6a4574a39c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9d80283e-a2b7-4ff9-acda-08222fcd7425/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.08","blender_version_min":"4.0.0","maintainer":"Mr Steve Lee","tags":["Lighting","fog","volumetrics","2026","addon","blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14c5daee-5691-4c63-8bea-789b5e47113d/","schema_version":"1.0.0"},{"id":"skava_lod_generator_pro","name":"LOD Generator Pro - Ultimate Edition [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"3.2.6","type":"add-on","archive_size":29745,"archive_hash":"sha256:6610b853ed8672ec051da8fa260e7e37a278bc735d0b71253353999ba0f3d15d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/29150841-e2a1-4e75-a75b-1e55e830da07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"SKAVA Piatkov","tags":["automation","decimation","godot","lod","performance","unreal","unity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d87d6532-edea-4ee0-a90a-37bf7390f8b1/","schema_version":"1.0.0"},{"id":"lod_generator_v2","name":"LOD GENERATOR v2.0 [Before: $29.99, Now: $25.49]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":12591,"archive_hash":"sha256:56aeba95403754a8088bdf67a6a9d69853fa45c7f4196223484839812035f91f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5b53c74b-5c5b-4fd8-97fc-f3c72c049307/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.49","blender_version_min":"4.2.0","maintainer":"Pradeep Prasad","tags":["Mesh","Asset","GameEngine","optimize","gamedev","lods"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e6b9b8df-2eda-470b-b4df-fb747a57a81a/","schema_version":"1.0.0"},{"id":"lottie_addon","name":"Lottie Animation Addon [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":68472,"archive_hash":"sha256:7a61a0f782303f92384b3076efa073b4f03e2464569b943afb70a4882a7f3c45","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f3a67bc6-2d77-4a59-97a1-8e17e0f413cd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["lottie","web","animation","json","webdesign"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5ef0c83b-ba4f-4ab2-8946-bb7a665a72b9/","schema_version":"1.0.0"},{"id":"magic_coordinate_extension","name":"Magic Coordinate Add-on: Dynamic Mapping For Blender [Before: $19.90, Now: $16.92]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":134264,"archive_hash":"sha256:5993304df2b155c02d92eced383dff07dd63bb70e98976f1cbffd5045b4faf8d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4a4e22c9-f361-410b-ada4-e446540e11cf/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.92","blender_version_min":"4.2.0","maintainer":"Cosmo Mídias","tags":["shader","geometry","nodes","addon","dynamic","mapping","coordinate","system"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/10dee0e3-fbd3-4041-abce-0db1a39ab84c/","schema_version":"1.0.0"},{"id":"mass_renamer_pro","name":"Mass Renamer Pro [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":7584,"archive_hash":"sha256:07fd66208c0c388f9923f42b5832915dae0591b2891eb914f4fb47e705ebd981","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fe5d41d6-d858-4967-8ad2-c4f5cbad1516/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Vaishakh Vinod","tags":["Object","Scene","Workflow","Pipeline","Animation","Rigging","rename"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/985de1bd-37f2-4e13-9fc2-d41c3521bd44/","schema_version":"1.0.0"},{"id":"matcaps_forever","name":"MATCAPS FOREVER [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":4801,"archive_hash":"sha256:ab2c85d1afff16262e29102956fa13f0e63e25c1500fa82428e665497896e2b7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d2ac0f17-417c-4259-8d3f-8d234f3af4b1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Take Refuge TV","tags":["matcap","takerefuge3d","matcapsforever","matcapgenerator","material","sculpting","hardsurface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5e190400-1471-4118-99ea-079be8ee661f/","schema_version":"1.0.0"},{"id":"flat_pallete","name":"Material Colors to Texture atlas [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2994,"archive_hash":"sha256:f752b1c38cd58ffa9d90fcb6dd273fe8e42283cef1dd1d0a97ef27404ac95437","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4604c515-8495-4042-940d-d12737b4ad46/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"isac lima","tags":["lowpoly","flat","color","texture","generator","palette","uv","map","stylized","game"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4d46d04a-0269-4c0c-bb78-6b4abb84903e/","schema_version":"1.0.0"},{"id":"material_overrider_plus","name":"Material Overrider + [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3357,"archive_hash":"sha256:e2d67029d11cce5015292769e3e51198c442b955e0d127c0c4d74714ea1e4f30","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6cac86f1-2bc6-4f5f-92d9-488dd33c7a17/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Brahim Houari","tags":["override","materialoverride","overrider"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/41e0e1c8-7940-4ebe-9ed5-67a9144c7365/","schema_version":"1.0.0"},{"id":"materialpicker","name":"Material Picker - Select And Browse Materials [Before: $7.99, Now: $6.79]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":339989,"archive_hash":"sha256:ed9347567f8cf94a3ac11d725ba55f232bf95ee81d3c3024e69717b332073b75","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/48fd443d-0962-449f-af6e-92136980b911/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.79","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["material","select","picker","shader","browser","material_picker","material_select","material_browser"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4d77e53b-6311-4996-a7e3-b88eda756ccb/","schema_version":"1.0.0"},{"id":"material_swap","name":"Material Swap [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3814,"archive_hash":"sha256:0ffd38163d6d70c4d9fbbc3d36e20198feb94c1f714472fc8f6854efdacfddb1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/521e106c-fcb1-4f8c-94ab-292cb63c1715/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Jeslin Paul","tags":["material","addon","blender","render","replace","find","find_material","replace_material","default","cube"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/152cd534-c743-4ea4-b1e0-5c514c1d82ae/","schema_version":"1.0.0"},{"id":"material_tools","name":"Material Tools [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":11376,"archive_hash":"sha256:866db1a3dac81c24001d92f72e3b93ccc15b5046d884e9cf061ca159106ba813","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4b74121f-2fe0-4cc7-ad89-41a94ec6e04a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Mutanzom3D","tags":["material","materials","textures","texture","shader","model","object","uv","unwrap"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/18d3ae0c-f509-42a3-81e4-0c4ee5b68be7/","schema_version":"1.0.0"},{"id":"matrix_pro","name":"Matrix (PRO) - Design and Animations [Before: $22.00, Now: $18.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":926239,"archive_hash":"sha256:39113a92d620c5a9ad82b6cbb24fc5697dfba4c3ba27ec8c19c494e457533916","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/36a3c739-2262-4ce2-8114-809a71ebbe49/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"18.70","blender_version_min":"4.2.0","maintainer":"4DView","tags":["4DView","Blender","Addon","Design","Animations","Geometry","Nodes","Matrix","Transformation","Transformations"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/657d0c52-d787-42e5-9151-263dfddb2e0c/","schema_version":"1.0.0"},{"id":"matrix_ultimate","name":"Matrix (ULTIMATE) - Design and Animations [Before: $37.00, Now: $31.45]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2604916,"archive_hash":"sha256:f3b563325e1ac70edc9f632110771fddacc6aaf5b414e107359850a4bf0430a1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d10e480b-172c-4361-985f-378f2a38a762/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"31.45","blender_version_min":"4.2.0","maintainer":"4DView","tags":["4DView","Blender","Addon","Design","Animations","Geometry","Nodes","Matrix","Transformation","Transformations"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/81704036-143d-48a5-baca-bd4906793518/","schema_version":"1.0.0"},{"id":"matshelf","name":"Matshelf [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11310,"archive_hash":"sha256:81977af395ab78eeb2bc66fd792093185942ecc6455efd020f25624240c54e28","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/362e0982-ca77-4e9e-a5f8-ac2ca3dce9fe/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["MatShelf","Shader","organize","Material","browse","search","2d"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/483bcc37-4187-4810-92c1-4b24c90e1585/","schema_version":"1.0.0"},{"id":"meeting_room","name":"Meeting Room [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"2.3.7","type":"add-on","archive_size":227745137,"archive_hash":"sha256:af2f30607909bdebabb46371a0407b1dcccf5f73add016d87ccb9f1da9d59b32","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fc1c89a7-94dd-4de9-bc74-2dfff72b3452/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Adham Abou Assali","tags":["meeting","Room","offices","Office","TV","Interior","Chairs","HQ","Render","Design"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/36a66e0e-2bff-4464-b21e-2f47031f9371/","schema_version":"1.0.0"},{"id":"megascans_bridge","name":"Megascans Bridge v2 [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.4.0","type":"add-on","archive_size":217644,"archive_hash":"sha256:95e279244505ba2f335f42205dad6cd6770701f7b6c9619d9bc9d1a10d29bf7c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78b13f8d-d0f4-45dc-832d-484647531d68/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["megascans","megascans_bridge","megascans_assets","megascans_plants","megascans_textures","megascans_materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0a231655-c32c-4025-a718-582af4e25c5a/","schema_version":"1.0.0"},{"id":"microstox","name":"🚀MicrostoX | Smart Exporter for Contributor [Before: $11.00, Now: $9.35]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":34254,"archive_hash":"sha256:7a00508838cdc8704e6d71169ff3b95c1e4db8729382776a230f681e3c8ee6d6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ce4681b-6b98-4bad-b076-9b45a3e0b38d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.35","blender_version_min":"4.0.0","maintainer":"budijozz semangat pagi","tags":["Export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3dfe7d5c-b064-404a-9b1b-abba03b33642/","schema_version":"1.0.0"},{"id":"migration_manager","name":"Migration Manager: Your Workspace, Everywhere. [Before: $5.99, Now: $5.09]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4548,"archive_hash":"sha256:abcec391e80b360e7c3f2af380df302c528846c41be372769ac45de3b274c811","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/80568778-1bf1-4e25-ac41-1fffebaec520/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.09","blender_version_min":"4.2.0","maintainer":"Hey Arnold","tags":["System","export","import","ui","migrate","workspace","themes"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/33dd26c1-228a-4854-b33c-3100c1d95211/","schema_version":"1.0.0"},{"id":"mk_roughness_browser","name":"MK Roughness Builder [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":4728852238,"archive_hash":"sha256:65e6ebe517087fb30c77916635504d8d6a5660ed44e557015a098cd0b197c5d8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/94002b05-96be-4954-a0a3-e8333ad7a681/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Material","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/85333172-af22-4158-9f1d-eaf25a971fb0/","schema_version":"1.0.0"},{"id":"blenquick_mocap_lite","name":"Mocap Lite [Before: $12.30, Now: $10.46]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":286687930,"archive_hash":"sha256:11767f1a1a56829ac080a760db0162deffdb17eb61aa5cc9ec8a995018123dc5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/58617425-e908-469d-8527-38afe9aaac86/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.46","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["mocap","motioncapture","face","capture","motion","lite","basic","animation","3d"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/851c73c9-c226-4f1e-a4fd-d10eb0bdcae1/","schema_version":"1.0.0"},{"id":"blenquick_mocap_pro","name":"Mocap Pro [Before: $24.70, Now: $21.00]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":139514705,"archive_hash":"sha256:853fe025d14a5a4e0b3a42866a099e4ac7ff74bafd9f11da7778938042ad7573","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a0e33e40-fad5-436a-89c3-65b615d2b8b8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.00","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["advanced","mapping","mocap","retargeting","rig","live","face","capture","motion"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9835f003-6228-44f9-bc3e-6cf56faf6bd0/","schema_version":"1.0.0"},{"id":"modifiers_toolbox","name":"Modifiers Toolbox [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.2","type":"add-on","archive_size":16067,"archive_hash":"sha256:ccf1b84a9617e8d52b84659ff9c74f8499d636586f9cda4924ca421f0a3537ed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/293ca6b0-3409-42eb-8605-80fb5d6e13d0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["toolbox","modifiers","favourites","user","ui","ux","quick"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bb41223a-2351-4356-b130-02e453e506af/","schema_version":"1.0.0"},{"id":"modstack","name":"ModStack - Save & Reuse Modifier Presets In One Click [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":92368,"archive_hash":"sha256:4c10ee77ba44e0fb663fbf160c590eb9d930f10f50e02518781bddada90b3356","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/480f33f4-d8b5-4f6e-9875-0dd4ddb8de88/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["3DView","Modeling","Modifiers","Presets","Hardsurface","Nondestructive"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8f6686ab-238a-4a6e-8c33-1d0cf3ad96bf/","schema_version":"1.0.0"},{"id":"modular_medieval_house_creator","name":"Modular Medieval House Creator [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1040719091,"archive_hash":"sha256:7dba7c4115ce7064edc349fb697a4906271a79cc559344cf28aeb09f74eb6a6f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9a296711-2409-4b38-b028-2af93cac33b6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"FANNΞC","tags":["architecture","buildings","environment","exterior","fantasy","interior","kitbash","medieval","modular","Village"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/240b303e-4368-4e45-9ae8-9cbdbd2e477e/","schema_version":"1.0.0"},{"id":"modular_suburban_house_creator","name":"Modular Suburban House Creator [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1100698310,"archive_hash":"sha256:1ee9250c031f1b4333afa6ad3882ccb08f352bb8bd61826fbed32093f76ebb12","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d32c24fc-51b3-4fc6-acd5-639d05a48ada/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"FANNΞC","tags":["modular","kitbash","suburban","architecture","interior","exterior","generator","game","modeling","efficient"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5faf55ff-acc1-484e-9a2e-943899b5b1f2/","schema_version":"1.0.0"},{"id":"morphplus","name":"Morph+ Professional Animation presets [Before: $22.00, Now: $18.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1617645,"archive_hash":"sha256:9e8f0487fb6d1df9beee2a0e987d36e5d264a55c776ff74897bf0e146a709097","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b3e1021f-5bde-4878-bac0-30f118227b7a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"18.70","blender_version_min":"4.2.0","maintainer":"A. Elbamby","tags":["morph","reveal","effects","presets","animation","geometrynodes","product","particles","motion","graphics"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aad33ffc-2016-4aa1-b895-b1a9257130a0/","schema_version":"1.0.0"},{"id":"motionpro","name":"MotionPro [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"3.1.0","type":"add-on","archive_size":325988,"archive_hash":"sha256:1d85fca4bdcb5cf8b3f4198d5cecb0fe454a0c36b3b1c1613cb006d1892dbe21","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/829fd8b3-03c0-4469-9f66-20e3b2ed35ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"A. Elbamby","tags":["3darchitect","interior","exterior","animation","architecture","geometrynodes","motiongraphics","archviz","curves","lowpoly"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/72e4a44b-9cd4-4cec-b6f2-047b94c8d5b9/","schema_version":"1.0.0"},{"id":"MRAX","name":"MRAX – Real-Time Overlapping Vertices Fixer for Blender [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":3056,"archive_hash":"sha256:afa36cab047702f58a04708ae2529774106f2b0323de434aa126070b7e82af80","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/13a3df5b-f654-46fe-add9-0e133c54832f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"MR XD","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9fc4b6cc-3948-4e99-9efb-e789757eec5e/","schema_version":"1.0.0"},{"id":"multi_blend_file_merger","name":"Multi Blend File Merger - Merge Multiple blend Files in Seconds [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":20029,"archive_hash":"sha256:422408ca88216e626bcf0aa425de73ddcb0b34f5da08afc29464406724f20a1d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ec55cd5e-b682-4de6-9fcc-3059b161fb5f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Pipeline","Scene","importexport","murge","multi","blend"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/21b72c0a-b02d-4a8f-8aa9-3ada5908538f/","schema_version":"1.0.0"},{"id":"multi_mat_baker","name":"Multi-Mat Baker - Bake Multiple Materials into One PBR Texture Set in One Click [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":21297,"archive_hash":"sha256:bf89bdee36ce70c86813b2f4e2cb52bacd0478f16fbd234201a734286ca1d081","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8feae2cf-72cd-413c-a7fc-889cb4fb46dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"3.0.0","maintainer":"Junaid Alam","tags":["Baking","Material","UV","GameEngine","Texture"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2124f634-f2e2-4f4e-8bc8-320673cff0bf/","schema_version":"1.0.0"},{"id":"multixport_pro","name":"MultiXport Pro [Before: $14.99, Now: $12.74]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":30134,"archive_hash":"sha256:c9a47b80240933e964cb542724e119d7ba371083048bbacf74f72df8535e8571","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/33aad9fb-3784-4116-bded-111e3aab1514/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.74","blender_version_min":"4.2.0","maintainer":"IZ. MdVerz","tags":["Export","Batch","Workflow","Pipeline","FBX","glb","usdz","stl","settings","textures"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/566f5c6c-5985-4746-8f0d-f5fbf256011c/","schema_version":"1.0.0"},{"id":"mutamesh","name":"Mutamesh | 4 Remeshers In One | Instant Meshes, Quadwild, Cwf, Adaptropic [Before: $27.00, Now: $22.95]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":51509952,"archive_hash":"sha256:4198442c63c083ec27ece9a06ff9917783286565ca617314d6bd058c43a06ef0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/29e22ab7-79b3-4733-b3db-7b0e2b9920dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.95","blender_version_min":"5.1.1","maintainer":"Giambattista Von Nettesheim","tags":["Mesh","Object","Modeling","Sculpt","import","export","remesh","retopology","remeshing","mesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d4ca1fc2-a0e8-4ccf-bc6e-076b26d09e7b/","schema_version":"1.0.0"},{"id":"name_your_things","name":"NAME YOUR THINGS [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":8465,"archive_hash":"sha256:3657a86a882dea913494ab0bf397a97435663d4bdebd4ad8a5a0367a44c5b9f8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4d3d12f-6d51-4a3c-8b65-e796bfe1f011/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.0.0","maintainer":"ImNoah","tags":["naming","mesh","clean","cleanup","namer","name","organise","things"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/295ca03c-0ff2-4209-8cb4-885a8614f4b1/","schema_version":"1.0.0"},{"id":"neural_upscaler_x4","name":"Neural Upscaler X4 [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"3.1.0","type":"add-on","archive_size":3652555628,"archive_hash":"sha256:333631ea85fb768eaa46f19418329e052599e5b678727eb4199638c4efc98e28","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/01d335b6-82ae-40e4-985a-5a758b6d8ecc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"5.0.0","maintainer":"Cloudy Sky","tags":["AI","tool","4K","Upscale","x4"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ee306f1d-b7f4-4e8e-8e0d-86e8777c3af0/","schema_version":"1.0.0"},{"id":"ngone_pro","name":"N-Gone Pro [Before: $12.99, Now: $11.04]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":21732,"archive_hash":"sha256:7a52568df96c5ee3f424333dad15d6de143868fa544a5de3adf9d6848b09f54c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/435de251-fed3-4859-9da2-0faa4da162b0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.04","blender_version_min":"4.2.0","maintainer":"Take Refuge TV","tags":["ngon","optimize","texturing","cad","ngonepro","takerefuge3d","remesh","retopo"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2511bcbd-0752-4bf2-99d1-01c258f0a4ae/","schema_version":"1.0.0"},{"id":"nodeflow_3_pro","name":"NodeFlow 3 Pro [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":64311,"archive_hash":"sha256:d13c9fcbb9e5ac7547c4eb6c1fda5922171daf6870898830adb2a6dad931b20b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1154d0c0-ccbd-4cd0-8e11-bd1cfccf2e82/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"kanwei sun","tags":["Node","Tools","Workflow","Editor"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8804d2f3-775e-4d39-9f86-a38aa0f95062/","schema_version":"1.0.0"},{"id":"node_navigator","name":"Node Navigator [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.7","type":"add-on","archive_size":21242,"archive_hash":"sha256:4dcf9bc5e77e463708218799e5a56235295d577861088e77856cae6cce40296f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f6c592fe-b043-4572-8799-1be5c1ba6c0b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"3.6.0","maintainer":"Mr Steve Lee","tags":["geometry","nodes","organize","arrange","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cecb7191-5348-4e5a-a6a8-7b01f6ab7136/","schema_version":"1.0.0"},{"id":"n_panel_navigator","name":"N-panel Navigator [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":27286,"archive_hash":"sha256:1800311d9beb2ad4993fa0be51f8216209b20e25c41251a3afe5b1ea8d545569","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ec7b8acc-3471-4df2-ab46-11b58e4be944/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"belaid ziane","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/72bab743-cb6a-4b75-9d9b-433088728648/","schema_version":"1.0.0"},{"id":"npanel_tab_reorder","name":"N-Panel Tab Reorder [Before: $1.99, Now: $1.69]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":34378,"archive_hash":"sha256:d03dd14657f4434a3c4d15a7eb69aab39a5ac4b7448ebddd2eea5fcb0f8ef81a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fe28eede-1569-464b-86b7-f41037ec5744/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.69","blender_version_min":"3.6.0","maintainer":"Joy","tags":["ui","interface","customization","panel","management"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/74ca75ae-fafd-4ad0-a99d-c3215b9ea4bc/","schema_version":"1.0.0"},{"id":"n_panel_tabs","name":"N-Panel Tabs [Before: $6.50, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":6626,"archive_hash":"sha256:a4f36946fd4d25572d27f1fda1fbab96334e7fe321d20c6176c79383c9ee769b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c2b0fa8d-b323-4a43-8774-b34931e4f49a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"5.1.0","maintainer":"Eros Fornasari","tags":["manager","sidebar","tab","tabmanager","workflow","optimization","Interface","UserInterface","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/271b8c2d-5132-4d12-8696-f9504eff2a58/","schema_version":"1.0.0"},{"id":"null_game_toolkit","name":"Null Game Toolkit [Before: $32.00, Now: $27.20]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":28327,"archive_hash":"sha256:519f5dc600ae12492c11bb1a4f8f6d6b90dea42d3d63ad8dfe552e3d4001c9de","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a30bd99b-bd6f-4741-b40f-da8c27dd1656/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"27.20","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["LOD","COLLISION","GENERATOR","EMPTY","NULL","GameToolkit","Game","Assets","Unity","Unreal"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/96b340d7-9c98-4933-8f65-06a676918b1d/","schema_version":"1.0.0"},{"id":"nview","name":"nView [Before: $22.98, Now: $19.53]","tagline":"FULL plan required - upgrade to download","version":"3.7.0","type":"add-on","archive_size":76727,"archive_hash":"sha256:969eb684b871e4c1af888f818373056c191d00c587370f65e57e57c2dc2c14a3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5deca250-9ea2-4c1c-a49d-1f285dd90f01/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"19.53","blender_version_min":"4.2.0","maintainer":"Spencer Magnusson","tags":["viewport","optimization","object","visibility","performance"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/84286079-1e61-4d2a-a2a1-346733a4df7c/","schema_version":"1.0.0"},{"id":"object_bender","name":"Object Bender [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":74608,"archive_hash":"sha256:154d6d78fe2620b60cc25ebe87054defc72f7eb76c3cad58d86cf4ae6dad2b16","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e109f34e-538e-41c2-928d-40235da450dd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"belaid ziane","tags":["Bendshape","bender","bend","curve"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/99f1d28a-613d-407f-9078-5231ef79aca7/","schema_version":"1.0.0"},{"id":"object_disperse","name":"Object Disperser [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2739,"archive_hash":"sha256:d9b10d648c575ee0b17ee027f20296051e975e2f498673d6a8b16ca697e6de7c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9e53aaad-4490-4f1a-b2be-5b1c42cc3672/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Disperse","Objects","Animation","Instances","Randomize","Rotation","Scale","Effects","Simulation","Dispersion"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6d31366b-b8a5-4f4e-adf9-667a368a5d26/","schema_version":"1.0.0"},{"id":"objxport","name":"ObjXport | One-Click OBJ Export [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9257,"archive_hash":"sha256:932e313907fed8ebe4f7359a41f4e3e0f95745bbd86b1dc049e821cb4083c559","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f3c0b17-9ba5-4254-96c2-e471011fafb3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["obj","export","bake"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/86d262dd-e721-4e42-a024-1e0850e0ddfd/","schema_version":"1.0.0"},{"id":"ocp_studio_v5","name":"OCP The One Click Proxy\" [Before: $9.50, Now: $8.08]","tagline":"FULL plan required - upgrade to download","version":"5.0.0","type":"add-on","archive_size":46749971,"archive_hash":"sha256:44bbf8936bbcf524aeacdc5567cb68f6fb98b8e814d5e7d7859c48a470ead90a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ecc13bfc-1e7c-4f24-b97b-122018986710/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.08","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["blender","instance","proxy","proxies","speed","fast","prevent","crashes","optimize","viewport"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8aa9dbac-071f-4470-983a-1aee7e67da28/","schema_version":"1.0.0"},{"id":"ocr_image_extraction","name":"OCR Image extraction tool [Before: $3.99, Now: $3.39]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11397,"archive_hash":"sha256:e6e72c938979613a4a794b2284a75bb0ef8f90f35d07e42c5c8593f9a94ca366","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/056e434b-6a8b-410b-a793-879bde57ddc6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.39","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["OCRImageextraction"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fb621728-6650-4c85-a1a2-e99cbb9267f1/","schema_version":"1.0.0"},{"id":"o_explosion_pro","name":"O'Explosion [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":5231,"archive_hash":"sha256:4173b4cdf0ec617585b4f2ad40eac2917293298a27dc016a7c63ba9b6de82ca2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5e6d29d3-fefd-46a9-9fd9-3db3cee60b55/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Yaroslav Okhranchuk","tags":["Animation","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cbb8e5f5-8642-4e01-a78d-d128904679fd/","schema_version":"1.0.0"},{"id":"oneatlas","name":"OneAtlas | One-Click Texture Atlas Automation [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.2.3","type":"add-on","archive_size":20453,"archive_hash":"sha256:14197ff44de0374d1709be60d844a69cdcac1ef00679d4ae5a9c01f8fc8705d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ca0805c-4a63-44fc-85db-dd7beb1e7d81/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["texture","atlas","packing","atlas","baking","pbr","baking","texture","playcanvas","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b1e8f5c6-2ca2-4473-88c7-477e06e24ca1/","schema_version":"1.0.0"},{"id":"one_click_age","name":"One Click Age - Instantly Age any Material with a Click [Before: $18.00, Now: $15.30]","tagline":"FULL plan required - upgrade to download","version":"2.0.2","type":"add-on","archive_size":224274155,"archive_hash":"sha256:202feaec961debe8852a37397bd4f171cc93b9b7c811cead6e792b89f9a4c759","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/378eaa35-24db-49b7-8142-4e44fbd857d5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.30","blender_version_min":"4.2.0","maintainer":"CG Galaxy","tags":["damage","dirt","dust","edgewear","fingerprints","generators","grunge","oneclickage","realism","surfaceimperfection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f5981bd-3ab2-4029-970f-11e75862f2d6/","schema_version":"1.0.0"},{"id":"oneclick_multicam_renderer","name":"OneClick Multi-Camera Render [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"3.2.0","type":"add-on","archive_size":17131,"archive_hash":"sha256:2522018ef3f2d98e91300c6793f57fb9fe8faea6034be2076bb364a621902c1d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d2ac3991-4417-45f9-9172-615d0568bb46/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["blender","camera","render","batch","render","multi","camera","product","render","automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/31b436e2-7cca-442c-aeee-6f7004275252/","schema_version":"1.0.0"},{"id":"ez_studio_pro","name":"One Click Studio [Before: $5.85, Now: $4.97]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":10860,"archive_hash":"sha256:ed68ce19f9006a39a588d0e35d12004517975916112867b14dde807bfa2b23cf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/07d6152d-7298-4109-99bd-fc390bcc04da/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.97","blender_version_min":"4.2.0","maintainer":"The Smart King","tags":["Render","Lighting","Optimization","Productivity","studio","camera","blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1c5d0887-7382-4dbd-9ba3-bee0cfd933e3/","schema_version":"1.0.0"},{"id":"on_the_rocks","name":"On The Rocks (Addon) v1.7.0 | Formations, Bricks, Walls, Walkpaths, Damages, Landscapes, Crysrals, Creations [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.7.0","type":"add-on","archive_size":17635288,"archive_hash":"sha256:22bd48bd5b54bc8b9c1d5be2a97e840667d3ad7ddf724cf0e0ccabcc82000233","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ae2ee1ff-d9ee-47c5-bb92-dbb63e8218ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["addon","rocks","bricks","walls","formation","damage","fracture","landscape","creation","walkpaths"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/68f5fbef-c50c-46c4-a1d2-9ab7d0a26eb1/","schema_version":"1.0.0"},{"id":"open_video_tracker","name":"Open Video Tracker [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"0.2.0","type":"add-on","archive_size":318904565,"archive_hash":"sha256:9207d2b84a10bc3bf33d477424b3d863ae8c4b63d1de89a2f64b8d0cc1fcaa6c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3bd7f89d-10c2-4cce-8a10-440d7fe76faa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["2d","video","tracker","3d","tracking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ce5306f7-c957-49cd-9e9e-5edcfc47f67d/","schema_version":"1.0.0"},{"id":"orbit360","name":"Orbit360 - One Click Turnaround Animation Export from Viewport [Before: $4.90, Now: $4.16]","tagline":"FULL plan required - upgrade to download","version":"1.2.1","type":"add-on","archive_size":15593,"archive_hash":"sha256:281998905bd7fc71b8993a71fa64ffd28394f999a146d0f4f4c24db02e81b13a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/30124300-8ab9-429a-a894-1b532ebf0335/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.16","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Render","Animation","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d127bdac-1c13-402f-bc58-c955b150004a/","schema_version":"1.0.0"},{"id":"alt_tab_Organix","name":"OrganiX [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":510578,"archive_hash":"sha256:ff24edd79a427cca1f6439c4edbdc950e6acd25b7555d8acf254986fd70085e3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/505441c7-c011-4766-bdaf-ea4730a18d89/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","organix","shapes","modeling","organic","procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b8fd2cd7-0ffb-4576-a64c-d5ba20c10231/","schema_version":"1.0.0"},{"id":"origin_tool","name":"Origin tool [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1963,"archive_hash":"sha256:ed7ae5e3669860275c5e8477a4e545f39efb15cbe49679994c199b86f8e4c4e6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3773c6ee-5e17-4070-9c0a-bd98af853589/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Kornél Kuloványi","tags":["origin","center","bottom","simple","usefull","oneclick","click","asset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2e667794-921f-4d6d-82d7-9b2298b69fa4/","schema_version":"1.0.0"},{"id":"output_fix","name":"Output Fix [Before: $3.50, Now: $2.98]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":2056,"archive_hash":"sha256:412d83a0176f31a6d328ecab304d75d38c91eb6aacd163277301bbd0028b76d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3d22c368-ccc8-4609-8cc2-a0a23b03edd1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.98","blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["render","output","folder","directory","automation","rendering","organization","settings","management","file"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3f2afda8-dce0-4fa3-9aad-44cad17c2043/","schema_version":"1.0.0"},{"id":"palette_manager_pro","name":"Palette Manager Pro — Color Palette System For Blender (Pro Tier) [Before: $12.99, Now: $11.04]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":45276,"archive_hash":"sha256:491dd63e67a545673cf7b18646aaf30dfd733df3e280a3ef99cd240fb3b106ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/06d812db-bfe3-4726-b68e-832e3c3f118e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.04","blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["Material","Paint","Color","palette","texture","blender","gradient"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8e0a91d3-79a8-4205-8c69-de1ca083c7ae/","schema_version":"1.0.0"},{"id":"tobip_particles_catalog","name":"Particles addon [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":47741747,"archive_hash":"sha256:502c9f726ea418185363df9c3d0947fff2639ca7331895cbbaec3de79cf2a91a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d9e837a8-a78d-433e-bcd6-aa0f8690787e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Suzanne studio","tags":["particles","birds","fish","fly","embers","particle","dust","simulation","butterfly","leaves"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/693ffd00-e10e-4f18-8419-ba55fe48ff07/","schema_version":"1.0.0"},{"id":"eztexture_pro","name":"PBR Texture Pro [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":3294637,"archive_hash":"sha256:345223ed17af25f05ad21e942476bfd3addb4c382eee83df3f242aa4b48a32b0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cb57db07-5709-45b4-973b-f661a1f4f080/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"The Smart King","tags":["Texture","PBR","Material","autouv","shaders","udim","Node","Smart","UV"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/18b6c783-c973-4abc-90f2-5f380e6e86d8/","schema_version":"1.0.0"},{"id":"perforated_panel","name":"Perforated Panel [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":844690,"archive_hash":"sha256:5e86344238ef6499fc3e0fdc58d591c46f746eb477622e2a34ae46024edfe900","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/49901d46-9785-4550-a0b9-45c81c8b7e06/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Abbos Mirzaev","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7b1c87c0-04c4-4272-977e-17ea92ee85b5/","schema_version":"1.0.0"},{"id":"physicsgen","name":"Physics Gen [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":4354,"archive_hash":"sha256:8f6a1c5c5c4eec0e0893e94ec9230e2dd78f87e3e2f985da3586c50cdf2aa0d5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/42bd71ee-5073-4e8c-970f-659b5330a3d4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Ace Of 3D","tags":["easy","fluid","particle","quick","simulation","physics","smoke","generation","sims","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dfe61d32-24aa-4b8d-8bbb-6863cfbe628a/","schema_version":"1.0.0"},{"id":"wk_tools","name":"PickUp Tools [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.7.0","type":"add-on","archive_size":149362,"archive_hash":"sha256:cfbd5b940ae8191ce873be6d2b813c3bf940521891e33ee82ed75665ffd2ba84","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/16c27c35-8e05-4652-89ee-bd3c7d68d45f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Animation","Constraints","pickup","walkcycle","foot_sliding","keyframe_tools","pick_up","pin_tool","pickup_objects","stepped_interpolation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/833124e5-42e2-43eb-abcc-d0369083cc72/","schema_version":"1.0.0"},{"id":"pixelator_maker","name":"Pixelator Maker [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":21168,"archive_hash":"sha256:e140cc12a36bda67d704adb6f7ca250f111630313f356995127313910aa3b0f9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8447c058-23b1-4f40-aa04-9e772e8bfa6f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["NPR","Pixel","Retro","Stylize","Texture","Game","Art","Shader","Node","Blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/12da713a-b0be-496b-a8e3-46477249e30e/","schema_version":"1.0.0"},{"id":"playblast","name":"Playblast [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":19161,"archive_hash":"sha256:dca5cd406ed0fd14ee53bd59a6a3cf48e863fe537a3e9f170dd8479d1065892d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3e86e753-19c1-4ab9-9ade-5748f61678ab/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["playblast","opengl","render","animation","viewport","user","ui","ux","eevee","maya"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/93ad9257-b229-445b-8277-c702bde1eab4/","schema_version":"1.0.0"},{"id":"polymating","name":"Polymating [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.1","type":"add-on","archive_size":78737,"archive_hash":"sha256:a129c270d00436e1f8eb0e5f1ba2b6b3d9cb6e143047b9a9d02350d054a708de","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9550396c-6877-48e4-aff2-e427b08aa10d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Mozzarella ARC","tags":["modeling","retopology","topology","sculpt"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3d3d0b48-a9e1-4081-bfdd-ebe34bcebe72/","schema_version":"1.0.0"},{"id":"Polyviews","name":"Polyviews [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"3.1.0","type":"add-on","archive_size":36022,"archive_hash":"sha256:2aac9cae99896126264c23d6025ede4cf88678d25fe2d91947935d7363a179c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f7e927ec-5cba-4f39-a855-13f53af93f44/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"polyspaace","tags":["render","manager","rendermanagement","views","cameras","scenes","scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bb618f47-b9fb-45b8-809d-93569afc7422/","schema_version":"1.0.0"},{"id":"node_file_link","name":"Portable Node Extension [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":220543,"archive_hash":"sha256:9742a530dbfadf2f5d349c8a5b54b891878e955d8daa8fc2004c0221d7f65687","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/aedaca4c-09b3-466d-b9c0-193a81aa8378/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["procedural","nodegroups","geometrynodes","extension","community"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d7411d9f-d0ac-4601-bd6b-fb0578fae437/","schema_version":"1.0.0"},{"id":"portal_projection","name":"Portal Projection v1.3 (Addon) | Portals (With Ray Portal BSDF) made easy, for everyone [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":2386869,"archive_hash":"sha256:c3365d6bcdbdff2c522f3f1448fad875fb172e94bf461a33fe1334246ac874c0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/246986dc-770f-425b-9097-ca82ab41b6dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["portal","projection","addon","dimension","mirror","abstract","easy","camera","display","dynamic"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ff5032ec-3c1c-420f-8e11-6cf5fc355815/","schema_version":"1.0.0"},{"id":"pro_aligner","name":"Pro Aligner - Align Any Object With A Click [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.2.2","type":"add-on","archive_size":8027,"archive_hash":"sha256:900105e74ba1de500ce56b946e998c2b475b6a2a07345116996736720f1402cf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/91677678-2957-43d5-a7fb-37bd1d317761/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"CG Galaxy","tags":["align","rotation","autoalign","proaligner","worldalign","objectalign"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ed839737-ce8c-412c-8753-80a2bc968b59/","schema_version":"1.0.0"},{"id":"procedural_clouds","name":"Procedural Clouds [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":24305854,"archive_hash":"sha256:b6d83cf36baa39f432f698749b6d57efd0a21c36d08e9c0a38366560da491b00","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/72fb912b-ceae-4fec-9e03-d099f4518290/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.5.0","maintainer":"Suzanne studio","tags":["clouds","cloud","sky","skies","volume","volumetrics","storm","addon","atmosphere","procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/70f5bfd0-0c25-4a15-a694-384875e86a6e/","schema_version":"1.0.0"},{"id":"neo_cables","name":"Procedural Neo Cables [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4199,"archive_hash":"sha256:22bfb3d0dc05b9f0c8533e937331f967edbbfbc7c17717fcfae2907f08f42877","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6c980f63-dcc9-4ed6-923b-c1bec5bce747/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["procedural","generator","cable","wire","rope","generate","oneclick","string","thread","modifier"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bb5d18f8-b5b6-4fb1-9f53-00fbf0c7aacb/","schema_version":"1.0.0"},{"id":"Procedural_Sky_System","name":"Procedural Sky System [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"0.2.6","type":"add-on","archive_size":724389,"archive_hash":"sha256:78d907ff64c92dc9fe436fe10cdc90f2fa51f47f1145d4e700a8a10bbb3c37dc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1a37b04f-dd34-48a1-8184-feceb205e718/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["World","sky","HDRI","shader","cartoon","anime"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/44d6ef69-5132-4e57-bf6e-02e1b7d2075a/","schema_version":"1.0.0"},{"id":"procedural_terrain_generator","name":"Procedural Terrain 2.0 – Geometry Nodes Terrain Generator [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.0.3","type":"add-on","archive_size":39573,"archive_hash":"sha256:bc1060a598e1f490c0b5f06542dcecfd0afb6e414efdb56dd50d098be5367665","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b359e5f8-dda1-4fa5-a181-f813a3396090/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["procedural_terrain","procedural_generation","terrain_generator","landscape","texture_blending","terrain","terrain_mesh","realistic","geometry_nodes","LODs"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ef8471a-d401-4404-98f9-093837891b43/","schema_version":"1.0.0"},{"id":"procedural_weather_pro","name":"Procedural Weather Pro [Before: $14.89, Now: $12.66]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":43934,"archive_hash":"sha256:05d2bde702f2253f8b1b8f9e7fcbf7c77b4a065de9505a68f7384007ffa1174c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8066341e-34a2-475b-ab74-47c40ec2180c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.66","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Lighting","Render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/77731762-5b91-4e38-b188-4c5b8ff7061f/","schema_version":"1.0.0"},{"id":"product_lighting_setup","name":"Product Autouploader [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":31931,"archive_hash":"sha256:1c78dd9539e0a76f95d94acf2e2c03b6b9f04d73e311c03ef1465e44a195774c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f212cd0a-9d7f-4617-b0a9-ee385e15a631/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["automation","cgtrader","turbosquid","fab","ai","llm","lighting","render","camera","renderautomation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b8679695-2084-4bab-82d7-2a880628e8e6/","schema_version":"1.0.0"},{"id":"POS_shelf_display_generator","name":"Product Display Generator [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":10667988,"archive_hash":"sha256:7b4aba700c52b3bdc15b5f152f8d1267e087295202f024a92bd6570d7336afb7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0efb25ac-de7f-48ca-afa2-5d958419a383/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"brandPOS Karpeta","tags":["Object","cardboard","packaging","FSDU","display","generator","model"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f2880b5e-ba2f-4f2f-9556-16dd98491c38/","schema_version":"1.0.0"},{"id":"profiler","name":"Profiler 2.0 - Advanced curve beveling tool [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":293184,"archive_hash":"sha256:4d04209df47b869f68075cb013d9163ebecfd6ac5801c8d63db4894f55251b7f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/837faf74-0d9a-4493-b871-6bd776237892/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Mike Radjabov","tags":["Modeling","curve","spline","sweep","profile","cornice","bevel","molding","svg"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1cd6fbe1-c385-4941-ad49-06342734572d/","schema_version":"1.0.0"},{"id":"psd_layers","name":"PSD-LAYERS V1.6 Add-on [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":50355,"archive_hash":"sha256:c767d1916b98c2348e38ff329b065a32caae4525a278bcbd3cfdda3e50e7e27a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cf4fc88b-368b-475d-89a2-13706d76324f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["psd_layers","hand","painting","textures","layers","handpainting","paintlayers","paint","texturing","freehand"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b1964db5-95ce-454a-ae93-74a3a17d37a2/","schema_version":"1.0.0"},{"id":"quadify_premium","name":"Quadify Premium [Before: $24.97, Now: $21.22]","tagline":"FULL plan required - upgrade to download","version":"2.6.0","type":"add-on","archive_size":26623,"archive_hash":"sha256:cbae5724dbd151f7aead7e85d4837a07e8906fc432edcbbb63b8a7cf0a515409","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/02ac2aa9-dae2-4fe4-9fe0-72b540c12116/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.22","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["mesh","mesh","optimization","clean","retopology","decimate","low","poly","count"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6ba7ef6e-9617-4df8-873e-3dac35aadd63/","schema_version":"1.0.0"},{"id":"quadify_pro","name":"Quadify Pro — Studio & Automation Edition [Before: $80.00, Now: $68.00]","tagline":"FULL plan required - upgrade to download","version":"2.3.4","type":"add-on","archive_size":82832,"archive_hash":"sha256:73b148cf5c29fc62024b7bd4bba1dbaf99914395a8f0faf6efa0c0077caeb4e5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/58dec338-ce14-42c9-932e-a97b0101360f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"68.00","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["Modeling","Mesh","Retopology","UV","LOD","Export","Utilities","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/489eaa7f-5ad4-402b-8a65-7404010df89b/","schema_version":"1.0.0"},{"id":"quadify_ultra","name":"Quadify Ultra [Before: $150.00, Now: $127.50]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":2569263,"archive_hash":"sha256:4202b7d30673354503fb49a643b0a4e46dd3c03ea18d2f8bee0117fb3c952741","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c3815f1e-2cf4-4d0e-b037-19e6a568cb00/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"127.50","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["Modeling","Mesh","Retopology","Topology","Quad","Optimization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1113757c-3829-4c33-bf49-11d38d30003d/","schema_version":"1.0.0"},{"id":"quick_align","name":"Quick Align [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":30856,"archive_hash":"sha256:cb1e0440c5f4407c455fbd2e5510a508c4982fe3123a9a489420ea00603b482a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f1d7822-6cd7-4172-b003-f9bc4d6e207e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["Object","Aligner","Evenly","Distribution","Illustrator","Adobe","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/91bec957-fe14-459a-83cc-5ce477214631/","schema_version":"1.0.0"},{"id":"quick_apply","name":"Quick Apply [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3846,"archive_hash":"sha256:74bc61eb7fc7f873cf32786b90f7ca80441528bd3deb36ea590c0a2311eba562","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e76474a4-7bce-44f2-9786-a90c4711eaec/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"3.0.0","maintainer":"Re Siva","tags":["Object","Material","Modifier","Utility","easyapply"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/46c1cbcd-3c06-4aa0-92ef-4c81446359ed/","schema_version":"1.0.0"},{"id":"quick_baker","name":"Quick Baker [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"3.3.0","type":"add-on","archive_size":300019,"archive_hash":"sha256:20b055b5b7f2f1e522fabbaf5947e03d8780e8bcc0fef5c9bf094d3c3239de08","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0a560c82-5404-4da0-afdc-3c646af6a61e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["object_bake","high_to_low_poly_bake","auto_cage","auto_UDIM_bake","channel_packing","material_bake","node_bake","pbg_texture_bake","texture_baking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/562b8533-d6d1-4a37-935c-844b59ccf5cf/","schema_version":"1.0.0"},{"id":"quick_color_mat","name":"Quick Color Mat [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2426,"archive_hash":"sha256:384d34cb9c86629eac51f09fa6a1af15ca086b9ffdf75ef2dd3ee88c91370f9a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a2fd6937-de3a-4f24-9ae0-7ce203659515/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"isac lima","tags":["Fast","Texturing","Texture","Material","Color","Picker","lowpoly"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b6528286-f9b0-4dbc-b032-5c479193a350/","schema_version":"1.0.0"},{"id":"quick_decal","name":"Quick Decal [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.7.1","type":"add-on","archive_size":268191,"archive_hash":"sha256:3ba5d820d9b24cda4c9dfcaaad7e949bb21bc3db49be474d22fa509970b328ac","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8fa1d954-4aa8-423b-b24c-15002f36f247/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["image_decal","megascans_decal","pbr_decal","decal_layer","layer_wear","layer_maps","auto_snap","auto_parent","auto_resize","quixel_bridge"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/03085e38-2e9e-472c-b274-a6870a1dca07/","schema_version":"1.0.0"},{"id":"quick_export","name":"Quick Export Presets [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3310,"archive_hash":"sha256:cf518a244930f26fa64b6d4dc4021709f5038921a7f1785c1c74059144263c40","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0c357c80-270f-4a10-98c9-cadeb4941c26/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["animation_tools","export","export_presets","game_development","quick_export","time_saving_tools","tool","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e90aa9cb-2ee1-46d7-b142-fc123d3ccfab/","schema_version":"1.0.0"},{"id":"quick_highlight","name":"Quick.Highlight [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2168,"archive_hash":"sha256:04df4f1afbcdab212124e22da346cdb6311a67fee86ec844fb08bc81b5dd6b96","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a33ed777-f4b2-4860-8348-3cc3504d5419/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"George Art","tags":["outliner","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/88a04d54-5cd8-44a8-972d-bf71dd4b13a5/","schema_version":"1.0.0"},{"id":"quick_interface","name":"Quick Interface [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":25611,"archive_hash":"sha256:64a293894e7513a9274c0d4fe2c52a9f543167742a7e0af6542b1441b389261c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b74dc10c-839e-41cf-94f6-0906dc16c07f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["duplicate","split","switch","management","interface","swap","join"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e099f4ab-5188-4607-b9a5-6b12790694c1/","schema_version":"1.0.0"},{"id":"quick_lattice","name":"Quick Lattice [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"0.8.2","type":"add-on","archive_size":5964,"archive_hash":"sha256:f46aa86875dd6e14060aa47a207bc8fde1db70b3da9bd3d90ace0f81cb9b927d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cf79a7ff-8802-4c4e-bbca-a7c46730dc6b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["quick","lattice","tools","modeling","automatic","modifiers"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aebbe9e7-732d-4a77-8bc9-855e0a90a396/","schema_version":"1.0.0"},{"id":"bake_material_pro","name":"QuickMat Bake Pro – Ultimate Texture Baking Tool [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":21529,"archive_hash":"sha256:78d8b62da830760d7696930879fbbeb388001785e4a697d06df212f248e08546","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f21b81d6-4827-432c-ab0b-95c87f8f85e2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"3.6.0","maintainer":"Studio156","tags":["texture","baking","materialtotexture","material","textures","texturecreator","shader","object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45478992-1264-487a-9aeb-23de7fb9d317/","schema_version":"1.0.0"},{"id":"quickmat_pbr","name":"QuickMat PBR – Auto PBR Texture Assigner for Blender [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":10495,"archive_hash":"sha256:47f2ba1015744e3cb035404188dfb389b28281743027534f6f9c8bf2eaf17616","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b6d254d3-6592-4281-bd4e-dee4bb79c70d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Puneeth Saravanan","tags":["Material","substancepainter","adobe","autotexture","Texture","Import_Export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/52d4ab0f-94b2-4f63-bfef-d86538bae8c2/","schema_version":"1.0.0"},{"id":"quick_measure","name":"Quick Measure v2 [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.0.5","type":"add-on","archive_size":149550,"archive_hash":"sha256:590b9b24988895ddac71cab3a1cba32bd448f26aad4ae404c7c6ce579ffabbc2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b2369230-7802-4c18-9fa6-d8e0a325cd18/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["measuring","measures","measure","measurement","measurements","tape_measure","3d_view","measuring_tape"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7074a6d2-6181-4669-9d8b-e13561477abf/","schema_version":"1.0.0"},{"id":"Quick_Origin_tools_v1","name":"Quick origin tool [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2182,"archive_hash":"sha256:692d1665c5fee4220e79f228ee7c92357bfda113651282424ce6192314e8b5f7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5325a0fb-0f09-4227-9fbd-1658b825fd8d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"3DAssets Kit","tags":["tool","tools","batch","origin","quick","blender","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9d0d5f6a-ea24-4868-8b81-21662abd7d16/","schema_version":"1.0.0"},{"id":"alt_tab_quick_render_preview","name":"Quick Render Preview [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5971,"archive_hash":"sha256:692f347bf98a84c06c57d3628c023733777b4d5f93dabb14032de8bc46756673","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f3ed45e0-8b26-4b8f-8411-78c66b433860/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","render","preview"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45eac3d5-9a69-4ea1-8e53-08ba9656447b/","schema_version":"1.0.0"},{"id":"quick_replace","name":"Quick Replace [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.2.1","type":"add-on","archive_size":106813,"archive_hash":"sha256:55954eb891d859c257510bcd7462d843fb6ffc69b129a8344dfc75d94bffbd62","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4e8b1dca-6edd-4edd-8e79-6c8e1031cb6d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["Object","collection","replacer","placement","tool","variety","blockout","mesh","randomization","replace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6ab1d182-6625-4cb8-9b2c-ca4d2c07c111/","schema_version":"1.0.0"},{"id":"quick_theme","name":"Quick Theme [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":25703,"archive_hash":"sha256:b2fa794392702d933b726740de51337950654f54d63fc47633d25f257ccf8bc6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/21a9224f-1547-403c-bc20-fe2e09131dad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["interface","theme","user_interface","custom_interface","quick_theme","blender_theme","theme_maker","3d_user_interface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c785c99e-f1c2-4fbc-82b8-651761f6101a/","schema_version":"1.0.0"},{"id":"quikv_pro","name":"QUiKV PRO — Quick Keyframe Value | Animation [Before: $17.60, Now: $14.96]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":41859,"archive_hash":"sha256:1b710658f7e92026c6f12824694a523183eab7dcc5788416f02e1c8525de9b4a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e531b319-c0bb-45a3-a5d2-0bfef96183aa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"14.96","blender_version_min":"3.0.0","maintainer":"eFcoelum","tags":["keyframe","animation","Interface","value","click"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bd8897f7-1111-43ea-860f-f956e1d4c0c7/","schema_version":"1.0.0"},{"id":"random_object_colorizer","name":"Random Object Colorizer [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3343,"archive_hash":"sha256:154dfae4dd35cef3d4f2ee5757abd3ef8790e89f0ec4d61f2803c2c8c4b2f7d7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c6fdfec0-fe88-489b-a72a-fb767df8c919/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["3d_workflow","tools","materials","Modeling","object_colors","procedural_materials","random_colors","texturing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/36355162-1705-4223-88ec-f17cb0aa38b2/","schema_version":"1.0.0"},{"id":"raycast_scanner","name":"Raycast Scanner [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":2140094,"archive_hash":"sha256:2b2e2822ab1911da95e7100a079c86a1a9364df9137425aca3523a8f02759db6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/20ccbb56-5810-44ee-aed2-17d56020ea29/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["3DView","GeometryNodes","Material","Node","raycast","scan","mix","shader","effects","blur"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/61fabc4e-aa4f-463c-8bff-d771f0b85cb2/","schema_version":"1.0.0"},{"id":"renametool","name":"Rename Tool [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1859,"archive_hash":"sha256:31dcfacba225cd89975fd7f1c19fa3b94cc09f95ce6c07096f628c0676467c8e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0b9160a3-114e-4c89-9b1d-34c3e2c20444/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Peter Harmatiy","tags":["rename","RenameTool","Naming","batch","renaming","prefix","suffix","sequential","numbering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/759e3e20-389c-4b76-886e-c0b5f777c831/","schema_version":"1.0.0"},{"id":"RENDERBACK_PT_Panel","name":"Render Back | command line rendering made easy [Before: $8.99, Now: $7.64]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":2469,"archive_hash":"sha256:7eb243aeb9da5906a755214d9e78162c5e867bbd91037dc768e250f5b40314ff","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a520f940-a211-43b4-886f-66606ecf8942/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.64","blender_version_min":"4.2.0","maintainer":"Elton Matiwane","tags":["command","line","rendering","fast","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b9d51d20-8ec3-4b14-8da3-0f7413830280/","schema_version":"1.0.0"},{"id":"RenderForgeAI","name":"RenderForgeAI [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1879679,"archive_hash":"sha256:0dc385a33ba081c8e7863db348534383ec5c26e0c10d20e728ca70e1466db6c5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f79e35f5-30a0-4980-8104-67a149695ac4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["lighting","render","mesh","optimization","AI","denoising","volumetrics"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/244c9e2d-6185-4f62-9501-864aef9d908c/","schema_version":"1.0.0"},{"id":"render_manager","name":"Render Manager [Before: $17.99, Now: $15.29]","tagline":"FULL plan required - upgrade to download","version":"2.5.1","type":"add-on","archive_size":95404,"archive_hash":"sha256:4914ec65c8c5f5649e0e9b385179258cb382034d697a459369c0039f1a98a80d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/170c9ea3-5d5f-4d59-ab71-addb88c81ec2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.29","blender_version_min":"4.2.0","maintainer":"Hassan Hussain","tags":["render","pipeline","animation","scene","camera"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/502f4b0a-b0c2-4b08-8414-424c287bc8ca/","schema_version":"1.0.0"},{"id":"render_negative_frames","name":"Render Negative Frames [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1879,"archive_hash":"sha256:2ba36c9790061f0bf0a448114c2cb1719f4a1cffebe061a383f8c4aa7de28039","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/da07005f-b641-4c1f-9587-91cdd6db7c03/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Rendering","Animation","Frames","Sequence","Negative","Timeline","Output","Preview","Batch","Export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0eaa2786-bfb2-44d6-aa57-1b3ecdd79892/","schema_version":"1.0.0"},{"id":"Render_Presets","name":"Render Preset Manager [Before: $1.99, Now: $1.69]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2792,"archive_hash":"sha256:586e53a0c3d4c433d5d116672994d69a2a20413e310774af3043e382f0f083c1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/803e583e-48e7-4f43-a923-2b5be440a62f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.69","blender_version_min":"4.2.0","maintainer":"James Middleton","tags":["render","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/03f8285a-7a6f-4f92-9eb0-fa65b40f663a/","schema_version":"1.0.0"},{"id":"alexdepario_render_selected_cameras","name":"Render Selected Cameras [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2760,"archive_hash":"sha256:88bf2295c1d2a4efbdec61981f5b46c9f3d84de1f2ae9aa5214c1aeba2eb8a20","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1428efd1-2258-4adb-9a60-898a271b5838/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Render","Cameras","Animation","Frames","Selected","Keyframes","Output","Addon","Operator","Rendering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/20a24366-d063-4bae-86a6-64a4801f82b2/","schema_version":"1.0.0"},{"id":"render_toolbox","name":"Render Toolbox / add-on [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":51865,"archive_hash":"sha256:7acca1532f7eefc9deb6031439dc7302a55449f02caaab0c1c147ba88eb97bde","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/12596ee0-7bb0-43e0-8936-21c791620c89/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["addon","render","lighting","camera","realistic","hdri","environment","extension","rendering","toolbox"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/01c747ba-fe17-40cc-9a06-ddb66fca62f4/","schema_version":"1.0.0"},{"id":"rendertools","name":"Render Tools [Before: $11.99, Now: $10.19]","tagline":"FULL plan required - upgrade to download","version":"1.8.0","type":"add-on","archive_size":55255,"archive_hash":"sha256:740459440b6441a7130c3cabdfe29c1b7685b2b9973315e10954bc5815e73454","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dcf06b24-482e-4e65-a191-d461b65f432b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.19","blender_version_min":"4.2.0","maintainer":"Sérgio Merêces","tags":["render","tools","layers","idtools","image","imagemask","object","objectmask","renderid","selection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/193a112f-1f47-464f-9481-4eb07e57dfda/","schema_version":"1.0.0"},{"id":"rendervise","name":"RenderVise [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.0.9","type":"add-on","archive_size":9789,"archive_hash":"sha256:57e84968a668fabf8d2877346e66eacc63b551237a86a3edf07fa5281eaae1a4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e325318-9d07-42c6-8cc8-51320b3fac5b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"3.0.0","maintainer":"antoine f","tags":["Render","Pipeline","Camera","Preview","History","Compare","Compositor","Thumbnail","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9caef8fc-7e27-4778-a711-4e0c4f65d665/","schema_version":"1.0.0"},{"id":"resmax","name":"Resmax - Upscale AI [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":45049478,"archive_hash":"sha256:0922535ea56912848573cb1b8e9c867351cd9954c6e16a63935818422df6a582","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/15b915f0-42c3-42f8-874f-12e3fca9c4fe/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"PlayfulPixel","tags":["upscale","enhancement","imageenhancement","imagedetail","resolution","upscaling","superresolution","videoupgrade","renderboost","clarity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b1db2ef8-01eb-4b74-91eb-f5b081e8762e/","schema_version":"1.0.0"},{"id":"retro_console_texture_converter","name":"Retro Console - Texture Converter [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9399,"archive_hash":"sha256:1318864822da93978eb7171758723f405929829aec55d440b4fab81118e7b5fd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78f3c85b-c1cb-4a5c-b81d-cee1fdbe535d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Prince Eagle","tags":["Retro","Console","Converter","Textures","Materials","Playstation","Shader"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f2a4899f-8937-42b9-86d4-b383275c19bc/","schema_version":"1.0.0"},{"id":"retro_game_generator","name":"Retro Game Generator [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":32929,"archive_hash":"sha256:330e68364f7398892036bd42414008db1d1a675d9e478930fa447eae445fdd0c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2a0827f7-3034-4e97-8462-526d7cc43a6b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["Render","Compositing","Materials","VFX","Retro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c4461f3c-28a5-46a6-a776-377693db678b/","schema_version":"1.0.0"},{"id":"rigify_exporter","name":"Rigify Exporter [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":16046,"archive_hash":"sha256:3d758fc27afb06d104c0b1b6da32f03752bb54b880075e4e7d2862ea59ce3db0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2dac3f2f-efb2-478b-81f1-664f5811a049/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["export","rigify","unreal","unity","godot","addon","blender","rig","rigging","rigger"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ac766b5e-b730-4763-aba8-fe8f4bea7544/","schema_version":"1.0.0"},{"id":"rigify_retargeter","name":"Rigify Retargeter [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.4","type":"add-on","archive_size":35673,"archive_hash":"sha256:0017a0759d1e8a607e341fab85475d5ca0eeb6659cbfe620c2893a7bf73f3d9d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d2699e3e-2458-4b11-bbea-733e6f03d2b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["retarget","retargeting","retargetting","bones","rigify","transfer","animation","rigging","rigger","rig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/08108568-865c-4219-87e7-144df8ab7fa2/","schema_version":"1.0.0"},{"id":"save_director_pro","name":"Save Director Pro [Before: $6.49, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":17820,"archive_hash":"sha256:6c56ba1b5cc51803d8d3b91fafb4c64facc6c8ec6a209fbda8604729232e03df","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c627b8d-effa-4c1d-bee0-74c298a0234a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["Save","Director","Pro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/92851ab9-2d63-4c4f-8746-41f233d57fb9/","schema_version":"1.0.0"},{"id":"scale_print_camera","name":"Scale Print Camera – Pdf & Exact Scale [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":43786,"archive_hash":"sha256:b53a1ba15aaf4cf1c20493dd9e7b7e13f0250d8424c9aebf22d10ed3a7c5079a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9f78b53c-ae4a-4785-89a1-09cac3296ab5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["blueprint","camera","construction","dpi","orthographic","pdf","print","scale","paper","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/08f3b586-69b8-4fef-8b34-09426bb88b06/","schema_version":"1.0.0"},{"id":"scan_cleaner","name":"Scan Cleaner [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.2.3","type":"add-on","archive_size":20651,"archive_hash":"sha256:9c486142f1d6a78f90f31a2c648635a8b616b1a90197507f50cd82b4ad98b0dc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3546b856-e505-4915-befa-b736873f785f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Zack hough","tags":["Mesh","Modeling","Pipeline","scaning","scan","automated"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aad93279-f98f-4884-8a4a-2a05f0491421/","schema_version":"1.0.0"},{"id":"scatter_forge","name":"Scatter Forge [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":1238739,"archive_hash":"sha256:fb6bed06c1de23c9d97d80672a4ecedf7744d6a7697ba851ed2967bee46d487f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/86ccd088-496e-4545-91c9-c3bda91d4162/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Spectre 3D","tags":["developement","lod","GameDev","Export","Procedural","Scatter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/561addae-d8e9-497f-9c73-961d3d0ab281/","schema_version":"1.0.0"},{"id":"scene_state_bookmarks","name":"Scene State Bookmarks - Save and Restore Full Scene States in One Click [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":7818,"archive_hash":"sha256:6405e1a41d62fa8920f3b7c858590b54096a84c9bc4b06a11ad62235bc223612","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e70fbd8e-2b48-4699-93d7-0573eab3420b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Scene","Render","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/912c7fdc-6b35-45fb-9843-2f751a2cc833/","schema_version":"1.0.0"},{"id":"scenesweeper","name":"SceneSweeper - Clean-Up Commander [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":23168,"archive_hash":"sha256:869b3b93d15c2f7d138697210c3434c97e31849e776517c73185fd4f4eda5f80","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/00dea756-3878-4037-9217-dfc0032a74d9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"PlayfulPixel","tags":["SceneManagement","Cleanup","Utilities","Workflow","DataBlocks","Optimization","Performance","Organization","Automation","Productivity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f5484694-9251-4738-a018-90ae5083fdc7/","schema_version":"1.0.0"},{"id":"wk_schematic","name":"Schematic Editor - Visual Rigging Made Simple [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.6.7","type":"add-on","archive_size":634022,"archive_hash":"sha256:6cea718ed1fcf44841dfa3eda665725af2d870be6e419ae724a357ca79db2c0a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/00e6ba6b-f6c2-4b95-a0a9-c2aa133c1bc5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"5.0.0","maintainer":"Wolfram Kampffmeyer","tags":["Schematic","Rigging","Hierarchy","Constraint","Editor","Visualization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/92b4b030-65f1-48eb-84d9-4f3786c9ba9d/","schema_version":"1.0.0"},{"id":"SeasonSlider","name":"Season Slider [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":46257,"archive_hash":"sha256:562d8eaa29b82b144bba800ce5f367e204d11e7f4d96929940437db0fc33b0f3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/715e7d64-0f61-49a6-baad-20d5ab634e51/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Mutanzom3D","tags":["Season","Material","Node","forest","nature","trees","tree","seasons"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/40705d46-2d85-44fd-8d8b-1db3e6f7a1b0/","schema_version":"1.0.0"},{"id":"sectionbox","name":"Section Box - Cross Sections, Elevations, And Visualization [Before: $29.99, Now: $25.49]","tagline":"FULL plan required - upgrade to download","version":"2.4.8","type":"add-on","archive_size":6748565,"archive_hash":"sha256:1aefdbcf980556de2b10d3fb8bde0d260d9da45d31f50a7a8557a94eb28d843b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cc3a7f57-ddb0-4795-bf23-2677d325c8c0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.49","blender_version_min":"5.1.0","maintainer":"Ruben Messerschmidt","tags":["section","box","cross_section","elevation","archviz","architecture","plan","drawing","floor_plan","cut"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/42a79447-b3f5-4683-a253-73d7360142a8/","schema_version":"1.0.0"},{"id":"section_pro","name":"Section Pro - Sections, Projections & Technical Drawings [Before: $59.99, Now: $50.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":25516976,"archive_hash":"sha256:bf0b7360645992c567af82d242bab14867bf6008d91f322f8f3eaa41f2420dc7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/302ead32-dda5-42ee-8bd1-ddbb59fde059/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"50.99","blender_version_min":"4.5.1","maintainer":"Ruben Messerschmidt","tags":["elevation","ArchViz","section","floor_plan","technical_drawing","interior_design","architecture","cad","dxf_export","bim"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c472fc66-b1c3-4110-8cd4-ebcb25080734/","schema_version":"1.0.0"},{"id":"selective_wireframe","name":"Selective Wireframe - Per-Object Wireframe Control for Blender [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":10492,"archive_hash":"sha256:d1a68e64f6698d3e1aff0c7f56381d0189a3f4ed0b128efc3f06bca6f535779b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7484f1ab-1e0a-4050-975e-f5b93c1e1d78/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Selective","Control","wirframe","everyobject"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5713302f-2e45-4815-b89d-f3d9dd9ceeb7/","schema_version":"1.0.0"},{"id":"Select_Objects_with_Same_Vertex_Count_extension","name":"Select Objects with Same Vertex Count [Before: $0.99, Now: $0.84]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":1445,"archive_hash":"sha256:f3e259eceeebeb7c6455e1e9bab7e6686a2c67517723d927a2895d999aba37b2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2de46965-3ca1-4838-a586-cbef081e83b5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.84","blender_version_min":"4.2.0","maintainer":"Mesk911","tags":["vertex","match","count","mesh","dupicate","select","tool","object","same","similar"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/61bfc41c-f84a-43e3-8c82-a94883475530/","schema_version":"1.0.0"},{"id":"set_origin_to_center_bottom","name":"Set Origin to Center Bottom [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1838,"archive_hash":"sha256:81c9c1e0b887bc18f5e413ca02edfa649da3df61230e2ffca2f3f04a19c1072d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/938e3395-7979-475e-b3f9-7d080db2caf4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Mutanzom3D","tags":["origin","center","bottom","tool","qol","qualityoflife","object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7381a6d4-7480-4a6c-8beb-10180bdb7169/","schema_version":"1.0.0"},{"id":"shakemaker","name":"ShakeMaker [Before: $5.49, Now: $4.67]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":14206,"archive_hash":"sha256:36e39fdd146abe3cf1d89d7ad4bbcc6cb3e70b140a09812592aaf647fa7c1ea6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5e557337-8452-4b1d-b932-c7a1a889f397/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.67","blender_version_min":"4.2.0","maintainer":"Ace Of 3D","tags":["shake","vibrate","waggle","wiggle","wobble","noise","animation","modifiers","camera","fcurve"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aafd9aeb-eda8-4ee4-b7fd-28ae1edad90d/","schema_version":"1.0.0"},{"id":"shape_key_fixer","name":"Shape Key Fixer - Manage All Scene ShapeKeys with Groups & Batch Tools [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.5.1","type":"add-on","archive_size":18152,"archive_hash":"sha256:42cf19cca7b18383d173077cd7db74c46dabe6b71cab8fbebcd2fedbe110236a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0028e4ac-0b4d-4dc6-a2ff-062075fcf0c6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["animation","blendshapes","rigging","productivity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1f14a313-1319-4921-8043-394825fcf083/","schema_version":"1.0.0"},{"id":"ShareTextures","name":"ShareTextures Asset Library [Before: $14.99, Now: $12.74]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":783093,"archive_hash":"sha256:65e40563f57e0fedf66457e7c8c74154c1b32a7cf16c1222436cc96342eccb3b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78eb7228-b341-48a2-a9d7-51616bf758b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.74","blender_version_min":"4.2.0","maintainer":"Share Textures","tags":["Object","Material","Pipeline","UserInterface","asset","library"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/822222fd-6e10-4da6-960d-cb12d7ec3fbf/","schema_version":"1.0.0"},{"id":"mk_shelf_filler","name":"Shelf Filler [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":12857,"archive_hash":"sha256:80218adeb5de818a77d0e927e073c2ff4fea020fd78742d383288df09a17f344","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/617da19f-6a35-41f7-b5d5-26c1fe3eaef6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Object","Modeling","fill","book","decorative","decoration","shelf"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fa82ee50-842d-450a-a6bd-8837926fc743/","schema_version":"1.0.0"},{"id":"jd_shot_handler","name":"Shot Handler [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"3.0.2","type":"add-on","archive_size":49735,"archive_hash":"sha256:f113416a330accfae028bb41d95cb7014d2f1967c4b80653dc98c870f29836d2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/192ad77b-1fb6-4557-ab75-0ea250e15b85/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"dubCUT","tags":["shot","render","camera","scene","manager","collection","shader","overscan","set","setting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/93e43d6b-8f20-478b-bb88-94c4ac387d4b/","schema_version":"1.0.0"},{"id":"shot_manager_pro","name":"Shot Manager 2.0 Pro (Blender 5.1+) [Before: $35.00, Now: $29.75]","tagline":"FULL plan required - upgrade to download","version":"2.0.8","type":"add-on","archive_size":23139698,"archive_hash":"sha256:46f766bfec0a4383b9c90dd172387fd3d15e919fea9343b98ab4c81feb454e47","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/575d0fec-e3f3-47e6-935b-cc39b7f08b39/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"29.75","blender_version_min":"4.3.0","maintainer":"Other Realms","tags":["shot","takes","macros","states","batch","render","burnin","burntin","stamp"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2ace843e-c14f-4eda-b697-fb7065f344d1/","schema_version":"1.0.0"},{"id":"shotweaver","name":"ShotWeaver — Multi-Camera Shot Organiser for Blender [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":10493,"archive_hash":"sha256:8d025358a4b0165f91d26504ac126d77aa8e77aff50e88af94d902ea47b29c9f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bc94be10-941c-44ca-882b-ddc30679da8d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.5.0","maintainer":"Ynleyn","tags":["camera","animation","storyboard","management","render","queue"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f3a2d99d-e315-4918-ba7a-e8bf576afa51/","schema_version":"1.0.0"},{"id":"showcase_studio_pro","name":"Showcase Studio Pro [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":139482,"archive_hash":"sha256:3e3d1586f1ac59458f084ea5a859bd6c515dd7cae24c3eef933a1c31a969235f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/50c7137d-dbcf-457c-9ac0-7a1d6c8d4ea0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.5.0","maintainer":"3dquads blender","tags":["3DView","Render","Lighting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ff65ae79-6580-433d-8e18-98f4d64c7af1/","schema_version":"1.0.0"},{"id":"simple_layouts","name":"Simple Layouts - Full Version [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"0.1.5","type":"add-on","archive_size":308012,"archive_hash":"sha256:c773d88ee7a6158743c98df12a7ab8c81f844b0efb9d3da28f0f8f5b57a75520","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d23f80fe-e4d5-473e-b702-a3ca1a3c9949/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["Layouts","states","Views"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ce426630-5dd8-408b-a2a5-8140b1c4676e/","schema_version":"1.0.0"},{"id":"simple_section_box","name":"Simple Section Box [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":2190,"archive_hash":"sha256:de5bcf5bf9a3cfd8b3773925b91061c63fa50a44cd032def5b7f44bf3e7c04b9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d94ae717-877e-4477-9b5d-0f1d46cb2fc9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Braulio Pedraza López","tags":["archviz","photogrammetry","beginner"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dcb1a05a-5fb3-41b6-87cb-d4a15320d160/","schema_version":"1.0.0"},{"id":"simplify_plus","name":"Simplify+ Add-On: Viewport Perfomance [Before: $23.99, Now: $20.39]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":136739,"archive_hash":"sha256:957887d9eef18a40d9d095f20c09aa90ccf0706556582b0f7dfe27eebdcd9bb6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e426bc0d-aba8-4a45-9455-3301de1f9864/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"20.39","blender_version_min":"4.2.0","maintainer":"Cosmo Mídias","tags":["addon","performance","productivity","animation","viewport","playback","speed","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/55548ced-165b-42b0-8cc2-1fa1a842fc7d/","schema_version":"1.0.0"},{"id":"wk_sliceform","name":"Sliceform PopUp Maker [Before: $27.00, Now: $22.95]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":967509,"archive_hash":"sha256:94ec87ede7ebadd708c879d1476a48b2e3d4589968ca74660477aa757348a49a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/38007a37-f2d7-4cb4-a9eb-c10b1a465b3c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.95","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["sliceform","3d_slice","cardboard","interlocking_objects","lasercut","maker_tools","papercraft","paper_designer","popup_card","svg_export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ee2ffd44-5bed-40e0-be94-43b22b2e80e3/","schema_version":"1.0.0"},{"id":"smart_align","name":"Smart Align [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.40.0","type":"add-on","archive_size":30781,"archive_hash":"sha256:59e65c8482bfb52cbc7d894afa19958f492587f38a6693c299120f3a381ee372","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/85389cd7-26fb-46c8-91ca-8a69b1315e9e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Gabor Kiss","tags":["align","snapping","transform","alignment","modeling","move","workflow","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2528d6bc-faa7-4231-bc63-8eba09c4b88f/","schema_version":"1.0.0"},{"id":"smart_autosave_pro","name":"Smart AutoSave+ (Basic Tier) - NovaStrikes [Before: $8.99, Now: $7.64]","tagline":"FULL plan required - upgrade to download","version":"7.0.3","type":"add-on","archive_size":7530,"archive_hash":"sha256:fbe220ec55dcf6147bd900c982c9c1c91fa53c725dd5e00af7c1997aac7fb987","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/db1b49a2-df3a-47ba-ab65-25cd7390ffd6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.64","blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["crash","autosave","scene","safety","backup","system"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c45fc3db-f2a8-4375-a767-48bffaf432d6/","schema_version":"1.0.0"},{"id":"smart_explode","name":"Smart Explode [Before: $45.00, Now: $38.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":16997,"archive_hash":"sha256:edd41a20f4dce1fa76ffb3a26e3bf5b7f2c29e371d93bfc95de374ac51334846","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a367bd41-63eb-4ae9-8ca3-bdac8bf22b91/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"38.25","blender_version_min":"4.2.0","maintainer":"Daniel Farjoun","tags":["Explode","Animation","Archviz","Product","Exploded_View","Procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a152acb9-f8b5-41df-b32c-3b2d4790a934/","schema_version":"1.0.0"},{"id":"smart_scene_organizer","name":"Smart Scene Organizer [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":6316,"archive_hash":"sha256:8640f77e625614002d0e286a46e13c0e59036ea360c43aed31ba35343f6a044e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d8039a3c-8734-402f-92ba-94900c493f39/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"3.0.0","maintainer":"SHAXBOZ Ergashev","tags":["blender","addon","scene","organizer","asset","manager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7f474641-f0f4-418c-8e3a-8506a93064cb/","schema_version":"1.0.0"},{"id":"snappy_rigger","name":"SNAPPY Rigger [Before: $15.80, Now: $13.43]","tagline":"FULL plan required - upgrade to download","version":"1.2.2","type":"add-on","archive_size":1664368,"archive_hash":"sha256:00101c2fadcbe97df886a9b505f692422683897a1bcd686a5f4309bec04ecd54","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f4047669-f313-4cdb-ac01-3b8772cbf69a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.43","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["Rigging","autorigger","bones","detection","generator","snappy","rig","autorig","rigger","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c9841f8d-5056-41a5-972d-6c6cea2fd4d4/","schema_version":"1.0.0"},{"id":"solaris_creator","name":"SolarisCreator Pro 2.0 - One click cinematic lighting [Before: $69.00, Now: $58.65]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":32693,"archive_hash":"sha256:2955231eb9c54f768dc8fc2362fa9fc865e8d1a8154494cf382468fb0d0a6fed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/526f9eac-bba6-4639-bbab-9607e0c3c1d3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"58.65","blender_version_min":"4.0.0","blender_version_max":"5.2.0","maintainer":"Digi Motion Studio by Viet Luan Tran","tags":["sun","lighting","daylight","night","sky","hdri","setup","settings","light","nightlight"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/78fdf920-b5dd-4e2d-ae89-d6c53ac7bc2f/","schema_version":"1.0.0"},{"id":"sort_objects","name":"Sort Objects [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2080,"archive_hash":"sha256:acf397a1ef0376442ae348b5eda74aec9f0787b232ac393b33f7b33b09fa8e15","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a3326e40-fbc9-49a2-8576-35963c0d3cd2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Sort","Objects","Interface","Collections","Organize","Faces","Materials","Meshes","Type"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/90804401-0756-4678-bbee-9482723b8db3/","schema_version":"1.0.0"},{"id":"space_generator_v1","name":"Space Generator [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"3.2.2","type":"add-on","archive_size":543142656,"archive_hash":"sha256:1f2a09faa7d927fbfd0b093da716f7e528f212ec1d5eba94438599399775cf67","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2be1351b-e513-4d23-b808-c204a8e2b27c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.0.0","maintainer":"Stellart","tags":["Space","Universe","Planet","Moon","Sun","Star","Exoplanet","Asset","8k","4k"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8ec3496a-1c6d-4137-beed-afb1618aa0b6/","schema_version":"1.0.0"},{"id":"specific_frame_render_manager","name":"Specific Frame Render Manager [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"3.2.0","type":"add-on","archive_size":21428,"archive_hash":"sha256:5c5cfaf48d121a201d15970d8af3b75cb043d2c2aa5b027360aede3ea796c984","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9049369d-6bbf-4849-a0aa-5430dd486a82/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Render","Camera","Output","VFX","Batch","Pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/eda01abf-f2e3-4f3c-b7e4-3441c6dd4e2c/","schema_version":"1.0.0"},{"id":"stairs_maker","name":"Stairs Maker [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"3.5.2","type":"add-on","archive_size":1954483,"archive_hash":"sha256:12ccbe83ae847b6db4b544475b1ecc8ca59e80a09d5a6bf95d622a2eb89dd0c8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2ed4b3c4-8150-4715-a93d-c8f8eced6e5e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Blender Bash","tags":["stairs","architecture","maker"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9489f9e0-91cc-414f-a7c0-b637a70a4eae/","schema_version":"1.0.0"},{"id":"starconnect_pro","name":"Star Connect - Smart Mesh Triangulation [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":128633,"archive_hash":"sha256:5cac8b7f6fd6438709d3d9ba30a7136f3d5d23ae172b1e38eb6ae0e8fb189ed8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4aa3f685-f52b-4f66-9762-771ec163c0a3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["triangulation","mesh_triangulation","star_connect","hard_surface","mesh_clean"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b59c688-c13b-4611-8e18-98ad327133c9/","schema_version":"1.0.0"},{"id":"stylized_water_pro","name":"Stylized Water Pro Shader - One-Click System [Before: $24.00, Now: $20.40]","tagline":"FULL plan required - upgrade to download","version":"0.5.0","type":"add-on","archive_size":8005660,"archive_hash":"sha256:3cad70c57a27ae2acf27a2d0a2fa9a16b0511d15b6a1c710e663568c086b4af5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/03e0ce35-7260-4f9a-aa81-e37f633667e5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"20.40","blender_version_min":"4.2.0","maintainer":"Anton Maltsev","tags":["Object","Material","Node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d438949d-5bb7-4d33-89bf-19893c0290d9/","schema_version":"1.0.0"},{"id":"mk_surface_blend","name":"Surface Blend [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.5.4","type":"add-on","archive_size":7077,"archive_hash":"sha256:5c277e0eb5c327d4ad603dbd2922b0658ee0c864f334b3ebfac3e88987d25b37","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/af887228-87b3-4b3d-8e5e-d227fcc6ca8d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Object","Material","GeometryNodes","blend","dissolve"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/553fe958-98eb-475c-9531-218ea6cabfed/","schema_version":"1.0.0"},{"id":"surface_effects","name":"Surface Effects – Procedural Material Enhancer [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":23835,"archive_hash":"sha256:db1541adbb92cd4aa13b3bd73bb0c57bb7cde085c11536f63d0a887da810c828","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/290a8fcd-eec1-421c-9b4e-dc8a5f99e3ee/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["procedural","effects","rust","scratches","wetness","dust","edgewear","material","nodes","surfaceeffects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d212f51d-4f0e-465e-9ac3-883925e83903/","schema_version":"1.0.0"},{"id":"SurfacePainter","name":"Surface Painter [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":36113940,"archive_hash":"sha256:26a3e456bf03fb45ab2912e4c3b659b38cf2b9a9c298f550a7d1f54c0b8a6735","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/63e9f89c-0d70-43bf-9b99-9e88f3a4864b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"polyspaace","tags":["materials","painting","surfaces","modelling","pbr"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f504ec5a-642c-4947-8cb3-b25523bf186e/","schema_version":"1.0.0"},{"id":"survey_points_annotator","name":"Survey Points Annotator – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":60460,"archive_hash":"sha256:2653c075f02776bdff274fad70e43d9885a8d40d3f0aa4021202a97809ce4599","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fa217ed0-dcaa-4fe7-81df-79e16c617683/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","UserInterface","Mesh","Object","Annotation","Survey"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/47132746-52bd-43fd-89a4-82a5432aa9a1/","schema_version":"1.0.0"},{"id":"survey_points_exporter","name":"Survey Points Exporter – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":39261,"archive_hash":"sha256:7296dc8dada42dda5ee981c8f96b7b6598c300c5d2ddfa0caff01dd91904e42a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a382e44d-af3f-4af1-99df-7334a13272f2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["Export","Survey","Coordinates","CAD","GIS","engineering","construction","geodesy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4a5b032a-90aa-4148-9e40-f7318a5eaf17/","schema_version":"1.0.0"},{"id":"survey_points_importer","name":"Survey Points Importer – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":48116,"archive_hash":"sha256:07dae0d5d8f657eb750fc5b2599c3398a22017f881d5331a27ba40033f4ebd30","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/18d5b865-6a8d-42eb-a74b-820c69792a9f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["survey","CSV","CAD","points","geodesy","construction","engineering","BIM","coordinates","import"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aa5ffc37-f082-4bf9-96f7-cf24ccf16575/","schema_version":"1.0.0"},{"id":"survey_terrain_tools","name":"Survey Terrain Tools – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":43979,"archive_hash":"sha256:ec0f9da235bf43c1719622cf91a37f5fb38e880201ae9f6c7dce6e54661f88a6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/317055ca-0c25-4d4e-ab6d-5a8d9c48b7df/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","UserInterface","Mesh","Survey","Terrain","Measure","terrain","Slope","geodesy","survey"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aeb85251-1fca-422a-ad99-acc4acc934a5/","schema_version":"1.0.0"},{"id":"svg_exporter","name":"SVG Exporter 1.1.0 [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":67446,"archive_hash":"sha256:5f1feb0d46de24a8816f6d6d0fe4baffba23e6b3855054571c9d918b209f1b46","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a85d69f2-e9f0-4525-8389-d629065c27c1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["svg","export","illustrator","vectors"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3c751ebd-c083-408b-a82a-50ad796f78ec/","schema_version":"1.0.0"},{"id":"swiftlod","name":"Swiftlod - Level Of Detail Creator [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5669,"archive_hash":"sha256:5e989039793ea4a133614d77893ef0a6f0a0f024c3dc5ef1f79c924b8b2e1fc3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2464af97-146a-47d1-be1a-b6521114e96d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"FANNΞC","tags":["easy","lod","optimizer","plugin","pro","Level","Detail","Optmize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cb8119b8-835b-4104-881d-9e6524c2fecb/","schema_version":"1.0.0"},{"id":"tcam_render_pro","name":"TCam Render Pro V1.1 [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":5907,"archive_hash":"sha256:d376325dd7c4970f743d9bce95659dbf155916c9fc073bba6674f539910bdf50","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cb0fea4d-5722-44d0-bc66-fb4a904cc0e0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Otonkart Tonka","tags":["render","multicam","queue","renderqueue","camera","studio","video","automation","batch","rendering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/317bf5e7-cf4a-40c4-8fd0-37e7400fa359/","schema_version":"1.0.0"},{"id":"textopbr","name":"TEXtoPBR [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":15465,"archive_hash":"sha256:7dc82c0e29fc8a939fd4480d424cf0707df2bfe08d83578017dba0211e62aa50","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b351eeb4-d93a-4473-9c48-68c6e1828b07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["pbr","material","texture","textures","textopbr","addon","extension","shader","generate","displacement"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c9c54d68-ae48-4d39-bd29-5109652c19bf/","schema_version":"1.0.0"},{"id":"texture_layer_manager","name":"Texture Layer Manager [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":882964,"archive_hash":"sha256:5acc884513e5397e93eb2727fe36edc2dbda6a2ba4e755e2d65f74068eb493b9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a4449ebe-d709-412c-93d1-4d9134f00ec1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"5.0.0","maintainer":"riccardo scuto","tags":["Material","Node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0c579cdc-7c9d-4738-90f9-d22e0b6ff810/","schema_version":"1.0.0"},{"id":"texture_resolution_manager","name":"Texture Resolution Manager [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5016,"archive_hash":"sha256:2acab6532846076f2be8681a9fe3728a88e475e4d5e9129f1b2954374e524f8d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/64c383b8-7cc0-4841-90da-d96936742246/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["Material","textures","texture","resolution","manager","8k","2k","8kto2k","vram","crash"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dbf87b90-4f14-4b5b-b1b6-94a42a56607d/","schema_version":"1.0.0"},{"id":"Texture_Setup","name":"Texture Setup [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3275,"archive_hash":"sha256:cf87113efe4f2741f72324e75b0b7d22a511a9d838afe3272ee70026f9a20b0c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/304da0fb-42b6-4763-b035-e7a1f872631a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"ImNoah","tags":["texture","setup","pbr","material","easy","beginner"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1bc8d1e5-30ec-4f13-970f-753bb85d3933/","schema_version":"1.0.0"},{"id":"Texture_Tools_Addon","name":"Texture_Tools_Addon [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":6640,"archive_hash":"sha256:da5b85b68abcc1a6a9d40235e689d142a16f871f50f6b9f948d6b121728514fc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4f3c8941-ea6e-4a95-9247-e5bbea96fd88/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Amal David","tags":["UV","UV_tools","texture","modelling","generic","symple","decal","trim"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2b074e8a-844b-458a-a01b-84cada557d0f/","schema_version":"1.0.0"},{"id":"blender_ustad_texture_transfer","name":"Texture Transfer - High-Poly to Low-Poly Texture Baking [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":10623,"archive_hash":"sha256:9e26d18f2777c9476ac61b89f9fe6b6e7929cca9735b70fc708554b8445a9b96","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e5c46144-0572-41f7-aba3-4c34f0fa7c90/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Bake","Material","Object","UV"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/48a8128a-6a37-4ec7-a3d7-656e69946d4b/","schema_version":"1.0.0"},{"id":"Texturology","name":"Texturology™ | AI PBR Textures from a Single Image in Blender [Before: $19.50, Now: $16.58]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1459005875,"archive_hash":"sha256:466e058cf39b8566902b14f79011afc18d525d1a0a7e3b6448b65e287463f644","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7c5ce419-191e-4784-aa05-9d2ecbb7aa07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.58","blender_version_min":"4.2.0","maintainer":"Giambattista Von Nettesheim","tags":["addon","Substance","3D","AI","Upscaling","Inpainting","materials","PBR","texturing","imagetomaterial"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9d7fb688-d32f-4b21-acb7-a8726d96ddd9/","schema_version":"1.0.0"},{"id":"the_bakery","name":"The Bakery : One click material baker [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":1833039,"archive_hash":"sha256:e28b0a1f08f75a93ed72593d4f2073affaae653c2dfb0480ae15912ec464e154","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/704a83c3-e237-48cf-8c00-cb98e02d7816/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["Material","Baking","Pipeline","addon","texture","bake"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/438cef85-944d-48a9-b7c7-2ffb63901baa/","schema_version":"1.0.0"},{"id":"hstb_pro","name":"The Hard Surface toolbox v 2.0.7 i2M image to mesh system and importer [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.7","type":"add-on","archive_size":159086065,"archive_hash":"sha256:1965899e1578da49188a948210b5700cf32c08c2831608397ebaa2efeea62a68","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f4e2fa57-414d-421d-a2f0-ec909578a309/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["HardSurfacetools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8c9ca364-7c7b-4a70-86b9-28e94fd80583/","schema_version":"1.0.0"},{"id":"Tiles_Importer","name":"Tile Importer [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":944337,"archive_hash":"sha256:e397582008ec0eee3d81c380277ea2b6d4dcf988db8b704c236b06c681110003","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dca9bd98-0e9b-42a2-ac97-6ab9825627b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["map","blosm","google","3d","tiles"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b62311af-f1bc-43d8-845a-cdd313f32dbe/","schema_version":"1.0.0"},{"id":"time_click_tracker","name":"Time & Click Tracker - Break Time Reminder [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":33678,"archive_hash":"sha256:5cf1de2c7a8892f13a98f74f6cfe821babf13f03e67f328ebf762f46e51611d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e3d7593-f190-40b5-b1ab-809767a248b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["System","Productivity","Tracking","Analytics","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7da69ca1-9644-4e75-b295-e58368813c60/","schema_version":"1.0.0"},{"id":"timelapse_studio","name":"Timelapse Studio V1.0 [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":257056,"archive_hash":"sha256:41fd3f67885ff8ba32652e9145ac1eec5c7c95cc791827a954e5e10a1cea4f55","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/37f01828-add1-4a34-971d-914731b8378f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Rohit Punnen","tags":["timelapse","hyperlapse","screenshot","video","tutorial"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a3f446a9-e8bb-422e-bfc5-d424d1c421a4/","schema_version":"1.0.0"},{"id":"trimotion","name":"Trimotion-Animation Optimizer [Before: $32.00, Now: $27.20]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":55849,"archive_hash":"sha256:dad0d50ae418ffb09385ea1ae481d8bc5df9dcb71b92fb1f51c6921cfffd4eed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1077232-0301-4173-bd04-bc7a4eff4422/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"27.20","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["animation","optimization","cleanup","mocap","simplifier","tools","rokoko","curve","motion","keyframe"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/07044b73-ff12-424f-b4ce-3240d1bae740/","schema_version":"1.0.0"},{"id":"trim_sheet_express","name":"Trimsheet Express [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.4","type":"add-on","archive_size":44729,"archive_hash":"sha256:7f03b201ca49a0146bbe4d2ef7a1eadf1acdecc0374e7a2502ea7d77ccf3d530","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fa7c57f2-bbfd-48ba-9bab-1b3efed7ab91/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"Troublesome Eissa","tags":["trimsheet","texturepacking","baking","sheet","materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/24639bd7-bbf1-40cf-950c-2454ab9d1a7a/","schema_version":"1.0.0"},{"id":"triplanar_displace","name":"Triplanar Displace [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":5585,"archive_hash":"sha256:a682057b8e0a7f681d97fa0f791304416186ac4486b94c5f2ccf68d73d0b883b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/196e3b7e-3797-4fc3-b255-12fc1515244a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Anas Herba","tags":["blender","procedural","displacement","no","uv","triplanar","displacement","rock","cliff"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9a81bcf4-4a33-4248-ab1f-d28c901c465a/","schema_version":"1.0.0"},{"id":"udim_atlas_builder","name":"UDIM Atlas Builder [Before: $18.00, Now: $15.30]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":46153,"archive_hash":"sha256:6ce8871915b669feb3bc9e7fbf0818b0e1b1179d3c388b2a1cd8361e82bf57c7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fbfd2505-0b56-4e62-84a0-34ae9ec8c3b3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.30","blender_version_min":"4.5.0","maintainer":"Ashish kumar Maurya","tags":["UDIM","UV","Mapping","FBX","Optimization","Materials","texture","baking","gameasset","atlas"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b4048c30-85fc-4fb3-9e15-d13a36ea90b8/","schema_version":"1.0.0"},{"id":"ultimate_animation_suite","name":"Ultimate Animation Suite [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":26615,"archive_hash":"sha256:a0a86c9d504534758288888410cf529c8ce667664a2aed66a7f223cdc42b0bbe","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3c058999-83d8-4000-be61-85b8bf94a9f0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["animator","camera","3d","3danimation","camerapreset","animationtool"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/39ea8e25-2663-4105-a6a1-cdb8d127920a/","schema_version":"1.0.0"},{"id":"ultimate_camera_shake","name":"Ultimate Camera Shake Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"5.5.0","type":"add-on","archive_size":18870,"archive_hash":"sha256:df401a91fc4bb160b3b90bb20ac4f3a9d4e5e033f6e11f99278aaeb4f5ed198f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d908778e-fd57-4b1a-8b54-0ffdaa96823b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Animation","Camera","VFX","Shake","motion","cinematic","keyframe","tool","vibration","rotation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ec291b17-d50a-45c6-93bf-d0167068bf69/","schema_version":"1.0.0"},{"id":"ultimate_outline_generator","name":"Ultimate Outline Generator (Eevee & Cycles) [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.6.1","type":"add-on","archive_size":17488,"archive_hash":"sha256:93f174a95ce78dea36cbbb201b75d0e739a40721082ee5d53600f74fa37ce1e7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0165ea8d-1699-496e-a9bb-b48527de552d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["Eevee","Stylized","NPR","Toon","Anime","Lineart","Solidify","Shader","CelShading","Comic"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e6b21427-bd81-4bfd-a646-aa3647c805f1/","schema_version":"1.0.0"},{"id":"ultimate_stopmotion","name":"Ultimate StopMotion Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"14.2.0","type":"add-on","archive_size":17570,"archive_hash":"sha256:8967d03e228f333c5d4608539b6cf5e4d3273db8f8de94be4722df80ab36a52a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f7473a3-aba2-42d8-84fa-b14ce497d261/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Animation","StopMotion","Keyframes","Timing","Stylized","Tools","frame","nose","jitter","claymation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c989c2a-f7dc-42b0-a2ca-968912384ff8/","schema_version":"1.0.0"},{"id":"ultimate_toonshader","name":"Ultimate ToonShader Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":18967,"archive_hash":"sha256:46cb4e81cadfeb449a090f56e07799ab99a17eed3a3906b2178c7934fe2f8f54","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8efcf29c-80a1-4b25-95e9-c58c81aa23c6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["Render","Shading","Stylized","NPR","Materials","toon","shader","comic","anime","2d"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4573ad1e-77a2-4c52-9cc2-baa44f4a6dbb/","schema_version":"1.0.0"},{"id":"undo_history","name":"Undo History [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":1268,"archive_hash":"sha256:ec7b88c1fbdd7e24b8b34597ca78c8383c80035b65f47999ce849ab4633a76b3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/db09a89d-721d-4f74-83a8-6d0ba607ae25/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Undo","History","Interface","Navigation","Workflow","Redo","Panel","Tools","Actions","Shortcuts"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/110a0e8d-f1d8-4479-9c3b-9188da0f4fc2/","schema_version":"1.0.0"},{"id":"mk_universal_converter","name":"Universal Batch Converter [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":6018,"archive_hash":"sha256:cc9392e15f66b50687a68c7453880cbc005db6692a23dcf61edc596b53321a99","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c3beb4fb-eb7e-42be-97ff-82d67a1fd76f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["converter","batch","fbx","obj","stl","gltf","glb","import","export","pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aa445dda-b4cd-4936-9cc2-88c9c3fff545/","schema_version":"1.0.0"},{"id":"upscalar","name":"Upscalar | The Image AI Upscaling For Blender [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":679178887,"archive_hash":"sha256:4317b3a0a42e7699e5429e570d07193be262e09462c6822ad63222c11a984313","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f4c9026f-9bc3-4048-8e4c-f29ae7026bf5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Giambattista Von Nettesheim","tags":["4k","enhancement","Super","Resolution","image","editor","upscale","lookdev","upscaling","compositing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/237e6171-8869-4612-bd5e-a3ca427ef5a4/","schema_version":"1.0.0"},{"id":"uv_king","name":"UV King | Single-Click UV Unwrap & Pack for Blender [Before: $17.00, Now: $14.45]","tagline":"FULL plan required - upgrade to download","version":"2.2.1","type":"add-on","archive_size":1531633,"archive_hash":"sha256:d21e31cbcaa2b3587163abe394472c4024d10a76b8fd618f7b40116a2a090f33","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f6e89e4f-2dd5-4394-9e2b-2149dc2e6e15/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"14.45","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["UV","UVPACK","UVunwrap"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6c03319b-087f-4446-a9bc-959f4e0eea65/","schema_version":"1.0.0"},{"id":"vacuum_wrap","name":"Vacuum Wrap [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9503,"archive_hash":"sha256:7ac023d64ac0968bd7ec2940a9285222b24c13037ac1cc8a06f1c9e4e9ee666e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/71fd3df5-c65d-4ade-b32a-e176c906ca5a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["blender","addon","shrinkwrap","physics","packaging","cloth","simulation","vacuum","wrap","plastic"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8251d25a-ed34-41e4-b702-eed07c681495/","schema_version":"1.0.0"},{"id":"version_keeper","name":"Version Keeper - Premium Project Management [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"2.0.5","type":"add-on","archive_size":19589,"archive_hash":"sha256:d4c1cfdd5a4c1b4af4581cb4fe9203ab8d4ced9ab51f48678714a16449ef875b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/83c0a989-7b1d-4657-9c1a-0af96a578a8e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Re Siva","tags":["System","workflow","productivity","Utility","Interface","Organization","Asset","Management","Backup"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b7f2f7e1-86cd-490d-9097-dd22a319d9f0/","schema_version":"1.0.0"},{"id":"vfx_scene_builder","name":"VFX Scene Builder - After Effects to Blender [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":129261,"archive_hash":"sha256:6161d5fabb72404e17e05f1dfcb71922ef9062bd1f3134a7162090623a3f8241","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/acf85984-0f08-49ba-aaaf-849ee1553c1c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Serhat Dönmez","tags":["VFX","Workflow","Camera","Track","CGI","after_effects","blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/17256fe9-432d-46eb-9245-892fad2faaf7/","schema_version":"1.0.0"},{"id":"view2cam","name":"View2Cam [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":11420,"archive_hash":"sha256:e27bdd8360c49857bf00336296af0e1363874f7711ec84199770dc42684ba0a9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/97960a97-5440-4859-b168-913fdf693ebb/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Camera","animation","movment","viewport"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/75354932-0842-48fb-a148-bda2078edd81/","schema_version":"1.0.0"},{"id":"viewport_object_finder","name":"Viewport Object Finder [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":12335,"archive_hash":"sha256:6fb559947a155ba05be51d97f7e57ff6831eb1b976903503e20833c869f23430","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/180c824a-a586-4d8b-b7db-d6e3e405bdce/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Object","Search","Finder","Outliner","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9a832280-ec35-49fa-bfcc-6b97932736d3/","schema_version":"1.0.0"},{"id":"viewlink","name":"ViewSync - Viewport Navigation Sync [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9926,"archive_hash":"sha256:bc0931eacd7c2c282e27e3747fefa76f036ec804b7ce38029f136cb220139de1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a4424785-0359-414d-986e-0d6dea34f3eb/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"PlayfulPixel","tags":["blender","viewport","navigation","sync","multimonitor","modeling","animation","workflow","camera","presentation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14ab582e-2794-4406-9427-af93348e7cf9/","schema_version":"1.0.0"},{"id":"VSEDAWFX","name":"VSE-DAW FX [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.9.7","type":"add-on","archive_size":466900,"archive_hash":"sha256:eb835556e726cb4e92ae6a38940e657fd3e460ec5bf9261403584cd747a54d02","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e1231647-89e7-4925-8b67-1a44dc3151d1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["DAW","effects","audio","music","FFmpeg","compressor","mix","mastering","sound","reverb"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dea4de69-4f56-4791-b8f7-a315f0d489c7/","schema_version":"1.0.0"},{"id":"wireframe_lens","name":"Wireframe Lens - Inspect topology without switching modes. [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"2.3.0","type":"add-on","archive_size":13384,"archive_hash":"sha256:99c4709ad0b3ecf7afc2e71bb25a1bf8d60dbafbf48fd72ce888f4c952c4c8c9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0f494136-21a7-4c11-8e55-899ba79d01cd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Mesh","3DView","Modeling","UserInterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0ee85911-a0cf-471e-8534-d556ef42ef7c/","schema_version":"1.0.0"},{"id":"wk_bookart","name":"wk BookArt Addon [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":3391954,"archive_hash":"sha256:ffa35fd309f79fd2c1f6d55a2f732f20f855b047f1c3fec900d871ae4e72a457","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5bc3a7d5-5b6c-450b-bd51-b0570f8099c1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.5.0","maintainer":"Wolfram Kampffmeyer","tags":["BookArt","BookFolding","Papercraft","Pattern","SVG","CSV","Manufacturing","Layout"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8f8c5952-b13f-4a54-8684-323b3a421da3/","schema_version":"1.0.0"},{"id":"wk_facerig","name":"wk_facerig – Fast, intuitive facial animation in Blender [Before: $13.00, Now: $11.05]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1144829,"archive_hash":"sha256:5954c8ee130e0ec355c161ff81250db8925ec8c75e451d42cf06f4ce4bbc69f0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c4f7c302-88e4-476c-8281-375a613e32ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.05","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Face_rigging","Rigging","Slidercontrol","intuitive","animation","blender","facerig","lipsync","automatic","animator"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cd687c32-9fa6-427b-8142-49fdaad99279/","schema_version":"1.0.0"},{"id":"wk_mechanics","name":"Wk_Mechanics - Mechanical Linkage, Cam Designer & Automata [Before: $27.00, Now: $22.95]","tagline":"FULL plan required - upgrade to download","version":"0.8.0","type":"add-on","archive_size":6234341,"archive_hash":"sha256:4039181e864ab4aebb2a1ba46ca9dfb0c3db42e563ed50b9c72f2969706f4ccf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0b59a8a2-8d24-4754-89cd-330f5cabac29/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.95","blender_version_min":"5.1.0","maintainer":"Wolfram Kampffmeyer","tags":["Rigging","Animation","simulation","automata","mechanics","drawingmachine","strandbeest","walker","engineering","linkages"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/904f8506-9293-426c-8c21-9a7d287a497c/","schema_version":"1.0.0"},{"id":"wk_powerpin","name":"wk_PowerPin [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":428466,"archive_hash":"sha256:6f3531a8c30c320101e009edabafa6745dea2f4de766529bfd5f159000fde0e8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3027755a-2542-4559-8ce4-5eb83a2cc929/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Animation","Walkcycle","NLA","FootPinning","Baking","GraphEditor","Rigging"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6a990ce8-1452-4050-ae7e-219aa109be34/","schema_version":"1.0.0"},{"id":"wk_workspacetools","name":"Workspace Tools Addon Presets [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":307370,"archive_hash":"sha256:69942a26f934364e86bcf70a0981259d4e7ea425e8e5c78e9220297c45075b71","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dfcae439-c3e3-4ba2-9e79-c9bbc1c19008/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["3d_workflow_optimization","addon_manager","addon_presets","blender_n_panel","blender_presets","custom_workspaces","freelance_tools","layout_presets","productivity_tools","workspace_manager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8e23b6e9-abf3-4200-8b07-fc01d4ee8443/","schema_version":"1.0.0"},{"id":"teca3d_wrap_for_blender","name":"Wrap For Blender - An Alternative To R3DS Wrap - Fitting A Base Mesh (Topology) To A Target [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":26588917,"archive_hash":"sha256:c30d63a326fd39fc891fa5d6211080834bcf1f54841cec23324040faa7721081","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7748a436-368d-4e4c-8152-4ca6579945ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"5.0.0","maintainer":"TECA 3D","tags":["mesh","modeling","wrap","retopology","character"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3b628c1f-b0f3-4563-b7e1-e6da8c054d12/","schema_version":"1.0.0"},{"id":"xray_selection_pro","name":"X-Ray Selection Pro [Before: $7.99, Now: $6.79]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5532,"archive_hash":"sha256:b82c8b8e7e2354ec9af6a4b91b9696f5270645869c88cfe2d26ab7705418458a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0f713e00-3e20-4b4b-95bd-d527e1810add/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.79","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["xray","textures","3dalpha","opacity","instantxray","visibiliy","addons","pro","3dviewport","scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7bf7d68b-bfd8-471a-bd97-e4a2d38d971d/","schema_version":"1.0.0"}],"version":"v1"} \ No newline at end of file +{"data":[{"id":"blenderkit","name":"BlenderKit [FREE]","tagline":"BlenderKit official add-on","version":"3.21.0-260628","type":"add-on","archive_size":39143952,"archive_hash":"sha256:fbeee0f603b5ca23aeb493d7826051d0d47ec2dd28ce1469b1a0f3197d2e1e8c","archive_url":"https://www.blendkit.com/addon-download/blenderkit.zip","blender_version_min":"4.2.0","maintainer":"Petr Dlouhý","tags":["blenderkit"],"license":["gpl"],"website":"https://www.blendkit.com/get-blendkit/","schema_version":"1.0.0"},{"id":"threed_print_prep_wizard","name":"3D Print Prep Wizard [FREE]","tagline":"Auto-detect thin walls, non-watertight meshes, overhangs; offer","version":"0.1.1","type":"add-on","archive_size":3221,"archive_hash":"sha256:290e3502ded6546478da53ca321a15e1594a2b2bcef260bc02bc9cfcbcd28c31","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bd4dac1f-f36d-4316-8680-efe9f4bb23d1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["3DPrint","MeshRepair","Workflow","Utility","Addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a85bc12b-33c3-46d0-a7b7-ed15cc5689c3/","schema_version":"1.0.0"},{"id":"ThreeMF_io","name":"3MF Import/Export with Material/Paint data [FREE]","tagline":"Import and export 3MF - Material and Paint supported, Orca/Bambu","version":"2.7.4","type":"add-on","archive_size":348357,"archive_hash":"sha256:c7ae28365c5080ffc3969b6fe09ab5e91404a334d0a69e097f5aae446326c499","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5846fbb6-8465-42b1-91b7-75b70372e699/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["3mf","multicolor","3d","print","import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9a5b095b-304a-461f-b3ec-6e4a8044f9c0/","schema_version":"1.0.0"},{"id":"ActionBlocks","name":"Action Blocks - Preview [FREE]","tagline":"Use nodes to quickly create animation variations, block outs, ga","version":"2.0.2","type":"add-on","archive_size":2854741,"archive_hash":"sha256:d925ad69670118b04c21d28ab90bc39e60c434b8b6ba403d59b863459b51c812","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/81dbf135-1be2-4ffe-a9c5-b039e4cf4103/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["Animation","nodes","mocap"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0b612037-1902-43e0-9a4c-1189bf7315de/","schema_version":"1.0.0"},{"id":"addon_install_button","name":"Add-on Install button [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.1","type":"add-on","archive_size":1751,"archive_hash":"sha256:a048d9b9d6565cd2529473da667423ad920b7eed03114ce6ecdc801a6377e12b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6c24661e-b400-4caa-8152-e69f7323bf86/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Grimmotron","tags":["UI","legacy","install","button"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/11a6fbc6-93ea-4e3a-a61f-d3b54878701a/","schema_version":"1.0.0"},{"id":"advanced_plot_equation","name":"Advanced Plot Equation [FREE]","tagline":"Plot explicit, parametric curves & surfaces in Blender","version":"1.3.0","type":"add-on","archive_size":951033,"archive_hash":"sha256:66e4575e3eb0739897f1ea0fda81ae9c9884fb525b355b651ff31adc5c1305a5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9ccce277-2d26-445d-96b1-4c7b5d3c5ba9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["plotting","visualization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f1f71ba8-847f-4dd4-a0b6-fc957ff608be/","schema_version":"1.0.0"},{"id":"ai_material_generator","name":"AI Material Generator [FREE]","tagline":"Generate seamless PBR materials from text prompts","version":"0.2.0","type":"add-on","archive_size":3855,"archive_hash":"sha256:87a4d1d421f9065336845998c3ac5f4967d4b521f2d0f3ac8b6f020747a5b1dc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f63360ca-ffdf-4ad3-bbd3-1f769c0392eb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Material","PBR","Textures","AI","StableDiffusion","HuggingFace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5db37e26-e59f-4638-bf34-1993d171ac70/","schema_version":"1.0.0"},{"id":"render_estimator","name":"Animation Render Time Estimation [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"2.3.0","type":"add-on","archive_size":3561,"archive_hash":"sha256:f40d8268bc11f6b7b294dbd9c0f2e14322365857fc5aaa0be35e84fd82dcedea","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/395dad33-5261-443a-9d42-11dc2de83075/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"UnicornHunter MC","tags":["render","animation","time","progress"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/27990883-4149-4ae1-9a9e-a25ffdb50f16/","schema_version":"1.0.0"},{"id":"annotate_to_christmas_lights_gn","name":"Annotate to Christmas Lights (GN) [FREE]","tagline":"Convert Annotate strokes into non-destructive Christmas lights w","version":"0.4.5","type":"add-on","archive_size":9390,"archive_hash":"sha256:d283cea78c26d58101e5ba437df4a2e0ac222065039dd4ff33a9f0edb03c7b16","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f9a3918a-02d1-426b-ba81-03df1a150136/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["GeometryNodes","GreasePencil","Annotate","Lighting","Procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b865fd92-7f89-4ca8-8e86-de85511de369/","schema_version":"1.0.0"},{"id":"SK0001","name":"Arrange objects evenly in a circle [FREE]","tagline":"The addon arranges all selected objects evenly in a circle. The","version":"1.0.0","type":"add-on","archive_size":1497,"archive_hash":"sha256:89883f484061eeaa1d810a7675211f87a62807f7d59e7e6bc4f10ed949595421","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8d448a51-4290-4168-9891-a20db1909950/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["circle","align","even","objects","round","circular","automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5f94585d-ce76-49e1-b390-4fd6696c2d80/","schema_version":"1.0.0"},{"id":"aspect_ratio","name":"Aspect Ratio [FREE]","tagline":"A Blender addon for managing aspect ratios and camera settings w","version":"1.0.2","type":"add-on","archive_size":7039,"archive_hash":"sha256:d9323c5ba0a4a3d6443a0091369f3e77a541dcfe14910bf13c54b90c97c55e97","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/24a7395a-67d2-46aa-a21a-613f801a21f4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Dimona Patrick","tags":["Render","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/13ae67a5-e751-4e40-99f0-b3e4631d9f97/","schema_version":"1.0.0"},{"id":"auto_file_cleaner","name":"Auto File Cleaner - Remove Unused Materials, Images & Meshes | Blender 4.0–5.0+ [FREE]","tagline":"Auto File Cleaner scans your .blend file for unused materials, i","version":"2.0.0","type":"add-on","archive_size":7669,"archive_hash":"sha256:06e0ba15d24ea745cc5f70dbdb127899d8cc8abf425c5ecdfbbe98b8bebb4c54","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2de4d389-0f76-4b8c-b1ee-d1b5526e395e/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["System","Pipeline","file","cleaner","blender","cleanup","unused","materials","datablocks","optimize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d7f60920-88bf-4e93-8ba9-2c1d978c7a17/","schema_version":"1.0.0"},{"id":"auto_paint_boundaries","name":"Auto Paint Boundaries [FREE]","tagline":"Paint cleanly inside smart, selection-limited regions with quick","version":"1.1.1","type":"add-on","archive_size":14645,"archive_hash":"sha256:5db1c2668d80db2e149ac3dd75fc2d15b7a6603e2da184468bd3588f29edb496","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b5efacec-5ae6-46af-9576-79e2cefd69cb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["Paint","weight","vertex"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45dcce2c-0aa2-4fd7-a989-104d9c074165/","schema_version":"1.0.0"},{"id":"babylon_scene_preview","name":"Babylon Scene Preview Pro [FREE]","tagline":"All-in-one .glb exporter & live-preview with screenshot + grid t","version":"0.2.3","type":"add-on","archive_size":3489,"archive_hash":"sha256:ee0eb525953c0cf7c259636f1b747bc94c5e5f324bd61a1b54fd3c68bfa608bd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e827736b-8659-4afa-a9de-bf4974f06fb5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["glTF","Export","Live","Preview","Screenshot","Grid"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1bfa2a9d-f914-4264-9629-ae083b18789d/","schema_version":"1.0.0"},{"id":"Bagapie","name":"BagaPie [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"10.4.7","type":"add-on","archive_size":10378340,"archive_hash":"sha256:c80359064314761b9fb4bc3198e36d80ac64d4634f2aa2e54210988836d6cad6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8ee1a84e-fe6e-44a7-b710-be7c9355ed45/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Antoine Bagattini","tags":["scatter","ivy","architecture","addon","free","array","window","stairs","environment","scattering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd109ea6-b261-4aaa-b572-c69ee296d86c/","schema_version":"1.0.0"},{"id":"basedplayblast","name":"BasedPlayblast [FREE]","tagline":"Easily create playblasts within Blender and Flamenco","version":"2.6.2","type":"add-on","archive_size":48968,"archive_hash":"sha256:c359a24fccb10b9d8df2941b0d75435eb0f7ac89db61836edb6d993b86354952","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d0f24e8e-5666-4821-81f7-b68d63379f03/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"RaincloudTheDragon","tags":["Animation","Render","Workflow","Video"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/967c5989-0d66-402a-a1ca-56be2299f718/","schema_version":"1.0.0"},{"id":"batch_bg_cams","name":"Batch BG Cams [FREE]","tagline":"Automate multi-camera setups: Batch import clips, auto-configure","version":"2.3.1","type":"add-on","archive_size":5729,"archive_hash":"sha256:5b9c970deea58baf77051ba10d84244744e4f1ad5c425560a9630664ce3a2e0c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/74b24024-c0c4-40b0-b200-400c078cde58/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Hannes Werner","tags":["addon","camera","layout","background","import","timeline","productivity","automation","animation","video"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a30ce0f8-752f-4a55-b0e0-1cee72949d24/","schema_version":"1.0.0"},{"id":"batch_render_manager","name":"batch_render_manager [FREE]","tagline":"A Blender addon for efficient batch rendering from multiple came","version":"1.0.0","type":"add-on","archive_size":14882,"archive_hash":"sha256:9be8f16641985d1efab5f68c4d5c3a1b36c5a0f7a373df1a2f5aa3f13e5a909b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1bb5147-c249-4eea-b7f5-98b2599cfa59/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Dimona Patrick","tags":["batch","management","rendering","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/476811fa-611c-4869-8653-14a830376e63/","schema_version":"1.0.0"},{"id":"BRVLayers","name":"Batch Render View Layers [FREE]","tagline":"Create multiple render jobs, each with its own specific View Lay","version":"1.2.3","type":"add-on","archive_size":4335,"archive_hash":"sha256:63187cc826a44655a1f20a4647aacf7c6967bf7007b91ceeb7291725dff35f17","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6090842f-0113-4d5d-a1c2-fab6f6a877ab/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Kin Chen","tags":["Batch","Render","ViewLayer","Queue"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/052f32bc-4fdb-412c-8eb9-cd158434f84e/","schema_version":"1.0.0"},{"id":"benchmark_fps_v1","name":"Benchmark FPS & Vram refresher helps reduce crashes [FREE]","tagline":"Unlock real-time performance insights in Blender with the Viewpo","version":"1.0.5","type":"add-on","archive_size":7924,"archive_hash":"sha256:b3f167cd024e33a75f6b014429097d8910ad54b87e7cabce765b203a676d8332","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e3f39d7e-5eff-4703-a412-1a4b76006714/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["memory","fps","gpu","cpu","test","addon","2025","blender","vram","refresh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/47c7ca2c-4a53-4a7f-a858-34c5fa29dbb8/","schema_version":"1.0.0"},{"id":"motion_path","name":"Better Motion Path [FREE]","tagline":"A blender add-on that allows motion path adjustment inside the 3","version":"1.5.8","type":"add-on","archive_size":13164,"archive_hash":"sha256:c293b0fde8bc921e4ef7bdf8494e5a23d3cb6055f168d8f8ccff1f7c28488ea4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4f549895-734c-4ff0-85d1-ed79feac9976/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"ジディー Jideeh","tags":["Animation","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/eba7a4e2-886b-48be-a304-4f7c69916793/","schema_version":"1.0.0"},{"id":"blender_revision_lite","name":"Blender Render Lite [FREE]","tagline":"BlenderRevision Lite is a free community edition that lets you r","version":"1.0.0","type":"add-on","archive_size":7727,"archive_hash":"sha256:ae14b80c7ec559f0c88eedf2b48fff0844e336d02789b8dc3a914b70f87738ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7925961a-194c-4612-bc12-72e38bed2abd/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["render","compositing","workflow","optimization","revision","blender","addon","vfx","pipeline","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e6ea1e56-5d03-45de-a0f8-463c7bf6d731/","schema_version":"1.0.0"},{"id":"shader_switcher","name":"Blender Shader Switcher Addon [FREE]","tagline":"The Ultimate Shader & Color Switcher Node System","version":"4.0.2","type":"add-on","archive_size":11114,"archive_hash":"sha256:03b4aed110d4613695a60fd94fd8f7a8d98c358dd5f2b2a813afc093ff642640","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cbff50ec-bbc5-40d4-99c3-633e110c502c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Aimen Zaied","tags":["Node","ShaderEditor","Materials","Shading"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3466f4d7-caf6-45a9-b9ac-b3bcaccc9920/","schema_version":"1.0.0"},{"id":"BLeQ_Extension_Pro","name":"BLeQ Extension Pro [FREE]","tagline":"The Extension offers a simple queue manager and will provide mor","version":"1.1.0","type":"add-on","archive_size":274896,"archive_hash":"sha256:531f8552ec19afeb5c55d7fecbeefa97fd456effe6310df0c696457969fab8d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/89454c41-a65c-4392-a341-d3c939a8c071/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Christian Makarski","tags":["Queue","Pipeline","Renderqueue","Sequence","Rendersequence","chain","Rendermanage"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d7529892-10a8-4f96-86de-933d584bb9f5/","schema_version":"1.0.0"},{"id":"body_sculptor","name":"Body_Sculptor [FREE]","tagline":"A powerful Blender addon for advanced body proportions editing","version":"1.0.0","type":"add-on","archive_size":14676,"archive_hash":"sha256:af709f55a754174d26230a8f3cbcacff154bc3c651f46a9851f3aa93c91e174c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c26ff3b2-7474-451e-b957-cfa80dfd8a6f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"ANDRIY LIA$HKEVI$H","tags":["blender","addon","body_sculptor","3d_modeling","character_design","character_creator","rigging","proportions","armature","non_destructive"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/75280d36-9b63-45bf-952b-bfa0f2d00a6d/","schema_version":"1.0.0"},{"id":"fbx_vault","name":"Bulk FBX Importer [FREE]","tagline":"FBX Vault is a bulk FBX importer for Blender that lets you load","version":"1.0.0","type":"add-on","archive_size":1858,"archive_hash":"sha256:3c9b99fda4e7b5345fbf151c0db1fc14bdb7bcce44f65753ba4c14bb8f4d0666","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7723df72-9455-4901-b89e-4fdf1aae86c9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Zuhaib Khoso","tags":["addon","tool","fbx","blender","import","management","bulk"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/87284cbd-2f95-44d8-9e38-c7ccaa07354c/","schema_version":"1.0.0"},{"id":"Cad_measure_extension","name":"Cad measuring tool [FREE]","tagline":"It's a geo nodes based tool that lets you make measurements and","version":"2.0.0","type":"add-on","archive_size":251303,"archive_hash":"sha256:fdc1a528d7808c897d7cf3469b09921a5b29174cfa6293400f82a1cd0eb65efb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4747fbe1-c279-4462-8854-2f6175d70c38/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mr.Nobody covers.mp4","tags":["blender","measure","geonodes","geometry"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/87bc995f-2eff-4b3f-8561-fb73086b4c9a/","schema_version":"1.0.0"},{"id":"Cake_Particles","name":"Cake Particles [FREE]","tagline":"Allows you to bake the motion of particles into key-framed objec","version":"4.3.0","type":"add-on","archive_size":6791,"archive_hash":"sha256:eab0f22f85eeb43acd57024e2f967002c09f335c83a8163bcc64ff0005fa7510","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/671368cd-1458-4197-81d1-9049ada81ac1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Scary Plasmon","tags":["Animation","Objects","Simulation","Physics","Baking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/82e87770-6569-4873-bef5-8621a1fecdc9/","schema_version":"1.0.0"},{"id":"SK0005","name":"Camera bookmark manager [FREE]","tagline":"Remember camera positions and orientation and conveniently assig","version":"1.0.0","type":"add-on","archive_size":1838,"archive_hash":"sha256:c066fafb8e07e092ad7f5f806f042f71662cc6183657be1ef1f2a0c861cc08f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6bcc1463-538f-46c1-8dff-a765955fa97b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["camera","bookmark","manager","position","rotation","workflow","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1a9af258-e75e-44c8-81e9-869249addb8d/","schema_version":"1.0.0"},{"id":"camera_switcher","name":"Camera switcher [FREE]","tagline":"Quickly switch between all cameras in the scene from a dedicated","version":"1.0.0","type":"add-on","archive_size":2308,"archive_hash":"sha256:fe505d31d4cbc6a364c8a48b63aafc8d04e816b041fcbe852f5da61bddc1025d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/68c92d93-988d-48f7-95c1-bdb084c22362/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.00.0","maintainer":"Remigiusz Waluś","tags":["camera","view","active"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/056e30fd-f62d-4fb4-9a53-95be346475c3/","schema_version":"1.0.0"},{"id":"nfc_card_keychain_generator","name":"Card/Keychain w/ Custom Design and QR Generation and opt. NFC Cavity for 3D Printing [FREE]","tagline":"This add-on lets you design 3D-printable housings for NFC chips","version":"1.2.2","type":"add-on","archive_size":513576,"archive_hash":"sha256:61fc9b726002f7cd17ffb5b1e54bfa1827e8edf538881e72749f4faf931dc384","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/992bef23-da87-44ec-a710-bc61d13aa8b9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["nfc","qr","card","generator","keychain","custom"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/09bd7d56-efdb-4e25-b4d8-68c8ee65f422/","schema_version":"1.0.0"},{"id":"centerocd","name":"CenterOCD [FREE]","tagline":"CenterOCD is a simple Blender addon that aligns selected objects","version":"1.0.0","type":"add-on","archive_size":1490,"archive_hash":"sha256:607cf00fe41582b4eaeb640cb6ad8dc9944731be643022c810fbb2a799abef0b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3753d182-5607-44fe-a376-6bdbf0bde2f5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mostafa Heikal","tags":["align","center","grid","haykol"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8a92d1eb-c1c8-4357-886d-5c765a1214d1/","schema_version":"1.0.0"},{"id":"cgaxis_blender_addon","name":"Cgaxis Add-On For Blender - Browse & Import Assets Directly In Blender [FREE]","tagline":"Browse 12,500+ Premium Assets directly in Blender and Get starte","version":"1.0.0","type":"add-on","archive_size":135827,"archive_hash":"sha256:d2d49d2c9665add7c55181a343759dde9bfa5de723d4bb3075b93694822d46ac","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c135e35-0484-4805-8562-7d9eb8705471/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"CGAxis","tags":["assets","pbr","material","3d","models","hdri","decals","browser","imperfections","plugin"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f8432983-2d65-4d16-a7ef-36ee5fcc7220/","schema_version":"1.0.0"},{"id":"cgheven_blender","name":"CGHEVEN Asset Library [FREE]","tagline":"100+ Cloud VDBs (fire, smoke, tornado, portals, explosions, dust","version":"1.0.0","type":"add-on","archive_size":138712,"archive_hash":"sha256:f4f3d8461ac1edb6f56b6e3a56b5047784bb854606fa01cdbc40cf99255cdfe4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c16124bd-9c82-44c8-82eb-51dc2cc79e7f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"CGHEVEN","tags":["free","VFX","VDB","Flipbooks","clouds","fire","explosion","Magicfx","3dscan"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ba084cd6-c1af-459f-8d71-f645489708ba/","schema_version":"1.0.0"},{"id":"cleanx","name":"CleanX [FREE]","tagline":"CleanX is a Blender right-click menu addon designed for 3D asset","version":"1.0.0","type":"add-on","archive_size":13355,"archive_hash":"sha256:4e312c21ac1dbb00023ab28c841ff7acd14ea714250363ae6b32f8fbba538cb3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/797da2fb-3b8a-49dd-8bb0-62e0474258a0/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Free poly","tags":["clean","texture","delete","pack","model","packages","compress","resize","snap","hierarchy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/307f20ee-8d34-4371-9bb0-5f417f43e870/","schema_version":"1.0.0"},{"id":"img_alpha_to_bsdf","name":"Connect image alpha [FREE]","tagline":"Connecting image alpha to shader alpha","version":"1.0.6","type":"add-on","archive_size":2692,"archive_hash":"sha256:a0d765b49e728e95012895af1bb54d12c3b4ac68ab649115685c8b4d9eb65e02","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4b1a347-b3e0-4ec8-96e8-7039f03d475a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Snaky Boop face","tags":["automation","automate","node","material","image","alpha","QofL"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5d0c171c-9ff3-4834-b610-0b39d8fd0191/","schema_version":"1.0.0"},{"id":"Copy_transforms_extension","name":"Copy Transforms [FREE]","tagline":"The Copy Transforms add-on mimic the Autodesk Maya copy transfor","version":"2.0.0","type":"add-on","archive_size":1925,"archive_hash":"sha256:0b5ea205238edbd92d77f10ac909b9e66fda38c14bdc05a52e4253c10bece865","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ea9ad2d2-eb15-4da2-b5e5-531c34a7e8c4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Luiz Lobato","tags":["Object","transforms","location","rotation","scale","copy","camera","lights"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e4d8305e-3eca-477f-8b08-afa17bf621ce/","schema_version":"1.0.0"},{"id":"copyx","name":"CopyX — Cross-Version Copy & Paste for Blender Objects [FREE]","tagline":"CopyX lets you copy selected objects from one Blender file and p","version":"1.0.0","type":"add-on","archive_size":5027,"archive_hash":"sha256:af90abab4b0fdeba0b41982697f3b28b08cb549a4465e9e1da7fba52e090f0db","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1031b3ec-dfbc-415f-b0c0-d7954d7596af/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Free poly","tags":["3DView","Object","copy","paste"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a97311ce-49fa-4191-b7aa-ce3e70f1beef/","schema_version":"1.0.0"},{"id":"CountDown3d","name":"Countdown 3d [FREE]","tagline":"Quickly add customizable 3D timers (countdown or count‑up) to yo","version":"1.5.0","type":"add-on","archive_size":4799,"archive_hash":"sha256:49bbf5981614ed4fef283a4501654b98312dc61ea0790cab12e856f66f875a84","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a8071da5-87fe-4105-9961-f926ec69b81b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Fabio Malvaldi","tags":["3D","Countdown","Customizable","UI","Python","Script","Animation","TextObject","counter","Timer"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cafb5d64-82e6-45d5-ae1f-2a6c504a3838/","schema_version":"1.0.0"},{"id":"custom_snap","name":"Custom Snap [FREE]","tagline":"Custom Snap is a fast addon that enhances the default snap syste","version":"1.0.0","type":"add-on","archive_size":2927,"archive_hash":"sha256:4b3745f1bc6df4dd0f9575248ded2a3a11ed5858bfa3d5e85a99396d0b1baf65","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/053f20f2-683f-46c3-b7d1-79c47453eb13/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Jeslin Paul","tags":["3DView","snap","origin","selection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0e6e9617-b4f3-4267-adca-e8a2d557f509/","schema_version":"1.0.0"},{"id":"Delete_Loose","name":"Delete Loose [FREE]","tagline":"with this handy addon, you eliminate smaller and loose parts of","version":"1.2.3","type":"add-on","archive_size":2391,"archive_hash":"sha256:9fdf99f92ab399377ec92a0d3bf25bce5891384b9a0ed61ce8def18314b60f58","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d46ee8be-144e-4a60-be40-4b348539e4e0/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Łukasz Wilkoń","tags":["cleaning","cleanup","topology","fix","fixing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a88d7b63-11e7-4415-b717-8944eef0bd63/","schema_version":"1.0.0"},{"id":"delete_static_animation_channels","name":"Delete Static Animation Channels [FREE]","tagline":"Automatically identify and remove redundant F-Curves with consta","version":"1.0.0","type":"add-on","archive_size":2873,"archive_hash":"sha256:9d0cb8dbcfadb9e4e70c7ba952299be23f179d4d458951db659f0a5a551f7670","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0e649649-adc7-40c7-b56b-b0a0f22d94f6/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vaishakh Vinod","tags":["Animation","graph","cleanup","fcurve","mocap","motioncapture"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f7a51ab2-f758-464f-817b-ad010cb643bd/","schema_version":"1.0.0"},{"id":"dice_forge_pro","name":"Dice Forge Pro [FREE]","tagline":"Generate canonical polyhedral dice (D4–D20, D100) with text, cus","version":"1.1.1","type":"add-on","archive_size":36003,"archive_hash":"sha256:75344c4ace13fa032f5cb7cc4a0c823bc09057180faeb77c68cc026055f0b865","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9e97f36d-99ac-4e8f-807b-e0f09fccfa8f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Fabio Malvaldi","tags":["ttrpg","rpgdice","dicemaker","dicegenerator","tabletoprpg","dnd","3dprinting","customdice","RPG","DICE"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fbf85f8a-1963-420d-a8d7-6c54b538fcf0/","schema_version":"1.0.0"},{"id":"down_to_earth","name":"Down-To-Earth [FREE]","tagline":"Auto-snap any object to the nearest surface in your scene — no s","version":"1.0.0","type":"add-on","archive_size":6404,"archive_hash":"sha256:8e008319495acce4379943ad4ee198a531d7a6367cffdc245b8a8e23c5f410f7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dab12edc-301b-4772-b1fd-a5abe89bf212/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"GoldFish CG","tags":["Snap","Tool","base","surface_snap","placement","object_tool","scene_assemble","one_click","grounding","productivity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/81e4af0c-b0a4-4c7d-b7b4-190afdbd1e99/","schema_version":"1.0.0"},{"id":"easy_measure_tool","name":"Easy Measure Tool [FREE]","tagline":"A lightweight add-on for quick measurements","version":"1.8.3","type":"add-on","archive_size":11147,"archive_hash":"sha256:d8e8f97500e44d4e9c77fe133dccca151df3f1c08f7aa50e7e7feaa0adbb8010","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8142dce2-f9c4-4f20-a5c6-402460d5f145/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jungle Ham","tags":["3DView","Object","Modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7ac627dc-ca87-4a3b-92e7-b00a752a037e/","schema_version":"1.0.0"},{"id":"easy_scatter_tool","name":"Easy Scatter Tool [FREE]","tagline":"Easy Scatter Tool is a Blender add-on that scatters one object a","version":"1.0.0","type":"add-on","archive_size":4790,"archive_hash":"sha256:2aad46cd10d876e3ab5d5f69a927c9b423a0f2d14eb47fbedbd6c380f65293cc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a7cdf987-8b42-47e9-a066-3e407ebf0512/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jungle Ham","tags":["Object","Modeling","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f31d8f0b-ee2b-45ec-9f4b-4aae75a7160f/","schema_version":"1.0.0"},{"id":"Eyes_of_Masyaf","name":"Eyes of Masyaf [FREE]","tagline":"Asset inspection and workflow guardian for Blender","version":"0.5.2","type":"add-on","archive_size":20333,"archive_hash":"sha256:d6f4f04d0420347b0cc1270796776e010304250caa82c77c8998fac4ef4b3791","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/61711621-e714-497b-9b3e-67a9354eaf0b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Reza NeoMasyaf","tags":["Object","Mesh","UV","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e26feba5-e5df-469b-98cc-076cfc3c5748/","schema_version":"1.0.0"},{"id":"facemesh_capture","name":"FaceMesh Capture (MediaPipe) [FREE]","tagline":"Create a textured FaceMesh from webcam or photo using MediaPipe,","version":"0.4.0","type":"add-on","archive_size":11286,"archive_hash":"sha256:8714eff32dcda7ff8fc554d0714ae815805c17f6def1b4e45027d6ff0e3a9dc8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/aa5efe63-320f-4551-af8c-e3bd2070cb2d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Mesh","Animation","3DView","UV"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9b174a1c-d3c5-4979-b36a-cbfc40616f5e/","schema_version":"1.0.0"},{"id":"flicker_light_fixed","name":"Flickering Light Simulator [FREE]","tagline":"Customizable flickering light animation with multilingual suppor","version":"2.0.0","type":"add-on","archive_size":4059,"archive_hash":"sha256:77bbac7d17fd132350d9bf065ef2c2de2f4f575fec639d72149d7cb0d5ab77d3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2ad04975-a7e3-40f3-84a5-adfac5baf07c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Fabio Malvaldi","tags":["Light","Flicker","Animation","Localization","UI"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7d69be65-9004-4469-bd9c-beb29e1ec99b/","schema_version":"1.0.0"},{"id":"global_clip_sync","name":"Global Clip Sync [FREE]","tagline":"Adjust Clip Start and Clip End across all Blender workspaces fro","version":"1.2.0","type":"add-on","archive_size":1725,"archive_hash":"sha256:928d5139fbc88bd54e54eafa1d46833264d8ef7d622ebfb7c4991729588645d5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1112186c-ba61-43b7-83d3-e607ef234c4d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"5.1.0","maintainer":"Leo Villanueva","tags":["Viewport","Clipping","UI","View","Tools","Clip","Display","Distance"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d673a38f-4133-495e-9875-fb020048cef0/","schema_version":"1.0.0"},{"id":"graph_editor_timeline_controls","name":"Graph Editor Timeline Controls [FREE]","tagline":"Adds Timeline playback controls (Play, Reverse, Pause, Frame Sta","version":"1.0.0","type":"add-on","archive_size":2292946,"archive_hash":"sha256:b77a68f7e34b9c5f9c66fafef6825a0575fe8605c8da51a567dff3cd94fa358f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f2c93a71-097b-4054-8067-f2b58e3b2572/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"NOOB 3D","tags":["animation","graph","editor","timeline","playback","ui","workflow","keyframe","animation","userinterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/26a86759-a4b3-4545-ad67-106a89737f54/","schema_version":"1.0.0"},{"id":"graphi_free","name":"Graphi Free [FREE]","tagline":"Graphi Free is a lightweight Blender add-on for shaping easing c","version":"1.0.0","type":"add-on","archive_size":5009,"archive_hash":"sha256:f1336e92f03ccf6314eab0c9cf739b95316d9da669e10294e146b5d1c5495b3d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e508361c-87aa-4460-8427-f354e4cdf83d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["Animation","GraphEditor","Keyframes","Addon","Easing","Bezier","FCurves","MotionDesign","Workflow","3DAnimation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a3ac0ded-6b76-40bb-83d3-9a8ef1d547f6/","schema_version":"1.0.0"},{"id":"item_transform","name":"item transform [FREE]","tagline":"A Blender addon that provides quick transform operations for sel","version":"1.0.2","type":"add-on","archive_size":6957,"archive_hash":"sha256:6a78724c1d6cb68d9a691c6f2e8403844860a064f9257d0b22eac7a124bc7ecf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cccfe7d1-1df5-4927-87af-a10e00a1c34e/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Dimona Patrick","tags":["Modeling","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b97c7a3c-93cb-4cea-8186-6e1cbcb47bd5/","schema_version":"1.0.0"},{"id":"joinforce_render","name":"JoinForce Animation Render [FREE]","tagline":"This add-on helps you use all your computers to render animation","version":"1.3.1","type":"add-on","archive_size":6538,"archive_hash":"sha256:afe900cdb0a244c3f4aadab240cbfc5ce0942f68673803924e7ed72d4023d406","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/21a1e2f2-a21d-4ea2-87a6-01d906bc50a1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Liam Xee","tags":["pipeline","Batch","rendering","animation","cloud","Production","Computing","Workstation","Team","Network"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/74798440-6854-4a90-9872-ec08da8d0ce3/","schema_version":"1.0.0"},{"id":"k_tools_render_preset_manager","name":"K-Tools Render Preset Manager [FREE]","tagline":"An easy and intuitive for saving, loading, and managing complete","version":"1.1.1","type":"add-on","archive_size":54772,"archive_hash":"sha256:2ef9d7ad94bce0ff2e811677230a5daa4f8fc607fa1123478d923f624fa933d0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6f054995-d5d9-4718-90b7-5c191d22a671/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Robert Kezives","tags":["render","preset","cycles","addon","load","save"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8626f2ca-193c-4f15-8011-200c5d0a2e9b/","schema_version":"1.0.0"},{"id":"Lets_turn_on_fake_user","name":"Let's turn on Fake User [FREE]","tagline":"Are you tired of Blender delete your file(s)?, Even though you s","version":"1.0.3","type":"add-on","archive_size":6837,"archive_hash":"sha256:3815d47845cdb03a46c26891a69e7be9b4fd2952e88081a327f92244bf4ec4e1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4bfd4128-90b5-40cc-aa29-3b48be5b8b14/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Theiyn tnz","tags":["System","Workflow","Animation","Save","FakeUser"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e1c19457-113b-4f5d-b1f2-317318942cb7/","schema_version":"1.0.0"},{"id":"marker_highlight_pro","name":"Marker Highlight Pro [FREE]","tagline":"allows you to add highlight color to your marker text for easy n","version":"1.0.0","type":"add-on","archive_size":2046,"archive_hash":"sha256:46ac6e96e5eb3cda09a1ad70342f492abcc28b276ceba020a2c891e50c016820","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1745b88d-d4cf-4386-b84d-747b41186e07/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"saman","tags":["marker","color","markercolor","colour","coloured","markermanager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e5ceb861-fa61-4aec-8605-f585df3ebf48/","schema_version":"1.0.0"},{"id":"SK0002","name":"Material Organizer [FREE]","tagline":"Overview of all materials in the scene. Easy deletion of unused","version":"1.0.0","type":"add-on","archive_size":2026,"archive_hash":"sha256:07c076a2f8e842a5eb167a7e90f64a5805ccd2582d78625da664d833a61e1b82","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4e5281c0-822c-4625-a151-02acbe8fd7e5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["Material","organizer","overview","delete","help","sort","list","shader"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/21a85005-f5d1-4f4b-9e9a-5087838d1a44/","schema_version":"1.0.0"},{"id":"ColorFromMaterial","name":"Material Viewport Color from Nodes [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"0.1.3","type":"add-on","archive_size":23002,"archive_hash":"sha256:bb0e68146c79fe2c4b5c1c6e91cb5945c9303dc3a4f9920d2e1ba60d5561a936","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/88edb35c-c79a-4263-9cc9-082f6282f1a6/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Spencer Magnusson","tags":["color","material","metallic","roughness","viewport","workbench"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/15250641-5030-4e65-8988-385adbee7a04/","schema_version":"1.0.0"},{"id":"math_3d_equations_pro","name":"Math 3D Equations Pro [FREE]","tagline":"Math 3D Equations Pro lets you turn math formulas into 3D geomet","version":"1.3.0","type":"add-on","archive_size":10274,"archive_hash":"sha256:1293382cde627aa9f16c8c25e9e2e2775ee8b1793ebf672f87ccbc60e5f672cf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0bb57bc4-d52a-4d17-a038-3c6b44fca17f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Mesh","Curves","Math","Procedural","Scientific","Visualization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0b934918-ccac-45f9-9502-5190908b13c9/","schema_version":"1.0.0"},{"id":"maya_viewport_operation","name":"Maya Viewport Operations [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":18860,"archive_hash":"sha256:67f88925c3fee1af6c056e2b82ef80dc18167d8735381c3af54434a5dedc6c9d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c1148a64-7337-4872-86b7-57a990df5300/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"TinkerBoi","tags":["maya","smooth","preview"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/427e1d25-6b74-487b-bb39-856e70a74ea5/","schema_version":"1.0.0"},{"id":"maze_generator","name":"Maze Generator [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.11.0","type":"add-on","archive_size":6240,"archive_hash":"sha256:40c08393a2402f4a5f24c4b12f3baae24eba9b7d97b48a72283e7e94c3892669","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1ed3d85-db05-4f7f-a0e8-f7d87cae2e39/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Giorgi Samukashvili","tags":["Procedural","Maze","Modeling","Geometry","Nodes","Curves","Addon","Blender","Game","Algorithm"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/88fb5e50-584d-4b24-ad32-5f2c24634963/","schema_version":"1.0.0"},{"id":"measure_and_scale","name":"Measure and Scale [FREE]","tagline":"Measure and Scale object uniformaly","version":"1.1.4","type":"add-on","archive_size":8680,"archive_hash":"sha256:355656e1c08f41bfb3eb4886ddd61af3476e0a8a0fa667dfe8635f207d5d8263","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78183613-8e2a-4d4e-ad99-76c342df4080/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"belaid ziane","tags":["modeling","measurements","scale"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/82da7c42-ce33-4be3-82ea-a58b31880502/","schema_version":"1.0.0"},{"id":"MeLiDA","name":"MeLiDA - Measure LiDAR System [FREE]","tagline":"MeLiDA integrates LiDAR sensors with Blender to create professio","version":"0.1.0-beta","type":"add-on","archive_size":107115,"archive_hash":"sha256:fc2a66562a83772e8752a1d4acad647634ef20c09e117578924b3adc62d249f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/44944eb3-0fb2-4ec9-9fea-88c9e6edc23b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"MeLiDA","tags":["point_cloud","laser_scan","survey","building_surveys","LiDAR","scanning","measure_device","stl_14p","stl_19p","d500_lidar_kit"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/20da5129-5479-4f45-a450-ef70cfc0ee5e/","schema_version":"1.0.0"},{"id":"teca3d_mesh_welder","name":"Mesh Welder - Merges Two Meshes into One, and Vice Versa [FREE]","tagline":"Mesh Welder is a simple add-on for merging and splitting models;","version":"1.1.0","type":"add-on","archive_size":10360,"archive_hash":"sha256:f3e75ef3a17e04447cf9a2ae943654026ab15fcf431029722a57de242d5bb385","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cd7b88aa-a1f9-4c7a-a027-bbb6c84a2f0e/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"5.0.0","maintainer":"TECA 3D","tags":["3DView","Mesh","UserInterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a467e686-8d87-473a-9aa6-39154f685dfa/","schema_version":"1.0.0"},{"id":"multi_object_export","name":"Multi Object Export [FREE]","tagline":"Export multiple selected objects individually in one click using","version":"1.3.0","type":"add-on","archive_size":7107,"archive_hash":"sha256:54acc7d04a2938e3da46c303d15f131960209d60c4e91fb8792410ff4342c04f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/16a86afb-d33f-488c-a772-1308bf8241b6/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Fabio Malvaldi","tags":["Object","Workflow","Export","MultiExport"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/125220ca-109c-4105-9ac3-cac4fedc9985/","schema_version":"1.0.0"},{"id":"music_generator","name":"Music Generator [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":93889081,"archive_hash":"sha256:e91db7197c1eecad6e40aee9fcfff703406b6b0dd67a75466a9854bbd46d9ae1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/46174bc3-0515-46b9-b0cc-4aa0f24e6cd1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Music","Audio","Generation","Sequencer","Sound","AI","MusicGen","Gradio","Synthesis","Creation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9076e710-cedc-4b37-92b2-16b38fa0997b/","schema_version":"1.0.0"},{"id":"NeonSignPro","name":"NeonSignPro (Development) [FREE]","tagline":"Professional Neon Sign Generator with HEX, Flicker & Custom Font","version":"0.0.1","type":"add-on","archive_size":3465,"archive_hash":"sha256:a6d40a2c6245256a1a6a76b9b3636f55e955a7e0bcfb47502aa1c0f31f0dc103","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/65c1c0b5-a3ad-49bc-8af9-903817e9ddcd/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"5.0.0","maintainer":"Wikz B","tags":["easywaytogenerateaneonsign","neonsignpro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/36f58375-aa62-4424-bfb0-51c80302bb4f/","schema_version":"1.0.0"},{"id":"node_color_tools","name":"Node Color Tools Pie [FREE]","tagline":"Elevate your workflow with the Pie Menus of Node Color Tools Pie","version":"1.0.3","type":"add-on","archive_size":4752,"archive_hash":"sha256:e59fd49dbc701c9f45705e7f28dcf4d5d93dc13bf8820a5c8bf813a50c33b1e7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/66128702-2ca7-413d-b245-accb9e1b447b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Johannes Kollmer","tags":["Colors","UserInterface","UI","Organize","Pie","PieMenu","Menu","Nodes","Node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/37d15d8e-ba8d-470d-8c06-f8d7c75424c9/","schema_version":"1.0.0"},{"id":"number_generator","name":"Number Generator [FREE]","tagline":"Create sequential numbers as text objects","version":"0.1.0","type":"add-on","archive_size":2339,"archive_hash":"sha256:dbf74bb429c01aaa0b0a77e6ca987c3e75093c20daa3bf71e94c40c06606625e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b66a740b-80a7-4e7a-abe0-da229ded13b1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["Number","Generator","Text","Objects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd9d56d5-2d05-4d8d-8b8e-87c759253481/","schema_version":"1.0.0"},{"id":"object_mode_hierarchy_select","name":"Object Mode v1.2 – Hierarchy Selection [FREE]","tagline":"Hold O + Click anywhere to instantly select the full object hier","version":"1.2.1","type":"add-on","archive_size":2022,"archive_hash":"sha256:92acc75cacffd655deae6760fe888a19acfbc48e5366bb232adb202a28c1b8ac","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/da7cfd8c-36eb-44ef-b5b5-44cf92c63506/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["object_mode","hierarchy","selection","workflow","tool","transform","animation","utility","blender","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/67ab12d4-3e48-4bce-affb-30a6b6095fb2/","schema_version":"1.0.0"},{"id":"pinned_modifiers","name":"Pinned Modifiers [FREE]","tagline":"Pinned Modifiers is a Blender add-on designed to speed up our mo","version":"1.0.0","type":"add-on","archive_size":21507,"archive_hash":"sha256:c17a73e1a8c07ffc63c9c58626fd38e72e939fc23a2b6f122b59a20374ea77e6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb576247-2e8e-4b41-9b81-b82243cf9e4a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.3.0","maintainer":"Francesco Yoshi Gobbo","tags":["UserInterface","Modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2f242640-80dc-45d1-9baf-bc0de85e1fc5/","schema_version":"1.0.0"},{"id":"pomodoro_timer","name":"Pomodoro Timer [FREE]","tagline":"Boost your productivity with this amazing N-Panel widget! If you","version":"1.0.0","type":"add-on","archive_size":5004,"archive_hash":"sha256:3ae73f0701bbae44934d253689dea84f7858f61f3a5e88c02966623c911cede3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6c8e140d-7f72-448a-b5eb-3aaf7fcedb99/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"DJ SOLANA","tags":["Pomodoro","Timer","Boost","Focus","Concentration","Productivity","Efficiency","Smart","Creative","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e382a037-62c0-4266-a312-9c4fecf2e494/","schema_version":"1.0.0"},{"id":"procedural_building_generator","name":"Procedural Building Generator [FREE]","tagline":"Create instant, game-ready 3D cities with the Procedural Buildin","version":"1.0.0","type":"add-on","archive_size":10370,"archive_hash":"sha256:cc91376be52c17e60fd7657b12eb03e49da8b020571610a6a86147cc55d5cce3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/429bb6e8-0c26-400b-8545-c60984c390b7/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Zuhaib Khoso","tags":["AddMesh","Modeling","addon","procedural","building","generator","plugin","city"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/040d9c18-3746-4987-a087-8257751611a4/","schema_version":"1.0.0"},{"id":"procedural_scatter_brush","name":"Procedural Scatter Brush [FREE]","tagline":"Scatter objects on surfaces using brush strokes","version":"0.1.6","type":"add-on","archive_size":3522,"archive_hash":"sha256:14afe4d18a7065311a9bf825c16e8227af69e960371242b5e7e73d58999445f2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/94e7c35b-9a6c-468a-a74f-358dbc770073/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Soroush Amelzendedel","tags":["ScatterBrush","Procedural","Geometry","Tool","Instancing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/55e372d8-5d9d-4e43-aa7f-1bb8dbf70be5/","schema_version":"1.0.0"},{"id":"SK0003","name":"Project time tracker [FREE]","tagline":"Saves the time you spend working on different projects so you ca","version":"1.0.0","type":"add-on","archive_size":2587,"archive_hash":"sha256:bd88afe070d59e6df44c4d7e2f6a264508f31cb96d67edda45d5dc5adbd22dab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/19070979-b821-42c8-9d22-92057c438066/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Steffen","tags":["time","tracker","project","budget","client","organize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b062a8ff-c085-45ff-bd8b-1c260d6fe20d/","schema_version":"1.0.0"},{"id":"quad_bridge","name":"Quad Bridge [FREE]","tagline":"Quad edge flow without any hurdle,","version":"1.1.0","type":"add-on","archive_size":5948,"archive_hash":"sha256:7cd0d15de0a31d89fa52284f109c191164e99f4ac31ef151f9b32f5d362413c9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ccd02f6-fd7a-40dc-8551-fde00f771788/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"abd3d","tags":["Mesh","Modeling","Bridge","quad","join","edgeloop","loops","retopology"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8da31723-08d8-48bc-803d-550657841ee8/","schema_version":"1.0.0"},{"id":"Quick_Asset_Saver","name":"Quick Asset Manager [FREE]","tagline":"Quickly Create, Edit, Organize, or Delete your local asset files","version":"2.0.3","type":"add-on","archive_size":66307,"archive_hash":"sha256:34196edd29b75d18cca2c3cd001fa751781314ee608d025ef702669cee0b5973","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/50726fd4-575b-40af-a857-f09ab96d0e96/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Clonephaze Smith","tags":["UserInterface","System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a8dd11c1-54ce-4497-9691-5d5846af5939/","schema_version":"1.0.0"},{"id":"quick_groups","name":"Quick Groups (Instances) [FREE]","tagline":"Group objects with Ctrl+G using instances","version":"1.0.3","type":"add-on","archive_size":6862,"archive_hash":"sha256:f9da4f1267c480b5fd252e2d61573e1ebbd3e4fafa723547b93f032d7292d01c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1a7bb8b0-cd62-4216-ad5d-33e1139fd10c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"John Wick","tags":["Object","Modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d275c96d-a459-4904-a843-58f21b2f9ab6/","schema_version":"1.0.0"},{"id":"bake_material_lite","name":"QuickMat Bake Lite - Material to Texture Converter [FREE]","tagline":"Bake procedural materials into image textures in one click. Simp","version":"1.3.0","type":"add-on","archive_size":3248,"archive_hash":"sha256:9a6d7fcdf5ab075c3731d5253413f71fc7b5b92c4e8ccec5ebbb2d8100380720","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ac3962a-6b6c-4cb4-b4ae-d2e0e1a4fe6a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Studio156","tags":["bake","baking","texture","textures","export","material","procedural","render","uv","image"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6541c818-0c1d-4d3d-bb66-668309193c5e/","schema_version":"1.0.0"},{"id":"quick_origin","name":"Quick Origin Power Suite: Ultimate Pivot & Alignment Tools [FREE]","tagline":"Stop tedious alignment! 1-Click Origin to Bottom, World Snap, Sm","version":"1.0.0","type":"add-on","archive_size":3266,"archive_hash":"sha256:d1bbf787a368b4f2dd956c1cb14710bc9b3caa76fd1ca56b9a4fbdc56b4ea6c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/96371023-31d6-48cd-8214-343e0b980ae4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/30272b4a-f645-4447-9880-44b5f3934a65/","schema_version":"1.0.0"},{"id":"quickundo","name":"QuickUndo: Sidebar Undo/Redo for All Modes [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":2768,"archive_hash":"sha256:9895a4ce788ff7ef200361eb3f8a7cc24d58ff38928cbde3e2ca90d8e338858e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2b634e76-a618-43d6-a37c-c743ed04e844/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Elodie Anglade","tags":["undo","ui","tablet","ux","ipad","sidecar"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/df248e69-51d6-4847-bd63-5718b152ff90/","schema_version":"1.0.0"},{"id":"random_design_for_abstract_art","name":"Random Design For Abstract Art 1.1.4 [FREE]","tagline":"Generate abstract art with randomized shapes, remixable layouts,","version":"1.1.4","type":"add-on","archive_size":182021,"archive_hash":"sha256:d62a0e5ac70943ea42fa5d54d7e047792b45b16cb0e602f8278369c3e1fb5500","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/712f172f-5cdd-43ca-bcec-32b0129bd801/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["geometry","nodes","random","primitives","organic","instances","design","abstract"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/287f4b56-b2ec-436e-8b6e-032e8cf8361f/","schema_version":"1.0.0"},{"id":"Randomize_Bones_Pose","name":"Randomize_Bones_Pose [FREE]","tagline":"Inject spontaneity into your character and particle animations b","version":"2.0.0","type":"add-on","archive_size":16684,"archive_hash":"sha256:5b3b0b59abad0e887e6b5b9511ef3ef64830b75e0ddfabaabdbdf82283efabdb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/799484e5-be09-4cfb-8d2c-71ca49ffe1ee/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"IZ. MdVerz","tags":["Animation","Rigging","random","bone","bones","armatuer","particle","dance","character","pose"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b5b1d26c-d9e0-4945-94e1-b0923ec3ce04/","schema_version":"1.0.0"},{"id":"rastercrafter","name":"Raster Crafter v1.3.3 [FREE]","tagline":"Transform images into art with adaptive resolution & displacemen","version":"1.3.3","type":"add-on","archive_size":161147,"archive_hash":"sha256:9efc25e28b0dd1199d59f501ad1625e046cbb5616c1634660e6166bf96076199","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/706dc323-491c-46da-bc43-4e8fb2f09500/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["image","rastering","abstract","art","mosaic","grunge","pixel","creative","displace","fractal"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a2d0027b-8cc7-450e-9e6e-18e4c8e7f734/","schema_version":"1.0.0"},{"id":"ReadyScene_addon","name":"Ready Scene 1.0 [FREE]","tagline":"Ready Scene– Blender Addon for Quick Scene Setup","version":"1.0.0","type":"add-on","archive_size":4741,"archive_hash":"sha256:6c17f1d4f95da37b2375b5a26890db5cc21eb8cc4dbd620187aeccb89582a928","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f2eacecd-ef95-4fa2-b6ef-8d25415f29a9/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"ANDRIY LIA$HKEVI$H","tags":["parallax","scene","camera","layers"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f55cc80-1fdd-4d66-9346-9614039486d6/","schema_version":"1.0.0"},{"id":"reflectiveaudiomachine","name":"Reflective Audio Machine v1.3.4 [FREE]","tagline":"Reflective Audio Machine - Turn Your Music Into 3D Visuals in Bl","version":"1.3.4","type":"add-on","archive_size":36299830,"archive_hash":"sha256:1695810a6bb5809540f9d07093a5d3acad3215b683450c01fc25560827ececc6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6455ae0e-e1af-42df-81b9-e3b73f7cc4cb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.5","maintainer":"Jacques Durocher","tags":["audio","sound","music","wav","visualisation","reaction","react","animation","pulse","wave"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/11608830-074c-4fc8-94ba-4fbd90a87531/","schema_version":"1.0.0"},{"id":"reflux_addon","name":"ReFlux Render Optimizer [FREE]","tagline":"⚡ ReFlux — Faster Renders, Smarter Workflow","version":"1.0.0","type":"add-on","archive_size":6105,"archive_hash":"sha256:319dd16b471cf3e1e9254952ae12851b5f3a63381372b548282c4a13aee49c24","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/35d38941-00bf-4349-b7aa-f88f41339dc4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Swastik Rout","tags":["rendering","render","fast"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5aefa8de-dde0-4c0f-a7d6-8b01b75ea519/","schema_version":"1.0.0"},{"id":"render_alert","name":"Render Alert [FREE]","tagline":"An addon that alerts the user once blender is done rendering. No","version":"2.6.2","type":"add-on","archive_size":3880,"archive_hash":"sha256:291b93f1b43aa809e0d91cfbe87bdd7ef100b0e020ea54a1d9e00efadf10c796","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d70de8c2-31bd-40c2-accb-f38fecde6488/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"ジディー Jideeh","tags":["Render","UserInterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bdc3f751-d493-4997-847b-77f328d560f5/","schema_version":"1.0.0"},{"id":"rendermanager","name":"Render Manager [FREE]","tagline":"Render Manager - A render queue management tool for Blender. Cre","version":"1.7.0","type":"add-on","archive_size":4101,"archive_hash":"sha256:d657357fbdb72f75d28157d2d98cc0dd58e93e7e9966f1dba9121b8ca4da4530","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/41afa7ce-b9fd-4db3-aaa5-5dd200765adb/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vixymiles","tags":["Render","Animation","Queue","Manager","Workflow","Productivity","Batch","Sequential"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e774a939-504a-42db-ab02-36e3a8d42ce0/","schema_version":"1.0.0"},{"id":"RenderSceneKit","name":"RenderSceneKit [FREE]","tagline":"Quickly add pre-built studio scenes for render","version":"1.3.0","type":"add-on","archive_size":18677644,"archive_hash":"sha256:f6cef93aa29aea90f3691357b7a591e70b3259a844dd3a03b56fb4a14023c138","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9074f928-894f-44b4-837a-4cadecbc210f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"5555dnl_3d","tags":["render","scene","studio","toolkit","preview","libary","asset","lighting","presets","setup"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5238fe33-ff61-4add-bee5-27c885666c89/","schema_version":"1.0.0"},{"id":"scatter_directional","name":"Scatter Directional [FREE]","tagline":"Precise density and orientation controls (primarily to follow th","version":"1.2.0","type":"add-on","archive_size":9904,"archive_hash":"sha256:88676fc546dd29d363628a11a83ad2d03d21735fbf2f5b348910ef3ab7851592","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3d6829ba-ee12-445d-93a7-a4ffcf10b336/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"3DFIGURES rian","tags":["scatter","directional","proxy","previewer","trianglepreviewer","randomize","convertmesh","aligntonormalorientation","orientation","normal"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0facc425-e629-414c-b30b-397abf1a01ce/","schema_version":"1.0.0"},{"id":"scene_data_exporter","name":"Scene Data Exporter [FREE]","tagline":"Exports scene data for AI analysis (TXT/JSON)","version":"1.26.0","type":"add-on","archive_size":9942,"archive_hash":"sha256:08675fc6fa158c3d99eb5c47f19186237d58608d42dc8681bf045e7294bf44ef","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f6b80d0-8db7-47e8-9e56-e16e55aed861/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Joachim Bornemann","tags":["ai","export","json","data","workflow","scene","python","automation","analysis","development"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2c90b1d0-f252-4510-abc5-880d1aa6826b/","schema_version":"1.0.0"},{"id":"scriptpilot","name":"ScriptPilot [FREE]","tagline":"A lightweight add-on to increase search and navigation functiona","version":"1.2.0","type":"add-on","archive_size":12017,"archive_hash":"sha256:417168679a551ce8c6ec5a74e6955efa953bef5bf80fe7a83157b03e303eb5d8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/28687bd4-d8c7-4af3-8e11-25596fc848c5/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"The Doctor By Design","tags":["scripts","text","coding","design","bpy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d3738457-8a97-4ebf-9625-f8adc339781c/","schema_version":"1.0.0"},{"id":"set_to_wire","name":"Set to wire Boolean quick set [FREE]","tagline":"This addon simply sets the selected object to wireframe, addons","version":"1.0.4","type":"add-on","archive_size":4277,"archive_hash":"sha256:56b28e5fb681ea4ab21f6539c6264e5eaa209a30df9ce3b1fb58a70ee2ffc748","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/79e38c3b-dfa7-4495-8681-201d95eda4e3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["blender","boolean","easy","quick"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0ea1433-d356-4f38-96c2-8f91209d71dc/","schema_version":"1.0.0"},{"id":"shapekeysbatchtransfer_addon","name":"Shape Keys Batch Transfer Addon [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":2776,"archive_hash":"sha256:c0ea8afa1d950bb6962e8d88754f1ba25aa5ee4aebb0e8013eb047b2fdd34f8a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a28ff77a-b3b8-4be5-ad54-4d64aec72874/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"cg.xenon Lauróva","tags":["shapekeys","transfer","blendshapes","morphtargets"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c047db7a-3b7c-4369-9b1e-99f616bb8830/","schema_version":"1.0.0"},{"id":"Shot_Handler_Lite","name":"Shot Handler Lite [FREE]","tagline":"Create Presets or different Shot Settings","version":"3.0.2","type":"add-on","archive_size":49645,"archive_hash":"sha256:cd64d1e255d54f373ee9220c0a208ce299dc0169faa307af642de46cd402c51f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb1cbb06-ecac-4705-9c36-07eb98720885/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"dubCUT","tags":["shot","manager","camera","setting","render","filename","batch","collection","button","scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4986d4c3-65c1-433a-8359-2a7e83519a2f/","schema_version":"1.0.0"},{"id":"shot_manager","name":"Shot Manager 2 Lite [FREE]","tagline":"Render, layer and camera management","version":"2.0.8","type":"add-on","archive_size":551003,"archive_hash":"sha256:86b18a7ba0d743812eb871e1a573b3d58ca66bdfc78077aa1cf7a59f65d3e11b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5bfc561c-3796-4225-899d-efed286bd197/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["shot","takes","macros","states","batch","render","burnin","burntin","stamp"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/30c9a568-79f8-4551-b71a-d4915ecccf52/","schema_version":"1.0.0"},{"id":"smart_apply_scale","name":"Smart Apply Scale: Rig & Animation Fixer [FREE]","tagline":"The Smart Apply Scale Addon that automatically fixes animations","version":"1.5.3","type":"add-on","archive_size":9723,"archive_hash":"sha256:d278b9416739f1baf80bc178f8b621cc198bd2353a22b0b8da5a0188115357ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4043ed89-4af5-4502-828b-5fc3f5ec55e1/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"2.80.0","blender_version_max":"5.0.0","maintainer":"Yakiv Sankov","tags":["gamedev","rigging","animation","addon","scale","unity","unreal","fix_animation","armature"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8d205ca1-cbf6-4a10-903f-0148e9d631a0/","schema_version":"1.0.0"},{"id":"smart_material_painter","name":"Smart Material Painter [FREE]","tagline":"​Smart Material Painter","version":"4.2.0","type":"add-on","archive_size":25766,"archive_hash":"sha256:f9f5ab77f2a434cfbdbc6f3533abb2058de2faa82487c2a7c3c5df5700fc73ea","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e95a879a-6837-4a56-944b-b331d0777c09/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.0.0","maintainer":"Meshmind egwoba","tags":["Material","Paint","UV","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5a7e38f5-4ea4-4f65-b2c6-5b96d9344c4f/","schema_version":"1.0.0"},{"id":"sol","name":"SOL [FREE]","tagline":"8 one-click particle presets for Blender: sparks, fire, firework","version":"1.11.0","type":"add-on","archive_size":59092,"archive_hash":"sha256:9383c79b02a06833c6c7fdfd7bcb4f5e4124c8b72fb3ad1c209a8cec5ab1a60c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/562ad6a9-f189-4bb9-8d66-18bff85d1c34/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","blender_version_max":"5.2.0","maintainer":"Cloudy Sky","tags":["Object","Physics","presets","particles","fx","Fx","Vfx","VFX"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b2ad94d-559b-4705-9009-323d60693976/","schema_version":"1.0.0"},{"id":"solo_mode","name":"Solo Mode [FREE]","tagline":"Solo Mode helps Blender artists work faster by isolating selecte","version":"1.0.3","type":"add-on","archive_size":3323,"archive_hash":"sha256:8890473d4c81ed5b3c9e66a25c4c0205cca146e3e48e9c050fb3d5a2c256166a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ed1a7e7a-b8bf-457f-9dd7-c07bdd5aa89b/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"3.6.0","maintainer":"Vincent Ilagan","tags":["3DView","Object","3D","View","Workflow","Productivity","Viewport","Solo","Solomode"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd8b8c65-7ded-48f1-afa7-b2908baafcdc/","schema_version":"1.0.0"},{"id":"subdivide_selected","name":"Subdivide Selected [FREE]","tagline":"This plugin applies subdivision to a selection with clean topolo","version":"1.2.3","type":"add-on","archive_size":2597,"archive_hash":"sha256:f964bb44f8f1dccfa4cb7c880b5fc3b742b749190e88ec0b39b57842c0097bf8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a371ba92-b0d4-426e-bcaf-4bb93df74414/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Łukasz Wilkoń","tags":["subdivide","weight","paint","vertex","mesh","edit","misc"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ed9859ac-9425-4619-a3ce-654c65ae7faa/","schema_version":"1.0.0"},{"id":"blenderdefender_spm","name":"Super Project Manager [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.3.1","type":"add-on","archive_size":64910,"archive_hash":"sha256:01d50d97d07f68a9e7e676754b5dbad1f1749af9c9248ee3e656d4671f552d8b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5ca45a76-b0ba-4a42-ab5c-a6039131b80d/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Beedy","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d3edf068-7e94-4308-ba6a-df9184a20520/","schema_version":"1.0.0"},{"id":"survey_image_aligner","name":"Survey Image Aligner – Geodetic & Construction Workflow [FREE]","tagline":"Survey Image Aligner is a Blender add-on designed for precise al","version":"1.0.0","type":"add-on","archive_size":19532,"archive_hash":"sha256:1cfb365cb2667c8d5a600275a81ba033c21e426423885d228fd57aa85c525d3d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b1613ead-2102-4441-9b9e-25f2115961c3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","UserInterface","Object","Survey","Image"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0d06c297-1456-4c32-8a3a-450951bf0907/","schema_version":"1.0.0"},{"id":"swap_render_orientation","name":"Swap Render Orientation [FREE]","tagline":"Swap Render Orientation lets you instantly switch between Landsc","version":"2.1.0","type":"add-on","archive_size":1891,"archive_hash":"sha256:e6bc031d13a16343fd7f0672f97edbb5567ef29600b457881be11c477cfa1c42","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fa16455e-35c5-4f93-9478-72771e9e268c/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Nathan Jones","tags":["Render","Resolution","Orientation","Swap","Landscape","Portrait","Shortcut","Camera","Addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a039fc1a-6af0-48f7-8165-ce6b5b2d7f6f/","schema_version":"1.0.0"},{"id":"tabs_interface","name":"Tabs interface [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"4.0.0","type":"add-on","archive_size":23870,"archive_hash":"sha256:0add617da4273ebfca87db38efff95df16f691c4cd9e2baa407cd41b10f0afbf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/441ac3e4-075c-497a-83bd-7ba66bffeece/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"2.92.0","maintainer":"Vilém Duha","tags":["System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d55d15f7-22f3-433f-9e6a-e7b3544256c0/","schema_version":"1.0.0"},{"id":"texture_bakery_image_buddy","name":"Texture baking image buddy [FREE]","tagline":"Add-on for creating empty images and their image texture nodes i","version":"1.6.8","type":"add-on","archive_size":134546,"archive_hash":"sha256:384048dd9e5c08c899b7d19c453a5be841b9b8ba89064ed607d5ba21fe479204","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4c531eb1-ecd6-4b20-835c-85e8bcce698f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jungle Ham","tags":["Material","Node","Workflow","Baking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c52a840f-f69b-48c9-92ff-520bd166ecab/","schema_version":"1.0.0"},{"id":"texture_upscaler","name":"Texture Upscaler - Offine Image Upscaler For Blender [FREE]","tagline":"This addon lets you upscale your textures in image editor","version":"1.3.0","type":"add-on","archive_size":200727626,"archive_hash":"sha256:6a71e383d902259c98be3deed66ebb7426c32aa2faf638295e6e4a0ab15078e5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6964e35b-6cf3-484e-ab91-e8600f5b418f/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["upscale","texture","PBR"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/999f5f40-469c-4d46-8647-42babafe320e/","schema_version":"1.0.0"},{"id":"amazing_hypotrochoid","name":"The Amazing Hypotrochoid 1.0.9 [FREE]","tagline":"Generates intricate hypotrochoid curves with adjustable paramete","version":"1.0.9","type":"add-on","archive_size":28189,"archive_hash":"sha256:25a502b65b9332a0b53c601d66096dc8a1ceaf7af82ea7cf510d832b0b910c0e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a6bee5b1-fc21-463a-b65d-78349d7185c4/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["spirograph","curves","hypotrochoid","math","equation","circle","swirl","abstract","art","random"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/95f41ca3-5d8a-40ef-9b7b-2c89978e42b2/","schema_version":"1.0.0"},{"id":"timeline_buttons","name":"Timeline Buttons [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.0.0","type":"add-on","archive_size":15158,"archive_hash":"sha256:3aac330381de15d2f69641f0f6c7f0dcaec42371e014ca70889cad899d27d815","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a70a4693-3fa2-4901-88cb-00a7c87e12ff/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"TinkerBoi","tags":["timeline","framerate","ui","dopesheet","graph","sequencer","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/efb9a92c-fe00-40dd-a3cd-70c4086143c0/","schema_version":"1.0.0"},{"id":"tmeasure","name":"Tmeasure v1.1 [FREE]","tagline":"It accurately calculates the curved or linear edge paths of the","version":"1.1.2","type":"add-on","archive_size":4978,"archive_hash":"sha256:112307b7d10a7d3e66ca7245e8f52aa4a5df709d1c453bcd1ffc268472f4b9bf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/26d14398-683e-48ff-8c34-dd15191bcae3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Otonkart Tonka","tags":["Mesh","Modeling","3DView","measure","calculation","measurement","precision","tools","hardsurface","editmode"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bcfa86cb-798b-4fdf-80bb-3024eb5cadb9/","schema_version":"1.0.0"},{"id":"EMU3BM","name":"Toggle Emulate 3 Button Mouse [FREE]","tagline":"Adds a button with mouse icon next to topbar menus to toggle Emu","version":"1.4.0","type":"add-on","archive_size":1343,"archive_hash":"sha256:e0eb54d5bc012e9d262c255df472ac0cdcf194a366f914d4c488525ed795c497","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2cb0b47c-afea-4165-97e4-92a1a91f2085/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Kin Chen","tags":["mouse","Graphicstablet","DRAWING","toggle","PEN"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fa48f8c8-ccf7-4053-89d6-a4f065ca2709/","schema_version":"1.0.0"},{"id":"tryon_clothes_2","name":"Try On Clothes 2.0 [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"2.0.0","type":"add-on","archive_size":93895383,"archive_hash":"sha256:f0f5505c3252b090b9cb50cc04a9c0a20def4970b3441c21ad1983932f0e4c7f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/beb0b63c-6f62-4fdd-a56f-fe1164022d60/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Clothing","Tryon","Garment","Customization","Image","Model","Style","FashionTech","Virtual"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fb812bd3-5913-4549-91fc-1ff8e5c486b7/","schema_version":"1.0.0"},{"id":"tuberig","name":"TubeRig — Make your rig controls actually visible [FREE]","tagline":"TubeRig takes your existing Custom Bone Shapes and wraps them in","version":"1.1.0","type":"add-on","archive_size":24455,"archive_hash":"sha256:02d6cec8b3486cbe1e84272c5af48e13b78d8e801feb1b1ff7b39ed155cb32f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d1cd8f43-1581-4de9-97dc-326c0bcfd853/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Yakiv Sankov","tags":["Rigging","Animation","Addon","bone_widget","custom_bone_shape","geometry_nodes","rig_controls","tuberig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e2da7972-168a-4dd1-a415-f971c73a8503/","schema_version":"1.0.0"},{"id":"WeightPaintToolForBlender","name":"Weight Paint Tool for Blender [FREE]","tagline":"NO DESCRIPTION PROVIDED","version":"1.2.0","type":"add-on","archive_size":3855,"archive_hash":"sha256:ab7411de691858c94764273515a13f0a5768b78cca48a1c44554eee0d78380ed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f24f5077-e24a-4e25-9e75-84a974d720f3/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Peter Harmatiy","tags":["Blender","Weights","Paint","Tool","3Ds","Max","skinning","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8ebcbb43-4807-42e2-9ae1-9bef04b58aea/","schema_version":"1.0.0"},{"id":"xcut","name":"XCut [FREE]","tagline":"Cut (Ctrl+X) for Blender's Outliner and animation editors","version":"1.0.0","type":"add-on","archive_size":4238,"archive_hash":"sha256:4065b43f89015d76880252c2d8e2b3a2e91ed19a304f71c5c11f5c60a1c5bc11","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c0561ccb-79ea-4633-86e7-122673f9a21a/addon.zip","verification_status":"validated","can_download":true,"is_private":false,"is_free":true,"is_for_sale":false,"base_price":null,"blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["Object","Scene","Animation","cut","edit","useful","Cut","shortcut"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/73d5e3e9-c9e5-43d6-91e6-11ea780a3004/","schema_version":"1.0.0"},{"id":"cobweb","name":"Cobweb [FULL]","tagline":"FULL plan required - upgrade to download","version":"2.2.1","type":"add-on","archive_size":50711,"archive_hash":"sha256:0706d2533db72a8d7e824ede71d7bfe84e3fea73a6454b3c3672900d7a8b8b41","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/28c5d4df-a8b9-478f-94cc-a2bd4decf1ef/addon.zip","verification_status":"validated","can_download":"Rejected in this plan","is_private":false,"is_free":false,"is_for_sale":false,"base_price":null,"blender_version_min":"2.79.0","maintainer":"Vilém Duha","tags":["System"],"license":["royalty_free"],"website":"https://www.blendkit.com/asset-gallery-detail/20d48d8d-39a5-4d1f-9fb0-994401b2a9c2/","schema_version":"1.0.0"},{"id":"final_topology","name":"Final Topology for Artists [FULL]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":627177,"archive_hash":"sha256:0a9d55a9a02cb026fa969eeaf7f7eb11258732eeb8322e09c136e28da0aa8a4f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/46d5cd8f-b93c-4786-8e4b-51b3b6ebb645/addon.zip","verification_status":"validated","can_download":"User is anonymous","is_private":false,"is_free":false,"is_for_sale":false,"base_price":null,"blender_version_min":"2.92.0","maintainer":"Blendkit Community","tags":["System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/388b195c-5a7d-4d9f-a632-0dac12c9198c/","schema_version":"1.0.0"},{"id":"two_d_people_archviz","name":"2D People [Before: $11.99, Now: $10.19]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":256485,"archive_hash":"sha256:ab84c4836a19c106c9c4cc64772b1a793c71c119258eacb7efaf532d9857d4cd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2f40621f-a3c3-4b2f-9266-11e3b7e3be2c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.19","blender_version_min":"4.3.0","blender_version_max":"5.2.0","maintainer":"Sérgio Merêces","tags":["2d","people","assets","elements","trees","architecture","archviz","real","placement","projects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0fc2f9a-fb4f-4980-afb5-32f07d5c0cb8/","schema_version":"1.0.0"},{"id":"object_3d_comparison_video_generator","name":"3D Data Comparison Addon [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":42045461,"archive_hash":"sha256:9b8c84af187c955f914a5b0b78e1e4284e0b59c0c1fe1a9c2ac28f18ee7d1e2d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5abad072-0cfa-43f4-9e8b-a57814831497/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"3D COMPARISON Musk","tags":["3d","data","comparison","visualization","addon","blender","3dbar","3d_data_comparison"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6ae0f491-2109-4e05-b1d8-e075bc0ea07b/","schema_version":"1.0.0"},{"id":"procedural_pattern_generator","name":"3DQuads Texture Maps Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":73577,"archive_hash":"sha256:b1aff6a799bce2cb9891d217dc2795c1b57830f81d430e40fd15fbd613798a92","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9be78010-98d0-4180-9fc7-1316a565e139/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"3dquads blender","tags":["Material","Texturing","Procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ae4162bc-84bb-4e48-b2b9-4072a990f873/","schema_version":"1.0.0"},{"id":"abo_connect","name":"ABO Connect [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":41658,"archive_hash":"sha256:d1e2b4545aafd73466c8f3525f2f7baf2ac4fc418e20fb31c9eed4ead61cf0f1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9bd45216-230c-442c-a0c7-ba898c2258f9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Andrew Luzhetskyi","tags":["library","furniture","ABO","assets","models","archviz","electronics","free","interior"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0bc8018-886c-4c41-ae18-2097088e3b48/","schema_version":"1.0.0"},{"id":"advanced_modifier_tools","name":"Advanced Modifier Tools (AMT) [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":26641,"archive_hash":"sha256:390d9e74a4786fd18958d7bf5adb8f9eb9bbc60527a136e8b6f8da045d63e054","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6dfdafb8-34bf-4fd4-88cb-1b98e7b896dd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Soheil Mahmoudi","tags":["Modifier","ModifierTools","AdvancedModifierTools","BulkOperations","Bulk","Preset","Snapshot","SoloMode","Modifiers","Selection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0fd579a3-d75a-4ca3-9e44-154f571858b8/","schema_version":"1.0.0"},{"id":"ai_geometry_node","name":"AI Nodes [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":12066,"archive_hash":"sha256:52f11f2ebfd2f323c7f6d0497bc4cf7f9e182c956a59bc06f8333316769f3b24","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c03e5769-59f1-4c19-a610-f2cfa150cc61/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["ai","llm","chatgpt","claude","gemini","artificial","intelligence","dynamice","text","procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7de3fba7-ce57-4124-b1e1-d146e7855b0d/","schema_version":"1.0.0"},{"id":"ai_shortcuts","name":"AI Shortcuts: Add new buttons to blender [Before: $6.99, Now: $5.94]","tagline":"FULL plan required - upgrade to download","version":"2.8.0","type":"add-on","archive_size":11078,"archive_hash":"sha256:99844c2df0e2bd04d5f1326e199a57507ad60affc64223a7b5809b33e0c23997","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2d892b56-86b1-45b9-b1f6-355b28a7993f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.94","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["ai","gemini","addon","blender","shortcut"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4f4adf7a-d4c9-400d-85ee-53b73a3cc14f/","schema_version":"1.0.0"},{"id":"align_distribute_objects_pro","name":"Align & Distribute Objects Pro ULTIMATE [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":4516,"archive_hash":"sha256:198a0ba8b51c2fea507da48921704fdc39f6f506420881efd7b3b689c543f7f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9f79e7e7-f980-427d-88fb-96b0ef350e39/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.0.0","maintainer":"isac lima","tags":["Object","Modeling","Scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14106c2f-74a6-4d17-9447-a93f2bd0b56f/","schema_version":"1.0.0"},{"id":"align_toolkit","name":"Align Toolkit [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":15041,"archive_hash":"sha256:024b25133b7ba4de512a7043fcd1fdf4e1dda61fb407db9118d477cb293743b4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ae77c204-58c0-452a-a391-c8573c2b0bdc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["alignment","ux","align","distribute","ui","toolkit","user","interface","experience"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/68a1366b-51bc-40b3-af32-9b38d3292e47/","schema_version":"1.0.0"},{"id":"alt_tab_colorful","name":"Alt Tab Colorful [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":20121,"archive_hash":"sha256:393d1f896b9aba97226956a59a1b15cc0d0ae501517ab8c54a46603f967b3eb9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/96b0ebc8-38c7-4f1d-a3cd-34a2cfa4402b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","colors","colour","palette","generator","color"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/de7931c2-31d6-473f-982e-728a1a735269/","schema_version":"1.0.0"},{"id":"easy_fog","name":"Alt Tab Easy Fog 2 [Before: $40.00, Now: $34.00]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":64598868,"archive_hash":"sha256:2c2840bbfceada6d70b37dfac28bae7e3b347be5ad871d64332b24c91bb647a8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7b56f9ad-1df7-4803-be2b-f74a32dd1690/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"34.00","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","addon","fog","volume","clouds","mist","explosion","godray","smoke"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5ba4cad8-7db8-4235-a5f7-bd264a60e489/","schema_version":"1.0.0"},{"id":"alt_tab_easy_hdri","name":"Alt Tab Easy Hdri [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":385592,"archive_hash":"sha256:b72f2d7159a888113322cda4646363adb8e52698b1af624e0e4c4fcdcf380133","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9f3c1e2a-bfbe-4286-84c4-ec44b98109e8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","HDRI","World","Lighting","GroundProjection","HDRISphere","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2347b643-69bd-4f8d-8008-ffba17e706e3/","schema_version":"1.0.0"},{"id":"alt_tab_lighting","name":"Alt Tab Lighting [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11811259,"archive_hash":"sha256:a6da266309f0c9e57df4ac8c73c96a8cc539751b413283b5d8c53c42bc055236","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ede8deaa-d482-4eaf-88ed-59baf96d81c7/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","lighting","presets","cinematic","lights","light","addon","manager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fccb81d9-10b2-40ad-b46e-9d3a4b88f8ef/","schema_version":"1.0.0"},{"id":"alt_tab_pixel","name":"Alt Tab Pixel [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":187750,"archive_hash":"sha256:ab0672cd273718e0b180a0b62885c7700f3a9c87e012368f4aaa56135563802b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e8e63c9f-bfb2-4b1f-ab48-6f215a471b00/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","pixel","pixelart","2d","shader","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/846e4c3e-6227-405d-8682-fbbf080d9dcb/","schema_version":"1.0.0"},{"id":"animates","name":"Animates Complete Animation Suite [Before: $65.00, Now: $55.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.4","type":"add-on","archive_size":174446,"archive_hash":"sha256:6ba53c2008f5ebbe9eb4cd5a58b37f2cf008729a95875a37dffc32628af00b6d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/67fafa3c-a1d2-4a62-882f-67051513e2ca/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"55.25","blender_version_min":"4.2.0","maintainer":"David Hallows","tags":["animation","character","keyframing","graph","editor","motion","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fe9df247-5dd5-441d-91dc-aafdde63db3e/","schema_version":"1.0.0"},{"id":"animation_layers","name":"Animation Layers [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"2.4.1","type":"add-on","archive_size":99251,"archive_hash":"sha256:9c20bef2b59833a0663a26d96dabb2eceaa71760be15bd49922c5e132c3584b6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/14f01b6a-4082-4c6c-8229-9ac05d0d3158/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Tal Hershkovich","tags":["Animation","layers","motion","capture","mocap","nla"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/797ac060-785e-49dc-a98f-d0ecf4abc555/","schema_version":"1.0.0"},{"id":"anime_outline","name":"Anime Outline [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":740454,"archive_hash":"sha256:be4d38ab3ece3bc788ffa1ada8dfd9883925db1ecd6916a34937adfa56aab70c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5d916717-58fe-4e6e-b6b8-1d10ee208c75/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"3.6.23","maintainer":"Andy Hellgrim","tags":["Modelling","Import","Export","Outline","Anime","Eevee"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6a6bb31d-7a31-456f-a05c-dae63d03a1c5/","schema_version":"1.0.0"},{"id":"animtex","name":"AnimTex - Animate Texture Transitions [BETA] [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.8","type":"add-on","archive_size":1581140,"archive_hash":"sha256:880d8c49a4b1f7dcfec4993eeb2e07e027f302f5bf515e8393a6aad62c3dceb9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b3201024-25d6-49d2-b71b-cd12e619e139/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["3DView","Material","Animation","Texture","Disolve","Disintegrate","Effect"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f1f0d459-3a41-45bb-a502-8eb0fc86fd85/","schema_version":"1.0.0"},{"id":"archiform","name":"ArchiForm [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":42977,"archive_hash":"sha256:85b7c71aea23717ad2cd040897a2cf31a74b22b23691d2b00bf1c9cf5bfd25f6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7a0535ba-38c2-44b6-b3a0-390d56398a70/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Abbos Mirzaev","tags":["RoofGenerator","WindowGenerator","parametricdesign","floorgenerator","FastModeling","ProceduralModeling","ArchViz","WallGenerator"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7ce6dc77-79fc-4a75-8f35-f241946e834c/","schema_version":"1.0.0"},{"id":"archviz_camera","name":"Archviz Camera [Before: $28.00, Now: $23.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":7573,"archive_hash":"sha256:4b1731b758ae452d3b7e94e18041181660942afd3c57ccf16e374a6d1231679a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/149ff6da-8fe3-49ca-9afb-8630afebe62c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"23.80","blender_version_min":"4.2.0","maintainer":"Daniel Farjoun","tags":["archviz","camera","tilt","correction","manager","render","shot","architecture","pro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd4522ac-f70a-4d3a-9955-7c133b4572b3/","schema_version":"1.0.0"},{"id":"arkit_toolset","name":"ARKit Toolset [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":5563553,"archive_hash":"sha256:352d8627021d11aaa88347e0492e8e4d3c82ff8f45a54be7466ed5b62951f91e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7ecd80cc-66ca-4be5-b7fd-0dd688097110/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"2.83.0","maintainer":"Andy Hellgrim","tags":["Animation","Modelling","Rigging"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c6250a59-cb9b-4040-8dec-74df05e04bd4/","schema_version":"1.0.0"},{"id":"Arrowify","name":"Arrowify FULL VERSION [Before: $50.00, Now: $42.50]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":4692987,"archive_hash":"sha256:e95bd263c94ac3bcf6b4499b202ca195b722d6d77e5edc1d36e804340f196073","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6b514bc5-7041-4155-851b-d62cb6a712f1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"42.50","blender_version_min":"4.2.0","maintainer":"RR3D","tags":["arrows","spline","procedual","animated","annotation","nodes","customizable","technical","guide","visual"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7e5c82e6-ddbd-48d1-98d2-c7077a0a4261/","schema_version":"1.0.0"},{"id":"defoq_assetify","name":"Assetify | The Ultimate Bake & Export Tool [Before: $34.99, Now: $29.74]","tagline":"FULL plan required - upgrade to download","version":"2.1.5","type":"add-on","archive_size":438131,"archive_hash":"sha256:bf0fcb963fe97edf240ab8f350102829bcaaca07880e30b4ebe5a08ec6ac3b12","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4b54309-7911-4dd9-bc33-ec7b633000f3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"29.74","blender_version_min":"4.2.0","maintainer":"Defoq Nino","tags":["bake","export","game","engine","materials","optimization","unity","ue5","textures","fbx"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/82a1fc6a-bb0a-4162-bf87-ce2d6f1d80bb/","schema_version":"1.0.0"},{"id":"quick_lighting_presets","name":"AT_Quick Lighting Presets [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4208,"archive_hash":"sha256:f401b70f3a58b2dafa039b4d4458bbb3e5b6e287a53ea04e9c956ee667d24f20","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ff81e91c-8620-41e6-9dfe-f2b12a6b352b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.0.0","maintainer":"Alireza Taherpor","tags":["LightingSetups","LightingStudio","StudioLighting","RenderSetup","BlenderLighting","CinematicStudio","CinematicLighting","ProductLighting","DramaticLighting","RimLighting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dc146555-325d-4adc-ba04-71d982d85781/","schema_version":"1.0.0"},{"id":"auto_apply_scale","name":"Auto Apply Scale [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3401,"archive_hash":"sha256:ee30a47355275e1eef8b09809bf0afd33c8e21a648101523992fd22e5cd77f73","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4e63abb-980f-4bd2-9d5b-8d58e40ceb02/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","scale","autoapply","workflow","modeling","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e9e08a2f-273e-4dc1-833a-9bb00e7c0140/","schema_version":"1.0.0"},{"id":"auto_displacement_and_bump","name":"Automatically set material to \"Displacement and Bump\" [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"2.7.0","type":"add-on","archive_size":4305,"archive_hash":"sha256:5cfd1524435be43a647fa5867e72f99ebb7961675ad78b4c19365c44f4e4d591","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/af628f62-4440-4bad-ae9f-0faeac8bcd61/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Alhakam Kain","tags":["Material","Displacement","Bump","Cycles","Auto","Workflow","Subdivide"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ba32fb3-ac0b-4119-a0e0-ce2d83c04170/","schema_version":"1.0.0"},{"id":"automatic_fake_user","name":"Automatic Fake User [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":4268,"archive_hash":"sha256:938ba462e6a0bcef16a7150db22fd86bd823f80c73846ac946cf20e502165c10","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a6f43cc3-6202-4572-becf-eb6238949665/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["asset","data","ui","ux","datablock","autosave","fake","user","automatically"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/90f0e757-41db-4a42-8d9a-c4ddf93b81bd/","schema_version":"1.0.0"},{"id":"autoremesher","name":"Autoremesher NOW! | Automatic Remeshing [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":13478980,"archive_hash":"sha256:f89242c71ba41ab17fb1938b94e8cd82e0e8a3aaeb6536755dff6fdf97a088b1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9409b4d6-59e4-4f7b-93bf-9b51a9811b8e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"5.1.1","maintainer":"Giambattista Von Nettesheim","tags":["optimization","decimation","tool","topology","cleanup","quad","remesher","mesh","repair","remesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/86e86fab-5c54-4e8b-8ad9-4db6aa160784/","schema_version":"1.0.0"},{"id":"auto_save_file_checker","name":"Auto-Save File Checker - Browse all the Temp Files [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":11826,"archive_hash":"sha256:97bbf97c0794a1fe1a71563ccb04287667b32ca08dc579436757408fc6f04668","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/84632576-75d1-4ca3-9bcb-becbe3884a98/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["System","Development","autosave","blendchecker"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/18ba6214-e44c-4603-a654-19123100e06f/","schema_version":"1.0.0"},{"id":"auto_uv_unwrap_3_pro","name":"Auto Uv Unwrap & Pack 3 - Create clean UVs in seconds [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":28163,"archive_hash":"sha256:1fc915d1effc311bdb98272a78c866dc61d2e596114c6ebaa304e34f723391ce","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/402c8540-9b3f-44a8-a1db-fe11518d62f9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"3.6.0","maintainer":"Studio156","tags":["blender_addon_for_uv_mapping","tools","seamless_texturing","seamless_uv_unwrap","uv_mapping","uv_unwrap","uv_unwrapping","auto_uv_unwrapping","auto_uv_mapping"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3915ee47-7c9f-4349-9981-cef51ba1c19c/","schema_version":"1.0.0"},{"id":"basic_wire_rig","name":"Basic Wire Rig [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":8971,"archive_hash":"sha256:a52e5ed61919cfceabcc799a50ddf9ef0bfd143ea8a891f08b1dec71820d0ee3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/efa10129-754e-4d6d-8ccb-e709a206fe14/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["Animation","tools","cable","rig","wire","puppet","inverse","Kinematics","chain","ikrig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5683ae75-d590-4756-8292-1ecbb4aa66cf/","schema_version":"1.0.0"},{"id":"batch_export_selected","name":"Batch Export Selected [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2703,"archive_hash":"sha256:6998f2db2bd89bf52d165e69566e97cbb1e21c2bd6ea48af63bf5978669b44b8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dfc42df0-8211-43ec-ba42-4fb4a1eb7b89/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["export","selected","objects","bulk","multiple","format","addon","obj","fbx","stl"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/110a268e-9661-4a69-b1b0-0970e718bb99/","schema_version":"1.0.0"},{"id":"BatchGenie","name":"Batchgenie: Asset Assistant [Before: $1000.00, Now: $850.00]","tagline":"FULL plan required - upgrade to download","version":"1.3.1","type":"add-on","archive_size":14941835,"archive_hash":"sha256:6b510374f080da157ad4a432507f68ad9832f80c7870c47510b2cf98e484d322","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4c40dbb1-424c-4197-9e8f-fbc43deb89da/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"850.00","blender_version_min":"4.2.0","maintainer":"Roberd Palm","tags":["Asset","Library","Batch","Rendering","Import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/32b07916-3a38-46d5-8e25-544926d8fd5d/","schema_version":"1.0.0"},{"id":"batch_rename_addon","name":"Batch Rename [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1745,"archive_hash":"sha256:1b4be6000c75875c5db989d606cf9dafc4ae84b29829b9ec656b041ab9bf365a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e974a06-e3ca-4107-ae67-23c57fa81231/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Batch","Rename","Prefix","Suffix","Organize","Interface","Efficiency","Naming","Scene","Automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e0ce1d7c-858a-48a2-84e5-2765dc617bda/","schema_version":"1.0.0"},{"id":"batch_rename","name":"Batch Rename & Replace Pro Blender addon [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2746,"archive_hash":"sha256:87eff844dff87b5aece9b41f3c2fee5a1de0baa8837ce4a88b85560996cb328c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/639f709c-2c21-4022-b4a0-a71a6bbc8096/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["batch_rename","find_and_replace","object_naming","prefix","rename","scene_organization","suffix"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2bb18442-9a82-4a5a-abdc-a09f90c400b7/","schema_version":"1.0.0"},{"id":"kamildobrek_batch_render_manager","name":"Batch Render Manager [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":58465,"archive_hash":"sha256:1869ac939e037aac1143217cfa2a8eea118f1d3b30c5d3df6e53b5efe45e2f98","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e1ed6b2c-c614-4e21-af32-ef412127d6d9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"K","tags":["Material","Object","Render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ff85ef84-9287-465c-a30f-4ed43fe442e1/","schema_version":"1.0.0"},{"id":"bb_toolkit_pro","name":"BB Toolkit Pro [Before: $8.99, Now: $7.64]","tagline":"FULL plan required - upgrade to download","version":"1.0.8","type":"add-on","archive_size":56758,"archive_hash":"sha256:412b2098d35238a1766808a2d49895488e42f8bb98df0bde33cd1ba5fc5e6cb6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e1252aad-c6c5-42eb-a389-cbefdcb6aa8e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.64","blender_version_min":"4.2.0","maintainer":"Theo","tags":["threelights","overlays","productivity","modelling","tools","quickaccess","modifiers","fixscale","wireframe","facenormals"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f953d832-362d-4e0c-9caf-208f6e7936b0/","schema_version":"1.0.0"},{"id":"better_bend","name":"Better Bend - Geometry Nodes Bend Modifier with Intuitive Controls [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":25767,"archive_hash":"sha256:be4346fef203ac6c042afee66e50722aee1f7b765a2dc8225bc0a8eaa7d37aef","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d44ed407-bd2f-45e3-ae58-5aa57482461b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Mesh","Modeling","GeometryNodes"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c1cf022-c9a5-4e7f-b821-057c1c4abe99/","schema_version":"1.0.0"},{"id":"better_cutter","name":"Better Cutter V1.1 [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":32438,"archive_hash":"sha256:d8a1153ba01c79e55c1ba97c79a1982415e47e77d41c5742cca7e01636212f0f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cc4a77cd-92c1-4ae7-9da4-d04038e8e715/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Bala Murugan","tags":["cutting","addon","better","cutter","hardsurface","modeling","blender","3dmodeling","boolean","looptools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/85b19cc5-4a46-46f8-8f1e-e399a8458ac1/","schema_version":"1.0.0"},{"id":"bevel_joints_v7","name":"Bevel Joints - Join Meshes - Weld - Bevel V2 compatible - Set Mesh normal - Edge attributs [Before: $15.50, Now: $13.18]","tagline":"FULL plan required - upgrade to download","version":"7.1.4","type":"add-on","archive_size":5098125,"archive_hash":"sha256:24f90dd72619dfe4d9aaf8b459afb6d4891112017332c909483514da91533a44","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9ed7281e-0ef8-4c7d-9d19-641ace4aae44/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.18","blender_version_min":"3.6.0","maintainer":"Mr Steve Lee","tags":["bevel","join","mesh","blender","manifold","clean","2025"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8f021e02-4605-4a46-ad46-3aff2abadae8/","schema_version":"1.0.0"},{"id":"bildeform","name":"Bildeform | Bas Relief Maker From Your Images And 3D Models [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.5.2","type":"add-on","archive_size":3428172806,"archive_hash":"sha256:d92474aa863833fe86450406a8be876c00e87e70a97f08938947899b4986358d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/99036cb8-dde5-4767-b670-5e1b2ccd4c0d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"5.1.1","maintainer":"Giambattista Von Nettesheim","tags":["basrelief","heightmap","zbrush","reliefmaker","depthmap","bildeform","displacement","3dprinting","CNC","maps"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4f0e25d1-7c9d-4a77-bf6d-60df3dc5b7a2/","schema_version":"1.0.0"},{"id":"blenderkit_translator","name":"BlenderKit Translate [Before: $6.90, Now: $5.86]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":2506,"archive_hash":"sha256:efb37d88992f8a1271da4c4e0012fd4992b4306dfc50382aeb5e6494a048ae11","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/da53acdc-2eaa-4b3b-ad15-dfe1acec4ba3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.86","blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["translation","search","assets","tools","language","utilities","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c58bdee2-6fae-4164-8dab-2786202b3e76/","schema_version":"1.0.0"},{"id":"blender_light_mixer","name":"Blender Light Mixer add-on [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11478,"archive_hash":"sha256:ca92bbdafac363ea15437189b1555e4fc52d97f62ceb0a14a67876fdb1b1ef02","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3ba1716a-2ef7-43f6-9c80-fe65bd0987c6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Lighting","Render","Compositing","Cycles","Mixer","Addon","Realtime","Rendering","HDRI","Emission"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7b131c57-7e52-42f0-a1c0-9bcfcd38b182/","schema_version":"1.0.0"},{"id":"blender_luts","name":"Blender LUTs [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5883785,"archive_hash":"sha256:117804828d165ade5fed594f79a3f4c17e292297a6beae975915d2f6b096b416","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3b02592a-8adf-4be4-9255-387cc5f59072/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["LUTs","Compositor","Renders","Color","Effects","Nodes","Filters","Cinema","Grading","processing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/02dacd43-eafd-435f-badf-d01756834f35/","schema_version":"1.0.0"},{"id":"blendermcp_pro","name":"BlenderMCP Pro [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":72361,"archive_hash":"sha256:32aba972d1ab39cf45271a511277987628eaf5721ce36dbde7d9868a84fa3d1e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c9032bf-1d16-4a87-be09-1e77e6ee7036/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"5.0.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["Interface","Pipeline","MCP","automation","AI","Chat"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2119db70-e04f-4bf6-bd8e-a38675987a98/","schema_version":"1.0.0"},{"id":"blender_revision","name":"Blender Revision V 2.1.0 [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.2.0","type":"add-on","archive_size":14849,"archive_hash":"sha256:382d4beed3837ab319fb112ebea32de5aa1e5f5ab911c0ce679ccca4fb29137a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9e625b8f-41e1-4494-bdc0-2b7eb5dfa078/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Vincent Ilagan","tags":["render","revision","compositing","cycles","eevee","optimization","selected","objects","pipeline","vfx"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/476556b5-ed65-485f-b566-16ff3c967291/","schema_version":"1.0.0"},{"id":"rizom_livelink","name":"Blender - RizomUV Live Link [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":8979,"archive_hash":"sha256:23be20e366669ef8256b5e80087fd134b49dc4cb8ed9d49877bef38900c4d4ee","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8f53f3ac-b38f-469f-856a-99b9a72fe6c7/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"5.1.0","blender_version_max":"5.1.99","maintainer":"Milad Kambari","tags":["rizomuv","uv","mapping","bridge","live","link","pipeline","uv","unwrap","uv"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/abd3b5f4-b476-4104-a791-aeac6a1573ba/","schema_version":"1.0.0"},{"id":"blender_sp_live_link","name":"BLENDER <-> Substance Painter Live Link [Before: $18.00, Now: $15.30]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":25427070,"archive_hash":"sha256:375ff3ee561d16e1ba47e809c660a75c6f0901796dd9de698c4addd2d782ba53","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c443b576-8673-4247-aaa3-0b96ce40ffaf/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.30","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["blender","addon","livelink","bridge","substance","substancepainter","blendertosubstancepainter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8653c075-2f7a-418b-b228-c5cabbf5ba0e/","schema_version":"1.0.0"},{"id":"blender_to_godot","name":"Blender to Godot [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":431945,"archive_hash":"sha256:b09ee9b1ebbb6ee2701103945d9d1957c7027372e48d8227545bd02e6c1f58c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/26a91aca-41d3-471b-a71b-8fb1a5da3fce/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["object_export","collection_export","collision_export","component_export","animation_export","godot_exporter","gltf_exporter","godot_workflow","godot_pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0bc81975-693c-42e6-8465-ad0e2e37d9d7/","schema_version":"1.0.0"},{"id":"blender_to_unity","name":"Blender to Unity [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.6.4","type":"add-on","archive_size":445627,"archive_hash":"sha256:b38ae9ef546719c5be97fdbe07d7b726d8d338b3f457039c59624cf4f6368f36","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e3743448-3cd0-4ccd-85ae-16c918350590/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["blender_to_unity_export","fbx_exporter","batch_exporter","unity","unity_3d","lod_exporter","collider_exporter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c884710-57d8-438e-a89f-1c51bb88bb9c/","schema_version":"1.0.0"},{"id":"blender_to_unreal","name":"Blender to Unreal [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.5.8","type":"add-on","archive_size":439859,"archive_hash":"sha256:7f96e285c9fd83e4f5a8b5a2c0a77f3b25d5fe14e1f7f430de6b4c92cd3aa5c5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e24e7aec-90ce-4344-b981-910f066797e8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["blender_to_unreal_exporter","unreal","unreal_5","fbx_exporter","batch_exporter","collision_exporter","LOD_exporter","socket_exporter","animation_exporter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c047180-1c4f-4280-b4dd-56953673651a/","schema_version":"1.0.0"},{"id":"vse_lottie_exporter","name":"Blender VSE To Lottie Json Exporter [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":478198,"archive_hash":"sha256:df934207034410d289ecaa5a0560701937fd4710c4136d657c6b0e2550b37eee","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/758a98ec-23fa-4a16-beef-8bf64f69a8b1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"Dynos Std","tags":["export","vse","motion","ui","json","lottie","animation","video"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/624848c3-08c0-438b-8177-a4bb8680e563/","schema_version":"1.0.0"},{"id":"blendoptimizer","name":"BlendOptimizer [Before: $4.49, Now: $3.82]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":44178,"archive_hash":"sha256:6d92091fd9695d3b2e93f05ef43ae4cf203364ddc14cffea5606ff444c0d9bab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1f5bc0d6-e10e-478a-8e6a-a69efe1953b0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.82","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["Pipeline","System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bfd43647-78e8-4252-92bf-a5c349b82f15/","schema_version":"1.0.0"},{"id":"blenquick_autorigger_v2","name":"BlenQuick Auto-Rigger [Before: $30.80, Now: $26.18]","tagline":"FULL plan required - upgrade to download","version":"2.7.3","type":"add-on","archive_size":7306982,"archive_hash":"sha256:ffd7a5221adbbc41e75c09b427de6a18a51c4fda4308941d03a9df9ec174f9cd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/46f3ba7b-a4da-4064-98b0-ed9b4c6c960b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"26.18","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["rig","rigging","autorig","autorigger","advanced","detection","export","character","smart","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8844f27d-31e1-44a6-ab42-9518a22f0490/","schema_version":"1.0.0"},{"id":"bl_objector","name":"BL Objector [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"0.1.2","type":"add-on","archive_size":48724,"archive_hash":"sha256:e99fa9a3ed65ab17d0c113a57b950b083b1cdcba1f918489791d178ce00a3c4e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ff7aaa8f-20f5-4c4c-813f-bfc57ce8c652/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"3.0.0","maintainer":"Michal Hons","tags":["3DView","style","dressing","random","scene","blenderkit","replace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0ba0acf6-cd24-4aa1-b677-d3ea874ccd5d/","schema_version":"1.0.0"},{"id":"booleanbite","name":"Booleanbite: 1-Click Procedural Edge Damage For Blender [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":8394,"archive_hash":"sha256:c7f3318eeea5cc01f51bd76af0afb1c74275f0b331cf261891cac5a9f042a536","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d0b2bbfa-bc8c-41b9-9ebd-4480955e13f1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Shift4Cube","tags":["hard","surface","blender","addon","edge","wear","boolean","procedural","damage"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e7644b82-c95d-4c06-b3f3-fb7b804ea64f/","schema_version":"1.0.0"},{"id":"boon_shader_lite","name":"Boon shader lite [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.9","type":"add-on","archive_size":11944507,"archive_hash":"sha256:52b7f858bb8dbf122f7e8b04e5556cc199844b6ec5a1f1f20bbe0e378bf54c89","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cbdbb779-e0ca-4d62-8b31-85274f0c2077/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Applebharath","tags":["Material","Render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3b9c924f-a11c-4d6f-af86-bafeb474d5ac/","schema_version":"1.0.0"},{"id":"bounding_box","name":"Bounding Box - Fixed, Dynamically, Shrinkwrapping - Easy to use [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":380172,"archive_hash":"sha256:8eb955f27e800b3fca95a09efccfc6cfde49bcfbdc7409479f7f76c99dce579d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/32700b65-aa85-49be-a0e8-282c87d30d58/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["3DView","AddMesh","Object","bounding","box","surround","wrap","shrink","dimensions","resizing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f5948370-e94d-4662-83e0-261f2c5dcb29/","schema_version":"1.0.0"},{"id":"bpm_marker_toolkit","name":"BPM Marker Toolkit [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":6263,"archive_hash":"sha256:442334badc75322a02f1b12e047930c9deff79bd99f1496517c9241597936cec","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/500fa12b-eb94-4e33-9dd9-73dbab309978/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"AL3K Insouratselou","tags":["Animation","Timeline","Markers","videoclips","music","sync","bpm","rythm","synchronization","timing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/99529f45-bc25-4e04-8ff0-792af864a549/","schema_version":"1.0.0"},{"id":"breakdown_master","name":"Breakdown Master [Before: $10.96, Now: $9.32]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":318236,"archive_hash":"sha256:77d5adad2e2ab51fbc5b2cb83c695f8f09ee2074dea3da1b7801d951aef67b51","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4f4435fe-f3f9-4b5e-b8e3-80f898e0f551/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.32","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["breakdown","animation","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a5602d43-74dd-4210-add4-c2699480f169/","schema_version":"1.0.0"},{"id":"breeze_sway","name":"Breeze Animaiton Tool [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":22657,"archive_hash":"sha256:a2030b664b8b229e59b89bd097644e7ae1dc70cbedd0c5af0670c528b9983cb8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a9f0915d-ea4f-44ee-8805-b9e908719323/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dde3c942-917f-4d40-a8a4-535aecc2717a/","schema_version":"1.0.0"},{"id":"bsat_reference_plan","name":"BSAT - Reference plan scaling [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":339168,"archive_hash":"sha256:2c677a7a66aa6bec8aa6ebdbbc83b183a40a0c6cd6cfce83c2582cb0fc7632bd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/45c91b7e-4536-48e1-8686-6823b91d7b73/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Julien Winé","tags":["architecture","reference","plan","scale","distance"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e7a459b1-81e4-4869-b684-d23bbe22c20e/","schema_version":"1.0.0"},{"id":"bslicer","name":"B.slicer [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.4.1","type":"add-on","archive_size":1678975,"archive_hash":"sha256:4765df4bbf8d2fc1660a86ed662abedf62e334437033cfea920ae977a6236dca","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3c1d581e-77fa-43f3-a63a-018fd2186025/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"3.5.0","maintainer":"belaid ziane","tags":["slice","slicing","export","svg","flatten","modeling","parametric"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45e0a112-b302-4020-881b-3a91fc139236/","schema_version":"1.0.0"},{"id":"b_working_pivot","name":"B- Working Pivot [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.8","type":"add-on","archive_size":18308,"archive_hash":"sha256:d03208917bb899d6e9ab99cb1956c37524dc354f8523d761dc56fee5656826c7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d4ae5882-e7bc-4a66-8b05-5b071f86165a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Robert Ross","tags":["modo","pivot","snapping","gizmo","3D","cursor"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/94bc13f4-fd31-4a84-8dcc-b7caf7b3648b/","schema_version":"1.0.0"},{"id":"camera_autofocus","name":"Camera Autofocus [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.9.0-20251005","type":"add-on","archive_size":5307,"archive_hash":"sha256:56752e1d4365f09bf9ce871f8d1c41fc499b943f794913698b96878065f09989","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0bf968a5-802c-48af-8350-05afbcc19ff8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Vixymiles","tags":["camera","autofocus","dof","focus"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2b81f79c-ab9d-4d7c-8181-cb4236963e5a/","schema_version":"1.0.0"},{"id":"camera_director_pro","name":"Camera Director Pro [Before: $4.49, Now: $3.82]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":32145,"archive_hash":"sha256:50119c301834ae33a304447005d11da04aca913722e4ff6a05020a028cc501ce","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a1dbe7b6-312d-417f-906b-ca40df8e1560/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.82","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["Camera","Animation","Scene","Optimization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d807b46e-842f-4a7d-8f83-773d73ecaa94/","schema_version":"1.0.0"},{"id":"camera_orbit_render","name":"Camera Orbit Render [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":10074,"archive_hash":"sha256:684a165b077372fe487504ac7314ff822817b24193fe0be962c8333bb4990682","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d7a8f513-be82-48b4-83f3-35c878b5d128/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["3dview","camera","orbit","render","product","cursor","objects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/69fdf172-290b-4b86-8b48-0c06bc312be9/","schema_version":"1.0.0"},{"id":"camera_preview","name":"Camera Preview [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.5.3","type":"add-on","archive_size":38959,"archive_hash":"sha256:aeb2eb83fe7690228387c899c8d25e8e3135e15fcaecb86bd8e2236bfc08d6bf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c7ee8ddf-3aee-440d-9148-a7807360aa6e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["preview","camera","3dviewport","viewport_preview","camera_preview","viewport_overlay","camera_addon","camera_view"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c4e22853-8e2f-4895-a813-390c1289a4b0/","schema_version":"1.0.0"},{"id":"camera_render_settings","name":"Camera Render Settings - Settings per camera! [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9056,"archive_hash":"sha256:eb1b21ea9778e55cd6e341aeb92473d301e3655bb2a0f10374d16f48dce6b771","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/15be96bb-fe63-4ef8-b6eb-108ee1a18bf1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["camera","render","rendering","settings"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/81384cea-a973-4bcf-879c-4289acbecac7/","schema_version":"1.0.0"},{"id":"camera_switcher_pro","name":"Camera Switcher Pro [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":13521,"archive_hash":"sha256:5c1e20ea372426f7299a477dc73f08bd44e7d2504ddfc47ffea36ee8bacec14a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/144b63b2-da09-4dba-a23b-f44a3bcf5515/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["camera","animation","shaking","3danimation","viewport","addons","tools","3dcameratools","switchingcameras","cameras"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/035556c6-4189-45dc-9249-be5558d0c54e/","schema_version":"1.0.0"},{"id":"car_rigger_v1","name":"Car Rigger [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1803530,"archive_hash":"sha256:aede98204f16af8773b3230007b1e002e12906b6cb99d8ccc38adf50fe6f53f2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0d9bbe47-7189-460b-85e1-71aec35d524e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["blender","rig","rigging","rigger","car","truck","vehicle","animation","4x4","autorig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ae20ae9a-4004-4920-8daf-c69ad0a1c0aa/","schema_version":"1.0.0"},{"id":"cgp_editor_switch","name":"CGP: Editor Switch [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.6.2","type":"add-on","archive_size":31881,"archive_hash":"sha256:be48e1779b44df451e744e99c2008526c7685124ef7617e4cc88bc82ffe50b88","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/23b6989d-84f3-4018-a0d7-2fe6e8fc9555/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Chaitanya Garg","tags":["editors","nodes","compisitor","faster","workflow","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/266ba176-1a93-49b2-888b-2af27b8304f3/","schema_version":"1.0.0"},{"id":"cgp_super_z","name":"Cgp: Super Z [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":23262,"archive_hash":"sha256:eb2fd1e49c3ef09eb2ef931671ee5529b55510c9b1fea4d846fa7f41023f9dd7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8a3b051c-c2a9-4301-97ca-77906d16b6f2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Chaitanya Garg","tags":["shading","faster","worklow","viewport","super","z","materials","screen","overlays","wireframe"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dc9d076e-b83a-4132-b48c-03a863c17e7a/","schema_version":"1.0.0"},{"id":"chain_generator","name":"Chain Generator [Before: $26.00, Now: $22.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":16909104,"archive_hash":"sha256:038d7bcb0ac96b490ab2f97d1a4d06be5e0d1e07903fc40bcd17fdc487ab5cc9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1131e3b7-e751-41db-9727-a9286b9ce02d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.10","blender_version_min":"4.2.0","maintainer":"Liryc Creative Design Studio","tags":["fashion","metallic","accessory","art","chain","geometrynode","animation","modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/323235cb-5286-42b0-85eb-d36eb388674a/","schema_version":"1.0.0"},{"id":"cid","name":"CID [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":22352,"archive_hash":"sha256:826b68d462541991755bf30491319ce46059185838f22098774171e897ccf25e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ff94167b-9038-46d9-9015-033870cf6daa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"Parametr Studio","tags":["color","id","element","channel","mask","pass","colour","postproduction","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aeb02b02-f395-4310-a629-6a864b3c4a6c/","schema_version":"1.0.0"},{"id":"cinespline","name":"CineSpline – Cinematic Camera Rig for Blender [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":70651,"archive_hash":"sha256:a3760b42bc393b1bc519ccfa93dc4a8cca340b48ba8cfe552b4f5aa3585d0722","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9c9e5311-af14-4e01-90d2-8f8b3a31918c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Mazen Lawand","tags":["camera","cinematic","animation","storytelling","motion","timeline","morph"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cc20ab37-417f-4a5a-ba54-0a74f46fdff8/","schema_version":"1.0.0"},{"id":"clean_addons","name":"Clean Addons [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"0.2.1","type":"add-on","archive_size":1501,"archive_hash":"sha256:4a9e91da91039e184f87e65411130cef1f621b9d40d7ca0d30114e0f98c2966a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a1b50628-4588-4cba-b82e-c1cee2dc90a4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Addons","Interface","Management","Toggle","Panel","Preferences","Customize","Tools","Enable","Disable"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0462ad01-9d76-4cdf-80cd-d408df81b69d/","schema_version":"1.0.0"},{"id":"cleaner_ps","name":"Cleaner [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":2818,"archive_hash":"sha256:ccc8d13da56ecca03a61b904561135e6197ccb5da32292cb20dcf5cd126ef2f1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/81217f29-9bb3-4cf5-abb3-789cdc86990c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"Parametr Studio","tags":["cleaner","pure","purge","topology","modeling","optimize","scene","cleanup","materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/99558ea3-aa07-4857-b623-f636dfbc6179/","schema_version":"1.0.0"},{"id":"clippy","name":"Clippy [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4360,"archive_hash":"sha256:983e222541b1c79a60e5d98c7d03667322ddbc60217caf299008f15d8829e8c8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7ea35ee2-12d7-4e70-931c-b96d7bb2809c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["ux","ui","camera","presets","viewport","clipping","user","interface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14658df6-0976-4e12-8bef-5496b444c437/","schema_version":"1.0.0"},{"id":"clip_speed","name":"Clip Speed [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2346,"archive_hash":"sha256:4b0b1cc4ffc72ef8935b2158641226855e4bfb02f642cfe462350008fd5290ef","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/57c36e54-5ad0-4da7-8624-13ab4e53fd96/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Sequencer","Speed","Duration","Playback","Video","Editor","Time","Clip","Reverse","Effect"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/161371d5-eb46-4252-b994-b74517b6e336/","schema_version":"1.0.0"},{"id":"cloth_collision_visualizer","name":"Cloth Collision Visualizer [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"4.0.0","type":"add-on","archive_size":5527,"archive_hash":"sha256:e7ac994e09d05b5a2ee7d642807dd031d24255af9574b55e384971bba6995f98","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ac45edb8-1e56-4afd-a680-81169b2fddfc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"3DFIGURES rian","tags":["Cloth","Physics","collision","Viewport","simulation","visualizer","debugging","selfcollision","realtime"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bd8326c9-879d-4e41-a462-12dcdb0ce6c3/","schema_version":"1.0.0"},{"id":"code_completer","name":"Code Completer [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":56500,"archive_hash":"sha256:4b79233d8c715d61e47af89c3737a56236e9240a46018c5dfce62d8046e85228","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3b82d2d9-ce19-42fc-9b68-979061dbcef6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["Blender","python","plugin","load","operator","Text","Editor","Essentials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d0dd08e8-57ac-4fb3-85cd-f7c5e40f88b5/","schema_version":"1.0.0"},{"id":"collection_colorizer","name":"Collection colorizer - auto-assigning viewport colors to meshes in specified collections [Before: $0.99, Now: $0.84]","tagline":"FULL plan required - upgrade to download","version":"3.4.1","type":"add-on","archive_size":2128,"archive_hash":"sha256:d749ef1fba32ceb555db5b35e7b7089b64632e253e2f00e2792bc8d07f0b16f7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78d30dc9-9667-4559-b7fa-d789c89c690b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.84","blender_version_min":"4.2.0","maintainer":"Mesk911","tags":["color","viewport","collection","display","object","solid","tool","search","visibility","optimise"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aef8a90b-e532-4020-bda5-a0c62336b9f4/","schema_version":"1.0.0"},{"id":"collection_zones","name":"Collection Zones [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":47447,"archive_hash":"sha256:3b90e6f0b6311866ace35b299a5f8f1699e92dfc77a1eb167357b890981da4b4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/efaae058-471b-43ec-bcf2-f18b94310c57/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"5.0.0","maintainer":"Giorgi Samukashvili","tags":["collection","zones","sorting","layout","outliner","organization","automation","kitbashing","assist","hierarchy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b723716-c093-494a-ae03-9fe0c49f4c10/","schema_version":"1.0.0"},{"id":"collision_director_pro","name":"Collision Director Pro [Before: $6.49, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":14838,"archive_hash":"sha256:d8af64aba17b04dd0d233bb67aea6ab39fbcd6fc90b8ea8027c9ac3859cbf2b6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9424fb67-776b-4c97-b392-74d0c7e0ddb7/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["collision","gamedev"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/12025de8-850a-411d-a840-5ba053539670/","schema_version":"1.0.0"},{"id":"colormatrixel","name":"Colormatixel - Advanced Material & Color Management Add-On For Blender [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":166059,"archive_hash":"sha256:eda137854baf27d4e75648abde8dfae400aa0d03d16aa07482d587e8284cde36","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/116a189a-7787-4727-9b06-72490bc551d3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"4.2.0","maintainer":"Mohid Tahir","tags":["pixelart","color","gradient","randomization","colormatrixel","addon","blender","palette"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c31ef79f-2a05-41c6-9bad-963d95c51128/","schema_version":"1.0.0"},{"id":"compositor_mask","name":"Compositor Mask [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":3209,"archive_hash":"sha256:5c26e2e4fdd7fabebad3f5293d5c7a8ffdbf3b61ead6b59323a436ef08d79a1b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7acfb099-a2d4-4422-a939-7c6b723749d1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Jeslin Paul","tags":["Compositing","compositor_mask","mask","cryptomattee","layer_mask"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ea16769d-5c28-4c21-ba68-26171929bd1c/","schema_version":"1.0.0"},{"id":"Cool_Addons_Menu","name":"Cool Addons Menu [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":18495,"archive_hash":"sha256:7df4cf79cda76ee6dda75c26877773126c7ed510aec208b723de88500a6d2adc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/39899790-5926-4c33-9f62-ff6ff1e741bb/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"4.2.0","maintainer":"Kito Studio","tags":["blender","menu","ui","addons"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d9969b05-b35a-4e28-be9d-461e99a6c260/","schema_version":"1.0.0"},{"id":"Cool_Magic_Shader","name":"Cool Magic Shader [Before: $3.99, Now: $3.39]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":8831991,"archive_hash":"sha256:4852ac6c2dcea0e7e287f79628438b59fdc87a7c16f696386aae6ee215588d1c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1c7f6c35-ee04-40c1-8189-afe629444eae/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.39","blender_version_min":"4.2.0","maintainer":"Kito Studio","tags":["blender","shader","toon","style","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2ea6e2ac-96c8-4579-b998-7c833227dacd/","schema_version":"1.0.0"},{"id":"cracks_pro","name":"\"Cracks\" Damage addon 💥Windows, Linux, Mac approved [Before: $14.95, Now: $12.71]","tagline":"FULL plan required - upgrade to download","version":"5.2.2","type":"add-on","archive_size":12392962,"archive_hash":"sha256:82a0ff40df509898f687d5b31524686432783ff976132a31f99937c2c4ae231d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0f3aae67-2a39-47c0-82d6-a983945ed330/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.71","blender_version_min":"3.6.0","maintainer":"Mr Steve Lee","tags":["Damage","blender4","simulation","geometry","nodes","addon","2025","cracks","crack","modifier"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d303f488-d48d-407b-8615-ebf1a5e0883b/","schema_version":"1.0.0"},{"id":"creator_export_toolkit","name":"Creator Export Toolkit [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"0.1.2","type":"add-on","archive_size":5747,"archive_hash":"sha256:f9a8bbc437b9b66743679964f43f93af23e07f27bd870d7e84914c80437f3d7e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ffdf2b59-8ec2-450e-92ee-d394c1c66f0a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Yassine elyaakoub","tags":["blender","addon","export","fbx","glb","asset","cleanup","thumbnail","roblox","vrcha"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/702e4481-4b33-4588-a593-4c0b03241f33/","schema_version":"1.0.0"},{"id":"credit_manager_pro","name":"Credit Manager Pro [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":11780,"archive_hash":"sha256:bd8c24779461eba6babb5089b8d754b79ef3a0cf2c04b5131c4c2ade5adbea9c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/622b813a-5ea9-402c-9fab-25eea64ed096/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Vavrinec Foltan","tags":["Interface","3DView","AssetManagement","credit","manager","license","production","workflow","attribution","pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/de99702b-347b-4ce9-bc88-4998e9d37916/","schema_version":"1.0.0"},{"id":"cursor_history","name":"Cursor History [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1880,"archive_hash":"sha256:be9e467bd7b3356bc1235fa8bd1ef798760c5a9d194c620f901ec316e9ead34e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e17d7a63-a056-4445-8865-70d383d19285/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Cursor","Bookmark","Navigation","History","Undo","Location","Position","3DView","Tool","Scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ed7f83a4-147e-42f7-bc3c-8e6fd0721bc5/","schema_version":"1.0.0"},{"id":"custom_light","name":"Custom Lights V2 [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.1.5","type":"add-on","archive_size":200094,"archive_hash":"sha256:fc3db31bb619eed9048c299878c280a657791860cf94987b4100278c652755bb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fe1be7d3-4283-4337-8f86-60268bb5e4ee/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Đức Mạnh Huỳnh","tags":["Lighting","product","softbox"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8ee2c9f9-4f18-49d7-b5d0-f7b70e8c4e22/","schema_version":"1.0.0"},{"id":"cut_and_wrap","name":"Cut & Wrap (One Click Image To Cutout And Shrinkwrap) [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":14282,"archive_hash":"sha256:66848a0091fb86b52516cb5c6ef7d8670998c5d2162957c806ff2c9ffdbd5209","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/27651c4b-223b-4ff1-b731-fd453565c458/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Bala Murugan","tags":["blender","addon","image","cutout","imagetocutout","oneclickimagetocutout","cutandwrap","emission","alpha"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3600d73e-4bb8-4742-888e-4cde99610da0/","schema_version":"1.0.0"},{"id":"dae_exporter","name":"DAE (Collada) Exporter (Blender 5.0+ Compatible) [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":395378,"archive_hash":"sha256:bbefa64d4240f963f3d2b743d1f67754414cad8fe1556e1923c49acc3621d353","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/926dc1f4-c0e3-4862-be23-6b7aa08040ee/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.0.0","maintainer":"The Smart King","tags":["3DView","sketchup","export","dae","collada"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c2f30c32-8f22-422b-bbf4-7637b3b383d1/","schema_version":"1.0.0"},{"id":"dae_import","name":"DAE Importer for Blender 5.0+ (COLLADA Restore) [Before: $11.25, Now: $9.56]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9801,"archive_hash":"sha256:d58e2539454969c9490afa8d38a90defef9a549863d38083b136bc9efc8aa246","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/569e678d-5a8c-45ad-80db-9f0cedfce5d2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.56","blender_version_min":"4.0.0","maintainer":"The Smart King","tags":["3DView","dae","dae_import","blender_dae_import","collada_import","dae_restore","sketchup_to_blender","dae_to_blender","dae_collada_import"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/92fb0bcc-f2d1-4c18-814c-1f2ef721526d/","schema_version":"1.0.0"},{"id":"daexport","name":"DaeXport | One-click DAE (Collada) export [Before: $10.99, Now: $9.34]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":30036,"archive_hash":"sha256:7046dddcfa457e38907929879ebbe20a93b295f56527cf4cc6b78dc4c944c966","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4d75ca6-fb54-424f-9f79-10fdbd817ad8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.34","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["Baking","GameEngine"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e5652919-6e8c-4d24-aeb5-cf64403e2455/","schema_version":"1.0.0"},{"id":"damtools","name":"damTools [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.6.955","type":"add-on","archive_size":1246131,"archive_hash":"sha256:2da8052b74e032b9b06600a7c2af845c937dc9b9292ed2d2cf92818ca2b7362e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1984951e-bb76-436b-be20-b610d9f27bf2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"SynrgStudio","tags":["hardsurface","tools","toolkit","suite","modeling"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/924db361-635f-4c0c-a9d9-78e907b0e56b/","schema_version":"1.0.0"},{"id":"decal_creator_pro","name":"Decal Creator Pro - One-Click Decals & Normal Stamps from Mesh [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":170084,"archive_hash":"sha256:400cfa84c860cbb746cac72d7693f651cc4c6a14d09032076b2ade2a7beb462c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6992b786-cd58-466b-83c5-56c58dfb8417/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"H3D","tags":["decal","export","meshtoimage","decalcreator","normalmap","oneclick"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e3dcfcad-3efa-468a-9f27-ddf695e12313/","schema_version":"1.0.0"},{"id":"dem_blender","name":"DEM Blender – Easy Animation [Before: $39.00, Now: $33.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":103506,"archive_hash":"sha256:8762d3865db1823a84159c18cbf2c74bff0bae077362a62bdb1baa1a632677f5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/326256ac-562b-49cd-9d67-ab40e2f7110e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"33.15","blender_version_min":"4.5.0","maintainer":"Giuliano Dasky","tags":["Animation","keyframes","Timeline","Motion","3D","Tools","Workflow","Layers","Spline","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1933a851-cf9f-49e0-854c-1489b3a1db6c/","schema_version":"1.0.0"},{"id":"dimensions_and_lines","name":"Dimensions and Lines [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":109377,"archive_hash":"sha256:4c240fa5d716732363b067c72696c334aca67f5f7885b4cc5ee326c2e231f9bb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d7bbda8f-bcb3-446e-a7ef-f3ce6a2d7e4a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["dimensions","cad","dimension","lines","draw","drawing","technical","blueprint","paper","print"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a2846c5c-f395-4bfe-aaca-a53cc9ac6400/","schema_version":"1.0.0"},{"id":"dovetail_key","name":"Dovetail Key [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.13.2","type":"add-on","archive_size":8390,"archive_hash":"sha256:3d4a06e308392ccdffb9bfd0783b52521e6a3b979cea9c037c209c4ea722879d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/200aedb0-216f-4a30-afbb-1202ffc9d361/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Mesh","Modeling","3dprint","dovetail","joint"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5329ff47-74d3-4db3-ad1b-a696e9849c0b/","schema_version":"1.0.0"},{"id":"drh_addons_audit","name":"DRH - Add-ons Audit [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":88690,"archive_hash":"sha256:b21fe34d058611bc6bc306323e46fb212b838033f0b44e3c86dd275aa25a6ad4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4dd9a00d-77f3-4832-a7ee-02a9e955c905/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Paco Salas","tags":["addons","audit","snapshot","reporting","maintenance","packaging","troubleshooting","extensions","pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4436e85f-073d-4eb2-8271-d58648303a3f/","schema_version":"1.0.0"},{"id":"drh_color_ramp_studio","name":"DRH - Color Ramp Studio [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":148730,"archive_hash":"sha256:3a823a0772546fb37338b3606861828c10ac53857986a68b717ce4c426c08660","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/26d3b56d-f2ac-402b-9b5b-ccb8515597dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Paco Salas","tags":["colorramp","gradient","palette","nodes","shader","geometrynodes","compositor","workflow","utility","ramp"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45ca1690-0ca4-4265-8a35-8b0d69f5dbb6/","schema_version":"1.0.0"},{"id":"drh_dual_units","name":"DRH - Dual Units [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":38935,"archive_hash":"sha256:7ddf08c4bb6c857cb5c4711bdf8f9b2207ac7b9bbd03c6324f08b911db421896","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4b229646-35a8-4447-a72b-829ae5ba0fd0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Paco Salas","tags":["3DView","Updated","Tags","units","transform","npanel","measurement","metric","imperial","dimensions"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4c29e51b-2fc4-4b44-86f4-20139299b434/","schema_version":"1.0.0"},{"id":"lorenzofranciosi_droplets_gen","name":"Droplets GENERATOR [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":5318931,"archive_hash":"sha256:11bfc221585d101bb52e1b4918ddc8535575fd95fec7ccc2d74a5c50541d197c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/98cbe92d-132c-4dc9-8dbb-d64596f4dff4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"5.0.0","blender_version_max":"5.9.0","maintainer":"Lorenzo Franciosi","tags":["GeometryNodes","Object","FX","Drops","Droplets","Wet","Water"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b242f91c-884f-4a7f-901c-20373ed1910a/","schema_version":"1.0.0"},{"id":"dxf_import_export","name":"DXF Import Export [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":16203551,"archive_hash":"sha256:fd478752118247bca42a485638370ccb1e259bc7a3a0adb3950c43c7cfbe49cb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/43bec026-0fa3-4bdf-9ced-1f47d0456330/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","DXF","CAD","Survey","construction","drafting","geodetic","underlay","import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1a9d77d5-a9a5-4b03-970c-93897884b2bd/","schema_version":"1.0.0"},{"id":"dynamic_lighting_setup_pro","name":"Dynamic Light Setup Pro [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":12768,"archive_hash":"sha256:c0c6990da08608037f8305dccf3d37f9e1ff8f01c20aab699ba3907a171f59cc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fc172129-8e49-4e31-b7dc-e8b022cf3559/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["lighting","3dlighting","lightingpreset","preset","render","renderpreset","dynamiclighting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/79bb28ab-94b2-450c-88d6-3440587d4946/","schema_version":"1.0.0"},{"id":"esm_sim","name":"Earth-Sun-Moon Simulator [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"0.8.0","type":"add-on","archive_size":75988305,"archive_hash":"sha256:213ba1a25aeb6e3e4cd54127a73b6cac17ec6bcf64f717f20bb0d69ad993514c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dce38c48-fc7d-4fa6-9be1-c3e40024b706/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Animation","3DView","education","Solareclipse","astronomy","stem","earthorbit","moonorbit","solarsystem","simulator"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a7ebdb0b-8828-41ee-9c4c-5dfb564fc14e/","schema_version":"1.0.0"},{"id":"easy_bake","name":"Easy Bake + Batch Baking [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":23263,"archive_hash":"sha256:6d80600a51aabfd83df414de15917846092dd8fc182ef727a35f702c167ec8ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/aa60f6fc-5d15-4a04-b86a-15f1736c250f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Render","UV","Bake","Material","Blender3D","TextureBaking","EasyBake","GameDev","PBRWorkflow","3DArtist"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c379e9e-95f2-4b1e-8eab-90739fd1e70e/","schema_version":"1.0.0"},{"id":"easy_batch_render","name":"Easy Batch Render [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":6875,"archive_hash":"sha256:15e7ff505530560cfdb9177046e0d8473413f8a80777e46f4ff50bcbc6ad0142","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a426042c-2fcd-4829-a53e-7527987b17fd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Vaishakh Vinod","tags":["Render","Pipeline","Workflow","Batch","Automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/03b93d66-510b-441b-a0d3-14b5935f5e32/","schema_version":"1.0.0"},{"id":"easycameramatcher","name":"Easy Camera Matcher [Before: $12.50, Now: $10.62]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":505906,"archive_hash":"sha256:ec28a2e76724965042c0ad063bb79d9e9d9215bc73b2dda63497f6dcf1b71cdb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f0a38b54-e9ee-4f98-b103-905e5391cf07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.62","blender_version_min":"4.3.0","maintainer":"Sander Wit","tags":["Camera","Matching","Lens","Calibration","Perspective","Tracking","VFX","fSpy","plotter","plotting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/70090236-772f-4576-8a24-187a2ff3f31e/","schema_version":"1.0.0"},{"id":"texture_pro_paint","name":"Easy Texture Paint - One-Click UV, Paint Modes & AO Shadows [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.6.5","type":"add-on","archive_size":4309,"archive_hash":"sha256:e95b13538c5906c23d4b616b6ca757cc7e29e14c6a57827fbc45406c7674d770","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/400c4632-1a26-414d-b4b6-2b78800f58c1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Paint","Texture","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dc893ce9-b31f-4def-acee-641d73ae8579/","schema_version":"1.0.0"},{"id":"easy_transfer","name":"Easy Transfer [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2083,"archive_hash":"sha256:b0b2cc453e1195bb49f617e39b0d21193dc6c597cdcc367fc49424d4e09663a0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/59cc0c05-510e-431e-9ef9-e637b4832030/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Transfer","Modifiers","Constraints","Materials","Animation","Mesh","Copy","Synchronize","Attributes","Context"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3ff54d70-d514-4eea-8d58-062f5318d060/","schema_version":"1.0.0"},{"id":"EC_Light","name":"ECLight - The one click dual and triple lighting solution [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":13668,"archive_hash":"sha256:9f7ecbf98f690f5571627cb80f8794210b6606ed20686f821a21946cc9c25c6f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b8760f19-3e3d-41cb-9522-9a6e005997f2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Abishek Raja","tags":["light","easylighting","Cinematic","Neon","Cyberpunk"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c13e5d41-2380-42a2-806a-1b287dd221cc/","schema_version":"1.0.0"},{"id":"editor_swap","name":"Editor Swap [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.3.1","type":"add-on","archive_size":18012,"archive_hash":"sha256:7d3157c242859fc7aee71d91adfbf03207020ebf8be4c43f3a001425e088edc6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2ca8e842-6368-4c58-b49b-515ac48b7b22/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["interface","ui","ux","swap","editors","area","customization","user"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cf07859b-366d-493c-9128-010b74fcf874/","schema_version":"1.0.0"},{"id":"enable_disable_in_render","name":"Enable / Disable in Render [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1464,"archive_hash":"sha256:791964a72a51067d429f9b17bb6287798ba5012e966f7ebb1234f14558fbfcee","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bc076c54-a76c-41d4-99a1-fe5db4c998dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Collection","Render","Toggle","Objects","Visibility","Keyframe","Scene","Control","Animation","Efficiency"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a993b9b8-37ce-4b99-8371-83f0d161c969/","schema_version":"1.0.0"},{"id":"essentials_addon","name":"Essentials [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":42799,"archive_hash":"sha256:9d76e27ff1a5f5b160780a537af067d4661418258e7ef20065e141b259f552d0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e60ed199-9239-4c4d-8924-b9aa96402314/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Jackson Zheng","tags":["essentials","align_camera","auto_highlight","camera_essentials","surface_snap","camera_perspective_reset","drop_snap","gravity_snap","outliner_visibility_sync"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f34a339-e478-4d6c-b328-9be1daa65f67/","schema_version":"1.0.0"},{"id":"essential_tools","name":"Essential Tools - Ultimate Blender Workflow Utility Addon [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":8386,"archive_hash":"sha256:82f74b1ca38610307c632f973a30b46d1b657debd85c64db871d01b69c98ad74","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/56c9a4f9-8a62-420b-9434-90fe387ae942/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"3.0.0","maintainer":"The Smart King","tags":["Mesh","blender","blender","workflow","batch","booster","origin","essential","batchrename"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/80aefc7f-9502-4e57-8cb9-6a3e3ec089f3/","schema_version":"1.0.0"},{"id":"export_director_pro","name":"Export Director Pro [Before: $6.49, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":25356,"archive_hash":"sha256:e644eb8adff6b35fda1e89c2cb8b463ce4f1b7d0cbfab0714b807a28330f3191","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c119ec48-fb8f-4a72-b864-73d847628183/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["export","gamedev"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/35d745dc-cf9d-4d51-8be3-139c69351042/","schema_version":"1.0.0"},{"id":"export_each","name":"Export Each - Batch Export Collections / Object with One Click [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":13844,"archive_hash":"sha256:39cd568a69a765b3962796e66f0491d700db90cb5542570084e69568e8df2ed5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/873e9048-1759-4fb3-9653-42a025deface/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Pipeline","AssetManagement"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f2dc078b-d6ac-4cb3-a750-4d6c1a834ac9/","schema_version":"1.0.0"},{"id":"face_layers","name":"Face Layers v1.5 Add-on [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":45390,"archive_hash":"sha256:501b57c7dd8cd9549b3d93cce966fbc3effccec925b75e19168274c8bb0ef088","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/481d4b7e-3ffd-4157-a38d-1dc26763a075/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["face","layers","facelayers","mesh","faces","addon","extension","selections","meshfaces","matetials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8996ef60-23df-44c7-98f0-7161c54ba379/","schema_version":"1.0.0"},{"id":"face_swapper","name":"Face Swapper 2.0 [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":6571,"archive_hash":"sha256:630a58f6b0aaceb22b647de1997b13ab887c3dfb98b2e4e826f6846c5301e3a2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/07d93e51-07e9-4499-a432-0cec88ec9bc4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.0.0","maintainer":"Georges Dahdouh","tags":["Animation","Material","2D","image","texture","keyframing","character","expressions","facial","face"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/16562180-0830-4138-9d70-a9db074c493e/","schema_version":"1.0.0"},{"id":"facial_tools","name":"Facial Tools [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1655706,"archive_hash":"sha256:154d3764584593e419e06789e9a7aee4a9916a83c3d65e2469fb4387cc3cf682","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb138716-7e6b-4545-9045-768caa5c7aad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"5.0.0","maintainer":"Stellart","tags":["facialrig","autorig","animation","facial","rig","rigging","rigger","export","bind","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0c790066-7eb7-477a-80d9-1296f8fd3ca0/","schema_version":"1.0.0"},{"id":"falcon_cam","name":"Falconcam [Before: $8.98, Now: $7.63]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1022399,"archive_hash":"sha256:5d655a371dba853226c36680e7e9b15f917bb4c2f8e223138cf8c7502911dab1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/594352e2-91bc-4a7c-9e4e-2856ca0b7f37/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.63","blender_version_min":"4.2.0","maintainer":"Liryc Creative Design Studio","tags":["camera","cameraanimation","animation","auto_camera","movie","cameraaddon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/74f64128-e395-4c0a-ad4d-2cf86cdd0eee/","schema_version":"1.0.0"},{"id":"fast_screenshot","name":"Fast Screenshot [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.8.0","type":"add-on","archive_size":29599,"archive_hash":"sha256:53c1f5ca9ea2f7f7c17a8ab85d9710eef21ca451825f56e06f9055fbaa0b5047","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c592450-778c-4c2d-b6e0-751782e55a0c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Fast","Screenshot","quicksc","fastscreenshot","quickcapture","viewportscreenshot"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c9bdda64-41ec-468b-91e2-9bf877284f54/","schema_version":"1.0.0"},{"id":"final_topology_pro","name":"Final Topology for CAD professionals [Before: $99.00, Now: $84.15]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":646630,"archive_hash":"sha256:e8383b08b908f263d0aae7acda685acf991ceeeb65d65682b9f9bae7147ddd3f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c244bea6-3f65-4951-832d-42a8fb5410a4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"84.15","blender_version_min":"2.92.0","maintainer":"Blendkit Community","tags":["System"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/69f95fba-5b1d-48c7-87ad-d8093b24436b/","schema_version":"1.0.0"},{"id":"alexdepario_find_objects","name":"Find Objects [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2888,"archive_hash":"sha256:2f2384e5a2f3c1f45829c43df6cff9b34d9867f0de677b5f9f1b972f03d62376","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6a896900-e55d-465e-b248-917ae241c673/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["find","search","object","management","interface","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7cd259e6-5a4c-485d-8095-da2d56c56e79/","schema_version":"1.0.0"},{"id":"fire_maze","name":"FireMaze [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"3.3.0","type":"add-on","archive_size":119891,"archive_hash":"sha256:e71f6535f3a51ab8062baf61d043ec91cff7481eecdadde838f34bbc96dc4da1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1a5d42c-86f2-483e-a4ee-86bb1f90da5f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"FireRat","tags":["Maze"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/195283e4-b066-4d52-a01d-d6bcd5d0d097/","schema_version":"1.0.0"},{"id":"fixamo2","name":"FIXAMO 2 - Combine , Loop, Create [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":5033,"archive_hash":"sha256:1d3192b6ac527e5ee2a86dc7fd938e0e370b786cca2d492cce507a2a437ede5f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0bbe493a-8c37-435f-b14e-1cba86d86c54/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Kohdy mcintyre","tags":["Animation","Addon","Bossposes","Tools","New","Mixamo"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f4fd714-0c97-401f-bcea-bbb42ab9fbdd/","schema_version":"1.0.0"},{"id":"FlowProManager","name":"Flow5 - The Ultimate Asset Tool [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"5.0.0","type":"add-on","archive_size":25884218,"archive_hash":"sha256:bb89d1998a97e7ccbdfc79a045ea7ea86e6e9ff328b27d7a79aecc69ae24153f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/266f9e83-b74b-4242-940a-b446bc513f2e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.3.0","maintainer":"polyspaace","tags":["assets","flow","workflow","scatter","asset_browser","asset_library","polyspaace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/542f1515-6422-4da3-bf4d-05803f890e1b/","schema_version":"1.0.0"},{"id":"fog_planes","name":"Fog Planes Addon [Before: $35.00, Now: $29.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":198697240,"archive_hash":"sha256:8fa4132df3fd070aa5a3b58a8a0aebca811315a8f0da5a22ff106619780c79bb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4a0b950e-d206-49f4-b27b-23557df0e3b5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"29.75","blender_version_min":"4.2.0","maintainer":"Besa Art","tags":["fog","haze","environment","nature","atmosphere","mist","moody"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2cd70353-b642-43fb-9d1e-0928ecc16a20/","schema_version":"1.0.0"},{"id":"hotkeyboard_azerty","name":"French Keyboard Shortcuts - HotkeyBoard AZERTY [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":44112,"archive_hash":"sha256:62071024eaa41b615793d482d62813f100c2a2a54271fac6db7891c0f06eca11","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5e2b46f7-a888-40ff-b09b-e93041de9bc0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Interface","UserInterface","Hotkeys","Keyboard","AZERTY","French"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/105400e9-bac4-46d4-8c08-616dbf54f334/","schema_version":"1.0.0"},{"id":"frosting","name":"Frosting [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":44908,"archive_hash":"sha256:bb914e82bc2228ef36e862e437aa40eb83d4b6ecdc68c6fe6a1176dd64e9c090","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3f1186c6-6dde-4a5b-9f62-c562e605bbfa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","blender_version_max":"5.2.0","maintainer":"Cloudy Sky","tags":["physics","scatter","simulation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14c8c8d0-a3f4-402d-8e7f-97df5aab476c/","schema_version":"1.0.0"},{"id":"fsx3d_blueprint_tool","name":"FSX3D Blueprint Tool [Before: $18.99, Now: $16.14]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":465117,"archive_hash":"sha256:2a70844d12b9de6ae5803f535ee2c77935a67e33df14d59bee1b6732f0e6fa36","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e4a7a85-7dc8-4ce0-a149-6217dc659b4b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.14","blender_version_min":"4.2.0","maintainer":"Eric Bauduin","tags":["Blender","Blueprint","Vehicle","Car","Modeling","UV","Mapping","Game","Low","Poly"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/152e3275-74ed-44dc-aa4e-6eac6d7be8ac/","schema_version":"1.0.0"},{"id":"fusion","name":"Fusion: Extension For Blender [Before: $59.99, Now: $50.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":24640,"archive_hash":"sha256:57beb6af17e7d10f8331d39e8e75b7f678cdd182ae0342d628c24e483e8b1d26","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/598e9407-781e-4079-9ff6-7643b2ba0d1a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"50.99","blender_version_min":"5.0.0","maintainer":"Egret Studios","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a812dae2-08e7-47f6-b981-878077f5780c/","schema_version":"1.0.0"},{"id":"fz_material_kit","name":"F.Z. Material Kit – Ultimate Material Manager For Blender [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":3828,"archive_hash":"sha256:8f4e5c94a8adf3ee9e104b3030c60f797f7d7365d767cbec08f8e56496b830de","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0da4c36f-dcc9-49f3-a916-97dcfe1f9765/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.4.0","blender_version_max":"5.9.9","maintainer":"F.Z Studio","tags":["Material","Management","Texture","Import","Viewport","Shading","PBR","Workflow","Shader","Tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8bb6fcca-2914-468e-9eb9-d7a2ed30628d/","schema_version":"1.0.0"},{"id":"garlandery","name":"Garlandery (Addon) v2.3 | Quick hanging garlands | Connect objects and vertices together [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.3.0","type":"add-on","archive_size":5658312,"archive_hash":"sha256:373a4e01e4a65587a73ad699e43663a1d6ee511947f364f3a4a5042d173f6d60","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4b7aa647-53be-46df-a59b-558d2cacb625/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["addon","connect","vertices","hanging","garland","wrapping","fir","ivy","fairy","particles"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/acc1fd8e-e8a8-465e-864d-0c6a09c32077/","schema_version":"1.0.0"},{"id":"GLBOptimizer","name":"GLB Optmizer [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"0.0.5","type":"add-on","archive_size":192462,"archive_hash":"sha256:3d43e5fd646576f31643e616c0712c5d227d7ad38a3902df011f1c68fc104748","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cb11a1ea-65a9-4678-a7c2-79ca4f6c8e4e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Lorenz Wieseke","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a9c5e7a1-c70f-45a4-8183-d683aa5560e7/","schema_version":"1.0.0"},{"id":"glbxport","name":"glbXport | One-click GLB export [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":29212,"archive_hash":"sha256:1740ab04111b0aeb6289e20e8e2e1d2bc65605640aa6a5df2305e6f5f42f8818","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/eb42426d-21d2-4264-b6d8-e415e01d430a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["Baking","GameEngine","AR","GLB","Export","Texture","WebAR"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b653b4f-5424-4cb1-9ed5-0067daafe581/","schema_version":"1.0.0"},{"id":"anime_shader_studio","name":"GOE Anime Shader Studio [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"3.3.1","type":"add-on","archive_size":2235826,"archive_hash":"sha256:2b01c90a83c694134090684c555be3334bbab3fac03ed7b85ccd5254ad40193e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b46b4ae5-c5b8-4969-ba08-0533f25f8f83/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.1.0","blender_version_max":"5.9.0","maintainer":"DanilGoE Goe","tags":["Mesh","Modeling","anime","toon","shader","cel","shading","manga","shader","materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/33aa65d8-331c-4c98-a5af-7ae7f379660d/","schema_version":"1.0.0"},{"id":"body_type_generator_pro","name":"GOE Body Type Generator Pro [Before: $29.99, Now: $25.49]","tagline":"FULL plan required - upgrade to download","version":"3.0.3","type":"add-on","archive_size":79093,"archive_hash":"sha256:cab65c3f09bfcba0663c70b8e895f6466223784ceb69d3cf48ef4ec9f46b61f0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f6978ebf-7532-49de-9426-3b60a9ee2368/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.49","blender_version_min":"4.0.0","maintainer":"DanilGoE Goe","tags":["Mesh","Rigging","Animation","body","generator","character","creator","shape","keys","body"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a9f4f3d2-e0a9-407b-ae2b-985ac28ff7e7/","schema_version":"1.0.0"},{"id":"goe_jiggle_studio_adult","name":"GOE Jiggle Studio: Body Physics [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":38237,"archive_hash":"sha256:18cfb23987127959a342b242a8d56b6582382c3bd8f1d544510e2dba7ec11d3b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/81192bdf-5d33-48f3-a4aa-cc7107d1d43d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"3.6.0","maintainer":"DanilGoE Goe","tags":["Animation","Rigging","jiggle","physics","soft","body","cloth","simulation","secondary","motion"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f1ed260b-ec35-42a6-99a7-f8a9efa86c75/","schema_version":"1.0.0"},{"id":"portfolio_creator_pro","name":"GOE Portfolio Creator Pro [Before: $39.99, Now: $33.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":60393,"archive_hash":"sha256:f1aab33d72a97e645f795c499f3a958e3f719e97434c4832d6a1460e4f44805a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c00cdd22-6755-4c81-be38-8a557210cc60/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"33.99","blender_version_min":"4.2.0","maintainer":"DanilGoE Goe","tags":["Render","Camera","Lighting","portfolio","render","automation","studio","lighting","turntable"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9fa7c636-5276-4fad-8324-9fa437ba47b5/","schema_version":"1.0.0"},{"id":"shapekey_doctor_pro","name":"GOE Shape Key Doctor Pro [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":24098,"archive_hash":"sha256:ecc8d24acb316b900bb12628d30396176d1b8d5b003c7b238aa7ea408e95690f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f3fb4af2-e4d4-4aec-b49d-53c2270b6435/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"3.2.0","maintainer":"DanilGoE Goe","tags":["Mesh","Rigging","shape","keys","blendshapes","morph","targets","repair","transfer","mirror"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a7712c16-600c-4165-ad9e-63a165be51e8/","schema_version":"1.0.0"},{"id":"graphi","name":"Graphi [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":13816,"archive_hash":"sha256:3255ac67672bd68ef09dd22a1d0e67e1c55402a27c1c4710feb4569a0c1eae3f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/86af64b7-5820-47bd-af13-df1464479124/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["Animation","GraphEditor","Keyframes"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0b94a38b-1ad9-4c9d-888c-96ab43ed6a44/","schema_version":"1.0.0"},{"id":"Greaseliner","name":"Greaseliner [Before: $23.00, Now: $19.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":3377084,"archive_hash":"sha256:5f33f69cfe2fc7749e205abd4e84c7f46010d927f32c040763d566f6baa2bd94","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/919ec96c-8f8f-4ac7-8d8e-a7bd4c819c87/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"19.55","blender_version_min":"4.2.0","maintainer":"Kito Studio","tags":["blender","addon","outlines","greasepencil","stylized","toon","anime","blueprint"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1cc36d5a-82e3-48d4-a195-abc5d9f9549c/","schema_version":"1.0.0"},{"id":"Hatchliner","name":"Hatchliner [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":53789715,"archive_hash":"sha256:cb1cb3557c12f856e99e7b7b53de9c99d25327e720c24b4dd01c6f6fcedcf9eb","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a4542fa7-ded6-40b8-90b9-aea923676312/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"5.1.0","maintainer":"Kito Studio","tags":["anime","hatching","style","npr","cellshading","preset","EEVEE","material","shader","node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e9c5c7f5-ccea-48b1-8b86-eb8c9b549b3c/","schema_version":"1.0.0"},{"id":"hedge_it","name":"Hedge It! [Before: $7.99, Now: $6.79]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11478819,"archive_hash":"sha256:e0c9a2a1686e7af794326772826984fc49997f9118bef2ad29df7fd58e804004","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/054f346f-e681-41e9-b85f-890addaa26b0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.79","blender_version_min":"4.2.0","maintainer":"Blender Bits","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1c3016b4-f975-48c2-b6b7-a28d3a5d20d2/","schema_version":"1.0.0"},{"id":"hidden_objects","name":"Hidden Object Manager [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.5","type":"add-on","archive_size":4247,"archive_hash":"sha256:13a22d85fcf61dee646bd011d7a99878667070cdb7b9e8137ad70eed2c9c3fa3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bb0682cc-5b60-469d-af99-9f523ec7fa7b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["3DView","Hidden","Object","Viewport","Animation","Tools","Addons","2026","Cheap","Functional"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/633e1b7f-01a9-41ff-93f3-573ea6a82469/","schema_version":"1.0.0"},{"id":"hollow_object","name":"Hollow Object Creator – Blender Add-on for Easy Hollowing & Cutouts [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3256,"archive_hash":"sha256:a5f443eae0fbcea81787b8237618c0a73b6e8678578c8a81ac4fc9d0b4b30e5c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ec6d3d81-7764-4fac-bf67-4f369f69caab/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["3d_modeling","3d_printing","boolean_operations","cutout","game_development","mesh_editing","procedural_modeling","quick_modeling","hollow_object","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1c3970c0-c0b0-41ca-9fb3-b27e2f3a3421/","schema_version":"1.0.0"},{"id":"hotkeyboard","name":"HotkeyBoard - All Blender Keyboard Shortcut Overlay [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":50182,"archive_hash":"sha256:a9b6ccf44294677f275adb4b504e9f562b1bf17eeb2fca48a799967ce6685ffe","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b30f43a6-2a9b-405c-b029-e6e46180005d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Interface","UserInterface","KeyboardShortcuts","Visualization","LearningTool","Education","Productivity","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7e838867-0ce1-4f38-9081-037c097fc723/","schema_version":"1.0.0"},{"id":"house_designer_AL","name":"House Designer (AL) — Procedural Building Generator. [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":22654,"archive_hash":"sha256:3a2f1b99a80ee5f03c4ff1e67f39eb9b6cb98ce82e3c4dd0fd6b8638fcc4d6b8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/01d0a001-2345-4b4a-bf7f-0f929874ca42/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.0.0","maintainer":"ANDRIY LIA$HKEVI$H","tags":["architecture","procedural","facade","urban","geometry_nodes","building_generator","city_builder"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aa8829b7-2059-4fe0-9f5a-468318daed3a/","schema_version":"1.0.0"},{"id":"hud_and_ui_elements","name":"HUD & UI Elements [Before: $18.98, Now: $16.13]","tagline":"FULL plan required - upgrade to download","version":"1.16.3","type":"add-on","archive_size":3054185,"archive_hash":"sha256:bc9b4cba6292a78bd51ab4d4c3b4fc2003d9a4300ac00259c960c71aed467526","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/11422bca-41d3-401c-9d50-59d2af96f91e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.13","blender_version_min":"2.81.0","maintainer":"N. Emmanuel","tags":["huduielements","hud","ui","fui","motion","design","Animation","Modeling","Mesh","AddMesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e01a622f-9495-4e9b-81f3-cba574349e1e/","schema_version":"1.0.0"},{"id":"ideagen","name":"Idea Gen [Before: $3.99, Now: $3.39]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":7498,"archive_hash":"sha256:195787a0aeb3237fa8ca14a73aded6c12d329b3f8c88318b7b2ba458209d8048","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8fe664e7-6966-4eaa-a6ca-eecc375b4a44/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.39","blender_version_min":"4.2.0","maintainer":"Ace Of 3D","tags":["ideagen","idea","generation","creative","concept","art","random","ideas","concepts"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6b03f814-3bb0-4442-80b2-f50e24e7e116/","schema_version":"1.0.0"},{"id":"imago_gif","name":"Imago Gif | Render And Import Gif Animations [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":78889498,"archive_hash":"sha256:bfdd9d71934e2fe77fe67245976ddf895aaee05f7618db9c0ef952486180cf48","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/53737df1-9a6c-4cc4-b628-4f06961ec2c3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Giambattista Von Nettesheim","tags":["gif","animation","blender","addon","rendering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/655a3cfa-ee24-432a-a34a-d2c1859d19b0/","schema_version":"1.0.0"},{"id":"inkto3d","name":"Inkto3D [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":6737,"archive_hash":"sha256:60c50ea7c6ca171a5c0c2e5fa70591b5e1436b9e9bf367133fa0d07ede30c2be","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f5a633f4-559b-45d3-82ca-4e152c6c74f3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"F.Z Studio","tags":["image","trace","imagetrace","imagetomesh","mesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ad75f77-de59-42f1-b371-f81a02e61fa7/","schema_version":"1.0.0"},{"id":"instantclean","name":"Instant Clean - The Ultimate Mesh Clean [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"2.2.3","type":"add-on","archive_size":125029,"archive_hash":"sha256:0ee941a43e27b95d0ae41d9f179c7b00bcf497c125392ef604e27bfd752c9d93","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ce53098e-071c-45de-849a-57938317534b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["mesh_clean","mesh","clean","print","manifold","cleanup"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/44c1aeac-bf6d-4c0a-a575-54b0466f25a2/","schema_version":"1.0.0"},{"id":"jigglegen","name":"JiggleGen [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.5","type":"add-on","archive_size":28952230,"archive_hash":"sha256:300b3ba9f8e40ef93c7e0a4b4d15e26589ba566eabfd2914ff8b2f183b84f7b5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cbdf07dd-1b8f-4ee7-bf67-b01dc686d599/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"pathnode","tags":["simulation","cloth","cage","generator","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/57d51658-1be8-4e1e-8210-e0b75c2a7341/","schema_version":"1.0.0"},{"id":"keyframe_decimator","name":"Keyframe Decimator [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":16383,"archive_hash":"sha256:edeade332c49b82882fb46ea8e42656c6765df317b574b0261fcdf852f72ee7d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1f35b35f-1f45-4437-8161-b0971400eb9d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Animation","Decimator","VFX","Keyframe","addon","optimize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/06cd9d46-6fc4-4bce-8a9a-9755b71f96dc/","schema_version":"1.0.0"},{"id":"knife_circle","name":"Knife Circle [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":36340,"archive_hash":"sha256:57ae3b0b9dbee06ac3ecbbd630beb3065e95862f0f4d5966176aad01895d0f38","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/075476a8-e82e-4ff2-b459-3b1e772091cc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["knife","knife_circle","knife_cut","knife_project","knife_tool","knife_polygon","knife_circular","knife_cut_through"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/71398fc7-49e8-4e42-b533-6c9941132c48/","schema_version":"1.0.0"},{"id":"landxml_import_export","name":"LandXML Import Export [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":21438,"archive_hash":"sha256:e498afbddd68d78eb73b0b4cbf95ab07db05d99d15f3f78daa81600fabf144bd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9b338025-8d27-447d-aa3b-25acc6673e25/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["Survey","CAD","coordinates","landxml","tin","breaklines","construction","geodesy","import","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/39505adc-0694-4efe-a77f-d982d53bfb5e/","schema_version":"1.0.0"},{"id":"daexport_legacy","name":"Legacy DAE Export for Blender 5 [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"2.0.1","type":"add-on","archive_size":29090,"archive_hash":"sha256:8e40598f64128c7336754ba29bb2c3ff9515b9406cdf2b75f3c04cce253c95f2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7f96c5ae-1312-417b-9d3a-7cf33641616a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9253938a-d7de-4892-9831-832c2697e4f6/","schema_version":"1.0.0"},{"id":"letter_board_text_creator","name":"Letter board - Text creator [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":562941,"archive_hash":"sha256:8c12f39662866981da9dc9ec4b06b2e680ec069a62ba71f112d365a259838a59","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ea92700e-9cfb-4d6b-be72-e877ecab286e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["Blender","text","letter","thumbnail","mesh","object","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/22cc8f57-c605-4a4e-b537-6967e56d908f/","schema_version":"1.0.0"},{"id":"lightforge","name":"LightForge - Professional Studio Lighting System [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.4.22","type":"add-on","archive_size":22743109,"archive_hash":"sha256:f8aff9c92a1a5e06f06b57afd968f233c7302c95c6badf6df3ac581edb0c1faf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/35e39639-e571-4466-9ae6-31e3d75519e1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"John Cheluva","tags":["Light","Lighting","Addon","Studio","Productvisualization","Reflector","Gobo","HDRI","Photography"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ecb49b0-9be7-4b4c-8fd8-901bf7c8e655/","schema_version":"1.0.0"},{"id":"light_painter","name":"Light Painter [Before: $45.00, Now: $38.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.1","type":"add-on","archive_size":149404,"archive_hash":"sha256:49578f00c20b4263adfd81ee3f7032d3b682d8847f3d6a6d632688861c351d67","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/69119226-0d05-4ef8-a088-3a7b1d7ab106/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"38.25","blender_version_min":"3.6.0","maintainer":"ShaderError","tags":["lighting","Light","painting","light","texture","gobo","viewport","shadows"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/454164f1-182f-419f-ac8f-3139b1eea769/","schema_version":"1.0.0"},{"id":"livecut","name":"Live Cut [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5961,"archive_hash":"sha256:344e826b17c18f8c85f0d608ce004b5c60f464767415f9fc8452da5de19b760c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ddbe436-5f33-4f2f-ad73-145f4be40360/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Modeling","Mesh","addon","cut","slice","window","door","frame","slicer"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fd172489-a974-4246-a792-81d1360074f4/","schema_version":"1.0.0"},{"id":"lm_studio_pro","name":"LM Studio Gobos & Volumetrics [Before: $9.50, Now: $8.08]","tagline":"FULL plan required - upgrade to download","version":"1.0.8","type":"add-on","archive_size":267095919,"archive_hash":"sha256:2a52ce50df73acc701de918a4f649090e986b6a0531a9047f1d7c6a4574a39c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9d80283e-a2b7-4ff9-acda-08222fcd7425/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.08","blender_version_min":"4.0.0","maintainer":"Mr Steve Lee","tags":["Lighting","fog","volumetrics","2026","addon","blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14c5daee-5691-4c63-8bea-789b5e47113d/","schema_version":"1.0.0"},{"id":"skava_lod_generator_pro","name":"LOD Generator Pro - Ultimate Edition [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"3.2.6","type":"add-on","archive_size":29745,"archive_hash":"sha256:6610b853ed8672ec051da8fa260e7e37a278bc735d0b71253353999ba0f3d15d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/29150841-e2a1-4e75-a75b-1e55e830da07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"SKAVA Piatkov","tags":["automation","decimation","godot","lod","performance","unreal","unity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d87d6532-edea-4ee0-a90a-37bf7390f8b1/","schema_version":"1.0.0"},{"id":"lod_generator_v2","name":"LOD GENERATOR v2.0 [Before: $29.99, Now: $25.49]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":12591,"archive_hash":"sha256:56aeba95403754a8088bdf67a6a9d69853fa45c7f4196223484839812035f91f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5b53c74b-5c5b-4fd8-97fc-f3c72c049307/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.49","blender_version_min":"4.2.0","maintainer":"Pradeep Prasad","tags":["Mesh","Asset","GameEngine","optimize","gamedev","lods"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e6b9b8df-2eda-470b-b4df-fb747a57a81a/","schema_version":"1.0.0"},{"id":"lottie_addon","name":"Lottie Animation Addon [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":68472,"archive_hash":"sha256:7a61a0f782303f92384b3076efa073b4f03e2464569b943afb70a4882a7f3c45","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f3a67bc6-2d77-4a59-97a1-8e17e0f413cd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["lottie","web","animation","json","webdesign"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5ef0c83b-ba4f-4ab2-8946-bb7a665a72b9/","schema_version":"1.0.0"},{"id":"magic_coordinate_extension","name":"Magic Coordinate Add-on: Dynamic Mapping For Blender [Before: $19.90, Now: $16.92]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":134264,"archive_hash":"sha256:5993304df2b155c02d92eced383dff07dd63bb70e98976f1cbffd5045b4faf8d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4a4e22c9-f361-410b-ada4-e446540e11cf/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.92","blender_version_min":"4.2.0","maintainer":"Cosmo Mídias","tags":["shader","geometry","nodes","addon","dynamic","mapping","coordinate","system"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/10dee0e3-fbd3-4041-abce-0db1a39ab84c/","schema_version":"1.0.0"},{"id":"mass_renamer_pro","name":"Mass Renamer Pro [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":7584,"archive_hash":"sha256:07fd66208c0c388f9923f42b5832915dae0591b2891eb914f4fb47e705ebd981","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fe5d41d6-d858-4967-8ad2-c4f5cbad1516/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Vaishakh Vinod","tags":["Object","Scene","Workflow","Pipeline","Animation","Rigging","rename"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/985de1bd-37f2-4e13-9fc2-d41c3521bd44/","schema_version":"1.0.0"},{"id":"matcaps_forever","name":"MATCAPS FOREVER [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":4801,"archive_hash":"sha256:ab2c85d1afff16262e29102956fa13f0e63e25c1500fa82428e665497896e2b7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d2ac0f17-417c-4259-8d3f-8d234f3af4b1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Take Refuge TV","tags":["matcap","takerefuge3d","matcapsforever","matcapgenerator","material","sculpting","hardsurface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5e190400-1471-4118-99ea-079be8ee661f/","schema_version":"1.0.0"},{"id":"flat_pallete","name":"Material Colors to Texture atlas [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2994,"archive_hash":"sha256:f752b1c38cd58ffa9d90fcb6dd273fe8e42283cef1dd1d0a97ef27404ac95437","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4604c515-8495-4042-940d-d12737b4ad46/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"isac lima","tags":["lowpoly","flat","color","texture","generator","palette","uv","map","stylized","game"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4d46d04a-0269-4c0c-bb78-6b4abb84903e/","schema_version":"1.0.0"},{"id":"material_overrider_plus","name":"Material Overrider + [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3357,"archive_hash":"sha256:e2d67029d11cce5015292769e3e51198c442b955e0d127c0c4d74714ea1e4f30","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6cac86f1-2bc6-4f5f-92d9-488dd33c7a17/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Brahim Houari","tags":["override","materialoverride","overrider"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/41e0e1c8-7940-4ebe-9ed5-67a9144c7365/","schema_version":"1.0.0"},{"id":"materialpicker","name":"Material Picker - Select And Browse Materials [Before: $7.99, Now: $6.79]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":339989,"archive_hash":"sha256:ed9347567f8cf94a3ac11d725ba55f232bf95ee81d3c3024e69717b332073b75","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/48fd443d-0962-449f-af6e-92136980b911/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.79","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["material","select","picker","shader","browser","material_picker","material_select","material_browser"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4d77e53b-6311-4996-a7e3-b88eda756ccb/","schema_version":"1.0.0"},{"id":"material_swap","name":"Material Swap [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3814,"archive_hash":"sha256:0ffd38163d6d70c4d9fbbc3d36e20198feb94c1f714472fc8f6854efdacfddb1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/521e106c-fcb1-4f8c-94ab-292cb63c1715/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Jeslin Paul","tags":["material","addon","blender","render","replace","find","find_material","replace_material","default","cube"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/152cd534-c743-4ea4-b1e0-5c514c1d82ae/","schema_version":"1.0.0"},{"id":"material_tools","name":"Material Tools [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.3","type":"add-on","archive_size":11376,"archive_hash":"sha256:866db1a3dac81c24001d92f72e3b93ccc15b5046d884e9cf061ca159106ba813","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4b74121f-2fe0-4cc7-ad89-41a94ec6e04a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Mutanzom3D","tags":["material","materials","textures","texture","shader","model","object","uv","unwrap"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/18d3ae0c-f509-42a3-81e4-0c4ee5b68be7/","schema_version":"1.0.0"},{"id":"matrix_pro","name":"Matrix (PRO) - Design and Animations [Before: $22.00, Now: $18.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":926239,"archive_hash":"sha256:39113a92d620c5a9ad82b6cbb24fc5697dfba4c3ba27ec8c19c494e457533916","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/36a3c739-2262-4ce2-8114-809a71ebbe49/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"18.70","blender_version_min":"4.2.0","maintainer":"4DView","tags":["4DView","Blender","Addon","Design","Animations","Geometry","Nodes","Matrix","Transformation","Transformations"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/657d0c52-d787-42e5-9151-263dfddb2e0c/","schema_version":"1.0.0"},{"id":"matrix_ultimate","name":"Matrix (ULTIMATE) - Design and Animations [Before: $37.00, Now: $31.45]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2604916,"archive_hash":"sha256:f3b563325e1ac70edc9f632110771fddacc6aaf5b414e107359850a4bf0430a1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d10e480b-172c-4361-985f-378f2a38a762/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"31.45","blender_version_min":"4.2.0","maintainer":"4DView","tags":["4DView","Blender","Addon","Design","Animations","Geometry","Nodes","Matrix","Transformation","Transformations"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/81704036-143d-48a5-baca-bd4906793518/","schema_version":"1.0.0"},{"id":"matshelf","name":"Matshelf [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11310,"archive_hash":"sha256:81977af395ab78eeb2bc66fd792093185942ecc6455efd020f25624240c54e28","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/362e0982-ca77-4e9e-a5f8-ac2ca3dce9fe/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["MatShelf","Shader","organize","Material","browse","search","2d"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/483bcc37-4187-4810-92c1-4b24c90e1585/","schema_version":"1.0.0"},{"id":"meeting_room","name":"Meeting Room [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"2.3.7","type":"add-on","archive_size":227745137,"archive_hash":"sha256:af2f30607909bdebabb46371a0407b1dcccf5f73add016d87ccb9f1da9d59b32","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fc1c89a7-94dd-4de9-bc74-2dfff72b3452/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Adham Abou Assali","tags":["meeting","Room","offices","Office","TV","Interior","Chairs","HQ","Render","Design"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/36a66e0e-2bff-4464-b21e-2f47031f9371/","schema_version":"1.0.0"},{"id":"megascans_bridge","name":"Megascans Bridge v2 [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.4.0","type":"add-on","archive_size":217644,"archive_hash":"sha256:95e279244505ba2f335f42205dad6cd6770701f7b6c9619d9bc9d1a10d29bf7c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78b13f8d-d0f4-45dc-832d-484647531d68/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["megascans","megascans_bridge","megascans_assets","megascans_plants","megascans_textures","megascans_materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0a231655-c32c-4025-a718-582af4e25c5a/","schema_version":"1.0.0"},{"id":"microstox","name":"🚀MicrostoX | Smart Exporter for Contributor [Before: $11.00, Now: $9.35]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":34254,"archive_hash":"sha256:7a00508838cdc8704e6d71169ff3b95c1e4db8729382776a230f681e3c8ee6d6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ce4681b-6b98-4bad-b076-9b45a3e0b38d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"9.35","blender_version_min":"4.0.0","maintainer":"budijozz semangat pagi","tags":["Export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3dfe7d5c-b064-404a-9b1b-abba03b33642/","schema_version":"1.0.0"},{"id":"migration_manager","name":"Migration Manager: Your Workspace, Everywhere. [Before: $5.99, Now: $5.09]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4548,"archive_hash":"sha256:abcec391e80b360e7c3f2af380df302c528846c41be372769ac45de3b274c811","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/80568778-1bf1-4e25-ac41-1fffebaec520/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.09","blender_version_min":"4.2.0","maintainer":"Hey Arnold","tags":["System","export","import","ui","migrate","workspace","themes"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/33dd26c1-228a-4854-b33c-3100c1d95211/","schema_version":"1.0.0"},{"id":"mk_roughness_browser","name":"MK Roughness Builder [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":4728852238,"archive_hash":"sha256:65e6ebe517087fb30c77916635504d8d6a5660ed44e557015a098cd0b197c5d8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/94002b05-96be-4954-a0a3-e8333ad7a681/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Material","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/85333172-af22-4158-9f1d-eaf25a971fb0/","schema_version":"1.0.0"},{"id":"blenquick_mocap_lite","name":"Mocap Lite [Before: $12.30, Now: $10.46]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":286687930,"archive_hash":"sha256:11767f1a1a56829ac080a760db0162deffdb17eb61aa5cc9ec8a995018123dc5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/58617425-e908-469d-8527-38afe9aaac86/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.46","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["mocap","motioncapture","face","capture","motion","lite","basic","animation","3d"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/851c73c9-c226-4f1e-a4fd-d10eb0bdcae1/","schema_version":"1.0.0"},{"id":"blenquick_mocap_pro","name":"Mocap Pro [Before: $24.70, Now: $21.00]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":139514705,"archive_hash":"sha256:853fe025d14a5a4e0b3a42866a099e4ac7ff74bafd9f11da7778938042ad7573","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a0e33e40-fad5-436a-89c3-65b615d2b8b8/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.00","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["advanced","mapping","mocap","retargeting","rig","live","face","capture","motion"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9835f003-6228-44f9-bc3e-6cf56faf6bd0/","schema_version":"1.0.0"},{"id":"modifiers_toolbox","name":"Modifiers Toolbox [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.2","type":"add-on","archive_size":16067,"archive_hash":"sha256:ccf1b84a9617e8d52b84659ff9c74f8499d636586f9cda4924ca421f0a3537ed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/293ca6b0-3409-42eb-8605-80fb5d6e13d0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["toolbox","modifiers","favourites","user","ui","ux","quick"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bb41223a-2351-4356-b130-02e453e506af/","schema_version":"1.0.0"},{"id":"modstack","name":"ModStack - Save & Reuse Modifier Presets In One Click [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":92368,"archive_hash":"sha256:4c10ee77ba44e0fb663fbf160c590eb9d930f10f50e02518781bddada90b3356","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/480f33f4-d8b5-4f6e-9875-0dd4ddb8de88/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["3DView","Modeling","Modifiers","Presets","Hardsurface","Nondestructive"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8f6686ab-238a-4a6e-8c33-1d0cf3ad96bf/","schema_version":"1.0.0"},{"id":"modular_medieval_house_creator","name":"Modular Medieval House Creator [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1040719091,"archive_hash":"sha256:7dba7c4115ce7064edc349fb697a4906271a79cc559344cf28aeb09f74eb6a6f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9a296711-2409-4b38-b028-2af93cac33b6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"FANNΞC","tags":["architecture","buildings","environment","exterior","fantasy","interior","kitbash","medieval","modular","Village"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/240b303e-4368-4e45-9ae8-9cbdbd2e477e/","schema_version":"1.0.0"},{"id":"modular_suburban_house_creator","name":"Modular Suburban House Creator [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1100698310,"archive_hash":"sha256:1ee9250c031f1b4333afa6ad3882ccb08f352bb8bd61826fbed32093f76ebb12","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d32c24fc-51b3-4fc6-acd5-639d05a48ada/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"FANNΞC","tags":["modular","kitbash","suburban","architecture","interior","exterior","generator","game","modeling","efficient"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5faf55ff-acc1-484e-9a2e-943899b5b1f2/","schema_version":"1.0.0"},{"id":"morphplus","name":"Morph+ Professional Animation presets [Before: $22.00, Now: $18.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1617645,"archive_hash":"sha256:9e8f0487fb6d1df9beee2a0e987d36e5d264a55c776ff74897bf0e146a709097","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b3e1021f-5bde-4878-bac0-30f118227b7a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"18.70","blender_version_min":"4.2.0","maintainer":"A. Elbamby","tags":["morph","reveal","effects","presets","animation","geometrynodes","product","particles","motion","graphics"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aad33ffc-2016-4aa1-b895-b1a9257130a0/","schema_version":"1.0.0"},{"id":"motionpro","name":"MotionPro [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"3.1.0","type":"add-on","archive_size":325988,"archive_hash":"sha256:1d85fca4bdcb5cf8b3f4198d5cecb0fe454a0c36b3b1c1613cb006d1892dbe21","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/829fd8b3-03c0-4469-9f66-20e3b2ed35ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"A. Elbamby","tags":["3darchitect","interior","exterior","animation","architecture","geometrynodes","motiongraphics","archviz","curves","lowpoly"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/72e4a44b-9cd4-4cec-b6f2-047b94c8d5b9/","schema_version":"1.0.0"},{"id":"MRAX","name":"MRAX – Real-Time Overlapping Vertices Fixer for Blender [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":3056,"archive_hash":"sha256:afa36cab047702f58a04708ae2529774106f2b0323de434aa126070b7e82af80","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/13a3df5b-f654-46fe-add9-0e133c54832f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"MR XD","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9fc4b6cc-3948-4e99-9efb-e789757eec5e/","schema_version":"1.0.0"},{"id":"multi_blend_file_merger","name":"Multi Blend File Merger - Merge Multiple blend Files in Seconds [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":20029,"archive_hash":"sha256:422408ca88216e626bcf0aa425de73ddcb0b34f5da08afc29464406724f20a1d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ec55cd5e-b682-4de6-9fcc-3059b161fb5f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Pipeline","Scene","importexport","murge","multi","blend"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/21b72c0a-b02d-4a8f-8aa9-3ada5908538f/","schema_version":"1.0.0"},{"id":"multi_mat_baker","name":"Multi-Mat Baker - Bake Multiple Materials into One PBR Texture Set in One Click [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":21297,"archive_hash":"sha256:bf89bdee36ce70c86813b2f4e2cb52bacd0478f16fbd234201a734286ca1d081","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8feae2cf-72cd-413c-a7fc-889cb4fb46dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"3.0.0","maintainer":"Junaid Alam","tags":["Baking","Material","UV","GameEngine","Texture"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2124f634-f2e2-4f4e-8bc8-320673cff0bf/","schema_version":"1.0.0"},{"id":"multixport_pro","name":"MultiXport Pro [Before: $14.99, Now: $12.74]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":30134,"archive_hash":"sha256:c9a47b80240933e964cb542724e119d7ba371083048bbacf74f72df8535e8571","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/33aad9fb-3784-4116-bded-111e3aab1514/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.74","blender_version_min":"4.2.0","maintainer":"IZ. MdVerz","tags":["Export","Batch","Workflow","Pipeline","FBX","glb","usdz","stl","settings","textures"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/566f5c6c-5985-4746-8f0d-f5fbf256011c/","schema_version":"1.0.0"},{"id":"mutamesh","name":"Mutamesh | 4 Remeshers In One | Instant Meshes, Quadwild, Cwf, Adaptropic [Before: $27.00, Now: $22.95]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":51509952,"archive_hash":"sha256:4198442c63c083ec27ece9a06ff9917783286565ca617314d6bd058c43a06ef0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/29e22ab7-79b3-4733-b3db-7b0e2b9920dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.95","blender_version_min":"5.1.1","maintainer":"Giambattista Von Nettesheim","tags":["Mesh","Object","Modeling","Sculpt","import","export","remesh","retopology","remeshing","mesh"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d4ca1fc2-a0e8-4ccf-bc6e-076b26d09e7b/","schema_version":"1.0.0"},{"id":"name_your_things","name":"NAME YOUR THINGS [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":8465,"archive_hash":"sha256:3657a86a882dea913494ab0bf397a97435663d4bdebd4ad8a5a0367a44c5b9f8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b4d3d12f-6d51-4a3c-8b65-e796bfe1f011/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.0.0","maintainer":"ImNoah","tags":["naming","mesh","clean","cleanup","namer","name","organise","things"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/295ca03c-0ff2-4209-8cb4-885a8614f4b1/","schema_version":"1.0.0"},{"id":"neural_upscaler_x4","name":"Neural Upscaler X4 [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"3.1.0","type":"add-on","archive_size":3652555628,"archive_hash":"sha256:333631ea85fb768eaa46f19418329e052599e5b678727eb4199638c4efc98e28","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/01d335b6-82ae-40e4-985a-5a758b6d8ecc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"5.0.0","maintainer":"Cloudy Sky","tags":["AI","tool","4K","Upscale","x4"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ee306f1d-b7f4-4e8e-8e0d-86e8777c3af0/","schema_version":"1.0.0"},{"id":"ngone_pro","name":"N-Gone Pro [Before: $12.99, Now: $11.04]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":21732,"archive_hash":"sha256:7a52568df96c5ee3f424333dad15d6de143868fa544a5de3adf9d6848b09f54c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/435de251-fed3-4859-9da2-0faa4da162b0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.04","blender_version_min":"4.2.0","maintainer":"Take Refuge TV","tags":["ngon","optimize","texturing","cad","ngonepro","takerefuge3d","remesh","retopo"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2511bcbd-0752-4bf2-99d1-01c258f0a4ae/","schema_version":"1.0.0"},{"id":"nodeflow_3_pro","name":"NodeFlow 3 Pro [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":64311,"archive_hash":"sha256:d13c9fcbb9e5ac7547c4eb6c1fda5922171daf6870898830adb2a6dad931b20b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1154d0c0-ccbd-4cd0-8e11-bd1cfccf2e82/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"kanwei sun","tags":["Node","Tools","Workflow","Editor"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8804d2f3-775e-4d39-9f86-a38aa0f95062/","schema_version":"1.0.0"},{"id":"node_navigator","name":"Node Navigator [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.7","type":"add-on","archive_size":21242,"archive_hash":"sha256:4dcf9bc5e77e463708218799e5a56235295d577861088e77856cae6cce40296f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f6c592fe-b043-4572-8799-1be5c1ba6c0b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"3.6.0","maintainer":"Mr Steve Lee","tags":["geometry","nodes","organize","arrange","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cecb7191-5348-4e5a-a6a8-7b01f6ab7136/","schema_version":"1.0.0"},{"id":"n_panel_navigator","name":"N-panel Navigator [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":27286,"archive_hash":"sha256:1800311d9beb2ad4993fa0be51f8216209b20e25c41251a3afe5b1ea8d545569","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ec7b8acc-3471-4df2-ab46-11b58e4be944/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"belaid ziane","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/72bab743-cb6a-4b75-9d9b-433088728648/","schema_version":"1.0.0"},{"id":"npanel_tab_reorder","name":"N-Panel Tab Reorder [Before: $1.99, Now: $1.69]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":34378,"archive_hash":"sha256:d03dd14657f4434a3c4d15a7eb69aab39a5ac4b7448ebddd2eea5fcb0f8ef81a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fe28eede-1569-464b-86b7-f41037ec5744/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.69","blender_version_min":"3.6.0","maintainer":"Joy","tags":["ui","interface","customization","panel","management"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/74ca75ae-fafd-4ad0-a99d-c3215b9ea4bc/","schema_version":"1.0.0"},{"id":"n_panel_tabs","name":"N-Panel Tabs [Before: $6.50, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":6626,"archive_hash":"sha256:a4f36946fd4d25572d27f1fda1fbab96334e7fe321d20c6176c79383c9ee769b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c2b0fa8d-b323-4a43-8774-b34931e4f49a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"5.1.0","maintainer":"Eros Fornasari","tags":["manager","sidebar","tab","tabmanager","workflow","optimization","Interface","UserInterface","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/271b8c2d-5132-4d12-8696-f9504eff2a58/","schema_version":"1.0.0"},{"id":"null_game_toolkit","name":"Null Game Toolkit [Before: $32.00, Now: $27.20]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":28327,"archive_hash":"sha256:519f5dc600ae12492c11bb1a4f8f6d6b90dea42d3d63ad8dfe552e3d4001c9de","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a30bd99b-bd6f-4741-b40f-da8c27dd1656/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"27.20","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["LOD","COLLISION","GENERATOR","EMPTY","NULL","GameToolkit","Game","Assets","Unity","Unreal"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/96b340d7-9c98-4933-8f65-06a676918b1d/","schema_version":"1.0.0"},{"id":"nview","name":"nView [Before: $22.98, Now: $19.53]","tagline":"FULL plan required - upgrade to download","version":"3.7.0","type":"add-on","archive_size":76727,"archive_hash":"sha256:969eb684b871e4c1af888f818373056c191d00c587370f65e57e57c2dc2c14a3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5deca250-9ea2-4c1c-a49d-1f285dd90f01/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"19.53","blender_version_min":"4.2.0","maintainer":"Spencer Magnusson","tags":["viewport","optimization","object","visibility","performance"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/84286079-1e61-4d2a-a2a1-346733a4df7c/","schema_version":"1.0.0"},{"id":"object_bender","name":"Object Bender [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":74608,"archive_hash":"sha256:154d6d78fe2620b60cc25ebe87054defc72f7eb76c3cad58d86cf4ae6dad2b16","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e109f34e-538e-41c2-928d-40235da450dd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"belaid ziane","tags":["Bendshape","bender","bend","curve"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/99f1d28a-613d-407f-9078-5231ef79aca7/","schema_version":"1.0.0"},{"id":"object_disperse","name":"Object Disperser [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2739,"archive_hash":"sha256:d9b10d648c575ee0b17ee027f20296051e975e2f498673d6a8b16ca697e6de7c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9e53aaad-4490-4f1a-b2be-5b1c42cc3672/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Disperse","Objects","Animation","Instances","Randomize","Rotation","Scale","Effects","Simulation","Dispersion"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6d31366b-b8a5-4f4e-adf9-667a368a5d26/","schema_version":"1.0.0"},{"id":"objxport","name":"ObjXport | One-Click OBJ Export [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9257,"archive_hash":"sha256:932e313907fed8ebe4f7359a41f4e3e0f95745bbd86b1dc049e821cb4083c559","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f3c0b17-9ba5-4254-96c2-e471011fafb3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["obj","export","bake"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/86d262dd-e721-4e42-a024-1e0850e0ddfd/","schema_version":"1.0.0"},{"id":"ocp_studio_v5","name":"OCP The One Click Proxy\" [Before: $9.50, Now: $8.08]","tagline":"FULL plan required - upgrade to download","version":"5.0.0","type":"add-on","archive_size":46749971,"archive_hash":"sha256:44bbf8936bbcf524aeacdc5567cb68f6fb98b8e814d5e7d7859c48a470ead90a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ecc13bfc-1e7c-4f24-b97b-122018986710/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.08","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["blender","instance","proxy","proxies","speed","fast","prevent","crashes","optimize","viewport"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8aa9dbac-071f-4470-983a-1aee7e67da28/","schema_version":"1.0.0"},{"id":"ocr_image_extraction","name":"OCR Image extraction tool [Before: $3.99, Now: $3.39]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":11397,"archive_hash":"sha256:e6e72c938979613a4a794b2284a75bb0ef8f90f35d07e42c5c8593f9a94ca366","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/056e434b-6a8b-410b-a793-879bde57ddc6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.39","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["OCRImageextraction"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fb621728-6650-4c85-a1a2-e99cbb9267f1/","schema_version":"1.0.0"},{"id":"o_explosion_pro","name":"O'Explosion [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":5231,"archive_hash":"sha256:4173b4cdf0ec617585b4f2ad40eac2917293298a27dc016a7c63ba9b6de82ca2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5e6d29d3-fefd-46a9-9fd9-3db3cee60b55/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Yaroslav Okhranchuk","tags":["Animation","Object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cbb8e5f5-8642-4e01-a78d-d128904679fd/","schema_version":"1.0.0"},{"id":"oneatlas","name":"OneAtlas | One-Click Texture Atlas Automation [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.2.3","type":"add-on","archive_size":20453,"archive_hash":"sha256:14197ff44de0374d1709be60d844a69cdcac1ef00679d4ae5a9c01f8fc8705d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6ca0805c-4a63-44fc-85db-dd7beb1e7d81/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["texture","atlas","packing","atlas","baking","pbr","baking","texture","playcanvas","export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b1e8f5c6-2ca2-4473-88c7-477e06e24ca1/","schema_version":"1.0.0"},{"id":"one_click_age","name":"One Click Age - Instantly Age any Material with a Click [Before: $18.00, Now: $15.30]","tagline":"FULL plan required - upgrade to download","version":"2.0.2","type":"add-on","archive_size":224274155,"archive_hash":"sha256:202feaec961debe8852a37397bd4f171cc93b9b7c811cead6e792b89f9a4c759","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/378eaa35-24db-49b7-8142-4e44fbd857d5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.30","blender_version_min":"4.2.0","maintainer":"CG Galaxy","tags":["damage","dirt","dust","edgewear","fingerprints","generators","grunge","oneclickage","realism","surfaceimperfection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0f5981bd-3ab2-4029-970f-11e75862f2d6/","schema_version":"1.0.0"},{"id":"oneclick_multicam_renderer","name":"OneClick Multi-Camera Render [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"3.2.0","type":"add-on","archive_size":17131,"archive_hash":"sha256:2522018ef3f2d98e91300c6793f57fb9fe8faea6034be2076bb364a621902c1d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d2ac3991-4417-45f9-9172-615d0568bb46/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["blender","camera","render","batch","render","multi","camera","product","render","automation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/31b436e2-7cca-442c-aeee-6f7004275252/","schema_version":"1.0.0"},{"id":"ez_studio_pro","name":"One Click Studio [Before: $5.85, Now: $4.97]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":10860,"archive_hash":"sha256:ed68ce19f9006a39a588d0e35d12004517975916112867b14dde807bfa2b23cf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/07d6152d-7298-4109-99bd-fc390bcc04da/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.97","blender_version_min":"4.2.0","maintainer":"The Smart King","tags":["Render","Lighting","Optimization","Productivity","studio","camera","blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1c5d0887-7382-4dbd-9ba3-bee0cfd933e3/","schema_version":"1.0.0"},{"id":"on_the_rocks","name":"On The Rocks (Addon) v1.7.0 | Formations, Bricks, Walls, Walkpaths, Damages, Landscapes, Crysrals, Creations [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.7.0","type":"add-on","archive_size":17635288,"archive_hash":"sha256:22bd48bd5b54bc8b9c1d5be2a97e840667d3ad7ddf724cf0e0ccabcc82000233","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/ae2ee1ff-d9ee-47c5-bb92-dbb63e8218ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["addon","rocks","bricks","walls","formation","damage","fracture","landscape","creation","walkpaths"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/68f5fbef-c50c-46c4-a1d2-9ab7d0a26eb1/","schema_version":"1.0.0"},{"id":"open_video_tracker","name":"Open Video Tracker [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"0.2.0","type":"add-on","archive_size":318904565,"archive_hash":"sha256:9207d2b84a10bc3bf33d477424b3d863ae8c4b63d1de89a2f64b8d0cc1fcaa6c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3bd7f89d-10c2-4cce-8a10-440d7fe76faa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["2d","video","tracker","3d","tracking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ce5306f7-c957-49cd-9e9e-5edcfc47f67d/","schema_version":"1.0.0"},{"id":"orbit360","name":"Orbit360 - One Click Turnaround Animation Export from Viewport [Before: $4.90, Now: $4.16]","tagline":"FULL plan required - upgrade to download","version":"1.2.1","type":"add-on","archive_size":15593,"archive_hash":"sha256:281998905bd7fc71b8993a71fa64ffd28394f999a146d0f4f4c24db02e81b13a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/30124300-8ab9-429a-a894-1b532ebf0335/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.16","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Render","Animation","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d127bdac-1c13-402f-bc58-c955b150004a/","schema_version":"1.0.0"},{"id":"alt_tab_Organix","name":"OrganiX [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":510578,"archive_hash":"sha256:ff24edd79a427cca1f6439c4edbdc950e6acd25b7555d8acf254986fd70085e3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/505441c7-c011-4766-bdaf-ea4730a18d89/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","organix","shapes","modeling","organic","procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b8fd2cd7-0ffb-4576-a64c-d5ba20c10231/","schema_version":"1.0.0"},{"id":"origin_tool","name":"Origin tool [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1963,"archive_hash":"sha256:ed7ae5e3669860275c5e8477a4e545f39efb15cbe49679994c199b86f8e4c4e6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3773c6ee-5e17-4070-9c0a-bd98af853589/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Kornél Kuloványi","tags":["origin","center","bottom","simple","usefull","oneclick","click","asset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2e667794-921f-4d6d-82d7-9b2298b69fa4/","schema_version":"1.0.0"},{"id":"output_fix","name":"Output Fix [Before: $3.50, Now: $2.98]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":2056,"archive_hash":"sha256:412d83a0176f31a6d328ecab304d75d38c91eb6aacd163277301bbd0028b76d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3d22c368-ccc8-4609-8cc2-a0a23b03edd1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.98","blender_version_min":"4.2.0","maintainer":"AHMED KETTUR","tags":["render","output","folder","directory","automation","rendering","organization","settings","management","file"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3f2afda8-dce0-4fa3-9aad-44cad17c2043/","schema_version":"1.0.0"},{"id":"palette_manager_pro","name":"Palette Manager Pro — Color Palette System For Blender (Pro Tier) [Before: $12.99, Now: $11.04]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":45276,"archive_hash":"sha256:491dd63e67a545673cf7b18646aaf30dfd733df3e280a3ef99cd240fb3b106ab","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/06d812db-bfe3-4726-b68e-832e3c3f118e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.04","blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["Material","Paint","Color","palette","texture","blender","gradient"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8e0a91d3-79a8-4205-8c69-de1ca083c7ae/","schema_version":"1.0.0"},{"id":"tobip_particles_catalog","name":"Particles addon [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":47741747,"archive_hash":"sha256:502c9f726ea418185363df9c3d0947fff2639ca7331895cbbaec3de79cf2a91a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d9e837a8-a78d-433e-bcd6-aa0f8690787e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Suzanne studio","tags":["particles","birds","fish","fly","embers","particle","dust","simulation","butterfly","leaves"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/693ffd00-e10e-4f18-8419-ba55fe48ff07/","schema_version":"1.0.0"},{"id":"eztexture_pro","name":"PBR Texture Pro [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":3294637,"archive_hash":"sha256:345223ed17af25f05ad21e942476bfd3addb4c382eee83df3f242aa4b48a32b0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cb57db07-5709-45b4-973b-f661a1f4f080/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"The Smart King","tags":["Texture","PBR","Material","autouv","shaders","udim","Node","Smart","UV"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/18b6c783-c973-4abc-90f2-5f380e6e86d8/","schema_version":"1.0.0"},{"id":"perforated_panel","name":"Perforated Panel [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":844690,"archive_hash":"sha256:5e86344238ef6499fc3e0fdc58d591c46f746eb477622e2a34ae46024edfe900","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/49901d46-9785-4550-a0b9-45c81c8b7e06/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"Abbos Mirzaev","tags":["NO TAGS PROVIDED"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7b1c87c0-04c4-4272-977e-17ea92ee85b5/","schema_version":"1.0.0"},{"id":"physicsgen","name":"Physics Gen [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":4354,"archive_hash":"sha256:8f6a1c5c5c4eec0e0893e94ec9230e2dd78f87e3e2f985da3586c50cdf2aa0d5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/42bd71ee-5073-4e8c-970f-659b5330a3d4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Ace Of 3D","tags":["easy","fluid","particle","quick","simulation","physics","smoke","generation","sims","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dfe61d32-24aa-4b8d-8bbb-6863cfbe628a/","schema_version":"1.0.0"},{"id":"wk_tools","name":"PickUp Tools [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.7.0","type":"add-on","archive_size":149362,"archive_hash":"sha256:cfbd5b940ae8191ce873be6d2b813c3bf940521891e33ee82ed75665ffd2ba84","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/16c27c35-8e05-4652-89ee-bd3c7d68d45f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Animation","Constraints","pickup","walkcycle","foot_sliding","keyframe_tools","pick_up","pin_tool","pickup_objects","stepped_interpolation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/833124e5-42e2-43eb-abcc-d0369083cc72/","schema_version":"1.0.0"},{"id":"pixelator_maker","name":"Pixelator Maker [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":21168,"archive_hash":"sha256:e140cc12a36bda67d704adb6f7ca250f111630313f356995127313910aa3b0f9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8447c058-23b1-4f40-aa04-9e772e8bfa6f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["NPR","Pixel","Retro","Stylize","Texture","Game","Art","Shader","Node","Blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/12da713a-b0be-496b-a8e3-46477249e30e/","schema_version":"1.0.0"},{"id":"playblast","name":"Playblast [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":19161,"archive_hash":"sha256:dca5cd406ed0fd14ee53bd59a6a3cf48e863fe537a3e9f170dd8479d1065892d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3e86e753-19c1-4ab9-9ade-5748f61678ab/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["playblast","opengl","render","animation","viewport","user","ui","ux","eevee","maya"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/93ad9257-b229-445b-8277-c702bde1eab4/","schema_version":"1.0.0"},{"id":"polymating","name":"Polymating [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.1","type":"add-on","archive_size":78737,"archive_hash":"sha256:a129c270d00436e1f8eb0e5f1ba2b6b3d9cb6e143047b9a9d02350d054a708de","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9550396c-6877-48e4-aff2-e427b08aa10d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Mozzarella ARC","tags":["modeling","retopology","topology","sculpt"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3d3d0b48-a9e1-4081-bfdd-ebe34bcebe72/","schema_version":"1.0.0"},{"id":"Polyviews","name":"Polyviews [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"3.1.0","type":"add-on","archive_size":36022,"archive_hash":"sha256:2aac9cae99896126264c23d6025ede4cf88678d25fe2d91947935d7363a179c2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f7e927ec-5cba-4f39-a855-13f53af93f44/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"polyspaace","tags":["render","manager","rendermanagement","views","cameras","scenes","scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bb618f47-b9fb-45b8-809d-93569afc7422/","schema_version":"1.0.0"},{"id":"node_file_link","name":"Portable Node Extension [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":220543,"archive_hash":"sha256:9742a530dbfadf2f5d349c8a5b54b891878e955d8daa8fc2004c0221d7f65687","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/aedaca4c-09b3-466d-b9c0-193a81aa8378/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["procedural","nodegroups","geometrynodes","extension","community"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d7411d9f-d0ac-4601-bd6b-fb0578fae437/","schema_version":"1.0.0"},{"id":"portal_projection","name":"Portal Projection v1.3 (Addon) | Portals (With Ray Portal BSDF) made easy, for everyone [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":2386869,"archive_hash":"sha256:c3365d6bcdbdff2c522f3f1448fad875fb172e94bf461a33fe1334246ac874c0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/246986dc-770f-425b-9097-ca82ab41b6dc/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["portal","projection","addon","dimension","mirror","abstract","easy","camera","display","dynamic"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ff5032ec-3c1c-420f-8e11-6cf5fc355815/","schema_version":"1.0.0"},{"id":"pro_aligner","name":"Pro Aligner - Align Any Object With A Click [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.2.2","type":"add-on","archive_size":8027,"archive_hash":"sha256:900105e74ba1de500ce56b946e998c2b475b6a2a07345116996736720f1402cf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/91677678-2957-43d5-a7fb-37bd1d317761/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"CG Galaxy","tags":["align","rotation","autoalign","proaligner","worldalign","objectalign"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ed839737-ce8c-412c-8753-80a2bc968b59/","schema_version":"1.0.0"},{"id":"procedural_clouds","name":"Procedural Clouds [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":24305854,"archive_hash":"sha256:b6d83cf36baa39f432f698749b6d57efd0a21c36d08e9c0a38366560da491b00","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/72fb912b-ceae-4fec-9e03-d099f4518290/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.5.0","maintainer":"Suzanne studio","tags":["clouds","cloud","sky","skies","volume","volumetrics","storm","addon","atmosphere","procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/70f5bfd0-0c25-4a15-a694-384875e86a6e/","schema_version":"1.0.0"},{"id":"neo_cables","name":"Procedural Neo Cables [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":4199,"archive_hash":"sha256:22bfb3d0dc05b9f0c8533e937331f967edbbfbc7c17717fcfae2907f08f42877","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/6c980f63-dcc9-4ed6-923b-c1bec5bce747/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["procedural","generator","cable","wire","rope","generate","oneclick","string","thread","modifier"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bb5d18f8-b5b6-4fb1-9f53-00fbf0c7aacb/","schema_version":"1.0.0"},{"id":"Procedural_Sky_System","name":"Procedural Sky System [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"0.2.6","type":"add-on","archive_size":724389,"archive_hash":"sha256:78d907ff64c92dc9fe436fe10cdc90f2fa51f47f1145d4e700a8a10bbb3c37dc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1a37b04f-dd34-48a1-8184-feceb205e718/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["World","sky","HDRI","shader","cartoon","anime"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/44d6ef69-5132-4e57-bf6e-02e1b7d2075a/","schema_version":"1.0.0"},{"id":"procedural_terrain_generator","name":"Procedural Terrain 2.0 – Geometry Nodes Terrain Generator [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.0.3","type":"add-on","archive_size":39573,"archive_hash":"sha256:bc1060a598e1f490c0b5f06542dcecfd0afb6e414efdb56dd50d098be5367665","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b359e5f8-dda1-4fa5-a181-f813a3396090/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["procedural_terrain","procedural_generation","terrain_generator","landscape","texture_blending","terrain","terrain_mesh","realistic","geometry_nodes","LODs"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9ef8471a-d401-4404-98f9-093837891b43/","schema_version":"1.0.0"},{"id":"procedural_weather_pro","name":"Procedural Weather Pro [Before: $14.89, Now: $12.66]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":43934,"archive_hash":"sha256:05d2bde702f2253f8b1b8f9e7fcbf7c77b4a065de9505a68f7384007ffa1174c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8066341e-34a2-475b-ab74-47c40ec2180c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.66","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Lighting","Render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/77731762-5b91-4e38-b188-4c5b8ff7061f/","schema_version":"1.0.0"},{"id":"product_lighting_setup","name":"Product Autouploader [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":31931,"archive_hash":"sha256:1c78dd9539e0a76f95d94acf2e2c03b6b9f04d73e311c03ef1465e44a195774c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f212cd0a-9d7f-4617-b0a9-ee385e15a631/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["automation","cgtrader","turbosquid","fab","ai","llm","lighting","render","camera","renderautomation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b8679695-2084-4bab-82d7-2a880628e8e6/","schema_version":"1.0.0"},{"id":"POS_shelf_display_generator","name":"Product Display Generator [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"3.0.0","type":"add-on","archive_size":10667988,"archive_hash":"sha256:7b4aba700c52b3bdc15b5f152f8d1267e087295202f024a92bd6570d7336afb7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0efb25ac-de7f-48ca-afa2-5d958419a383/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"brandPOS Karpeta","tags":["Object","cardboard","packaging","FSDU","display","generator","model"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f2880b5e-ba2f-4f2f-9556-16dd98491c38/","schema_version":"1.0.0"},{"id":"profiler","name":"Profiler 2.0 - Advanced curve beveling tool [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":293184,"archive_hash":"sha256:4d04209df47b869f68075cb013d9163ebecfd6ac5801c8d63db4894f55251b7f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/837faf74-0d9a-4493-b871-6bd776237892/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Mike Radjabov","tags":["Modeling","curve","spline","sweep","profile","cornice","bevel","molding","svg"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1cd6fbe1-c385-4941-ad49-06342734572d/","schema_version":"1.0.0"},{"id":"psd_layers","name":"PSD-LAYERS V1.6 Add-on [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.6.0","type":"add-on","archive_size":50355,"archive_hash":"sha256:c767d1916b98c2348e38ff329b065a32caae4525a278bcbd3cfdda3e50e7e27a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cf4fc88b-368b-475d-89a2-13706d76324f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["psd_layers","hand","painting","textures","layers","handpainting","paintlayers","paint","texturing","freehand"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b1964db5-95ce-454a-ae93-74a3a17d37a2/","schema_version":"1.0.0"},{"id":"quadify_premium","name":"Quadify Premium [Before: $24.97, Now: $21.22]","tagline":"FULL plan required - upgrade to download","version":"2.6.0","type":"add-on","archive_size":26623,"archive_hash":"sha256:cbae5724dbd151f7aead7e85d4837a07e8906fc432edcbbb63b8a7cf0a515409","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/02ac2aa9-dae2-4fe4-9fe0-72b540c12116/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.22","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["mesh","mesh","optimization","clean","retopology","decimate","low","poly","count"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6ba7ef6e-9617-4df8-873e-3dac35aadd63/","schema_version":"1.0.0"},{"id":"quadify_pro","name":"Quadify Pro — Studio & Automation Edition [Before: $80.00, Now: $68.00]","tagline":"FULL plan required - upgrade to download","version":"2.3.4","type":"add-on","archive_size":82832,"archive_hash":"sha256:73b148cf5c29fc62024b7bd4bba1dbaf99914395a8f0faf6efa0c0077caeb4e5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/58dec338-ce14-42c9-932e-a97b0101360f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"68.00","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["Modeling","Mesh","Retopology","UV","LOD","Export","Utilities","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/489eaa7f-5ad4-402b-8a65-7404010df89b/","schema_version":"1.0.0"},{"id":"quadify_ultra","name":"Quadify Ultra [Before: $150.00, Now: $127.50]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":2569263,"archive_hash":"sha256:4202b7d30673354503fb49a643b0a4e46dd3c03ea18d2f8bee0117fb3c952741","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c3815f1e-2cf4-4d0e-b037-19e6a568cb00/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"127.50","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["Modeling","Mesh","Retopology","Topology","Quad","Optimization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1113757c-3829-4c33-bf49-11d38d30003d/","schema_version":"1.0.0"},{"id":"quick_align","name":"Quick Align [Before: $2.50, Now: $2.12]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":30856,"archive_hash":"sha256:cb1e0440c5f4407c455fbd2e5510a508c4982fe3123a9a489420ea00603b482a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f1d7822-6cd7-4172-b003-f9bc4d6e207e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.12","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["Object","Aligner","Evenly","Distribution","Illustrator","Adobe","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/91bec957-fe14-459a-83cc-5ce477214631/","schema_version":"1.0.0"},{"id":"quick_apply","name":"Quick Apply [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3846,"archive_hash":"sha256:74bc61eb7fc7f873cf32786b90f7ca80441528bd3deb36ea590c0a2311eba562","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e76474a4-7bce-44f2-9786-a90c4711eaec/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"3.0.0","maintainer":"Re Siva","tags":["Object","Material","Modifier","Utility","easyapply"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/46c1cbcd-3c06-4aa0-92ef-4c81446359ed/","schema_version":"1.0.0"},{"id":"quick_baker","name":"Quick Baker [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"3.3.0","type":"add-on","archive_size":300019,"archive_hash":"sha256:20b055b5b7f2f1e522fabbaf5947e03d8780e8bcc0fef5c9bf094d3c3239de08","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0a560c82-5404-4da0-afdc-3c646af6a61e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["object_bake","high_to_low_poly_bake","auto_cage","auto_UDIM_bake","channel_packing","material_bake","node_bake","pbg_texture_bake","texture_baking"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/562b8533-d6d1-4a37-935c-844b59ccf5cf/","schema_version":"1.0.0"},{"id":"quick_color_mat","name":"Quick Color Mat [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2426,"archive_hash":"sha256:384d34cb9c86629eac51f09fa6a1af15ca086b9ffdf75ef2dd3ee88c91370f9a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a2fd6937-de3a-4f24-9ae0-7ce203659515/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"isac lima","tags":["Fast","Texturing","Texture","Material","Color","Picker","lowpoly"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b6528286-f9b0-4dbc-b032-5c479193a350/","schema_version":"1.0.0"},{"id":"quick_decal","name":"Quick Decal [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.7.1","type":"add-on","archive_size":268191,"archive_hash":"sha256:3ba5d820d9b24cda4c9dfcaaad7e949bb21bc3db49be474d22fa509970b328ac","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8fa1d954-4aa8-423b-b24c-15002f36f247/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["image_decal","megascans_decal","pbr_decal","decal_layer","layer_wear","layer_maps","auto_snap","auto_parent","auto_resize","quixel_bridge"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/03085e38-2e9e-472c-b274-a6870a1dca07/","schema_version":"1.0.0"},{"id":"quick_export","name":"Quick Export Presets [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3310,"archive_hash":"sha256:cf518a244930f26fa64b6d4dc4021709f5038921a7f1785c1c74059144263c40","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0c357c80-270f-4a10-98c9-cadeb4941c26/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["animation_tools","export","export_presets","game_development","quick_export","time_saving_tools","tool","tools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e90aa9cb-2ee1-46d7-b142-fc123d3ccfab/","schema_version":"1.0.0"},{"id":"quick_highlight","name":"Quick.Highlight [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2168,"archive_hash":"sha256:04df4f1afbcdab212124e22da346cdb6311a67fee86ec844fb08bc81b5dd6b96","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a33ed777-f4b2-4860-8348-3cc3504d5419/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"George Art","tags":["outliner","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/88a04d54-5cd8-44a8-972d-bf71dd4b13a5/","schema_version":"1.0.0"},{"id":"quick_interface","name":"Quick Interface [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":25611,"archive_hash":"sha256:64a293894e7513a9274c0d4fe2c52a9f543167742a7e0af6542b1441b389261c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b74dc10c-839e-41cf-94f6-0906dc16c07f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["duplicate","split","switch","management","interface","swap","join"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e099f4ab-5188-4607-b9a5-6b12790694c1/","schema_version":"1.0.0"},{"id":"quick_lattice","name":"Quick Lattice [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"0.8.2","type":"add-on","archive_size":5964,"archive_hash":"sha256:f46aa86875dd6e14060aa47a207bc8fde1db70b3da9bd3d90ace0f81cb9b927d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cf79a7ff-8802-4c4e-bbca-a7c46730dc6b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"carlosmu","tags":["quick","lattice","tools","modeling","automatic","modifiers"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aebbe9e7-732d-4a77-8bc9-855e0a90a396/","schema_version":"1.0.0"},{"id":"bake_material_pro","name":"QuickMat Bake Pro – Ultimate Texture Baking Tool [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":21529,"archive_hash":"sha256:78d8b62da830760d7696930879fbbeb388001785e4a697d06df212f248e08546","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f21b81d6-4827-432c-ab0b-95c87f8f85e2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"3.6.0","maintainer":"Studio156","tags":["texture","baking","materialtotexture","material","textures","texturecreator","shader","object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45478992-1264-487a-9aeb-23de7fb9d317/","schema_version":"1.0.0"},{"id":"quickmat_pbr","name":"QuickMat PBR – Auto PBR Texture Assigner for Blender [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":10495,"archive_hash":"sha256:47f2ba1015744e3cb035404188dfb389b28281743027534f6f9c8bf2eaf17616","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b6d254d3-6592-4281-bd4e-dee4bb79c70d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Puneeth Saravanan","tags":["Material","substancepainter","adobe","autotexture","Texture","Import_Export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/52d4ab0f-94b2-4f63-bfef-d86538bae8c2/","schema_version":"1.0.0"},{"id":"quick_measure","name":"Quick Measure v2 [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"2.0.5","type":"add-on","archive_size":149550,"archive_hash":"sha256:590b9b24988895ddac71cab3a1cba32bd448f26aad4ae404c7c6ce579ffabbc2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b2369230-7802-4c18-9fa6-d8e0a325cd18/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["measuring","measures","measure","measurement","measurements","tape_measure","3d_view","measuring_tape"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7074a6d2-6181-4669-9d8b-e13561477abf/","schema_version":"1.0.0"},{"id":"Quick_Origin_tools_v1","name":"Quick origin tool [Before: $1.00, Now: $0.85]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2182,"archive_hash":"sha256:692d1665c5fee4220e79f228ee7c92357bfda113651282424ce6192314e8b5f7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5325a0fb-0f09-4227-9fbd-1658b825fd8d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.85","blender_version_min":"4.2.0","maintainer":"3DAssets Kit","tags":["tool","tools","batch","origin","quick","blender","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9d0d5f6a-ea24-4868-8b81-21662abd7d16/","schema_version":"1.0.0"},{"id":"alt_tab_quick_render_preview","name":"Quick Render Preview [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5971,"archive_hash":"sha256:692f347bf98a84c06c57d3628c023733777b4d5f93dabb14032de8bc46756673","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f3ed45e0-8b26-4b8f-8411-78c66b433860/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Alt Tab","tags":["alttab","render","preview"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/45eac3d5-9a69-4ea1-8e53-08ba9656447b/","schema_version":"1.0.0"},{"id":"quick_replace","name":"Quick Replace [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.2.1","type":"add-on","archive_size":106813,"archive_hash":"sha256:55954eb891d859c257510bcd7462d843fb6ffc69b129a8344dfc75d94bffbd62","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4e8b1dca-6edd-4edd-8e79-6c8e1031cb6d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["Object","collection","replacer","placement","tool","variety","blockout","mesh","randomization","replace"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6ab1d182-6625-4cb8-9b2c-ca4d2c07c111/","schema_version":"1.0.0"},{"id":"quick_theme","name":"Quick Theme [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.2","type":"add-on","archive_size":25703,"archive_hash":"sha256:b2fa794392702d933b726740de51337950654f54d63fc47633d25f257ccf8bc6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/21a9224f-1547-403c-bc20-fe2e09131dad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Karan @b3dhub","tags":["interface","theme","user_interface","custom_interface","quick_theme","blender_theme","theme_maker","3d_user_interface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c785c99e-f1c2-4fbc-82b8-651761f6101a/","schema_version":"1.0.0"},{"id":"quikv_pro","name":"QUiKV PRO — Quick Keyframe Value | Animation [Before: $17.60, Now: $14.96]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":41859,"archive_hash":"sha256:1b710658f7e92026c6f12824694a523183eab7dcc5788416f02e1c8525de9b4a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e531b319-c0bb-45a3-a5d2-0bfef96183aa/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"14.96","blender_version_min":"3.0.0","maintainer":"eFcoelum","tags":["keyframe","animation","Interface","value","click"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/bd8897f7-1111-43ea-860f-f956e1d4c0c7/","schema_version":"1.0.0"},{"id":"random_object_colorizer","name":"Random Object Colorizer [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3343,"archive_hash":"sha256:154dfae4dd35cef3d4f2ee5757abd3ef8790e89f0ec4d61f2803c2c8c4b2f7d7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c6fdfec0-fe88-489b-a72a-fb767df8c919/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["3d_workflow","tools","materials","Modeling","object_colors","procedural_materials","random_colors","texturing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/36355162-1705-4223-88ec-f17cb0aa38b2/","schema_version":"1.0.0"},{"id":"raycast_scanner","name":"Raycast Scanner [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":2140094,"archive_hash":"sha256:2b2e2822ab1911da95e7100a079c86a1a9364df9137425aca3523a8f02759db6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/20ccbb56-5810-44ee-aed2-17d56020ea29/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Dennis Hafemann","tags":["3DView","GeometryNodes","Material","Node","raycast","scan","mix","shader","effects","blur"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/61fabc4e-aa4f-463c-8bff-d771f0b85cb2/","schema_version":"1.0.0"},{"id":"renametool","name":"Rename Tool [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1859,"archive_hash":"sha256:31dcfacba225cd89975fd7f1c19fa3b94cc09f95ce6c07096f628c0676467c8e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0b9160a3-114e-4c89-9b1d-34c3e2c20444/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Peter Harmatiy","tags":["rename","RenameTool","Naming","batch","renaming","prefix","suffix","sequential","numbering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/759e3e20-389c-4b76-886e-c0b5f777c831/","schema_version":"1.0.0"},{"id":"RENDERBACK_PT_Panel","name":"Render Back | command line rendering made easy [Before: $8.99, Now: $7.64]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":2469,"archive_hash":"sha256:7eb243aeb9da5906a755214d9e78162c5e867bbd91037dc768e250f5b40314ff","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a520f940-a211-43b4-886f-66606ecf8942/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.64","blender_version_min":"4.2.0","maintainer":"Elton Matiwane","tags":["command","line","rendering","fast","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b9d51d20-8ec3-4b14-8da3-0f7413830280/","schema_version":"1.0.0"},{"id":"RenderForgeAI","name":"RenderForgeAI [Before: $25.00, Now: $21.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1879679,"archive_hash":"sha256:0dc385a33ba081c8e7863db348534383ec5c26e0c10d20e728ca70e1466db6c5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f79e35f5-30a0-4980-8104-67a149695ac4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"21.25","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["lighting","render","mesh","optimization","AI","denoising","volumetrics"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/244c9e2d-6185-4f62-9501-864aef9d908c/","schema_version":"1.0.0"},{"id":"render_manager","name":"Render Manager [Before: $17.99, Now: $15.29]","tagline":"FULL plan required - upgrade to download","version":"2.5.1","type":"add-on","archive_size":95404,"archive_hash":"sha256:4914ec65c8c5f5649e0e9b385179258cb382034d697a459369c0039f1a98a80d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/170c9ea3-5d5f-4d59-ab71-addb88c81ec2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"15.29","blender_version_min":"4.2.0","maintainer":"Hassan Hussain","tags":["render","pipeline","animation","scene","camera"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/502f4b0a-b0c2-4b08-8414-424c287bc8ca/","schema_version":"1.0.0"},{"id":"render_negative_frames","name":"Render Negative Frames [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1879,"archive_hash":"sha256:2ba36c9790061f0bf0a448114c2cb1719f4a1cffebe061a383f8c4aa7de28039","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/da07005f-b641-4c1f-9587-91cdd6db7c03/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Rendering","Animation","Frames","Sequence","Negative","Timeline","Output","Preview","Batch","Export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0eaa2786-bfb2-44d6-aa57-1b3ecdd79892/","schema_version":"1.0.0"},{"id":"Render_Presets","name":"Render Preset Manager [Before: $1.99, Now: $1.69]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2792,"archive_hash":"sha256:586e53a0c3d4c433d5d116672994d69a2a20413e310774af3043e382f0f083c1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/803e583e-48e7-4f43-a923-2b5be440a62f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.69","blender_version_min":"4.2.0","maintainer":"James Middleton","tags":["render","preset"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/03f8285a-7a6f-4f92-9eb0-fa65b40f663a/","schema_version":"1.0.0"},{"id":"alexdepario_render_selected_cameras","name":"Render Selected Cameras [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2760,"archive_hash":"sha256:88bf2295c1d2a4efbdec61981f5b46c9f3d84de1f2ae9aa5214c1aeba2eb8a20","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/1428efd1-2258-4adb-9a60-898a271b5838/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Render","Cameras","Animation","Frames","Selected","Keyframes","Output","Addon","Operator","Rendering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/20a24366-d063-4bae-86a6-64a4801f82b2/","schema_version":"1.0.0"},{"id":"render_toolbox","name":"Render Toolbox / add-on [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":51865,"archive_hash":"sha256:7acca1532f7eefc9deb6031439dc7302a55449f02caaab0c1c147ba88eb97bde","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/12596ee0-7bb0-43e0-8936-21c791620c89/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["addon","render","lighting","camera","realistic","hdri","environment","extension","rendering","toolbox"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/01c747ba-fe17-40cc-9a06-ddb66fca62f4/","schema_version":"1.0.0"},{"id":"rendertools","name":"Render Tools [Before: $11.99, Now: $10.19]","tagline":"FULL plan required - upgrade to download","version":"1.8.0","type":"add-on","archive_size":55255,"archive_hash":"sha256:740459440b6441a7130c3cabdfe29c1b7685b2b9973315e10954bc5815e73454","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dcf06b24-482e-4e65-a191-d461b65f432b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.19","blender_version_min":"4.2.0","maintainer":"Sérgio Merêces","tags":["render","tools","layers","idtools","image","imagemask","object","objectmask","renderid","selection"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/193a112f-1f47-464f-9481-4eb07e57dfda/","schema_version":"1.0.0"},{"id":"rendervise","name":"RenderVise [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.0.9","type":"add-on","archive_size":9789,"archive_hash":"sha256:57e84968a668fabf8d2877346e66eacc63b551237a86a3edf07fa5281eaae1a4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e325318-9d07-42c6-8cc8-51320b3fac5b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"3.0.0","maintainer":"antoine f","tags":["Render","Pipeline","Camera","Preview","History","Compare","Compositor","Thumbnail","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9caef8fc-7e27-4778-a711-4e0c4f65d665/","schema_version":"1.0.0"},{"id":"resmax","name":"Resmax - Upscale AI [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":45049478,"archive_hash":"sha256:0922535ea56912848573cb1b8e9c867351cd9954c6e16a63935818422df6a582","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/15b915f0-42c3-42f8-874f-12e3fca9c4fe/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"PlayfulPixel","tags":["upscale","enhancement","imageenhancement","imagedetail","resolution","upscaling","superresolution","videoupgrade","renderboost","clarity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b1db2ef8-01eb-4b74-91eb-f5b081e8762e/","schema_version":"1.0.0"},{"id":"retro_console_texture_converter","name":"Retro Console - Texture Converter [Before: $20.00, Now: $17.00]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9399,"archive_hash":"sha256:1318864822da93978eb7171758723f405929829aec55d440b4fab81118e7b5fd","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78f3c85b-c1cb-4a5c-b81d-cee1fdbe535d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"17.00","blender_version_min":"4.2.0","maintainer":"Prince Eagle","tags":["Retro","Console","Converter","Textures","Materials","Playstation","Shader"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f2a4899f-8937-42b9-86d4-b383275c19bc/","schema_version":"1.0.0"},{"id":"retro_game_generator","name":"Retro Game Generator [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":32929,"archive_hash":"sha256:330e68364f7398892036bd42414008db1d1a675d9e478930fa447eae445fdd0c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2a0827f7-3034-4e97-8462-526d7cc43a6b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["Render","Compositing","Materials","VFX","Retro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c4461f3c-28a5-46a6-a776-377693db678b/","schema_version":"1.0.0"},{"id":"rigify_exporter","name":"Rigify Exporter [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":16046,"archive_hash":"sha256:3d758fc27afb06d104c0b1b6da32f03752bb54b880075e4e7d2862ea59ce3db0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2dac3f2f-efb2-478b-81f1-664f5811a049/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["export","rigify","unreal","unity","godot","addon","blender","rig","rigging","rigger"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ac766b5e-b730-4763-aba8-fe8f4bea7544/","schema_version":"1.0.0"},{"id":"rigify_retargeter","name":"Rigify Retargeter [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"1.0.4","type":"add-on","archive_size":35673,"archive_hash":"sha256:0017a0759d1e8a607e341fab85475d5ca0eeb6659cbfe620c2893a7bf73f3d9d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d2699e3e-2458-4b11-bbea-733e6f03d2b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["retarget","retargeting","retargetting","bones","rigify","transfer","animation","rigging","rigger","rig"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/08108568-865c-4219-87e7-144df8ab7fa2/","schema_version":"1.0.0"},{"id":"save_director_pro","name":"Save Director Pro [Before: $6.49, Now: $5.52]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":17820,"archive_hash":"sha256:6c56ba1b5cc51803d8d3b91fafb4c64facc6c8ec6a209fbda8604729232e03df","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2c627b8d-effa-4c1d-bee0-74c298a0234a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.52","blender_version_min":"4.2.0","maintainer":"Steven Seidler","tags":["Save","Director","Pro"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/92851ab9-2d63-4c4f-8746-41f233d57fb9/","schema_version":"1.0.0"},{"id":"scale_print_camera","name":"Scale Print Camera – Pdf & Exact Scale [Before: $16.00, Now: $13.60]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":43786,"archive_hash":"sha256:b53a1ba15aaf4cf1c20493dd9e7b7e13f0250d8424c9aebf22d10ed3a7c5079a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9f78b53c-ae4a-4785-89a1-09cac3296ab5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.60","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["blueprint","camera","construction","dpi","orthographic","pdf","print","scale","paper","render"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/08f3b586-69b8-4fef-8b34-09426bb88b06/","schema_version":"1.0.0"},{"id":"scan_cleaner","name":"Scan Cleaner [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.2.3","type":"add-on","archive_size":20651,"archive_hash":"sha256:9c486142f1d6a78f90f31a2c648635a8b616b1a90197507f50cd82b4ad98b0dc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3546b856-e505-4915-befa-b736873f785f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Zack hough","tags":["Mesh","Modeling","Pipeline","scaning","scan","automated"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aad93279-f98f-4884-8a4a-2a05f0491421/","schema_version":"1.0.0"},{"id":"scatter_forge","name":"Scatter Forge [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":1238739,"archive_hash":"sha256:fb6bed06c1de23c9d97d80672a4ecedf7744d6a7697ba851ed2967bee46d487f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/86ccd088-496e-4545-91c9-c3bda91d4162/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Spectre 3D","tags":["developement","lod","GameDev","Export","Procedural","Scatter"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/561addae-d8e9-497f-9c73-961d3d0ab281/","schema_version":"1.0.0"},{"id":"scene_state_bookmarks","name":"Scene State Bookmarks - Save and Restore Full Scene States in One Click [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":7818,"archive_hash":"sha256:6405e1a41d62fa8920f3b7c858590b54096a84c9bc4b06a11ad62235bc223612","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e70fbd8e-2b48-4699-93d7-0573eab3420b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Scene","Render","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/912c7fdc-6b35-45fb-9843-2f751a2cc833/","schema_version":"1.0.0"},{"id":"scenesweeper","name":"SceneSweeper - Clean-Up Commander [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":23168,"archive_hash":"sha256:869b3b93d15c2f7d138697210c3434c97e31849e776517c73185fd4f4eda5f80","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/00dea756-3878-4037-9217-dfc0032a74d9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"PlayfulPixel","tags":["SceneManagement","Cleanup","Utilities","Workflow","DataBlocks","Optimization","Performance","Organization","Automation","Productivity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f5484694-9251-4738-a018-90ae5083fdc7/","schema_version":"1.0.0"},{"id":"wk_schematic","name":"Schematic Editor - Visual Rigging Made Simple [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.6.7","type":"add-on","archive_size":634022,"archive_hash":"sha256:6cea718ed1fcf44841dfa3eda665725af2d870be6e419ae724a357ca79db2c0a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/00e6ba6b-f6c2-4b95-a0a9-c2aa133c1bc5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"5.0.0","maintainer":"Wolfram Kampffmeyer","tags":["Schematic","Rigging","Hierarchy","Constraint","Editor","Visualization"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/92b4b030-65f1-48eb-84d9-4f3786c9ba9d/","schema_version":"1.0.0"},{"id":"SeasonSlider","name":"Season Slider [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":46257,"archive_hash":"sha256:562d8eaa29b82b144bba800ce5f367e204d11e7f4d96929940437db0fc33b0f3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/715e7d64-0f61-49a6-baad-20d5ab634e51/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Mutanzom3D","tags":["Season","Material","Node","forest","nature","trees","tree","seasons"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/40705d46-2d85-44fd-8d8b-1db3e6f7a1b0/","schema_version":"1.0.0"},{"id":"sectionbox","name":"Section Box - Cross Sections, Elevations, And Visualization [Before: $29.99, Now: $25.49]","tagline":"FULL plan required - upgrade to download","version":"2.4.8","type":"add-on","archive_size":6748565,"archive_hash":"sha256:1aefdbcf980556de2b10d3fb8bde0d260d9da45d31f50a7a8557a94eb28d843b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cc3a7f57-ddb0-4795-bf23-2677d325c8c0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.49","blender_version_min":"5.1.0","maintainer":"Ruben Messerschmidt","tags":["section","box","cross_section","elevation","archviz","architecture","plan","drawing","floor_plan","cut"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/42a79447-b3f5-4683-a253-73d7360142a8/","schema_version":"1.0.0"},{"id":"section_pro","name":"Section Pro - Sections, Projections & Technical Drawings [Before: $59.99, Now: $50.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":25516976,"archive_hash":"sha256:bf0b7360645992c567af82d242bab14867bf6008d91f322f8f3eaa41f2420dc7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/302ead32-dda5-42ee-8bd1-ddbb59fde059/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"50.99","blender_version_min":"4.5.1","maintainer":"Ruben Messerschmidt","tags":["elevation","ArchViz","section","floor_plan","technical_drawing","interior_design","architecture","cad","dxf_export","bim"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c472fc66-b1c3-4110-8cd4-ebcb25080734/","schema_version":"1.0.0"},{"id":"selective_wireframe","name":"Selective Wireframe - Per-Object Wireframe Control for Blender [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":10492,"archive_hash":"sha256:d1a68e64f6698d3e1aff0c7f56381d0189a3f4ed0b128efc3f06bca6f535779b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7484f1ab-1e0a-4050-975e-f5b93c1e1d78/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Selective","Control","wirframe","everyobject"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/5713302f-2e45-4815-b89d-f3d9dd9ceeb7/","schema_version":"1.0.0"},{"id":"Select_Objects_with_Same_Vertex_Count_extension","name":"Select Objects with Same Vertex Count [Before: $0.99, Now: $0.84]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":1445,"archive_hash":"sha256:f3e259eceeebeb7c6455e1e9bab7e6686a2c67517723d927a2895d999aba37b2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2de46965-3ca1-4838-a586-cbef081e83b5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"0.84","blender_version_min":"4.2.0","maintainer":"Mesk911","tags":["vertex","match","count","mesh","dupicate","select","tool","object","same","similar"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/61bfc41c-f84a-43e3-8c82-a94883475530/","schema_version":"1.0.0"},{"id":"set_origin_to_center_bottom","name":"Set Origin to Center Bottom [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":1838,"archive_hash":"sha256:81c9c1e0b887bc18f5e413ca02edfa649da3df61230e2ffca2f3f04a19c1072d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/938e3395-7979-475e-b3f9-7d080db2caf4/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Mutanzom3D","tags":["origin","center","bottom","tool","qol","qualityoflife","object"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7381a6d4-7480-4a6c-8beb-10180bdb7169/","schema_version":"1.0.0"},{"id":"shakemaker","name":"ShakeMaker [Before: $5.49, Now: $4.67]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":14206,"archive_hash":"sha256:36e39fdd146abe3cf1d89d7ad4bbcc6cb3e70b140a09812592aaf647fa7c1ea6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5e557337-8452-4b1d-b932-c7a1a889f397/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.67","blender_version_min":"4.2.0","maintainer":"Ace Of 3D","tags":["shake","vibrate","waggle","wiggle","wobble","noise","animation","modifiers","camera","fcurve"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aafd9aeb-eda8-4ee4-b7fd-28ae1edad90d/","schema_version":"1.0.0"},{"id":"shape_key_fixer","name":"Shape Key Fixer - Manage All Scene ShapeKeys with Groups & Batch Tools [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.5.1","type":"add-on","archive_size":18152,"archive_hash":"sha256:42cf19cca7b18383d173077cd7db74c46dabe6b71cab8fbebcd2fedbe110236a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0028e4ac-0b4d-4dc6-a2ff-062075fcf0c6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["animation","blendshapes","rigging","productivity"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1f14a313-1319-4921-8043-394825fcf083/","schema_version":"1.0.0"},{"id":"ShareTextures","name":"ShareTextures Asset Library [Before: $14.99, Now: $12.74]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":783093,"archive_hash":"sha256:65e40563f57e0fedf66457e7c8c74154c1b32a7cf16c1222436cc96342eccb3b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/78eb7228-b341-48a2-a9d7-51616bf758b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.74","blender_version_min":"4.2.0","maintainer":"Share Textures","tags":["Object","Material","Pipeline","UserInterface","asset","library"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/822222fd-6e10-4da6-960d-cb12d7ec3fbf/","schema_version":"1.0.0"},{"id":"mk_shelf_filler","name":"Shelf Filler [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":12857,"archive_hash":"sha256:80218adeb5de818a77d0e927e073c2ff4fea020fd78742d383288df09a17f344","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/617da19f-6a35-41f7-b5d5-26c1fe3eaef6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Object","Modeling","fill","book","decorative","decoration","shelf"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/fa82ee50-842d-450a-a6bd-8837926fc743/","schema_version":"1.0.0"},{"id":"jd_shot_handler","name":"Shot Handler [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"3.0.2","type":"add-on","archive_size":49735,"archive_hash":"sha256:f113416a330accfae028bb41d95cb7014d2f1967c4b80653dc98c870f29836d2","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/192ad77b-1fb6-4557-ab75-0ea250e15b85/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"dubCUT","tags":["shot","render","camera","scene","manager","collection","shader","overscan","set","setting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/93e43d6b-8f20-478b-bb88-94c4ac387d4b/","schema_version":"1.0.0"},{"id":"shot_manager_pro","name":"Shot Manager 2.0 Pro (Blender 5.1+) [Before: $35.00, Now: $29.75]","tagline":"FULL plan required - upgrade to download","version":"2.0.8","type":"add-on","archive_size":23139698,"archive_hash":"sha256:46f766bfec0a4383b9c90dd172387fd3d15e919fea9343b98ab4c81feb454e47","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/575d0fec-e3f3-47e6-935b-cc39b7f08b39/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"29.75","blender_version_min":"4.3.0","maintainer":"Other Realms","tags":["shot","takes","macros","states","batch","render","burnin","burntin","stamp"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2ace843e-c14f-4eda-b697-fb7065f344d1/","schema_version":"1.0.0"},{"id":"shotweaver","name":"ShotWeaver — Multi-Camera Shot Organiser for Blender [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":10493,"archive_hash":"sha256:8d025358a4b0165f91d26504ac126d77aa8e77aff50e88af94d902ea47b29c9f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/bc94be10-941c-44ca-882b-ddc30679da8d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.5.0","maintainer":"Ynleyn","tags":["camera","animation","storyboard","management","render","queue"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f3a2d99d-e315-4918-ba7a-e8bf576afa51/","schema_version":"1.0.0"},{"id":"showcase_studio_pro","name":"Showcase Studio Pro [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":139482,"archive_hash":"sha256:3e3d1586f1ac59458f084ea5a859bd6c515dd7cae24c3eef933a1c31a969235f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/50c7137d-dbcf-457c-9ac0-7a1d6c8d4ea0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.5.0","maintainer":"3dquads blender","tags":["3DView","Render","Lighting"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ff65ae79-6580-433d-8e18-98f4d64c7af1/","schema_version":"1.0.0"},{"id":"simple_layouts","name":"Simple Layouts - Full Version [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"0.1.5","type":"add-on","archive_size":308012,"archive_hash":"sha256:c773d88ee7a6158743c98df12a7ab8c81f844b0efb9d3da28f0f8f5b57a75520","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d23f80fe-e4d5-473e-b702-a3ca1a3c9949/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Other Realms","tags":["Layouts","states","Views"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ce426630-5dd8-408b-a2a5-8140b1c4676e/","schema_version":"1.0.0"},{"id":"simple_section_box","name":"Simple Section Box [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":2190,"archive_hash":"sha256:de5bcf5bf9a3cfd8b3773925b91061c63fa50a44cd032def5b7f44bf3e7c04b9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d94ae717-877e-4477-9b5d-0f1d46cb2fc9/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Braulio Pedraza López","tags":["archviz","photogrammetry","beginner"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dcb1a05a-5fb3-41b6-87cb-d4a15320d160/","schema_version":"1.0.0"},{"id":"simplify_plus","name":"Simplify+ Add-On: Viewport Perfomance [Before: $23.99, Now: $20.39]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":136739,"archive_hash":"sha256:957887d9eef18a40d9d095f20c09aa90ccf0706556582b0f7dfe27eebdcd9bb6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e426bc0d-aba8-4a45-9455-3301de1f9864/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"20.39","blender_version_min":"4.2.0","maintainer":"Cosmo Mídias","tags":["addon","performance","productivity","animation","viewport","playback","speed","workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/55548ced-165b-42b0-8cc2-1fa1a842fc7d/","schema_version":"1.0.0"},{"id":"wk_sliceform","name":"Sliceform PopUp Maker [Before: $27.00, Now: $22.95]","tagline":"FULL plan required - upgrade to download","version":"1.5.0","type":"add-on","archive_size":967509,"archive_hash":"sha256:94ec87ede7ebadd708c879d1476a48b2e3d4589968ca74660477aa757348a49a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/38007a37-f2d7-4cb4-a9eb-c10b1a465b3c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.95","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["sliceform","3d_slice","cardboard","interlocking_objects","lasercut","maker_tools","papercraft","paper_designer","popup_card","svg_export"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ee2ffd44-5bed-40e0-be94-43b22b2e80e3/","schema_version":"1.0.0"},{"id":"smart_align","name":"Smart Align [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.40.0","type":"add-on","archive_size":30781,"archive_hash":"sha256:59e65c8482bfb52cbc7d894afa19958f492587f38a6693c299120f3a381ee372","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/85389cd7-26fb-46c8-91ca-8a69b1315e9e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Gabor Kiss","tags":["align","snapping","transform","alignment","modeling","move","workflow","addon"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2528d6bc-faa7-4231-bc63-8eba09c4b88f/","schema_version":"1.0.0"},{"id":"smart_autosave_pro","name":"Smart AutoSave+ (Basic Tier) - NovaStrikes [Before: $8.99, Now: $7.64]","tagline":"FULL plan required - upgrade to download","version":"7.0.3","type":"add-on","archive_size":7530,"archive_hash":"sha256:fbe220ec55dcf6147bd900c982c9c1c91fa53c725dd5e00af7c1997aac7fb987","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/db1b49a2-df3a-47ba-ab65-25cd7390ffd6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.64","blender_version_min":"4.2.0","maintainer":"NovaStrikes","tags":["crash","autosave","scene","safety","backup","system"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c45fc3db-f2a8-4375-a767-48bffaf432d6/","schema_version":"1.0.0"},{"id":"smart_explode","name":"Smart Explode [Before: $45.00, Now: $38.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":16997,"archive_hash":"sha256:edd41a20f4dce1fa76ffb3a26e3bf5b7f2c29e371d93bfc95de374ac51334846","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a367bd41-63eb-4ae9-8ca3-bdac8bf22b91/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"38.25","blender_version_min":"4.2.0","maintainer":"Daniel Farjoun","tags":["Explode","Animation","Archviz","Product","Exploded_View","Procedural"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a152acb9-f8b5-41df-b32c-3b2d4790a934/","schema_version":"1.0.0"},{"id":"smart_scene_organizer","name":"Smart Scene Organizer [Before: $2.99, Now: $2.54]","tagline":"FULL plan required - upgrade to download","version":"2.0.0","type":"add-on","archive_size":6316,"archive_hash":"sha256:8640f77e625614002d0e286a46e13c0e59036ea360c43aed31ba35343f6a044e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d8039a3c-8734-402f-92ba-94900c493f39/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.54","blender_version_min":"3.0.0","maintainer":"SHAXBOZ Ergashev","tags":["blender","addon","scene","organizer","asset","manager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7f474641-f0f4-418c-8e3a-8506a93064cb/","schema_version":"1.0.0"},{"id":"snappy_rigger","name":"SNAPPY Rigger [Before: $15.80, Now: $13.43]","tagline":"FULL plan required - upgrade to download","version":"1.2.2","type":"add-on","archive_size":1664368,"archive_hash":"sha256:00101c2fadcbe97df886a9b505f692422683897a1bcd686a5f4309bec04ecd54","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f4047669-f313-4cdb-ac01-3b8772cbf69a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"13.43","blender_version_min":"4.5.0","maintainer":"Stellart","tags":["Rigging","autorigger","bones","detection","generator","snappy","rig","autorig","rigger","animation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c9841f8d-5056-41a5-972d-6c6cea2fd4d4/","schema_version":"1.0.0"},{"id":"solaris_creator","name":"SolarisCreator Pro 2.0 - One click cinematic lighting [Before: $69.00, Now: $58.65]","tagline":"FULL plan required - upgrade to download","version":"2.1.0","type":"add-on","archive_size":32693,"archive_hash":"sha256:2955231eb9c54f768dc8fc2362fa9fc865e8d1a8154494cf382468fb0d0a6fed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/526f9eac-bba6-4639-bbab-9607e0c3c1d3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"58.65","blender_version_min":"4.0.0","blender_version_max":"5.2.0","maintainer":"Digi Motion Studio by Viet Luan Tran","tags":["sun","lighting","daylight","night","sky","hdri","setup","settings","light","nightlight"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/78fdf920-b5dd-4e2d-ae89-d6c53ac7bc2f/","schema_version":"1.0.0"},{"id":"sort_objects","name":"Sort Objects [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":2080,"archive_hash":"sha256:acf397a1ef0376442ae348b5eda74aec9f0787b232ac393b33f7b33b09fa8e15","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a3326e40-fbc9-49a2-8576-35963c0d3cd2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Sort","Objects","Interface","Collections","Organize","Faces","Materials","Meshes","Type"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/90804401-0756-4678-bbee-9482723b8db3/","schema_version":"1.0.0"},{"id":"space_generator_v1","name":"Space Generator [Before: $10.50, Now: $8.92]","tagline":"FULL plan required - upgrade to download","version":"3.2.2","type":"add-on","archive_size":543142656,"archive_hash":"sha256:1f2a09faa7d927fbfd0b093da716f7e528f212ec1d5eba94438599399775cf67","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2be1351b-e513-4d23-b808-c204a8e2b27c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.92","blender_version_min":"4.0.0","maintainer":"Stellart","tags":["Space","Universe","Planet","Moon","Sun","Star","Exoplanet","Asset","8k","4k"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8ec3496a-1c6d-4137-beed-afb1618aa0b6/","schema_version":"1.0.0"},{"id":"specific_frame_render_manager","name":"Specific Frame Render Manager [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"3.2.0","type":"add-on","archive_size":21428,"archive_hash":"sha256:5c5cfaf48d121a201d15970d8af3b75cb043d2c2aa5b027360aede3ea796c984","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/9049369d-6bbf-4849-a0aa-5430dd486a82/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Render","Camera","Output","VFX","Batch","Pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/eda01abf-f2e3-4f3c-b7e4-3441c6dd4e2c/","schema_version":"1.0.0"},{"id":"stairs_maker","name":"Stairs Maker [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"3.5.2","type":"add-on","archive_size":1954483,"archive_hash":"sha256:12ccbe83ae847b6db4b544475b1ecc8ca59e80a09d5a6bf95d622a2eb89dd0c8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2ed4b3c4-8150-4715-a93d-c8f8eced6e5e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Blender Bash","tags":["stairs","architecture","maker"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9489f9e0-91cc-414f-a7c0-b637a70a4eae/","schema_version":"1.0.0"},{"id":"starconnect_pro","name":"Star Connect - Smart Mesh Triangulation [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":128633,"archive_hash":"sha256:5cac8b7f6fd6438709d3d9ba30a7136f3d5d23ae172b1e38eb6ae0e8fb189ed8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4aa3f685-f52b-4f66-9762-771ec163c0a3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"Ruben Messerschmidt","tags":["triangulation","mesh_triangulation","star_connect","hard_surface","mesh_clean"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4b59c688-c13b-4611-8e18-98ad327133c9/","schema_version":"1.0.0"},{"id":"stylized_water_pro","name":"Stylized Water Pro Shader - One-Click System [Before: $24.00, Now: $20.40]","tagline":"FULL plan required - upgrade to download","version":"0.5.0","type":"add-on","archive_size":8005660,"archive_hash":"sha256:3cad70c57a27ae2acf27a2d0a2fa9a16b0511d15b6a1c710e663568c086b4af5","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/03e0ce35-7260-4f9a-aa81-e37f633667e5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"20.40","blender_version_min":"4.2.0","maintainer":"Anton Maltsev","tags":["Object","Material","Node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d438949d-5bb7-4d33-89bf-19893c0290d9/","schema_version":"1.0.0"},{"id":"mk_surface_blend","name":"Surface Blend [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.5.4","type":"add-on","archive_size":7077,"archive_hash":"sha256:5c277e0eb5c327d4ad603dbd2922b0658ee0c864f334b3ebfac3e88987d25b37","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/af887228-87b3-4b3d-8e5e-d227fcc6ca8d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Object","Material","GeometryNodes","blend","dissolve"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/553fe958-98eb-475c-9531-218ea6cabfed/","schema_version":"1.0.0"},{"id":"surface_effects","name":"Surface Effects – Procedural Material Enhancer [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":23835,"archive_hash":"sha256:db1541adbb92cd4aa13b3bd73bb0c57bb7cde085c11536f63d0a887da810c828","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/290a8fcd-eec1-421c-9b4e-dc8a5f99e3ee/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"Studio156","tags":["procedural","effects","rust","scratches","wetness","dust","edgewear","material","nodes","surfaceeffects"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/d212f51d-4f0e-465e-9ac3-883925e83903/","schema_version":"1.0.0"},{"id":"SurfacePainter","name":"Surface Painter [Before: $9.00, Now: $7.65]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":36113940,"archive_hash":"sha256:26a3e456bf03fb45ab2912e4c3b659b38cf2b9a9c298f550a7d1f54c0b8a6735","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/63e9f89c-0d70-43bf-9b99-9e88f3a4864b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"7.65","blender_version_min":"4.2.0","maintainer":"polyspaace","tags":["materials","painting","surfaces","modelling","pbr"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/f504ec5a-642c-4947-8cb3-b25523bf186e/","schema_version":"1.0.0"},{"id":"survey_points_annotator","name":"Survey Points Annotator – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":60460,"archive_hash":"sha256:2653c075f02776bdff274fad70e43d9885a8d40d3f0aa4021202a97809ce4599","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fa217ed0-dcaa-4fe7-81df-79e16c617683/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","UserInterface","Mesh","Object","Annotation","Survey"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/47132746-52bd-43fd-89a4-82a5432aa9a1/","schema_version":"1.0.0"},{"id":"survey_points_exporter","name":"Survey Points Exporter – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":39261,"archive_hash":"sha256:7296dc8dada42dda5ee981c8f96b7b6598c300c5d2ddfa0caff01dd91904e42a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a382e44d-af3f-4af1-99df-7334a13272f2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["Export","Survey","Coordinates","CAD","GIS","engineering","construction","geodesy"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4a5b032a-90aa-4148-9e40-f7318a5eaf17/","schema_version":"1.0.0"},{"id":"survey_points_importer","name":"Survey Points Importer – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":48116,"archive_hash":"sha256:07dae0d5d8f657eb750fc5b2599c3398a22017f881d5331a27ba40033f4ebd30","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/18d5b865-6a8d-42eb-a74b-820c69792a9f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["survey","CSV","CAD","points","geodesy","construction","engineering","BIM","coordinates","import"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aa5ffc37-f082-4bf9-96f7-cf24ccf16575/","schema_version":"1.0.0"},{"id":"survey_terrain_tools","name":"Survey Terrain Tools – Geodetic & Construction Workflow [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":43979,"archive_hash":"sha256:ec0f9da235bf43c1719622cf91a37f5fb38e880201ae9f6c7dce6e54661f88a6","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/317055ca-0c25-4d4e-ab6d-5a8d9c48b7df/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"4.2.0","maintainer":"Jan Holinka","tags":["3DView","UserInterface","Mesh","Survey","Terrain","Measure","terrain","Slope","geodesy","survey"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aeb85251-1fca-422a-ad99-acc4acc934a5/","schema_version":"1.0.0"},{"id":"svg_exporter","name":"SVG Exporter 1.1.0 [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":67446,"archive_hash":"sha256:5f1feb0d46de24a8816f6d6d0fe4baffba23e6b3855054571c9d918b209f1b46","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a85d69f2-e9f0-4525-8389-d629065c27c1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Nicolai Prodromov","tags":["svg","export","illustrator","vectors"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3c751ebd-c083-408b-a82a-50ad796f78ec/","schema_version":"1.0.0"},{"id":"swiftlod","name":"Swiftlod - Level Of Detail Creator [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5669,"archive_hash":"sha256:5e989039793ea4a133614d77893ef0a6f0a0f024c3dc5ef1f79c924b8b2e1fc3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/2464af97-146a-47d1-be1a-b6521114e96d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"FANNΞC","tags":["easy","lod","optimizer","plugin","pro","Level","Detail","Optmize"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cb8119b8-835b-4104-881d-9e6524c2fecb/","schema_version":"1.0.0"},{"id":"tcam_render_pro","name":"TCam Render Pro V1.1 [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":5907,"archive_hash":"sha256:d376325dd7c4970f743d9bce95659dbf155916c9fc073bba6674f539910bdf50","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/cb0fea4d-5722-44d0-bc66-fb4a904cc0e0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Otonkart Tonka","tags":["render","multicam","queue","renderqueue","camera","studio","video","automation","batch","rendering"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/317bf5e7-cf4a-40c4-8fd0-37e7400fa359/","schema_version":"1.0.0"},{"id":"textopbr","name":"TEXtoPBR [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"2.5.0","type":"add-on","archive_size":15465,"archive_hash":"sha256:7dc82c0e29fc8a939fd4480d424cf0707df2bfe08d83578017dba0211e62aa50","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/b351eeb4-d93a-4473-9c48-68c6e1828b07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Split Studios","tags":["pbr","material","texture","textures","textopbr","addon","extension","shader","generate","displacement"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/c9c54d68-ae48-4d39-bd29-5109652c19bf/","schema_version":"1.0.0"},{"id":"texture_layer_manager","name":"Texture Layer Manager [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":882964,"archive_hash":"sha256:5acc884513e5397e93eb2727fe36edc2dbda6a2ba4e755e2d65f74068eb493b9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a4449ebe-d709-412c-93d1-4d9134f00ec1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"5.0.0","maintainer":"riccardo scuto","tags":["Material","Node"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0c579cdc-7c9d-4738-90f9-d22e0b6ff810/","schema_version":"1.0.0"},{"id":"texture_resolution_manager","name":"Texture Resolution Manager [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5016,"archive_hash":"sha256:2acab6532846076f2be8681a9fe3728a88e475e4d5e9129f1b2954374e524f8d","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/64c383b8-7cc0-4841-90da-d96936742246/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["Material","textures","texture","resolution","manager","8k","2k","8kto2k","vram","crash"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dbf87b90-4f14-4b5b-b1b6-94a42a56607d/","schema_version":"1.0.0"},{"id":"Texture_Setup","name":"Texture Setup [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":3275,"archive_hash":"sha256:cf87113efe4f2741f72324e75b0b7d22a511a9d838afe3272ee70026f9a20b0c","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/304da0fb-42b6-4763-b035-e7a1f872631a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"ImNoah","tags":["texture","setup","pbr","material","easy","beginner"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/1bc8d1e5-30ec-4f13-970f-753bb85d3933/","schema_version":"1.0.0"},{"id":"Texture_Tools_Addon","name":"Texture_Tools_Addon [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":6640,"archive_hash":"sha256:da5b85b68abcc1a6a9d40235e689d142a16f871f50f6b9f948d6b121728514fc","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/4f3c8941-ea6e-4a95-9247-e5bbea96fd88/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Amal David","tags":["UV","UV_tools","texture","modelling","generic","symple","decal","trim"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/2b074e8a-844b-458a-a01b-84cada557d0f/","schema_version":"1.0.0"},{"id":"blender_ustad_texture_transfer","name":"Texture Transfer - High-Poly to Low-Poly Texture Baking [Before: $14.00, Now: $11.90]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":10623,"archive_hash":"sha256:9e26d18f2777c9476ac61b89f9fe6b6e7929cca9735b70fc708554b8445a9b96","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e5c46144-0572-41f7-aba3-4c34f0fa7c90/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.90","blender_version_min":"4.2.0","maintainer":"Junaid Alam","tags":["Bake","Material","Object","UV"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/48a8128a-6a37-4ec7-a3d7-656e69946d4b/","schema_version":"1.0.0"},{"id":"Texturology","name":"Texturology™ | AI PBR Textures from a Single Image in Blender [Before: $19.50, Now: $16.58]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1459005875,"archive_hash":"sha256:466e058cf39b8566902b14f79011afc18d525d1a0a7e3b6448b65e287463f644","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7c5ce419-191e-4784-aa05-9d2ecbb7aa07/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.58","blender_version_min":"4.2.0","maintainer":"Giambattista Von Nettesheim","tags":["addon","Substance","3D","AI","Upscaling","Inpainting","materials","PBR","texturing","imagetomaterial"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9d7fb688-d32f-4b21-acb7-a8726d96ddd9/","schema_version":"1.0.0"},{"id":"the_bakery","name":"The Bakery : One click material baker [Before: $7.50, Now: $6.38]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":1833039,"archive_hash":"sha256:e28b0a1f08f75a93ed72593d4f2073affaae653c2dfb0480ae15912ec464e154","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/704a83c3-e237-48cf-8c00-cb98e02d7816/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.38","blender_version_min":"4.2.0","maintainer":"Zahit Erdem Guzel","tags":["Material","Baking","Pipeline","addon","texture","bake"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/438cef85-944d-48a9-b7c7-2ffb63901baa/","schema_version":"1.0.0"},{"id":"hstb_pro","name":"The Hard Surface toolbox v 2.0.7 i2M image to mesh system and importer [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"2.0.7","type":"add-on","archive_size":159086065,"archive_hash":"sha256:1965899e1578da49188a948210b5700cf32c08c2831608397ebaa2efeea62a68","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f4e2fa57-414d-421d-a2f0-ec909578a309/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Mr Steve Lee","tags":["HardSurfacetools"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8c9ca364-7c7b-4a70-86b9-28e94fd80583/","schema_version":"1.0.0"},{"id":"Tiles_Importer","name":"Tile Importer [Before: $30.00, Now: $25.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":944337,"archive_hash":"sha256:e397582008ec0eee3d81c380277ea2b6d4dcf988db8b704c236b06c681110003","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dca9bd98-0e9b-42a2-ac97-6ab9825627b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"25.50","blender_version_min":"4.2.0","maintainer":"Haseeb Ahmed","tags":["map","blosm","google","3d","tiles"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b62311af-f1bc-43d8-845a-cdd313f32dbe/","schema_version":"1.0.0"},{"id":"time_click_tracker","name":"Time & Click Tracker - Break Time Reminder [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.3.0","type":"add-on","archive_size":33678,"archive_hash":"sha256:5cf1de2c7a8892f13a98f74f6cfe821babf13f03e67f328ebf762f46e51611d4","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7e3d7593-f190-40b5-b1ab-809767a248b2/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["System","Productivity","Tracking","Analytics","Workflow"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7da69ca1-9644-4e75-b295-e58368813c60/","schema_version":"1.0.0"},{"id":"timelapse_studio","name":"Timelapse Studio V1.0 [Before: $3.00, Now: $2.55]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":257056,"archive_hash":"sha256:41fd3f67885ff8ba32652e9145ac1eec5c7c95cc791827a954e5e10a1cea4f55","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/37f01828-add1-4a34-971d-914731b8378f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"2.55","blender_version_min":"4.2.0","maintainer":"Rohit Punnen","tags":["timelapse","hyperlapse","screenshot","video","tutorial"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/a3f446a9-e8bb-422e-bfc5-d424d1c421a4/","schema_version":"1.0.0"},{"id":"trimotion","name":"Trimotion-Animation Optimizer [Before: $32.00, Now: $27.20]","tagline":"FULL plan required - upgrade to download","version":"1.4.0","type":"add-on","archive_size":55849,"archive_hash":"sha256:dad0d50ae418ffb09385ea1ae481d8bc5df9dcb71b92fb1f51c6921cfffd4eed","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f1077232-0301-4173-bd04-bc7a4eff4422/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"27.20","blender_version_min":"4.2.0","maintainer":"Null Station","tags":["animation","optimization","cleanup","mocap","simplifier","tools","rokoko","curve","motion","keyframe"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/07044b73-ff12-424f-b4ce-3240d1bae740/","schema_version":"1.0.0"},{"id":"trim_sheet_express","name":"Trimsheet Express [Before: $19.99, Now: $16.99]","tagline":"FULL plan required - upgrade to download","version":"1.0.4","type":"add-on","archive_size":44729,"archive_hash":"sha256:7f03b201ca49a0146bbe4d2ef7a1eadf1acdecc0374e7a2502ea7d77ccf3d530","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fa7c57f2-bbfd-48ba-9bab-1b3efed7ab91/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.99","blender_version_min":"4.2.0","maintainer":"Troublesome Eissa","tags":["trimsheet","texturepacking","baking","sheet","materials"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/24639bd7-bbf1-40cf-950c-2454ab9d1a7a/","schema_version":"1.0.0"},{"id":"triplanar_displace","name":"Triplanar Displace [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":5585,"archive_hash":"sha256:a682057b8e0a7f681d97fa0f791304416186ac4486b94c5f2ccf68d73d0b883b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/196e3b7e-3797-4fc3-b255-12fc1515244a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.2.0","maintainer":"Anas Herba","tags":["blender","procedural","displacement","no","uv","triplanar","displacement","rock","cliff"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9a81bcf4-4a33-4248-ab1f-d28c901c465a/","schema_version":"1.0.0"},{"id":"udim_atlas_builder","name":"UDIM Atlas Builder [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":46153,"archive_hash":"sha256:6ce8871915b669feb3bc9e7fbf0818b0e1b1179d3c388b2a1cd8361e82bf57c7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/fbfd2505-0b56-4e62-84a0-34ae9ec8c3b3/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.5.0","maintainer":"Ashish kumar Maurya","tags":["UDIM","UV","Mapping","FBX","Optimization","Materials","texture","baking","gameasset","atlas"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b4048c30-85fc-4fb3-9e15-d13a36ea90b8/","schema_version":"1.0.0"},{"id":"ultimate_animation_suite","name":"Ultimate Animation Suite [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":26615,"archive_hash":"sha256:a0a86c9d504534758288888410cf529c8ce667664a2aed66a7f223cdc42b0bbe","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3c058999-83d8-4000-be61-85b8bf94a9f0/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Anvil Interactive Solutions Anibe","tags":["animator","camera","3d","3danimation","camerapreset","animationtool"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/39ea8e25-2663-4105-a6a1-cdb8d127920a/","schema_version":"1.0.0"},{"id":"ultimate_camera_shake","name":"Ultimate Camera Shake Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"5.5.0","type":"add-on","archive_size":18870,"archive_hash":"sha256:df401a91fc4bb160b3b90bb20ac4f3a9d4e5e033f6e11f99278aaeb4f5ed198f","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/d908778e-fd57-4b1a-8b54-0ffdaa96823b/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Animation","Camera","VFX","Shake","motion","cinematic","keyframe","tool","vibration","rotation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/ec291b17-d50a-45c6-93bf-d0167068bf69/","schema_version":"1.0.0"},{"id":"ultimate_outline_generator","name":"Ultimate Outline Generator (Eevee & Cycles) [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.6.1","type":"add-on","archive_size":17488,"archive_hash":"sha256:93f174a95ce78dea36cbbb201b75d0e739a40721082ee5d53600f74fa37ce1e7","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0165ea8d-1699-496e-a9bb-b48527de552d/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["Eevee","Stylized","NPR","Toon","Anime","Lineart","Solidify","Shader","CelShading","Comic"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/e6b21427-bd81-4bfd-a646-aa3647c805f1/","schema_version":"1.0.0"},{"id":"ultimate_stopmotion","name":"Ultimate StopMotion Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"14.2.0","type":"add-on","archive_size":17570,"archive_hash":"sha256:8967d03e228f333c5d4608539b6cf5e4d3273db8f8de94be4722df80ab36a52a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5f7473a3-aba2-42d8-84fa-b14ce497d261/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.0.0","maintainer":"RUIDO VFX","tags":["Animation","StopMotion","Keyframes","Timing","Stylized","Tools","frame","nose","jitter","claymation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7c989c2a-f7dc-42b0-a2ca-968912384ff8/","schema_version":"1.0.0"},{"id":"ultimate_toonshader","name":"Ultimate ToonShader Generator [Before: $10.00, Now: $8.50]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":18967,"archive_hash":"sha256:46cb4e81cadfeb449a090f56e07799ab99a17eed3a3906b2178c7934fe2f8f54","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/8efcf29c-80a1-4b25-95e9-c58c81aa23c6/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.50","blender_version_min":"4.2.0","maintainer":"RUIDO VFX","tags":["Render","Shading","Stylized","NPR","Materials","toon","shader","comic","anime","2d"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/4573ad1e-77a2-4c52-9cc2-baa44f4a6dbb/","schema_version":"1.0.0"},{"id":"undo_history","name":"Undo History [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.1.0","type":"add-on","archive_size":1268,"archive_hash":"sha256:ec7b88c1fbdd7e24b8b34597ca78c8383c80035b65f47999ce849ab4633a76b3","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/db09a89d-721d-4f74-83a8-6d0ba607ae25/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Alex De Pario","tags":["Undo","History","Interface","Navigation","Workflow","Redo","Panel","Tools","Actions","Shortcuts"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/110a0e8d-f1d8-4479-9c3b-9188da0f4fc2/","schema_version":"1.0.0"},{"id":"mk_universal_converter","name":"Universal Batch Converter [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":6018,"archive_hash":"sha256:cc9392e15f66b50687a68c7453880cbc005db6692a23dcf61edc596b53321a99","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c3beb4fb-eb7e-42be-97ff-82d67a1fd76f/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["converter","batch","fbx","obj","stl","gltf","glb","import","export","pipeline"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/aa445dda-b4cd-4936-9cc2-88c9c3fff545/","schema_version":"1.0.0"},{"id":"upscalar","name":"Upscalar | The Image AI Upscaling For Blender [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":679178887,"archive_hash":"sha256:4317b3a0a42e7699e5429e570d07193be262e09462c6822ad63222c11a984313","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f4c9026f-9bc3-4048-8e4c-f29ae7026bf5/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"Giambattista Von Nettesheim","tags":["4k","enhancement","Super","Resolution","image","editor","upscale","lookdev","upscaling","compositing"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/237e6171-8869-4612-bd5e-a3ca427ef5a4/","schema_version":"1.0.0"},{"id":"uv_king","name":"UV King | Single-Click UV Unwrap & Pack for Blender [Before: $17.00, Now: $14.45]","tagline":"FULL plan required - upgrade to download","version":"2.2.1","type":"add-on","archive_size":1531633,"archive_hash":"sha256:d21e31cbcaa2b3587163abe394472c4024d10a76b8fd618f7b40116a2a090f33","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/f6e89e4f-2dd5-4394-9e2b-2149dc2e6e15/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"14.45","blender_version_min":"4.2.0","maintainer":"Arun C","tags":["UV","UVPACK","UVunwrap"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6c03319b-087f-4446-a9bc-959f4e0eea65/","schema_version":"1.0.0"},{"id":"vacuum_wrap","name":"Vacuum Wrap [Before: $6.00, Now: $5.10]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9503,"archive_hash":"sha256:7ac023d64ac0968bd7ec2940a9285222b24c13037ac1cc8a06f1c9e4e9ee666e","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/71fd3df5-c65d-4ade-b32a-e176c906ca5a/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.10","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["blender","addon","shrinkwrap","physics","packaging","cloth","simulation","vacuum","wrap","plastic"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8251d25a-ed34-41e4-b702-eed07c681495/","schema_version":"1.0.0"},{"id":"version_keeper","name":"Version Keeper - Premium Project Management [Before: $7.00, Now: $5.95]","tagline":"FULL plan required - upgrade to download","version":"2.0.5","type":"add-on","archive_size":19589,"archive_hash":"sha256:d4c1cfdd5a4c1b4af4581cb4fe9203ab8d4ced9ab51f48678714a16449ef875b","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/83c0a989-7b1d-4657-9c1a-0af96a578a8e/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"5.95","blender_version_min":"4.2.0","maintainer":"Re Siva","tags":["System","workflow","productivity","Utility","Interface","Organization","Asset","Management","Backup"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/b7f2f7e1-86cd-490d-9097-dd22a319d9f0/","schema_version":"1.0.0"},{"id":"vfx_scene_builder","name":"VFX Scene Builder - After Effects to Blender [Before: $9.99, Now: $8.49]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":129261,"archive_hash":"sha256:6161d5fabb72404e17e05f1dfcb71922ef9062bd1f3134a7162090623a3f8241","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/acf85984-0f08-49ba-aaaf-849ee1553c1c/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"8.49","blender_version_min":"4.2.0","maintainer":"Serhat Dönmez","tags":["VFX","Workflow","Camera","Track","CGI","after_effects","blender"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/17256fe9-432d-46eb-9245-892fad2faaf7/","schema_version":"1.0.0"},{"id":"view2cam","name":"View2Cam [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.0.1","type":"add-on","archive_size":11420,"archive_hash":"sha256:e27bdd8360c49857bf00336296af0e1363874f7711ec84199770dc42684ba0a9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/97960a97-5440-4859-b168-913fdf693ebb/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Milad Kambari","tags":["Camera","animation","movment","viewport"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/75354932-0842-48fb-a148-bda2078edd81/","schema_version":"1.0.0"},{"id":"viewport_object_finder","name":"Viewport Object Finder [Before: $2.00, Now: $1.70]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":12335,"archive_hash":"sha256:6fb559947a155ba05be51d97f7e57ff6831eb1b976903503e20833c869f23430","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/180c824a-a586-4d8b-b7db-d6e3e405bdce/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"1.70","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Object","Search","Finder","Outliner","3DView"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/9a832280-ec35-49fa-bfcc-6b97932736d3/","schema_version":"1.0.0"},{"id":"viewlink","name":"ViewSync - Viewport Navigation Sync [Before: $5.00, Now: $4.25]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":9926,"archive_hash":"sha256:bc0931eacd7c2c282e27e3747fefa76f036ec804b7ce38029f136cb220139de1","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/a4424785-0359-414d-986e-0d6dea34f3eb/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.25","blender_version_min":"4.2.0","maintainer":"PlayfulPixel","tags":["blender","viewport","navigation","sync","multimonitor","modeling","animation","workflow","camera","presentation"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/14ab582e-2794-4406-9427-af93348e7cf9/","schema_version":"1.0.0"},{"id":"VSEDAWFX","name":"VSE-DAW FX [Before: $4.99, Now: $4.24]","tagline":"FULL plan required - upgrade to download","version":"1.9.7","type":"add-on","archive_size":466900,"archive_hash":"sha256:eb835556e726cb4e92ae6a38940e657fd3e460ec5bf9261403584cd747a54d02","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/e1231647-89e7-4925-8b67-1a44dc3151d1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"4.24","blender_version_min":"4.2.0","maintainer":"Jacques Durocher","tags":["DAW","effects","audio","music","FFmpeg","compressor","mix","mastering","sound","reverb"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/dea4de69-4f56-4791-b8f7-a315f0d489c7/","schema_version":"1.0.0"},{"id":"wireframe_lens","name":"Wireframe Lens - Inspect topology without switching modes. [Before: $4.00, Now: $3.40]","tagline":"FULL plan required - upgrade to download","version":"2.3.0","type":"add-on","archive_size":13384,"archive_hash":"sha256:99c4709ad0b3ecf7afc2e71bb25a1bf8d60dbafbf48fd72ce888f4c952c4c8c9","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0f494136-21a7-4c11-8e55-899ba79d01cd/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"3.40","blender_version_min":"4.2.0","maintainer":"Salman Naseem","tags":["Mesh","3DView","Modeling","UserInterface"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/0ee85911-a0cf-471e-8534-d556ef42ef7c/","schema_version":"1.0.0"},{"id":"wk_bookart","name":"wk BookArt Addon [Before: $12.00, Now: $10.20]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":3391954,"archive_hash":"sha256:ffa35fd309f79fd2c1f6d55a2f732f20f855b047f1c3fec900d871ae4e72a457","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/5bc3a7d5-5b6c-450b-bd51-b0570f8099c1/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"10.20","blender_version_min":"4.5.0","maintainer":"Wolfram Kampffmeyer","tags":["BookArt","BookFolding","Papercraft","Pattern","SVG","CSV","Manufacturing","Layout"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8f8c5952-b13f-4a54-8684-323b3a421da3/","schema_version":"1.0.0"},{"id":"wk_facerig","name":"wk_facerig – Fast, intuitive facial animation in Blender [Before: $13.00, Now: $11.05]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":1144829,"archive_hash":"sha256:5954c8ee130e0ec355c161ff81250db8925ec8c75e451d42cf06f4ce4bbc69f0","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/c4f7c302-88e4-476c-8281-375a613e32ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"11.05","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Face_rigging","Rigging","Slidercontrol","intuitive","animation","blender","facerig","lipsync","automatic","animator"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/cd687c32-9fa6-427b-8142-49fdaad99279/","schema_version":"1.0.0"},{"id":"wk_mechanics","name":"Wk_Mechanics - Mechanical Linkage, Cam Designer & Automata [Before: $27.00, Now: $22.95]","tagline":"FULL plan required - upgrade to download","version":"0.8.0","type":"add-on","archive_size":6234341,"archive_hash":"sha256:4039181e864ab4aebb2a1ba46ca9dfb0c3db42e563ed50b9c72f2969706f4ccf","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0b59a8a2-8d24-4754-89cd-330f5cabac29/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"22.95","blender_version_min":"5.1.0","maintainer":"Wolfram Kampffmeyer","tags":["Rigging","Animation","simulation","automata","mechanics","drawingmachine","strandbeest","walker","engineering","linkages"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/904f8506-9293-426c-8c21-9a7d287a497c/","schema_version":"1.0.0"},{"id":"wk_powerpin","name":"wk_PowerPin [Before: $8.00, Now: $6.80]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":428466,"archive_hash":"sha256:6f3531a8c30c320101e009edabafa6745dea2f4de766529bfd5f159000fde0e8","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/3027755a-2542-4559-8ce4-5eb83a2cc929/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.80","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["Animation","Walkcycle","NLA","FootPinning","Baking","GraphEditor","Rigging"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/6a990ce8-1452-4050-ae7e-219aa109be34/","schema_version":"1.0.0"},{"id":"wk_workspacetools","name":"Workspace Tools Addon Presets [Before: $15.00, Now: $12.75]","tagline":"FULL plan required - upgrade to download","version":"1.2.0","type":"add-on","archive_size":307370,"archive_hash":"sha256:69942a26f934364e86bcf70a0981259d4e7ea425e8e5c78e9220297c45075b71","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/dfcae439-c3e3-4ba2-9e79-c9bbc1c19008/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"12.75","blender_version_min":"4.2.0","maintainer":"Wolfram Kampffmeyer","tags":["3d_workflow_optimization","addon_manager","addon_presets","blender_n_panel","blender_presets","custom_workspaces","freelance_tools","layout_presets","productivity_tools","workspace_manager"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/8e23b6e9-abf3-4200-8b07-fc01d4ee8443/","schema_version":"1.0.0"},{"id":"teca3d_wrap_for_blender","name":"Wrap For Blender - An Alternative To R3DS Wrap - Fitting A Base Mesh (Topology) To A Target [Before: $19.00, Now: $16.15]","tagline":"FULL plan required - upgrade to download","version":"1.0.2","type":"add-on","archive_size":26588917,"archive_hash":"sha256:c30d63a326fd39fc891fa5d6211080834bcf1f54841cec23324040faa7721081","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/7748a436-368d-4e4c-8152-4ca6579945ad/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"16.15","blender_version_min":"5.0.0","maintainer":"TECA 3D","tags":["mesh","modeling","wrap","retopology","character"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/3b628c1f-b0f3-4563-b7e1-e6da8c054d12/","schema_version":"1.0.0"},{"id":"xray_selection_pro","name":"X-Ray Selection Pro [Before: $7.99, Now: $6.79]","tagline":"FULL plan required - upgrade to download","version":"1.0.0","type":"add-on","archive_size":5532,"archive_hash":"sha256:b82c8b8e7e2354ec9af6a4b91b9696f5270645869c88cfe2d26ab7705418458a","archive_url":"https://www.blendkit.com/api/v1/assetfile-download/0f713e00-3e20-4b4b-95bd-d527e1810add/addon.zip","verification_status":"validated","can_download":"Is for sale","is_private":false,"is_free":false,"is_for_sale":true,"base_price":"6.79","blender_version_min":"4.2.0","maintainer":"Doctor Legion","tags":["xray","textures","3dalpha","opacity","instantxray","visibiliy","addons","pro","3dviewport","scene"],"license":["default_addon_license"],"website":"https://www.blendkit.com/asset-gallery-detail/7bf7d68b-bfd8-471a-bd97-e4a2d38d971d/","schema_version":"1.0.0"}],"version":"v1"} \ No newline at end of file diff --git a/scripts/addons/Animation_Layers/animation_layers_updater/Animation_Layers_updater_status.json b/scripts/addons/Animation_Layers/animation_layers_updater/Animation_Layers_updater_status.json index e486f42..eb3db3d 100644 --- a/scripts/addons/Animation_Layers/animation_layers_updater/Animation_Layers_updater_status.json +++ b/scripts/addons/Animation_Layers/animation_layers_updater/Animation_Layers_updater_status.json @@ -1,5 +1,5 @@ { - "last_check": "2026-07-14 14:42:39.577911", + "last_check": "2026-07-16 12:39:54.557568", "backup_date": "July-14-2026", "update_ready": false, "ignore": false, diff --git a/scripts/addons/Animtoolbox/TempCtrls.py b/scripts/addons/Animtoolbox/TempCtrls.py index f681539..bdf1982 100644 --- a/scripts/addons/Animtoolbox/TempCtrls.py +++ b/scripts/addons/Animtoolbox/TempCtrls.py @@ -71,7 +71,6 @@ def draw_wgt(scale, bone, shape = 'sphere'): shape = shape.lower() mesh.from_pydata(np.array(shapes[shape]['vertices'])*scale , shapes[shape]['edges'], shapes[shape]['faces']) - # print('draw shape scale ', scale) shape_obj['WGT_TempCtrl'] = True return shape_obj @@ -205,27 +204,28 @@ def tempctrl_shape_type(self, context): ctrl.custom_shape_translation = (0, 0, 0) ctrl.custom_shape_rotation_euler = (0, 0, 0) continue - - if org_bone.custom_shape_transform is not None and ctrl.custom_shape_transform is None: + + if org_bone.custom_shape_transform is not None:# and ctrl.custom_shape_transform is None: #check if the transform bone shape already exists transform_bonename = org_bone.custom_shape_transform.name if transform_bonename in ctrl.id_data.pose.bones: + # If it already exists then find it ctrl.custom_shape_transform = ctrl.id_data.pose.bones[transform_bonename] - continue - #add an extra transform bone, if it doesnt exist + else: + #add an extra transform bone, if it doesnt exist + bpy.ops.object.mode_set(mode = 'EDIT') + boneshape = add_ctrl_bone(rig, org_bone.custom_shape_transform, rig.data.edit_bones[ctrl.name].parent, '') + transform_bonename = boneshape.name + add_bone_to_collection(rig, boneshape) + bpy.ops.object.mode_set(mode = 'POSE') + rig = ctrl.id_data - bpy.ops.object.mode_set(mode = 'EDIT') - boneshape = add_ctrl_bone(rig, org_bone.custom_shape_transform, rig.data.edit_bones[ctrl.name].parent, '') - bone_name = boneshape.name - add_bone_to_collection(rig, boneshape) - bpy.ops.object.mode_set(mode = 'POSE') - posebone = rig.pose.bones[bone_name] + posebone = rig.pose.bones[transform_bonename] constraint_add(posebone, org_bone.custom_shape_transform, 'COPY_TRANSFORMS') ctrl.custom_shape_transform = posebone else: # scale = (length_avg / ctrl.length)*0.4 + 0.4 scale = 1 - # print('drawing shape in scale of ', scale) ctrl.custom_shape = draw_wgt(scale, ctrl, shape = self.shape_type) ctrl.custom_shape_scale_xyz = tuple([self.shape_size]*3) ctrl.custom_shape_transform = None @@ -1098,8 +1098,13 @@ class smartfcu: self.all_frames = self.frames self.inbetweens = [] #give only linear interpolation to all the keyframes - self.interpolations = {frame : 'LINEAR' for frame in self.frames} - + # Use defaults + interpolation = bpy.context.preferences.edit.keyframe_new_interpolation_type + handle_type = bpy.context.preferences.edit.keyframe_new_handle_type + + self.interpolations = {frame : interpolation for frame in self.frames} + self.handle_left_types = self.handle_right_types = {frame : handle_type for frame in self.frames} + def copy(self, smartfcurve, copy_fcurves = True): '''Copying the smartfcurve attribute from another one''' self.posebone = smartfcurve.posebone @@ -1385,12 +1390,8 @@ def find_smartfcus_to_copy(smartfcurve, smartfcus): if smartfcurve.frames: return -def get_bone_layers_actions(bone, actions): +def get_obj_layered_actions(obj, actions): '''get the actions from all layers''' - if not bpy.context.scene.btc.bake_layers: - return actions - - obj = bone.id_data if not obj.animation_data: return actions if not obj.animation_data.use_nla: @@ -1406,6 +1407,16 @@ def get_bone_layers_actions(bone, actions): actions.add(strip.action) return actions + +def get_bone_layers_actions(bone, actions): + '''get the actions from all layers during bake''' + if not bpy.context.scene.btc.bake_layers: + return actions + + obj = bone.id_data + actions = get_obj_layered_actions(obj, actions) + + return actions def smartbake_to_ik(context, posebones, chain, sb): @@ -1466,6 +1477,11 @@ def smartbake_to_ik(context, posebones, chain, sb): #create the fcurves and add them to smartfcurves for ctrl in ctrls: + if ctrl == chain.ik_tip and ctrl != chain.ik_ctrl: + continue + # if chain.pole_bone and ctrl == chain.base_bone: + # continue + ctrl_action = ctrl.id_data.animation_data.action path = ctrl.path_from_id() rot = Tools.rot_mode_to_channel(ctrl.rotation_mode) @@ -1523,40 +1539,57 @@ def deselect_all_fcurves(fcurves): fcurves.foreach_set('hide', array_true) fcurves.foreach_set('select', array_false) -def get_enabled_keyframes(ctrl_rig, action_frames_remove): +def get_enabled_keyframes(ctrl_rig, smartframes): '''Get all the frames where Temp Ctrls are turned off''' - + '''Need to iterate over all layers of the ctrl rig''' + if not ctrl_rig: + return action = ctrl_rig.animation_data.action - - if action in action_frames_remove: - return action_frames_remove[action] - - fcurves = Tools.get_fcurves(ctrl_rig, action) - enable_fcu = fcurves.find('animtoolbox.ctrls_enabled') + + # if action in action_frames_remove: + # return action_frames_remove[action] + actions = set() + enable_fcu = None + get_obj_layered_actions(ctrl_rig, actions) + + # Check for the enabled fcu in all layers of the ctrl rig + for action in actions: + fcurves = Tools.get_fcurves(ctrl_rig, action) + enable_fcu = fcurves.find('animtoolbox.ctrls_enabled') + if enable_fcu: + break + if not enable_fcu: return None - action_frame_range = action.frame_range - frames_remove = [] + # action_frame_range = action.frame_range + frames_enabled = [] keyframes = np.zeros(len(enable_fcu.keyframe_points)*2) enable_fcu.keyframe_points.foreach_get('co', keyframes) frames = keyframes[::2] values = keyframes[1::2] - - if values[0] == 0: - frames_remove += list(range(round(action_frame_range[0]), round(frames[0]))) - - for i in range(1, len(frames)): - if values[i-1] == 0 and values[i] == 1: - frames_remove += list(range(round(frames[i-1]), round(frames[i]))) - - if values[-1] == 0: - frames_remove += list(range(round(frames[-1]), round(action_frame_range[1]))) + + # Getting all the frames where it's turned on and off + frames_on = frames[values == 1] + frames_off = frames[values == 0] + + # Getting the ranges from when it's turned on until it's off + for frame in frames_on: + if frame in frames_enabled: + continue + if len(frames_off[frame < frames_off]): + next_off = min(frames_off[frame < frames_off]) + if next_off: + frames_enabled += list(range(int(frame), int(next_off))) + + # if the last keyframe is turned on then get the frames until the rest of the range + if max(smartframes) > max(frames_on) > max(frames_off): + frames_enabled += list(range(int(max(frames_on)), int(max(smartframes)))) - action_frames_remove.update({action : frames_remove}) + # action_frames_remove.update({action : frames_remove}) - return frames_remove + return frames_enabled def replace_rot_mode(origin_data_path, posebone): @@ -1904,7 +1937,7 @@ def smartbake_write_keyframes(scene, smartframes, smartfcus, chain = None, bake_ #Store the influence and set them to 0 before calculating the matrix without the constraint (to get the offset) con_influence = get_con_influence(constrained) - if chain: + if chain and chain.pole_bone is not None: # Adding the pole bone to the end of the list bones_matrices.update({chain.pole_bone : None}) bones_matrices[chain.pole_bone] = bones_matrices.pop(chain.pole_bone) @@ -1924,11 +1957,22 @@ def smartbake_write_keyframes(scene, smartframes, smartfcus, chain = None, bake_ else: # Get the rest of the bones to check if they are children and if we need viewlayer update bones = set(bones_matrices.keys()).difference(pasted_bones) - + # Calculating pole target matrix after other bones were calcluated if chain and bone == chain.pole_bone: - bpy.context.view_layer.update() - matrix = find_pole_vector(chain.base_bone, chain.ik_tip, chain.pole_bone, chain.step) + base_bone = chain.base_bone + ik_tip = chain.ik_tip + angle = chain.base_bone.vector.angle(chain.ik_tip.vector) + + if not round(angle): + # continue + # If the angle is flat then use the position of the pole relative to the rest position base bone + relative_matrix = base_bone.bone.matrix_local.inverted() @ chain.pole_bone.bone.matrix_local + matrix = base_bone.matrix @ relative_matrix + + else: + bpy.context.view_layer.update() + matrix = find_pole_vector(base_bone, ik_tip, chain.pole_bone, chain.step) Tools.paste_bone_matrix(bone, matrix, constrained, bones, x_filter = False) pasted_bones.add(bone) @@ -1937,10 +1981,11 @@ def smartbake_write_keyframes(scene, smartframes, smartfcus, chain = None, bake_ Tools.compatible_rotation(bone, bones_prevrot) #Add keyframes to all the fcurves of the bone + for fcu in bone_fcus[bone]: groupname = fcu.group.name if fcu.group else "" obj.keyframe_insert(fcu.data_path, index = fcu.array_index , frame = frame, group = groupname) - + #Turn the influence of the constraints back on if con_influence: for con, influence in con_influence.items(): @@ -1977,6 +2022,7 @@ def smartbake_write_keyframes(scene, smartframes, smartfcus, chain = None, bake_ key.interpolation = smartfcurve.interpolations[frame] if key.interpolation != 'BEZIER': continue + key.handle_left_type = smartfcurve.handle_left_types[frame] key.handle_right_type = smartfcurve.handle_right_types[frame] @@ -1985,6 +2031,7 @@ def smartbake_write_keyframes(scene, smartframes, smartfcus, chain = None, bake_ # print('writing keyframes time 0.7.7', time.time() - starttime) def add_interpolations(smartfcus): + #turn inbetween keyframes values to handles for smartfcurve in smartfcus.values(): fcu = smartfcurve.fcu @@ -2187,7 +2234,8 @@ def smartbake(context, org_action, posebones, ids): frame_current = scene.frame_current smartfcus = dict() smartframes = set() - action_frames_remove = dict() + ctrl_rig = None + #Use this to check if an fcurve exist also in the original action (and not just on a layer) org_action_fcus = set() transformations = ["rotation_quaternion","rotation_euler", "rotation_axis_angle", "location", "scale"] @@ -2202,10 +2250,13 @@ def smartbake(context, org_action, posebones, ids): # find_fcu = False path = posebone.path_from_id() + # Find the Ctrl Rig if 'EMPTY' in posebone.btc.setup: ctrl_rig = find_empty_ctrl(context, posebone) else: ctrl_rig = posebone.id_data.animtoolbox.controller + if not ctrl_rig: + ctrl_rig = next((item.controller for item in scene.btc.ctrl_items if item.controlled == posebone.id_data), None) actions = {org_action} get_bone_layers_actions(posebone, actions) @@ -2249,8 +2300,8 @@ def smartbake(context, org_action, posebones, ids): if ctrl_rig is None: continue - frames_remove = get_enabled_keyframes(ctrl_rig, action_frames_remove) - + # frames_remove = get_enabled_keyframes(ctrl_rig, action_frames_remove) + #Getting the Fcurve container, either action or channelbag channelbag = Tools.get_channelbag(posebone.id_data, org_action) if not channelbag: @@ -2311,6 +2362,7 @@ def smartbake(context, org_action, posebones, ids): else: #Add the fcurve if it's in the ctrl but not in the original action fcu = smartbake_add_fcurve(channelbag, origin_data_path, ctrl_fcu.array_index, posebone.name) + smartfcurve = get_smartfcurve(ctrl_fcu, smartfcus, posebone, origin_data_path, ctrl_fcu.array_index, scene.btc.smartbake) if smartfcurve : smartfcurve.fcu = fcu @@ -2325,22 +2377,26 @@ def smartbake(context, org_action, posebones, ids): for mod in ctrl_fcu.modifiers: smartfcurve.modifiers.append(mod) - #Remove frames to not include in the bake, in case of custom frame range - if frames_remove and smartfcurve: - smartframes = {frame for frame in smartframes if round(frame) not in frames_remove} - smartfcurve.frames = [frame for frame in smartfcurve.frames if round(frame) not in frames_remove] - smartfcurve.interpolations = {frame : interpolation for frame, interpolation in smartfcurve.interpolations.items() if round(frame) not in frames_remove} - #need to add the fcurves add_missing_fcurves(org_action, posebone, smartfcus) + # print('frames_remove ', frames_remove) smartframes = get_smartframes(scene, smartfcus) + frames_enabled = get_enabled_keyframes(ctrl_rig, smartframes) + # smartframes = smartframes - set(frames_remove) + # print('smartframes', smartframes) + if frames_enabled: + # Iterating instead of sets in case of sub-frames + smartframes = {frame for frame in smartframes if round(frame) in frames_enabled} + smartframes = sorted(smartframes) #write all the keyframes smartbake_write_keyframes(scene, smartframes, smartfcus, posebones = posebones) - add_interpolations(smartfcus) + btc = scene.btc + if btc.bake_range_type == 'KEYFRAMES' and btc.smartbake: + add_interpolations(smartfcus) scene.frame_set(frame_current) @@ -3442,16 +3498,12 @@ def child_prop_edit(self): child_names = remove_child_ctrls(rig, child_names) return child_ctrls - # org_obj = rig.animtoolbox.controlled - # print('org obj ', org_obj) #Add child ctrls child_names = [] for ctrl_posebone in ctrls: ctrl = rig.data.edit_bones[ctrl_posebone.name] child_ctrl = add_ctrl_bone(rig, ctrl, ctrl, 'Child_', 0.5, orient_world = self.orientation) - # child_ctrl.matrix = ctrl.matrix - # child_ctrl.length = ctrl.length * 0.5 - # bpy.context.view_layer.update() + child_ctrls.append(child_ctrl) add_bone_to_collection(rig, child_ctrl, col_name = 'Child Ctrls', visible = True) child_names.append(child_ctrl.name) @@ -4134,7 +4186,7 @@ def assign_setup_ids(self, context, ctrls, selected, child_ctrls, setup, setup_i #Assign group, color, matrix and setup ids in pose mode for ctrl, bone in zip(ctrls, selected): ctrl.matrix = get_relative_ws_matrix(bone, ctrl) - + #assign the controller to a group if bpy.app.version < (4, 0, 0): ctrl.bone_group = ctrl_group @@ -4176,6 +4228,7 @@ def assign_setup_ids(self, context, ctrls, selected, child_ctrls, setup, setup_i #get custom shape and assign the matrix if bone.custom_shape_transform and self.shape_type == 'ORIGINAL': + obj_mat = bone.id_data.matrix_world ot_bone = bone.custom_shape_transform.name #Get the original override transform bone target = bone.id_data.pose.bones[ot_bone] @@ -5310,14 +5363,16 @@ def pole_prop_edit(self, context): else: add_bone_to_collection(rig, rig.data.edit_bones[chain.base_bone.name], col_name = 'IK Ctrls', visible = True) #remove the pole bone and switch to base bone - if not hasattr(chain, 'pole_bone'): + if chain.pole_bone is None: continue rig.data.edit_bones.remove(rig.data.edit_bones[chain.pole_bone_name]) #remove from ctrls and append base bone instead if chain.pole_bone in ctrls: ctrls.remove(chain.pole_bone) ctrls.append(chain.base_bone) - del chain.pole_bone, chain.pole_bone_name + + chain.pole_bone = chain.pole_bone_name = None + # del chain.pole_bone, chain.pole_bone_name #Remove child ctrls if btc.child: @@ -5330,13 +5385,17 @@ def pole_prop_pose(self, context): if not btc.pole_target: chain.base_bone.btc.org = 'CTRL' - if not hasattr(chain, 'pole_bone'): - continue - - del chain.pole_bone - if hasattr(chain,'pole_bone_name'): - chain.pole_bone_name - continue + # if not hasattr(chain, 'pole_bone'): + # continue + if not chain.pole_bone: + continue + if not chain.pole_bone_name: + continue + chain.pole_bone = chain.pole_bone_name = None + # del chain.pole_bone + # if hasattr(chain,'pole_bone_name'): + # chain.pole_bone_name + # continue pole_posebone_update(chain, ctrls) if chain.base_bone in ctrls: @@ -5413,7 +5472,9 @@ def ik_ctrl_orientation(self, context): def pole_posebone_update(chain, ctrls): '''update pole bone properties in the pole prop and add ik prop''' - if not hasattr(chain, 'pole_bone_name'): + # if not hasattr(chain, 'pole_bone_name'): + # return + if not chain.pole_bone_name: return chain.pole_bone = rig.pose.bones[chain.pole_bone_name] @@ -5447,6 +5508,8 @@ def update_axis_prop(self, context): if not hasattr(chain, 'pole_bone_name'): continue + if not chain.pole_bone_name: + continue pole_matrix = find_pole_vector(base_bone, ik_tip, ik_tip, chain.step) #pole matrix orientation to world by default @@ -5551,15 +5614,6 @@ def add_pole_bone(self, context, rig, chain): new_rot = mathutils.Euler((0, 0, 0), 'XYZ') pole_matrix = Matrix.LocRotScale(loc, new_rot, scale) - #In case of a flat IK skip adding a pole bone and use base bone instead - # if pole_matrix.translation == chain.ik_tip.matrix.translation: - # print('no pole bone') - # self.report({'ERROR'}, "Can't add Pole Ctrl because of a flat IK chain") - # chain.pole_bone = None - # add_bone_to_collection(rig, chain.base_bone, col_name = 'IK Ctrls', visible = True) - # btc['pole_target'] = False - # return - pole_bone_name = chain.org_bones[-2].name + '_Pole' if len(chain.org_bones) > 1 else chain.org_bones[0].name + '_Pole' chain.pole_bone = rig.data.edit_bones.new(pole_bone_name) @@ -5582,7 +5636,9 @@ def pole_offset(self, context): global ik_chains, ctrls, child_names for chain in ik_chains: - if not hasattr(chain, 'pole_bone_name'): + # if not hasattr(chain, 'pole_bone_name'): + # continue + if not chain.pole_bone_name: continue chain.pole_bone = rig.pose.bones[chain.pole_bone_name] @@ -5621,7 +5677,7 @@ def add_ik_prop_edit(self, context): chain.ik_tip_name = chain.ik_tip.name #remove the pole bone - if btc.pole_target and hasattr(chain, 'pole_bone_name'): + if btc.pole_target and chain.pole_bone_name: #removing and adding the pole_target without calling the whole pole prop update ctrls.remove(chain.pole_bone) rig.data.edit_bones.remove(rig.data.edit_bones[chain.pole_bone_name]) @@ -5654,7 +5710,7 @@ def add_ik_prop_pose(self, context): chain.ik_ctrl.btc.org = 'CTRL' chain.ik_ctrl.color.palette = context.scene.btc.color_set - if btc.pole_target and hasattr(chain, 'pole_bone_name'): + if btc.pole_target and chain.pole_bone_name: #hasattr(chain, 'pole_bone_name'): pole_posebone_update(chain, ctrls) add_bone_to_collection(rig, chain.ik_ctrl, col_name = 'IK Ctrls', visible = True) @@ -5782,7 +5838,7 @@ class TempIK(bpy.types.Operator): # for ctrl in ctrls: # add_bone_to_collection(rig, ctrl, col_name = 'ORG', visible = True) chain = IK_Chain(hierarchy, ctrls, root_ctrl) - + #if only one bone is selected in the chain then add an extra control automatically if len(hierarchy) == 1: add_ik_ctrl = True @@ -5791,7 +5847,7 @@ class TempIK(bpy.types.Operator): for i, ctrl in enumerate(ctrls[:-1]): ctrls[i+1].tail = ctrl.head context.view_layer.update() - + # return {'FINISHED'} switch_layers(rig, chain.ik_tip, [31]) add_bone_to_collection(rig, chain.ik_tip) add_bone_to_collection(rig, chain.ik_ctrl, col_name = 'IK Ctrls', visible = True) @@ -5800,7 +5856,7 @@ class TempIK(bpy.types.Operator): # rig.data.collections['ORG'].is_visible = False ik_chains.append(chain) - + btc['add_ik_ctrl'] = add_ik_ctrl if add_ik_ctrl: add_ik_prop_edit(self, context) @@ -5824,8 +5880,7 @@ class TempIK(bpy.types.Operator): #################################################################### bpy.ops.object.mode_set(mode = 'POSE') - - + setup_ids = set() if btc.root: @@ -5858,20 +5913,22 @@ class TempIK(bpy.types.Operator): # #assign the matrix distance = (bone.id_data.matrix_world @ bone.bone.matrix_local).inverted() @ ctrl.bone.matrix_local.copy() ctrl.matrix = bone.id_data.matrix_world @ bone.matrix @ distance - + # context.view_layer.update() ctrl.color.palette = btc.color_set add_bone_setup_id(chain.ik_ctrl, False, setup, 'CTRL', setup_id, org_id = chain.ik_ctrl.btc.org_id) + if add_ik_ctrl: add_ik_prop_pose(self, context) - + context.view_layer.update() pole_prop_pose(self, context) + # child_prop_pose(context) if context.scene.btc.child: child_prop(context.scene.btc, context) - # return {'FINISHED'} + self.ik_chains = ik_chains tempctrl_shape_type(self, context) @@ -5885,7 +5942,7 @@ class TempIK(bpy.types.Operator): if 'ctrls' not in globals(): self.report({'INFO'},'Not available. Please update the Temp Ctrls from the addon panel') return {'CANCELLED'} - + btc = context.scene.btc controlled_objs = {item.controlled for item in context.scene.btc.ctrl_items if item.controlled} hidden_objs = {obj for obj in context.view_layer.objects if obj and obj.hide_get()} @@ -5952,7 +6009,7 @@ class TempIK(bpy.types.Operator): rig.data.edit_bones[ctrl.name].parent = rig.data.edit_bones[chain.ctrls[i+1].name] #updating the polebone position with the offset - if btc.pole_target and hasattr(chain, 'pole_bone_name'): + if btc.pole_target and chain.pole_bone_name: #hasattr(chain, 'pole_bone_name'): pole_bone = rig.data.edit_bones[chain.pole_bone_name] base_bone = rig.data.edit_bones[chain.base_bone_name] ik_tip = rig.data.edit_bones[chain.ik_tip_name] @@ -6081,7 +6138,8 @@ class TempIK(bpy.types.Operator): #add the ik constraint to the ctrls ik_con = constraint_add(chain.ik_tip, chain.ik_ctrl if not btc.child else chain.ik_child_ctrl, 'IK') - chain.pole_angle = get_pole_angle(chain.base_bone, chain.ik_tip, chain.pole_bone.matrix.translation) + if chain.pole_bone: + chain.pole_angle = get_pole_angle(chain.base_bone, chain.ik_tip, chain.pole_bone.matrix.translation) ik_con.chain_count = chain.length(btc.add_ik_ctrl) #setup the ik constraint @@ -6316,6 +6374,8 @@ class IK_Chain: self.ik_ctrl_name = self.ik_ctrl.name self.base_bone_name = self.base_bone.name self.ik_tip_name = self.ik_tip.name + self.pole_bone = None + self.pole_bone_name = None self.step = get_step(hierarchy[0].id_data) @@ -6337,7 +6397,7 @@ class IK_Chain: self.parent = rig.pose.bones[self.parent_name] if hasattr(self, 'root_name'): self.root_ctrl = rig.pose.bones[self.root_name] - if hasattr(self, 'pole_bone_name'): + if self.pole_bone_name: self.pole_bone = rig.pose.bones[self.pole_bone_name] # if hasattr(self, 'pole_bone_ref_name'): # self.pole_bone_ref = rig.pose.bones[self.pole_bone_ref_name] diff --git a/scripts/addons/Animtoolbox/Tools.py b/scripts/addons/Animtoolbox/Tools.py index ae98452..6ff9ee0 100644 --- a/scripts/addons/Animtoolbox/Tools.py +++ b/scripts/addons/Animtoolbox/Tools.py @@ -574,7 +574,12 @@ def cursor_change_post(self, context): new_matrices = [bone.matrix.copy() for bone in context.selected_pose_bones] elif context.selected_objects: new_matrices = [obj.matrix_world.copy() for obj in context.selected_objects] + else: + return + if 'last_matrices' not in globals(): + last_matrices = [] + #checking if the selection was moving and have different matrix if last_matrices != new_matrices: update_cursor_matrix(context) @@ -606,7 +611,7 @@ def cursor_change_pre(self, context): return item = selected_items[0] - if 'relative_cursor' in item: + if 'relative_cursor' in item.animtoolbox: update_cursor_matrix(context) else: assign_relative_cursor_prop(context) @@ -639,7 +644,11 @@ def update_cursor_matrix(context): else: item = context.object selected_items = context.selected_objects - + + # No Matrix All zeros + if not any (item.animtoolbox.relative_cursor): + return + # for bone in selected_bones: if len(selected_items) > 1: #multiple selection cursor is relative to the center of all the selections @@ -651,11 +660,12 @@ def update_cursor_matrix(context): item_matrix = item.matrix_world if bpy.app.version < (5, 0, 0): - relative_matrix = Matrix(item['relative_cursor']) + matrix_4x4 = item.animtoolbox.relative_cursor else: # Since Blender 5 I need to reshape the array into a matrix using numpy - matrix_4x4 = np.array(item['relative_cursor']).reshape(4, 4).T - relative_matrix = Matrix(matrix_4x4) + matrix_4x4 = np.array(item.animtoolbox.relative_cursor).reshape(4, 4).T + + relative_matrix = Matrix(matrix_4x4) cursor.matrix = item_matrix @ relative_matrix.inverted() cursor_matrix = cursor.matrix @@ -681,8 +691,11 @@ def assign_relative_matrix(context, items, prop = 'relative_cursor'): item_matrix = matrix_avg if len(items) > 1 else item_matrix matrix_dist = cursor_matrix.inverted() @ item_matrix - item[prop] = matrix_dist - + # item[prop] = matrix_dist + + # Storing the matrix in a non animated float vector property instead of ID property + item.animtoolbox.relative_cursor = np.array(matrix_dist.transposed()).flatten() # [v for row in matrix_dist for v in row] # + return matrix_dist def assign_relative_cursor_prop(context): @@ -751,7 +764,7 @@ class RelativeCursor(bpy.types.Operator): if items: #if it's a single selection and already has a cursor assigned then don't re-assign - if len(items) != 1 or 'relative_cursor' not in items[0]: + if len(items) != 1 or not hasattr (items[0].animtoolbox, 'relative_cursor' ): assign_relative_cursor_prop(context) #appending all the handlers @@ -1520,10 +1533,20 @@ def compatible_rotation(bone, bones_prevrot): '''Make sure the bone is not flipping and is compatible with previous frame rotation''' rotation_channel = rot_mode_to_channel(bone.rotation_mode) if bone in bones_prevrot: + rot = getattr(bone, rotation_channel) rot.make_compatible(bones_prevrot[bone]) bones_prevrot[bone] = getattr(bone, rotation_channel).copy() +# def compatible_matrix_rotation(prev_matrix, new_matrix): +# '''Make sure the bone is not flipping and is compatible with previous frame rotation''' +# prev_loc, prev_rot, prev_scale = prev_matrix.decompose() +# loc, rot, scale = new_matrix.decompose() +# rot.make_compatible(prev_rot) +# new_matrix = Matrix.LocRotScale(loc, rot, scale) + +# return new_matrix + class CopyMatrix(bpy.types.Operator): """Copy the matrix of the selection and store it""" bl_idname = "anim.copy_matrix" @@ -1771,7 +1794,7 @@ class CopyRelativeMatrix(bpy.types.Operator): def paste_keyframes_get_inbetweens(scene, target, inbetweens, frame, frame_range, fcu_inbetweens, locked_fcus, bones_prevrot): #Make sure the rotation is compatible with the previous rotation - compatible_rotation(target, bones_prevrot) + # compatible_rotation(target, bones_prevrot) #if autokey is turned on then add a keyframe if (scene.tool_settings.use_keyframe_insert_auto or scene.animtoolbox.range_type != 'CURRENT') and 'target' in locals(): @@ -1885,6 +1908,7 @@ def paste_bone_matrix(bone, matrix_copied, constrained, bones = {}, x_filter = T context = bpy.context if x_filter : matrix_copied = filter_matrix_properties(context, getattr(bone, matrix_attr), matrix_copied) # bone.matrix = bone.id_data.matrix_world.inverted() @ matrix_copied + # matrix_copied = compatible_matrix_rotation(getattr(bone, matrix_attr), matrix_copied) setattr(bone, matrix_attr, matrix_copied) # bone.id_data.matrix_world.inverted() @ children = set(bone.children_recursive).intersection(bones) @@ -1898,6 +1922,7 @@ def paste_bone_matrix(bone, matrix_copied, constrained, bones = {}, x_filter = T matrix_copied = reverse_bone_constraints(context, bone, matrix_copied) if x_filter : matrix_copied = filter_matrix_properties(context, bone.matrix, matrix_copied) # bone.matrix = matrix_copied + setattr(bone, matrix_attr, matrix_copied) #important to have the extra update context.view_layer.update() @@ -1907,8 +1932,16 @@ def paste_bones_matrices(bones_matrices, constrained, x_filter = True): pasted_bones = set() for bone, matrix_copied in bones_matrices.items(): #Get the rest of the bones to check if they are children of the current bone + old_rot = bone.rotation_quaternion.copy() + bones = set(bones_matrices.keys()).difference(pasted_bones) paste_bone_matrix(bone, matrix_copied, constrained, bones, x_filter) + + # Make sure rotation difference is compatible, no flipping + new_rot = bone.rotation_quaternion.copy() + new_rot.make_compatible(old_rot) + bone.rotation_quaternion = new_rot + pasted_bones.add(bone) class PasteRelativeMatrix(bpy.types.Operator): @@ -1986,6 +2019,8 @@ class PasteRelativeMatrix(bpy.types.Operator): rig_offset = rig_offset @ source_rig.matrix_world matrix_new = rig_offset @ matrix_source @ bone_matrix_dist + # matrix_new = compatible_matrix_rotation(matrix_source, matrix_new) + #Store the matrices for each bone that will use it matrix_new = reverse_childof_constraint(bone, matrix_new, constrained) @@ -2126,7 +2161,7 @@ def get_fcurves_frames(selection, fcurves, all_fcurves, frames, attr_index): # transformations = ["rotation_quaternion","rotation_euler", "rotation_axis_angle", "location", "scale"] for fcu in fcurves: - # print('fcu ', fcu) + if not bone_paths and not fcu.data_path.startswith('pose.bones'): #in case it's just an object or data all_fcurves.append(fcu) @@ -2251,7 +2286,6 @@ class ShareKeys(bpy.types.Operator): if obj.type in actions_data_types: action_data = self.add_get_action(obj.data) - # print('udating objfcurves animation data') obj_fcurves.update({obj.data: [fcu for fcu in all_fcurves if fcu.id_data == action_data]}) obj_fcurves[obj.data] = sharekeys_add_missing_fcurves(obj.data, attr_index_obj, obj_fcurves[obj.data]) diff --git a/scripts/addons/Animtoolbox/__init__.py b/scripts/addons/Animtoolbox/__init__.py index e07d74b..90dfb0d 100644 --- a/scripts/addons/Animtoolbox/__init__.py +++ b/scripts/addons/Animtoolbox/__init__.py @@ -20,7 +20,7 @@ bl_info = { "name": "AnimToolBox", "author": "Tal Hershkovich", - "version" : (0, 2, 0), + "version" : (0, 2, 6), "blender" : (3, 2, 0), "location": "View3D - Properties - Animation Panel", "description": "A set of animation tools", @@ -204,7 +204,12 @@ class AnimToolBoxObjectSettings(bpy.types.PropertyGroup): child: bpy.props.BoolProperty(name = "Child Empty", description = "Empty is marked as a child bone inside the setup", default = False, override = {'LIBRARY_OVERRIDABLE'}) keyframes_offset: bpy.props.FloatProperty(name = "Keyframes Offset", description = "Interactive slider to offset keyframes back and forth ", default = 0) - + + relative_cursor: bpy.props.FloatVectorProperty(name="Relative Cursor", size=16, options={'HIDDEN'}) + +class AnimToolBoxBoneSettings(bpy.types.PropertyGroup): + relative_cursor: bpy.props.FloatVectorProperty(name="Relative Cursor", size=16, options={'HIDDEN'}) + class IsolatedRigs(bpy.types.PropertyGroup): hidden: bpy.props.PointerProperty(name = "Hidden Rigs", description = "List of Rigs that are hidden during pose mode isolation", type=bpy.types.Object, override = {'LIBRARY_OVERRIDABLE'}) @@ -468,7 +473,7 @@ def loadanimtoolbox_post(self, context): Tools.selection_order(self, context) classes = (TempCtrlsItems, TempCtrlsOrgIds, TempCtrlsObjectSetups, TempCtrlsSceneSettings,TempCtrlsBoneSettings, MultikeyProperties, - IsolatedRigs, AnimToolBoxObjectSettings, AnimToolBoxUILayout, AnimToolBoxGlobalSettings) + ui.classes + IsolatedRigs, AnimToolBoxObjectSettings, AnimToolBoxBoneSettings, AnimToolBoxUILayout, AnimToolBoxGlobalSettings) + ui.classes addon_keymaps = [] @@ -493,9 +498,10 @@ def register(): bpy.types.Scene.btc = bpy.props.PointerProperty(type = TempCtrlsSceneSettings, override = {'LIBRARY_OVERRIDABLE'}) bpy.types.PoseBone.btc = bpy.props.PointerProperty(type = TempCtrlsBoneSettings, override = {'LIBRARY_OVERRIDABLE'}) bpy.types.Object.animtoolbox = bpy.props.PointerProperty(type = AnimToolBoxObjectSettings, override = {'LIBRARY_OVERRIDABLE'}) + bpy.types.PoseBone.animtoolbox = bpy.props.PointerProperty(type = AnimToolBoxBoneSettings, override = {'LIBRARY_OVERRIDABLE'}) bpy.types.Scene.animtoolbox = bpy.props.PointerProperty(type = AnimToolBoxGlobalSettings, override = {'LIBRARY_OVERRIDABLE'}) bpy.types.WindowManager.atb_ui = bpy.props.PointerProperty(type = AnimToolBoxUILayout, override = {'LIBRARY_OVERRIDABLE'}) - + ui.update_panel(None, bpy.context) ui.add_multikey(None, bpy.context) ui.add_riggertoolbox(None, bpy.context) @@ -554,6 +560,7 @@ def unregister(): del bpy.types.Scene.btc # del bpy.types.Bone.btc del bpy.types.Object.animtoolbox + del bpy.types.PoseBone.animtoolbox del bpy.types.Scene.animtoolbox if hasattr(bpy.types.Object, 'keyframes_offset'): del bpy.types.Object.keyframes_offset diff --git a/scripts/addons/Animtoolbox/addon_updater_ops.py b/scripts/addons/Animtoolbox/addon_updater_ops.py index 0ef6442..2e78e94 100644 --- a/scripts/addons/Animtoolbox/addon_updater_ops.py +++ b/scripts/addons/Animtoolbox/addon_updater_ops.py @@ -1374,7 +1374,8 @@ def register(bl_info): # **WARNING** Depending on the engine, this token can act like a password!! # Only provide a token if the project is *non-public*, see readme for # other considerations and suggestions from a security standpoint - updater.private_token = "glpat-js__ikigVSQ_tKWgjVn1" # "tokenstring" + # updater.private_token = "glpat-js__ikigVSQ_tKWgjVn1" # "tokenstring" + updater.private_token = "glpat-5rHfAdBG2Br3ww6H8U4vI286MQp1OjFpcXEK.01.100el42cj" # choose your own username, must match website (not needed for GitLab) updater.user = "" diff --git a/scripts/addons/Animtoolbox/animtoolbox_updater/Animtoolbox_updater_status.json b/scripts/addons/Animtoolbox/animtoolbox_updater/Animtoolbox_updater_status.json deleted file mode 100644 index 952445e..0000000 --- a/scripts/addons/Animtoolbox/animtoolbox_updater/Animtoolbox_updater_status.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "last_check": "", - "backup_date": "", - "update_ready": false, - "ignore": false, - "just_restored": false, - "just_updated": false, - "version_text": {} -} \ No newline at end of file diff --git a/scripts/addons/Animtoolbox/emp.py b/scripts/addons/Animtoolbox/emp.py index a487aef..aff17d1 100644 --- a/scripts/addons/Animtoolbox/emp.py +++ b/scripts/addons/Animtoolbox/emp.py @@ -2007,7 +2007,7 @@ def remove_draw_handlers(self): # Operator with modal and draw handler class MotionPathOperator(bpy.types.Operator): - """Creates a custom motion path""" + """Creates an editable motion path, Ctrl click to refresh""" bl_idname = "object.motion_path_operator" bl_label = "Motion Path Operator" bl_options = {'REGISTER', 'UNDO'} @@ -2028,10 +2028,15 @@ class MotionPathOperator(bpy.types.Operator): scene = context.scene emp = scene.emp + emp.refresh = False if emp.motion_path: - emp.motion_path = False + if event.ctrl: + # Refresh the motion path + emp.refresh = True + else: + emp.motion_path = False return {'CANCELLED'} - + if context.selected_pose_bones is None and context.selected_objects is None: emp.motion_path = False return {'CANCELLED'} @@ -2237,9 +2242,6 @@ class MotionPathOperator(bpy.types.Operator): #return negative frame range to what it was if context.preferences.edit.use_negative_frames != nfr: context.preferences.edit.use_negative_frames = nfr - - #assign the draw handler - context.window_manager.modal_handler_add(self) #If overlays are turned off then skip drawing if self.mp_vis: @@ -2255,6 +2257,9 @@ class MotionPathOperator(bpy.types.Operator): self.area.tag_redraw() # Tools.redraw_areas(['VIEW_3D']) + #assign the draw handler + context.window_manager.modal_handler_add(self) + bpy.ops.ed.undo_push(message = 'Initialize Motion Path') return {'RUNNING_MODAL'} @@ -2279,6 +2284,11 @@ class MotionPathOperator(bpy.types.Operator): if not emp.motion_path: quit_mp(self, context) return {'FINISHED'} + + if emp.refresh: + get_mp_points(self, context) + emp.refresh = False + return {'PASS_THROUGH'} if not self.mp_vis: check_mp_vis_on(self, context) @@ -4864,6 +4874,8 @@ def disbale_non_smooth(self, context): class EditableMotionPathSettings(bpy.types.PropertyGroup): '''All the settings for Editable motion path''' motion_path: bpy.props.BoolProperty(name = "Motion Path", description = "Flag when Motion Path is on", default = False, override = {'LIBRARY_OVERRIDABLE'}) + refresh: bpy.props.BoolProperty(name = "Refresh Motion Path", description = "Refresh the motion paths with hotkey ctrl", default = False, override = {'LIBRARY_OVERRIDABLE'}) + settings: bpy.props.BoolProperty(name = "Motion Path Settings", description = "Open the settings Menu", default = False, override = {'LIBRARY_OVERRIDABLE'}) # mp_keyframe_scale: bpy.props.FloatProperty(name = "Scale Selecgted Keyframes Bounding Box", description = "Change the scale of the bounding box around the selected keyframes ", default = 0.1, step = 0.1, precision = 3) color_before: bpy.props.FloatVectorProperty(name="Motion Path Before Color", subtype='COLOR', default=(1.0, 0.0, 0.0), min=0.0, max=1.0, description="Motion path color before the current frame", update=update_prop_callback) diff --git a/scripts/addons/SimpleBake/__init__.py b/scripts/addons/SimpleBake/__init__.py new file mode 100644 index 0000000..e2c9a88 --- /dev/null +++ b/scripts/addons/SimpleBake/__init__.py @@ -0,0 +1,126 @@ +bl_info = { + "name": "SimpleBake", + "author": "Lewis ", + "version": (2, 8, 4), + "blender": (5, 0, 0), + "location": "Properties Panel -> Render Settings Tab", + "description": "Simple baking of PBR and other textures", + "warning": "", + "wiki_url": "", + "tracker_url": "", + "category": "Object", +} + + +import bpy +from bpy.utils import register_class, unregister_class + +from . import object_preperation +from . import image_management +from . import material_management +from . import external_save +from . import property_group +from . import uv_management +from . import copy_and_apply +from . import starting_checks +from . import utils +from . import background_and_progress +from . import channel_packing +from . import cleanup +try: + from . import auto_update +except: + auto_update = None +from . import presets +from . import presets_local +from . import sketchfab_upload +from . import messages +from . import auto_cage +from . import aov +from . import preview_operators + +from . import ui +from . import bake_operators + +import platform +import sys + +if auto_update != None: + from .auto_update import VersionControl +else: + VersionControl = None + + + + +classes = ([ + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + + object_preperation.register() + image_management.register() + material_management.register() + external_save.register() + property_group.register() + ui.register() + uv_management.register() + copy_and_apply.register() + bake_operators.register() + starting_checks.register() + utils.register() + background_and_progress.register() + channel_packing.register() + if auto_update!=None: + auto_update.register() + presets.register() + presets_local.register() + sketchfab_upload.register() + messages.register() + auto_cage.register() + cleanup.register() + aov.register() + preview_operators.register() + + prefs = bpy.context.preferences.addons[__package__].preferences + + version = bl_info["version"] + if VersionControl != None: + VersionControl.installed_version = version + no_online_check = False + if prefs.no_update_check: + no_online_check = True + VersionControl.check_at_current_version(no_online_check) + + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) + + object_preperation.unregister() + image_management.unregister() + material_management.unregister() + external_save.unregister() + property_group.unregister() + ui.unregister() + uv_management.unregister() + copy_and_apply.unregister() + bake_operators.unregister() + starting_checks.unregister() + utils.unregister() + background_and_progress.unregister() + channel_packing.unregister() + if auto_update != None: + auto_update.unregister() + presets.unregister() + presets_local.unregister() + sketchfab_upload.unregister() + messages.unregister() + auto_cage.unregister() + cleanup.unregister() + aov.unregister() + preview_operators.unregister() diff --git a/scripts/addons/SimpleBake/aov.py b/scripts/addons/SimpleBake/aov.py new file mode 100644 index 0000000..d697657 --- /dev/null +++ b/scripts/addons/SimpleBake/aov.py @@ -0,0 +1,166 @@ +import bpy +from .utils import SBConstants, blender_default_colorspace#, get_cs_list +from .messages import print_message + +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, IntProperty, BoolProperty + +def get_aov_name(context, num): + sbp = context.scene.SimpleBake_Props + aov_collection = sbp.aov_items + + num = str(num) + num = int(num.replace(f"{SBConstants.PBRAOVS}_", "")) + + for aov in aov_collection: + if aov.aov_number == num: + return aov.name + print_message(context, "ERROR: Could not find AOV when looking for AOV name") + return False + +def get_aov_number(context, name): + sbp = context.scene.SimpleBake_Props + aov_collection = sbp.aov_items + + for aov in aov_collection: + if aov.name == name: + return aov.aov_number + + return False + +def get_aov_colspace(context, name): + sbp = context.scene.SimpleBake_Props + aov_collection = sbp.aov_items + + num = int(name.replace(f"{SBConstants.PBRAOVS}_", "")) + + for aov in aov_collection: + if aov.aov_number == num: + return aov.cs + print_message(context, "ERROR: Could not find AOV when looking for Color Space") + return False + +def get_aov_type(context, name): + sbp = context.scene.SimpleBake_Props + aov_collection = sbp.aov_items + + num = int(name.replace(f"{SBConstants.PBRAOVS}_", "")) + + for aov in aov_collection: + if aov.aov_number == num: + return aov.aov_type + print_message(context, "ERROR: Could not find AOV when looking for Type") + return False + +def get_list_enabled_aov_names(context): + sbp = context.scene.SimpleBake_Props + aov_collection = sbp.aov_items + + names = [] + + for i in aov_collection: + if i.enabled: + names.append(i.name) + + return names + + + +class SimpleBake_OT_RefreshAOVList(bpy.types.Operator): + bl_idname = "simplebake.refresh_aov_list" + bl_label = "Refresh AOV List" + bl_description = "Scan objects in bake objects list for AOV Output nodes and update the AOV list" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + aov_collection = sbp.aov_items + + #So we can renable them at the emd + original_state = [[i.name, i.cs, i.enabled] for i in aov_collection] + + # Clear existing list + aov_collection.clear() + + aov_names = [] #Really only used to check for duplicates + + obj_names = [i.obj_point.name for i in sbp.objects_list] + + #As always, declas is an annoying excpetion + if sbp.s2a_opmode == 'decals' and sbp.targetobj!=None: + obj_names.append(sbp.targetobj.name) + + + for obj_name in obj_names: + obj = bpy.data.objects.get(obj_name) + if not obj: + continue + + for slot in obj.material_slots: + mat = slot.material + if not mat or not mat.use_nodes: + continue + + node_trees = [] + node_trees.append(mat.node_tree) + + for node_tree in node_trees: + if not hasattr(node_tree, "nodes"): + continue #Avoiding error reported on Discord. Not sure how this happens + + for node in node_tree.nodes: + + if node.bl_idname == "ShaderNodeGroup": + node_trees.append(node.node_tree) + + elif node.bl_idname == "ShaderNodeOutputAOV": + if len(node.inputs['Color'].links)>0 or len(node.inputs['Value'].links)>0: + aov_name = node.aov_name + if aov_name not in aov_names: # avoid duplicates + aov_names.append(aov_name) + + #Get the CS names only so we can find the index later + #cs_list = [i[0] for i in get_cs_list(self, context)] + + item = aov_collection.add() + item.name = aov_name + item.enabled = False + item.aov_number = (aov_names.index(aov_name)+1) + if len(node.inputs['Color'].links)>0: + item.aov_type = "C" + #item.cs = "s#RGB" + item.cs = blender_default_colorspace(float_buffer=False, col=True)[1] + else: + item.aov_type = "V" + #item.cs = "Non#-Color" + item.cs = blender_default_colorspace(float_buffer=False, col=False)[1] + item.object_name = obj_name + item.mat_name = mat.name + + + #Renable if originally enabled + for i in aov_collection: + for o in original_state: + name = o[0] + if i.name == name: + i.cs=o[1] + i.enabled = o[2] + + + + return {'FINISHED'} + + +classes = ([ + SimpleBake_OT_RefreshAOVList + ]) +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/auto_cage.py b/scripts/addons/SimpleBake/auto_cage.py new file mode 100644 index 0000000..6d13260 --- /dev/null +++ b/scripts/addons/SimpleBake/auto_cage.py @@ -0,0 +1,287 @@ +import bpy +from bpy.types import Operator +from bpy.utils import register_class, unregister_class +from bpy.props import StringProperty + +from .utils import select_only_this + + +AUTO_CAGE_TARGET_HIDDEN_MESSAGE = ( + "Auto-generate cage requires the target object to be visible in the current viewport. " + "Unhide the target object first." +) + + +def target_is_visible(context, obj): + return obj is not None and obj.name in context.view_layer.objects and obj.visible_get() + + +def get_auto_cage_target(context, target_name=""): + sbp = context.scene.SimpleBake_Props + if target_name: + return context.scene.objects.get(target_name) + if sbp.global_mode == "PBR": + return sbp.targetobj + if sbp.global_mode == "CyclesBake": + return sbp.targetobj_cycles + return None + + +def auto_cage_poll_message(cls, message): + if hasattr(cls, "poll_message_set"): + cls.poll_message_set(message) + + +def set_parent(context, child_name, parent_name): + """ + Sets the parent of the specified child object to the specified parent object. + + :param child_name: The name of the child object. + :param parent_name: The name of the parent object. + """ + # Get the child and parent objects + child = context.scene.objects.get(child_name) + parent = context.scene.objects.get(parent_name) + + # Check if both objects exist + if child is None: + print(f"Child object '{child_name}' not found.") + return + if parent is None: + print(f"Parent object '{parent_name}' not found.") + return + + original_matrix = child.matrix_world.copy() + + # Set the parent + child.parent = parent + + child.matrix_parent_inverse = parent.matrix_world.inverted() + child.matrix_world = original_matrix + +# Function to duplicate an object and apply all modifiers +def duplicate_and_apply_modifiers(context, obj_name): + obj = context.scene.objects.get(obj_name) + if obj is None: + print(f"Object '{obj_name}' not found") + return None + + # Duplicate the object + bpy.ops.object.select_all(action='DESELECT') + obj.select_set(True) + context.view_layer.objects.active = obj + bpy.ops.object.duplicate() + + new_obj = context.view_layer.objects.active + new_obj.name = f"{obj_name}_cage" + new_obj["SB_bake_operation_id"] = "Blah" + + #new_obj.location = obj.location.copy() + #new_obj.rotation_euler = obj.rotation_euler.copy() + #new_obj.scale = obj.scale.copy() + + # Apply all modifiers + for modifier in new_obj.modifiers: + try: + bpy.ops.object.modifier_apply(modifier=modifier.name) + except: + new_obj.modifiers.remove(modifier) + + new_obj.hide_select = True + + return new_obj.name + +# Function to remove all materials from an object +def remove_all_materials(obj): + obj.data.materials.clear() + +# Function to add a new material to an object and set its viewport color +def add_new_material(obj, mat_name, color, alpha): + # Create a new material + mat = bpy.data.materials.new(name=mat_name) + + # Set the diffuse color + mat.diffuse_color = (color[0], color[1], color[2], alpha) + mat.use_nodes = True + + if (pnode:= mat.node_tree.nodes.get("Principled BSDF")): + pnode.inputs["Base Color"].default_value = (color[0], color[1], color[2], alpha) + pnode.inputs["Alpha"].default_value = 0.5 + + # Assign the material to the object + obj.data.materials.append(mat) + + # Set Viewport Display color + obj.color = (color[0], color[1], color[2], alpha) + obj.show_transparent = True + +# Function to add a displacement modifier to an object +def add_displacement_modifier(obj): + displace = obj.modifiers.new(name='Displace', type='DISPLACE') + displace.texture = None # Set the texture to None + displace.mid_level = 1 # Set the midlevel to 1 + displace.name = "SB_AUTO_CAGE" + + + +class SimpleBake_OT_Auto_Cage(Operator): + bl_idname = "simplebake.auto_cage" + bl_label = "Auto-Cage" + bl_description = "Automatically create a cage object for the selected target object. The target must be visible and Blender must be in Object Mode" + + target_name: StringProperty() + + @classmethod + def poll(cls, context): + if context.mode != "OBJECT": + auto_cage_poll_message(cls, "Auto-generate cage is only available in Object Mode") + return False + + sbp = context.scene.SimpleBake_Props + if sbp.global_mode == "PBR": + if sbp.targetobj == None: + auto_cage_poll_message(cls, "Choose a target object before generating an auto cage") + return False + if sbp.targetobj.type != "MESH": + auto_cage_poll_message(cls, "Auto-generate cage requires a mesh target object") + return False + if sbp.targetobj.name not in context.view_layer.objects: + auto_cage_poll_message(cls, "The target object is not in the current view layer") + return False + if not target_is_visible(context, sbp.targetobj): + auto_cage_poll_message(cls, AUTO_CAGE_TARGET_HIDDEN_MESSAGE) + return False + + #Is there already an auto cage object? + t = [o.name for o in context.scene.objects if "SB_auto_cage" in o and o["SB_auto_cage"] == sbp.targetobj.name] + if len(t) > 0: + auto_cage_poll_message(cls, "An auto-generated cage already exists for this target object") + return False + + elif sbp.global_mode == "CyclesBake": + if sbp.targetobj_cycles == None: + auto_cage_poll_message(cls, "Choose a target object before generating an auto cage") + return False + if sbp.targetobj_cycles.type != "MESH": + auto_cage_poll_message(cls, "Auto-generate cage requires a mesh target object") + return False + if sbp.targetobj_cycles.name not in context.view_layer.objects: + auto_cage_poll_message(cls, "The target object is not in the current view layer") + return False + if not target_is_visible(context, sbp.targetobj_cycles): + auto_cage_poll_message(cls, AUTO_CAGE_TARGET_HIDDEN_MESSAGE) + return False + + #Is there already an auto cage object? + t = [o.name for o in context.scene.objects if "SB_auto_cage" in o and o["SB_auto_cage"] == sbp.targetobj_cycles.name] + if len(t) > 0: + auto_cage_poll_message(cls, "An auto-generated cage already exists for this target object") + return False + + return True + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + target_obj = get_auto_cage_target(context, self.target_name) + if not target_is_visible(context, target_obj): + self.report({'ERROR'}, AUTO_CAGE_TARGET_HIDDEN_MESSAGE) + return {'CANCELLED'} + + # Main script + if self.target_name != "": + obj_name = self.target_name + elif sbp.global_mode == "PBR" and sbp.targetobj != None: + obj_name = sbp.targetobj.name + elif sbp.global_mode == "CyclesBake" and sbp.targetobj_cycles != None: + obj_name = sbp.targetobj_cycles.name + else: + #Something has gone very wrong + return {'CANCELLED'} + + new_obj_name = duplicate_and_apply_modifiers(context, obj_name) + if new_obj_name: + new_obj = context.scene.objects.get(new_obj_name) + remove_all_materials(new_obj) + add_new_material(new_obj, 'SB_Cage_Mat', (1.0, 0.0, 0.0), 0.5) # Red color with 50% alpha + add_displacement_modifier(new_obj) + set_parent(context, new_obj_name, obj_name) + new_obj["SB_auto_cage"] = obj_name + + context.scene.render.bake.cage_object = new_obj + + #Return selection to the actual target object + select_only_this(context, context.scene.objects.get(obj_name)) + + + + return {'FINISHED'} + +class SimpleBake_OT_Remove_Auto_Cage(Operator): + bl_idname = "simplebake.remove_auto_cage" + bl_label = "Remove Auto-Cage Object *for selected Target Object*" + bl_description = "Remove automatically created cage object *for selected Target Object*. Must be in object mode to run" + + target_name: StringProperty() + + @classmethod + def poll(cls, context): + if context.mode != "OBJECT": + return False + + sbp = context.scene.SimpleBake_Props + to_name = "" + if sbp.global_mode == "PBR": + if sbp.targetobj == None: return False + if sbp.targetobj.type != "MESH": return False + if sbp.targetobj.name not in context.view_layer.objects: return False + to_name = sbp.targetobj.name + elif sbp.global_mode == "CyclesBake": + if sbp.targetobj_cycles == None: return False + if sbp.targetobj_cycles.type != "MESH": return False + if sbp.targetobj_cycles.name not in context.view_layer.objects: return False + to_name = sbp.targetobj_cycles.name + + #Make sure there is a cage object to remove + t = [o.name for o in context.scene.objects if "SB_auto_cage" in o and o["SB_auto_cage"] == to_name] + if len(t) == 0: + return False + + return True + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + if self.target_name != "": + obj_name = self.target_name + elif sbp.global_mode == "PBR" and sbp.targetobj != None: + obj_name = sbp.targetobj.name + elif sbp.global_mode == "CyclesBake" and sbp.targetobj_cycles != None: + obj_name = sbp.targetobj_cycles.name + else: + #Something has gone very wrong + return {'CANCELLED'} + + to_remove = [o.name for o in context.scene.objects if "SB_auto_cage" in o and o["SB_auto_cage"] == obj_name] + for o_name in to_remove: + o = context.scene.objects.get(o_name) + if o != None: + bpy.data.objects.remove(o) + return {'FINISHED'} + +classes = ([ + SimpleBake_OT_Auto_Cage, + SimpleBake_OT_Remove_Auto_Cage + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/auto_update.py b/scripts/addons/SimpleBake/auto_update.py new file mode 100644 index 0000000..ff77908 --- /dev/null +++ b/scripts/addons/SimpleBake/auto_update.py @@ -0,0 +1,200 @@ +import bpy +from urllib.request import urlopen +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +import base64 +from pathlib import Path +import os +import urllib.request +import shutil + +from .utils import show_message_box +from .messages import print_message + +def ignore_delete_errors(func, path, exc_info): + # This function is called when shutil.rmtree hits an error. + # Just ignore the error and move on. + print(f"Could not delete {path}. Ignoring. Reason: {exc_info[1]}") + + +class VersionControl: + #Non-Blender class + was_error = False + at_current = True + installed_version = False #Will be set by init - Tuple + installed_version_str = "" + current_version_str = "" + just_updated = False + + @classmethod + def check_at_current_version(cls, no_online_check): + iv = cls.installed_version + iv = str(iv[0]) + str(iv[1]) + str(iv[2]) + iv = int(iv) + + #For use in the panel + cls.installed_version_str = str(cls.installed_version).replace(",",".").replace(")","").replace("(","") + + #If we aren't checking online, wrap it up here + if no_online_check: + return True + + + #Grab the most recent version from my website + link = "http://www.toohey.co.uk/SimpleBake/currentversion4" + + cver = 0 + try: + f = urlopen(link, timeout=5) + cver = f.read() + cver = cver.decode("utf-8") + cls.current_version_str = cver + cver = cver.replace(".","") + cver = int(cver) + + except Exception as e: + cls.was_error = True + print_message(bpy.context, "Unable to check for latest version of SimpleBake - are you online?", screen=False) + cver = iv + print_message(bpy.context, str(e), screen=False) + + if cver > iv: + cls.at_current = False + print_message(bpy.context, "There is a newer version of SimpleBake available", screen=False) + else: + cls.at_current = True + print_message(bpy.context, "Your copy of SimpleBake is up to date", screen=False) + +class SimpleBake_OT_Auto_Update(Operator): + """Download and install updated version of SimpleBake""" + bl_idname = "simplebake.auto_update" + bl_label = "Update" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + try: + #Current ver URL + current_ver_url = base64.b64decode("aHR0cDovL3d3dy50b29oZXkuY28udWsvU2ltcGxlQmFrZS9TaW1wbGVCYWtlX0N1cnJlbnQ0LnppcA==").decode("utf-8") + current_ver_zip_name = "SimpleBake_Curent4.zip" + addon_dir_name = "SimpleBake" + + import zipfile #only needed here + + #Get the path where the addons are kept + #if bpy.utils.script_path_pref() != None: + #addons_path = Path(bpy.utils.script_path_pref()) + #else: + #addons_path = Path(bpy.utils.script_path_user()) + #addons_path = addons_path / "addons" + + #Get the addons folder (alternative method) + addons_path = Path(os.path.dirname(__file__)).parents[0] + print_message(context, f"Addons folder: {addons_path}") + + #Make our current directory the addons directory + os.chdir(str(addons_path)) + + #Download new SimbleBake_Current.zip to addons folder + print_message(context, "Starting download") + urllib.request.urlretrieve(current_ver_url, current_ver_zip_name) + current_ver_zip_name = "SimpleBake_Curent4.zip" + print_message(context, "Download complete") + + #Delete current SimpleBake folder + addon_dir = addons_path / addon_dir_name + shutil.rmtree(str(addon_dir), onerror=ignore_delete_errors) + + #Unzip + current_ver_zip = zipfile.ZipFile(current_ver_zip_name, "r") + current_ver_zip.extractall() + current_ver_zip.close() + + #Delete the zip file we downlaoded + downloaded_zip = addons_path / current_ver_zip_name + downloaded_zip.unlink() + + #Report + message_lines = ["SimpleBake update complete", "Please restart Blender"] + show_message_box(context, message_lines, "Update complete", icon = 'INFO') + print_message(context, "Update complete. Please restart Blender") + + VersionControl.just_updated = True + + return {'FINISHED'} + + except Exception as e: + print_message(context, str(e)) + return {'CANCELLED'} + +class SimpleBake_OT_Rollback_Update(Operator): + """Download and install previous version of SimpleBake""" + bl_idname = "simplebake.rollback_update" + bl_label = "Rollback" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + try: + #Current ver URL + current_ver_url = base64.b64decode("aHR0cDovL3d3dy50b29oZXkuY28udWsvU2ltcGxlQmFrZS9TaW1wbGVCYWtlX1ByZXZpb3VzNC56aXA=").decode("utf-8") + current_ver_zip_name = "SimpleBake_Previous4.zip" + addon_dir_name = "SimpleBake" + + import zipfile #only needed here + + #Get the addons folder (alternative method) + addons_path = Path(os.path.dirname(__file__)).parents[0] + print_message(context, f"Addons folder: {addons_path}") + + #Make our current directory the addons directory + os.chdir(str(addons_path)) + + #Download new SimbleBake_Current.zip to addons folder + print_message(context, "Starting download") + urllib.request.urlretrieve(current_ver_url, current_ver_zip_name) + print_message(context, "Download complete") + + #Delete current SimpleBake folder + addon_dir = addons_path / addon_dir_name + shutil.rmtree(str(addon_dir), onerror=ignore_delete_errors) + + #Unzip + current_ver_zip = zipfile.ZipFile(current_ver_zip_name, "r") + current_ver_zip.extractall() + current_ver_zip.close() + + #Delete the zip file we downlaoded + downloaded_zip = addons_path / current_ver_zip_name + downloaded_zip.unlink() + + #Report + message_lines = ["SimpleBake rollback complete", "Please restart Blender"] + show_message_box(context, message_lines, "Rollback complete", icon = 'INFO') + print_message(context, "Rollback complete. Please restart Blender") + + VersionControl.just_updated = True + + return {'FINISHED'} + + except Exception as e: + print_message(context, str(e)) + return {'CANCELLED'} + + + +classes = ([ + SimpleBake_OT_Auto_Update, + SimpleBake_OT_Rollback_Update + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) + diff --git a/scripts/addons/SimpleBake/background_and_progress.py b/scripts/addons/SimpleBake/background_and_progress.py new file mode 100644 index 0000000..66b6b9d --- /dev/null +++ b/scripts/addons/SimpleBake/background_and_progress.py @@ -0,0 +1,514 @@ +import bpy +from bpy.props import StringProperty, BoolProperty, IntProperty +from bpy.utils import register_class, unregister_class +from bpy.types import Operator + +import os, signal +import uuid +import tempfile +import subprocess +import sys +from pathlib import Path + +from .utils import show_message_box, force_to_object_mode, SBConstants, pbr_selections_to_list, specials_selection_to_list +#from .messages import print_message + +class BakeInProgress: + is_baking = False + was_error = False + + class Sequence: + """State for an image-sequence bake in progress. + + The image_sequence operator is the sole writer of these flags. All + other modules must consume them via ``should_run_setup`` / + ``should_run_teardown`` rather than reading the booleans directly, + so that "first-frame" / "last-frame" / "not-a-sequence" semantics + stay in one place. + """ + + active = False # True while a sequence bake is running + is_first_frame = False # True during the bake of the first frame + is_last_frame = False # True during the bake of the final frame + total_frames = 0 # Number of frames covered by the sequence + + @classmethod + def should_run_setup(cls): + """Per-frame operators that do one-shot setup (master backup, + material initialise) should only run on the first frame of a + sequence — or on every bake if we're not in a sequence at all. + """ + return (not cls.active) or cls.is_first_frame + + @classmethod + def should_run_teardown(cls): + """Per-frame operators that do one-shot teardown (master + restore, copy-and-apply, S2A hide, completion report, mesh + export) should only run on the final frame of a sequence — + or on every bake if we're not in a sequence at all. + """ + return (not cls.active) or cls.is_last_frame + + @classmethod + def reset(cls): + cls.active = False + cls.is_first_frame = False + cls.is_last_frame = False + cls.total_frames = 0 + + @classmethod + def reset(cls): + cls.is_baking = False + cls.was_error = False + cls.Sequence.reset() + + +class BackgroundBakeTasks: + #Non-blender class. BG bake task + + active_tasks = [] + completed_tasks = [] + queued_tasks = [] + + @classmethod + def get_completed_or_active_bgt_by_pid(cls, pid): + pid = int(pid) + + match = [t for t in cls.completed_tasks if t.pid == pid] + if len(match) == 0: + match = [t for t in cls.active_tasks if t.pid == pid] + assert(len(match)>0) + match = match[0] + + return match + + @classmethod + def get_queued_bgt_by_id(cls, id): + match = [t for t in cls.queued_tasks if t.id == id] + assert(len(match) == 1) + match = match[0] + + return match + + @classmethod + def get_bgbake_status(cls, active_bgbake): + sbp = bpy.context.scene.SimpleBake_Props + pid = active_bgbake.pid + path = Path(sbp.bgbake_temp_dir) / "progress" / str(pid) + + try: + with open(str(path), "r") as progfile: + progress = int(progfile.readline()) + except: + #No file yet, as no bake operation has completed yet. Holding message + progress = 0 + + active_bgbake.progress = progress + + if progress == 100: + cls.completed_tasks.append(active_bgbake) + cls.active_tasks.remove(active_bgbake) + cls.next_please() + + return progress + + @classmethod + def next_please(cls): + if len(cls.active_tasks) == 0 and len(cls.queued_tasks) > 0: + t = cls.queued_tasks[0] + cls.active_tasks.append(t) + cls.queued_tasks.remove(t) + t.spawn_bg_process() + return 2 + + elif len(cls.active_tasks) == 0 and len(cls.queued_tasks) == 0: + #Nothing happening, kill timer + return None + + else: + if len(cls.active_tasks)>0: # Just in case + active_bgt = cls.active_tasks[0] + cls.get_bgbake_status(active_bgt) + return 2 + + def save_file_copy(self): + sbp = bpy.context.scene.SimpleBake_Props + unique_id = str(uuid.uuid4())[0:7] + tmp_dir_path = Path(sbp.bgbake_temp_dir) + if not os.path.exists(str(tmp_dir_path)): + os.makedirs(str(tmp_dir_path)) + + save_path = tmp_dir_path / (unique_id + ".blend") + + #Pack dirty images or we lose them on save + [i.pack() for i in bpy.data.images if i.is_dirty] + + bpy.ops.wm.save_as_mainfile(filepath=str(save_path), check_existing=False, copy=True) + self.initial_save_path = save_path + + return True + + def spawn_bg_process(self): + sbp = bpy.context.scene.SimpleBake_Props + tmp_dir_path = sbp.bgbake_temp_dir #Already posix path + base_folder_override = Path(bpy.data.filepath).parent.as_posix() + + args = [bpy.app.binary_path] + if not sbp.fake_background: + args.append("--background") + #args.append("--factory-startup") + args.append(str(self.initial_save_path)) + args.append("--python-expr") + args.append(f""" +import bpy; +import os; +from pathlib import Path; +prefs = bpy.context.preferences; +bpy.ops.preferences.addon_enable(module='SimpleBake'); +allowed_addons = ['io_anim_bvh', 'io_curve_svg', 'io_mesh_uv_layout', 'io_scene_fbx', 'io_scene_gltf2', 'cycles', 'pose_library', 'bl_pkg', 'SimpleBake']; +for addon in prefs.addons.keys(): + if addon not in allowed_addons: + try: + bpy.ops.preferences.addon_disable(module=addon) + print(f"Disabled " + addon) + except: + print(f"Error when disabling addon " + addon) +orig_file_path = bpy.data.filepath; +savepath=str(Path('{tmp_dir_path}') / (str(os.getpid()) + '.blend')); +bpy.ops.wm.save_as_mainfile(filepath=str(savepath), check_existing=False); +os.remove(orig_file_path); +bpy.context.scene.SimpleBake_Props.bgbake_temp_dir = '{tmp_dir_path}'; +bpy.context.scene.SimpleBake_Props.base_folder_override = '{base_folder_override}'; +{self.start_command}; +""") + process = subprocess.Popen(args, shell=False) + + self.pid = process.pid + self.file_path_po = Path(tmp_dir_path) / (str(process.pid) + ".blend") + + + return True + + def __init__(self, name, copy_and_apply, start_command, bg_bake_id): + sbp = bpy.context.scene.SimpleBake_Props + + #Check for queued that need promotion + bpy.app.timers.register(BackgroundBakeTasks.next_please, first_interval=2) + + # #If this is some kind of PBR bake, run the pre-bake now + # master_switch = "P" if sbp.global_mode == "PBR" else "C" + # need = (True if ("pbr" in start_command) or + # ("automatch" in start_command and master_switch == "P") or + # ("decals" in start_command) + # else False) + # if need: + # bpy.ops.simplebake.pbr_pre_bake() + + + self.start_command = start_command + self.save_file_copy() + self.progress = 0 + if name == "": name = "Untitled" + self.name = name + self.copy_and_apply = copy_and_apply + self.bg_bake_id = bg_bake_id + self.pid = 0 + self.id = str(uuid.uuid4()) + + # #Restore materials in the foreground file + # bpy.ops.simplebake.material_backup(mode="master_restore") + + #Assume queued for now + self.__class__.queued_tasks.append(self) + + #print_message(context, "BG bake task created") + +class SimpleBake_OT_Import_BGBake(Operator): + """Import baked textures and objects from the background""" + bl_idname = "simplebake.import_bgbake" + bl_label = "Import" + + pid: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + bgt = BackgroundBakeTasks.get_completed_or_active_bgt_by_pid(self.pid) + + if not force_to_object_mode(context): + return {'CANCELLED'} + + b_img_names = [i.name for i in bpy.data.images] + b_obj_names = [o.name for o in context.scene.objects] + + bg_blend_path = str(Path(sbp.bgbake_temp_dir) / (self.pid + ".blend")) + + if bgt.copy_and_apply: + # Import objects + images together via collection append + savepath = bg_blend_path + "/Collection/" + bpy.ops.wm.append(filename="SimpleBake_Bakes_Background", directory=savepath, + use_recursive=False, active_collection=False) + + sbc = bpy.data.collections["SimpleBake_Bakes_Background"] + sbc.name = "SimpleBake_Bakes" + + # Relocate, as append leaves it in a funny place + context.scene.collection.children.link(sbc) + del_list = [] + for c in bpy.data.collections: + if sbc.name in c.children: + c.children.unlink(sbc) + if len(c.children) == 0: + del_list.append(c.name) + for name in del_list: + c = bpy.data.collections.get(name) + if c is not None: + bpy.data.collections.remove(c) + else: + # Import images directly — no need to append objects just to delete them + replaced_names = set() + with bpy.data.libraries.load(bg_blend_path, link=False) as (data_from, data_to): + intended_names = list(data_from.images) + data_to.images = list(data_from.images) + # data_to.images[i] corresponds to intended_names[i]. + # If the loaded image's name differs from its intended name, Blender renamed + # it due to a conflict with an existing foreground image. We compare by + # intended name (not by stripping .001/.002 suffixes) so that materials whose + # names legitimately contain ".001"/".002" are not misidentified as conflicts. + for intended, img in zip(intended_names, data_to.images): + if img is None: + continue + if "SB_bake_operation_id" not in img: + bpy.data.images.remove(img) + continue + if img.name != intended: + # Blender renamed this image — it conflicted with an existing foreground image + fg_img = bpy.data.images.get(intended) + if fg_img is not None and fg_img.get("SB_bake_operation_id") == img.get("SB_bake_operation_id"): + # Stale: identical image already in foreground — discard the import + bpy.data.images.remove(img) + else: + # New image that collided with an existing one (overwrite) + if fg_img is not None and "SB_bake_operation_id" in fg_img: + bpy.data.images.remove(fg_img) + replaced_names.add(intended) + img.name = intended + img.use_fake_user = True + else: + # Name unchanged — no conflict, freshly baked image + img.use_fake_user = True + # Exclude replaced names so count reflects actual new/updated images + b_img_names = [n for n in b_img_names if n not in replaced_names] + + a_img_names = [i.name for i in bpy.data.images] + a_obj_names = [o.name for o in context.scene.objects] + + message = [] + message.append(f"Imported - {len(a_img_names) - len(b_img_names)} images") + message.append(f"Imported - {len(a_obj_names) - len(b_obj_names)} objects") + + # Set fake_user on newly arrived images + diflist = [n for n in a_img_names if n not in b_img_names] + for i_name in diflist: + if i := bpy.data.images.get(i_name): + i.use_fake_user = True + + # Duplicate handling only needed for copy_and_apply (wm.append path) + if bgt.copy_and_apply: + for name in b_img_names: + if name + ".002" in a_img_names: + bpy.data.images.remove(bpy.data.images[name]) + bpy.data.images[name + ".002"].name = name + elif name + ".001" in a_img_names: + bpy.data.images.remove(bpy.data.images[name]) + bpy.data.images[name + ".001"].name = name + + BackgroundBakeTasks.completed_tasks.remove(bgt) + + #Hide source and/or cage object if requested + for obj in context.scene.objects: + if "SB_BG_HIDE" in obj: + l = obj["SB_BG_HIDE"] + if bgt.bg_bake_id in l: + obj.hide_set(True) + + + show_message_box(context, message, "Import complete", icon = 'INFO') + return{'FINISHED'} + + +class SimpleBake_OT_Delete_Queued_BGBake(Operator): + """Delete a queued background bake""" + bl_idname = "simplebake.delete_queued_bgbake" + bl_label = "Delete" + + id: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + bgt = BackgroundBakeTasks.get_queued_bgt_by_id(self.id) + + BackgroundBakeTasks.queued_tasks.remove(bgt) + + return{'FINISHED'} + +class SimpleBake_OT_Discard_BGBake(Operator): + """Discard a completed background bake""" + bl_idname = "simplebake.discard_bgbake" + bl_label = "Discard" + + pid: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + bgt = BackgroundBakeTasks.get_completed_or_active_bgt_by_pid(self.pid) + pid = bgt.pid + + BackgroundBakeTasks.completed_tasks.remove(bgt) + path = str(bgt.file_path_po) + try: + os.remove(path) + os.remove(path.replace(".blend", ".blend1")) + except: + pass + + return{'FINISHED'} + + +class SimpleBake_OT_Kill_Active_BGBake(Operator): + """Kill an active background bake""" + bl_idname = "simplebake.kill_active_bgbake" + bl_label = "Kill" + + pid: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + bgt = BackgroundBakeTasks.get_completed_or_active_bgt_by_pid(self.pid) + pid = bgt.pid + + BackgroundBakeTasks.active_tasks.remove(bgt) + try: + os.kill(pid, signal.SIGTERM) + except OSError: + print(f"Unable to kill process {pid}") + + return{'FINISHED'} + +class SimpleBake_OT_Update_Progress(Operator): + bl_idname = "simplebake.update_progress" + bl_label = "Update" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + print(f"Progress update - {sbp.current_bake_image_number}") + + self.background = True if "--background" in sys.argv or sbp.fake_background else False + + sbp.current_bake_image_number+=1 + + percent_complete = (sbp.current_bake_image_number/sbp.total_bake_images_number) *100 + percent_complete = round(percent_complete) + sbp.percent_complete = percent_complete + + if self.background: + path = Path(sbp.bgbake_temp_dir) / "progress" + + if not os.path.exists(str(path)): + os.makedirs(str(path)) + + pid = os.getpid() + path = path / str(pid) + + with open(str(path), "w") as progfile: + progfile.write(str(percent_complete)) + + return{'FINISHED'} + + +#Non-Blender class +class BakeProgress: + + def __init__(self, mode, objnum, hl_matches=None): + + sbp = bpy.context.scene.SimpleBake_Props + + t=0 + + if mode == SBConstants.PBRS2A_DECALS: + ps = len(pbr_selections_to_list(bpy.context)) + ss = len(specials_selection_to_list(bpy.context)) + + #The S2A element + t = (ps+ss) * 1 + #The non-S2A element + t+= ps * 1 + + sbp.total_bake_images_number = t + + + if mode == SBConstants.PBR: + ps = len(pbr_selections_to_list(bpy.context)) + print(f"Got {ps} pbr bakes") + ss = len(specials_selection_to_list(bpy.context)) + print(f"Got {ss} pbr bakes") + t = (ps + ss) * objnum + print(f"Total of {t} based on {ps+ss} x {objnum}") + + sbp.total_bake_images_number = t + + + if mode == SBConstants.PBRS2A: + ps = len(pbr_selections_to_list(bpy.context)) + ss = len(specials_selection_to_list(bpy.context)) + o = 1 #S2A bake + + t = (ps + ss) * o + + sbp.total_bake_images_number = t + + if mode == SBConstants.CYCLESBAKE: + cb = 1 + ss = len(specials_selection_to_list(bpy.context)) + t = (cb + ss) * objnum + sbp.total_bake_images_number = t + + if mode == SBConstants.CYCLESBAKE_S2A: + cb = 1 #CyclesBake + ss = len(specials_selection_to_list(bpy.context)) + objnum = 1 #S2A bake + + t = (cb + ss) * objnum + sbp.total_bake_images_number = t + + if mode in [SBConstants.PBRS2A_AUTOMATCH, SBConstants.CYCLESBAKES2A_AUTOMATCH]: + + #Cycles bake always has only one bake mode + ps = len(pbr_selections_to_list(bpy.context)) if mode == SBConstants.PBRS2A_AUTOMATCH else 1 + + ss = len(specials_selection_to_list(bpy.context)) + t = len(hl_matches) * (ps + ss) + + sbp.total_bake_images_number = t + + +classes = ([ + SimpleBake_OT_Update_Progress, + SimpleBake_OT_Import_BGBake, + SimpleBake_OT_Delete_Queued_BGBake, + SimpleBake_OT_Kill_Active_BGBake, + SimpleBake_OT_Discard_BGBake + ]) + +def register(): + + global classes + BakeInProgress.reset() + for cls in classes: + register_class(cls) + +def unregister(): + global classes + BakeInProgress.reset() + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/__init__.py b/scripts/addons/SimpleBake/bake_operators/__init__.py new file mode 100644 index 0000000..dd1c439 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/__init__.py @@ -0,0 +1,32 @@ +from . import pbr_bake_operators +from . import common_bake_support +from . import specials_bake_operators +from . import pbr_bake_support_operators +from . import cycles_bake_operators +from . import cyclesbake_support_operators +from . import auto_match_operators +from . import decal_operators +from . import image_sequence + +def register(): + pbr_bake_operators.register() + pbr_bake_support_operators.register() + common_bake_support.register() + specials_bake_operators.register() + cycles_bake_operators.register() + cyclesbake_support_operators.register() + auto_match_operators.register() + decal_operators.register() + image_sequence.register() + +def unregister(): + pbr_bake_operators.unregister() + pbr_bake_support_operators.unregister() + common_bake_support.unregister() + specials_bake_operators.unregister() + cycles_bake_operators.unregister() + cyclesbake_support_operators.unregister() + auto_match_operators.unregister() + decal_operators.unregister() + image_sequence.unregister() + diff --git a/scripts/addons/SimpleBake/bake_operators/auto_match_operators.py b/scripts/addons/SimpleBake/bake_operators/auto_match_operators.py new file mode 100644 index 0000000..6f95e64 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/auto_match_operators.py @@ -0,0 +1,460 @@ +#TODO - Background? + +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, Macro +import uuid +import sys + +from .common_bake_support import CommonBakePrepandFinish, match_high_low_objects, clean_up_after_bg_spawn, common_prestart +from ..utils import pbr_selections_to_list, specials_selection_to_list, SBConstants, is_blend_saved, force_to_object_mode, find_3d_viewport +from ..background_and_progress import BakeInProgress, BakeProgress, BackgroundBakeTasks +from ..material_management import SimpleBake_OT_Material_Backup as MatManager +from .pbr_bake_support_operators import sample_nodes_present +from .specials_bake_operators import add_specials_to_macro, add_specials_to_macro_s2a +from .. import __package__ as base_package +from ..messages import print_message + + +def determine_cage_settings(context, op, lo, MACRO): + + sbp = context.scene.SimpleBake_Props + + #Cage--------- + #If we are auto matching in name mode, try to auto assign a cage + if sbp.auto_match_mode == "name": + parts = lo.split("_") + base_name = '_'.join(parts[:-1]).lower() + for o in context.scene.objects: + if o.name.lower() == f"{base_name}_cage": + op.properties.use_cage = True + op.properties.cage_object = o.name + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Using cage object {o.name}" + return True + + #Wasn't name more, or didn't find a cage + if sbp.cage_smooth_hard == "smooth": + op.properties.use_cage = True + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Using auto-cage (smooth)" + elif sbp.cage_smooth_hard == "hard": + op.properties.use_cage = False + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Using auto-cage (hard)" + + return True + +def set_bake_op_settings(context, op, master_switch, bake_mode): + + sbp = context.scene.SimpleBake_Props + + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.use_selected_to_active=True + op.properties.margin = context.scene.render.bake.margin + try: op.properties.margin_type = context.scene.render.bake.margin_type + except:pass + + #PBR + if master_switch=="P": + op.properties.type = "NORMAL" if bake_mode == SBConstants.PBR_NORMAL else "EMIT" + + #CycesBake + else: + op.properties.type = context.scene.cycles.bake_type + op.properties.normal_space = context.scene.render.bake.normal_space + op.properties.normal_r = context.scene.render.bake.normal_r + op.properties.normal_g = context.scene.render.bake.normal_g + op.properties.normal_b = context.scene.render.bake.normal_b + + op.properties.max_ray_distance = (sbp.ray_distance * sbp.cage_and_ray_multiplier) + +def image_post_processing(context, MACRO, bake_mode, bake_operation_id, master_switch): + + sbp = context.scene.SimpleBake_Props + + #Scale all baked images if needed (catching this latest one) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Scaling images if needed" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = bake_operation_id + + #Pack them + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + + #Denoise if requested and CB + if master_switch=="C" and sbp.rundenoise: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Running compositor denoiser" + op = MACRO.define("SIMPLEBAKE_OT_compositor_denoise") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_type = context.scene.cycles.bake_type + + + #Save bakes external + if sbp.save_bakes_external: + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + #MUST COME AFTER SAVE EXTERNAL + #Glossiness and DirectX + if master_switch == "P": + #if sbp.rough_glossy_switch == SBConstants.PBR_GLOSSY: + + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Inverting roughness to create glossy" + op = MACRO.define("SIMPLEBAKE_OT_invert_roughness_to_glossy") + op.properties.bake_operation_id = bake_operation_id + + if sbp.normal_format_switch == SBConstants.NORMAL_DIRECTX: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating DirectX normal from OpenGL map" + op = MACRO.define("SIMPLEBAKE_OT_create_directx_normal") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + +class SimpleBake_OT_AutoMatch_Operation_Background(Operator): + """Start the bake operation""" + bl_idname = "simplebake.automatch_operation_background" + bl_description = "Commence background bake for AutoMatch" + bl_label = "Bake (Background)" + + hl_matches = {} + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + + if not common_prestart(context, automatch=True): + return {'CANCELLED'} + + #Get the high to low matches dict. Abort if no matches + orig_objects_list = [] + match_mode = "NAME" if sbp.auto_match_mode=="name" else "POSITION" + dummy = match_high_low_objects(context, __class__.hl_matches, orig_objects_list, match_mode) + + + #If only one match, we shouldn't do a merged bake + if len(__class__.hl_matches)==1: + sbp.merged_bake = False + + #Start operator call for call back + start_command = "bpy.ops.simplebake.automatch_operation()" + + #Tag objects in case we want to hide them later + bg_bake_id = str(uuid.uuid4()) + def append_to_bg_hide_list(obj, bg_bake_id): + if "SB_BG_HIDE" in obj: + existing = obj["SB_BG_HIDE"] + existing.append(bg_bake_id) + obj["SB_BG_HIDE"] = existing + else: + obj["SB_BG_HIDE"] = [bg_bake_id] + + for l in list(__class__.hl_matches.keys()): + l = context.scene.objects[l] + append_to_bg_hide_list(l, bg_bake_id) + + for h in list(__class__.hl_matches.values()): + h = context.scene.objects[h] + append_to_bg_hide_list(h, bg_bake_id) + + if sbp.hide_cage_object and context.scene.render.bake.cage_object != None: + append_to_bg_hide_list(context.scene.render.bake.cage_object, bg_bake_id) + + BackgroundBakeTasks(sbp.bgbake_name, sbp.copy_and_apply, start_command, bg_bake_id) + clean_up_after_bg_spawn(context) + + return{'FINISHED'} + + +class SimpleBake_OT_AutoMatch_Macro(Macro): + bl_idname = "simplebake.pbr_automatch_macro" + bl_options = {'BLOCKING', 'INTERNAL'} + bl_label = "Go" + + @classmethod + def clean(cls): + try: + bpy.utils.unregister_class(cls) + except: + pass + bpy.utils.register_class(cls) + +class SimpleBake_OT_AutoMatch_Operation(Operator): + """Start PBR AutoMatch High Low Bake""" + bl_idname = "simplebake.automatch_operation" + bl_description = "Commence AutoMatch Bake" + bl_label = "Bake" + + hl_matches = {} + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + if event.type == 'TIMER': + if not BakeInProgress.is_baking: + context.window_manager.event_timer_remove(self._timer) + return {'PASS_THROUGH'} + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + #We need to make sure we do this before pre-start because prestart processes UVs and hl_matches needs to be populated by then + orig_objects_list=[] + match_mode = "NAME" if sbp.auto_match_mode=="name" else "POSITION" + dummy = match_high_low_objects(context, __class__.hl_matches, orig_objects_list, match_mode) + + if not self.in_background: + if not common_prestart(context, automatch=True): + return {'CANCELLED'} + + #We need to know what overall mode is on the panel + master_switch = "P" if sbp.global_mode == "PBR" else "C" + bake_modes = pbr_selections_to_list(context) if master_switch=="P" else [context.scene.cycles.bake_type] + + if not force_to_object_mode(context): + return {'CANCELLED'} + + #Set up our macro + MACRO = SimpleBake_OT_AutoMatch_Macro + MACRO.clean() + + #Bake op ID + bake_operation_id = str(uuid.uuid4()) + + #If only one match, we shouldn't do a merged bake + if len(__class__.hl_matches)==1: + sbp.merged_bake = False + + #Now we know what we are doing, call bake progress + mode = SBConstants.PBRS2A_AUTOMATCH if master_switch=="P" else SBConstants.CYCLESBAKES2A_AUTOMATCH + BakeProgress(mode, len(orig_objects_list), hl_matches=__class__.hl_matches) + + #Common bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake prep starting" + MACRO.define("SIMPLEBAKE_OT_common_bake_prep") + + if master_switch=="P": + #Pre-bake (node groups and then reroute nodes) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Pre bake starting" + if not bpy.app.version >= (4,1,0): + MACRO.define("SIMPLEBAKE_OT_pbr_pre_bake_old") + MACRO.define("SIMPLEBAKE_OT_remove_reroutes") + + if master_switch=="P": + #PBR specific bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + else: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="CyclesBake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_cyclesbake_specific_bake_prep_and_finish") + op.properties.mode="prepare" + + #Process UVs (Op will adjust for auto match) + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Processing UVs" + #op = MACRO.define("SIMPLEBAKE_OT_process_uvs") + + #Will boost be needed for later on? + if master_switch=="P": + boost_needed = False + for hi in __class__.hl_matches.values(): + boost_needed = True if sample_nodes_present(context, hi) else boost_needed + #CyclesBake - just don't use this at all + else: + boost_needed = False + + + #Need to loop through each pair + run_count=0 + for lo in __class__.hl_matches.keys(): + run_count += 1 + last_run = True if run_count==(len(__class__.hl_matches.keys())) else False + + if last_run: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Last run" + + hi = __class__.hl_matches[lo] + + for bake_mode in bake_modes: + + #Create image for this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Bake image creation (low objects)" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = lo #!! + op.properties.global_mode = "AutoMatch" #Just used for the image name + + + #No setup of high objects for Cycles Bake + if master_switch=="P": + #Setup the high + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A source objects)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = hi + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Prepare high for this bake mode (no image) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material prep (Auto Match Highs)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = hi + op.properties.this_bake = bake_mode + op.properties.no_bake_image_node = True + + #Setup the low + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A source objects)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = lo + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Object preparation (Auto Match Lows)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = lo #!!! + op.properties.this_bake = bake_mode + op.properties.only_bake_image_node = True + + #Select specific high and low objects + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Select objects for S2A auto match setup" + op = MACRO.define("SIMPLEBAKE_OT_select_selected_to_active") + op.properties.mode = SBConstants.PBRS2A_AUTOMATCH #TODO - Refactor. Works for CB but name shouldnt be specific + op.properties.specific_low = lo + op.properties.specific_high = hi + if sbp.isolate_objects: + op = MACRO.define("SIMPLEBAKE_OT_isolate_for_bake_to_target") + op.properties.object_name = lo + op.properties.high_object_name = hi + op.properties.auto_match = True + #Find and pass the cage for this pair so it stays visible during the bake + if sbp.auto_match_mode == "name": + parts = lo.split("_") + base_name = '_'.join(parts[:-1]).lower() + for scene_obj in context.scene.objects: + if scene_obj.name.lower() == f"{base_name}_cage": + op.properties.cage_object_name = scene_obj.name + break + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation" + def do_bake(): + if master_switch=="P": #CyclesBake is just left at scene setting + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + op.properties.sample_count = sbp.boosted_sample_count if boost_needed else prefs.pbr_sample_count2 + op = MACRO.define("OBJECT_OT_bake") + #Set the core bake options for the bake operation + set_bake_op_settings(context, op, master_switch, bake_mode) + #Work out cage settings + determine_cage_settings(context, op, lo, MACRO) + + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Restore the materials WORKING MODE + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + #Do scale, glossiness, directx, pack, denoise, export etc. + if not sbp.merged_bake or (sbp.merged_bake and last_run): + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Last run for {bake_mode}, calling post processing" + image_post_processing(context, MACRO, bake_mode, bake_operation_id, master_switch) + + + #-----END OF BAKE MODE LOOP--------------------- + + #Specials! + if len(specials_selection_to_list(context))>0: + for lo in __class__.hl_matches.keys(): + add_specials_to_macro_s2a(MACRO, context, bake_operation_id, + specific_high=__class__.hl_matches[lo], specific_low=lo, mode=SBConstants.PBRS2A_AUTOMATCH) #TODO - Works for CB but name should be changed + + #All images now baked + + + #Copy and apply + if sbp.copy_and_apply or sbp.save_obj_external or sbp.apply_bakes_to_original or self.in_background: + for lo in __class__.hl_matches.keys(): + op = MACRO.define("SIMPLEBAKE_OT_copy_and_apply") + op.properties.target_object_name = lo + op.properties.bake_operation_id = bake_operation_id + op.properties.global_mode = SBConstants.PBRS2A if master_switch=="P" else SBConstants.CYCLESBAKE_S2A + #Just PBR or CB would be OK too + + #Are we applying bakes to original objects? + if sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Applyig bakes to original objects" + op = MACRO.define("SIMPLEBAKE_OT_apply_bakes_to_original") + op.properties.bake_operation_id = bake_operation_id + + #Save mesh external + if sbp.save_obj_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving mesh object externally" + #Export obj? (Will also remove copy and apply object if not needed) + op = MACRO.define("SIMPLEBAKE_OT_save_objects_externally") + op.properties.bake_operation_id = bake_operation_id + + + if master_switch=="P": + #PBR specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="finish" + + #Multiply Diffuse by AO? + if sbp.multiply_diffuse_ao == "diffusexao": + op = MACRO.define("SIMPLEBAKE_OT_multiply_ao") + op.properties.bake_operation_id = bake_operation_id + + + #Channel packing + cp_op = "SIMPLEBAKE_OT_channel_packing" + op = MACRO.define(cp_op) + op.properties.bake_operation_id = bake_operation_id + op.properties.global_mode = SBConstants.PBRS2A #Only used for the texture name + + #CyclesBake + else: + #CyclesBake specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="CyclesBake specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_cyclesbake_specific_bake_prep_and_finish") + op.properties.mode="finish" + + #Common bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_common_bake_finishing") + op.properties.bake_operation_id = bake_operation_id + + #---------------------------------------------------------------------------------- + + #Setup and then start the Macro + BakeInProgress.is_baking = True + context.window_manager.modal_handler_add(self) + self._timer = context.window_manager.event_timer_add(1, window=context.window) + + #Run macro + bpy.ops.simplebake.pbr_automatch_macro('INVOKE_DEFAULT') + return {'RUNNING_MODAL'} + + +classes = ([ + SimpleBake_OT_AutoMatch_Operation, + SimpleBake_OT_AutoMatch_Macro, + SimpleBake_OT_AutoMatch_Operation_Background + ]) +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/common_bake_support.py b/scripts/addons/SimpleBake/bake_operators/common_bake_support.py new file mode 100644 index 0000000..24a2eb1 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/common_bake_support.py @@ -0,0 +1,1487 @@ +import bpy + +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, IntProperty, BoolProperty + +import os +from pathlib import Path +import tempfile +from datetime import datetime +from math import floor +import sys +import shutil + +from ..utils import SBConstants, transfer_tags, show_message_box, object_list_to_names_list, find_closest_obj, get_bake_objects, blender_refresh, is_blend_saved, find_3d_viewport, disable_impossible, specials_selection_to_list, force_to_object_mode +from ..ui.objects_list import refresh_mat_bake_list +from ..material_management import SimpleBake_OT_Material_Backup as MatManager +from ..background_and_progress import BakeInProgress as Bip +from ..messages import print_message +import re +from .. import __package__ as base_package + + +class PrestartFailed(Exception): + pass + +def re_enable_addons(context): + for addon in CommonBakePrepandFinish.disabled_addons: + try: + bpy.ops.preferences.addon_enable(module=addon) + print_message(context, f"Renabled addon {addon}") + except: + print_message(context, f"Error trying to renable addon {addon}") + CommonBakePrepandFinish.disabled_addons = [] + + +def record_target_object_visibility_state(obj): + if obj == None: + return + + CommonBakePrepandFinish.orig_target_object_visibility[obj.name] = { + "hide_viewport": obj.hide_viewport, + "hide_render": obj.hide_render, + "hide_get": obj.hide_get(), + "hide_select": obj.hide_select, + } + + +def restore_target_object_visibility_state(): + for name, visibility_state in CommonBakePrepandFinish.orig_target_object_visibility.items(): + if ob:= bpy.data.objects.get(name): + ob.hide_viewport = visibility_state["hide_viewport"] + ob.hide_render = visibility_state["hide_render"] + ob.hide_set(visibility_state["hide_get"]) + ob.hide_select = visibility_state["hide_select"] + CommonBakePrepandFinish.orig_target_object_visibility = {} + + +def record_camera_ray_visibility_state(objs): + for obj in objs: + if obj == None: + continue + if obj.name not in CommonBakePrepandFinish.orig_camera_ray_visibility: + CommonBakePrepandFinish.orig_camera_ray_visibility[obj.name] = obj.visible_camera + + +def restore_camera_ray_visibility_state(): + for name, visible_camera in CommonBakePrepandFinish.orig_camera_ray_visibility.items(): + if ob:= bpy.data.objects.get(name): + ob.visible_camera = visible_camera + CommonBakePrepandFinish.orig_camera_ray_visibility = {} + + +def record_object_selection_state(context): + CommonBakePrepandFinish.orig_object_selection = list(context.selected_objects) + CommonBakePrepandFinish.orig_active_object = context.active_object + + +def restore_object_selection_state(context): + try: + bpy.ops.object.select_all(action="DESELECT") + except Exception: + pass + + for obj in CommonBakePrepandFinish.orig_object_selection: + try: + if obj.name in context.scene.objects: + obj.select_set(True) + except Exception as e: + print(str(e)) # E.g. if user had a copy and apply object selected, and now it's gone + try: + if (active:=CommonBakePrepandFinish.orig_active_object) and active.name in context.scene.objects: + context.view_layer.objects.active = active + except Exception: + pass + + +def restore_common_object_state(context, restore_selection=True): + restore_camera_ray_visibility_state() + restore_target_object_visibility_state() + if restore_selection: + restore_object_selection_state(context) + + +def common_prestart(context, decals=False, automatch=False): + + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + + pbr_bake = True if sbp.global_mode == "PBR" else False + + def prestart_actions(): + + #Get rid of any active previews + bpy.ops.simplebake.restore_preview() + + #Take snapshot of the panel to restore at the end + bpy.ops.simplebake.local_preset_save_override(name_override="TMP_Panel_Initial_State") + + #Record state of all mesh objects + CommonBakePrepandFinish.orig_objects_visible = [[o.name, o.hide_viewport] for o in bpy.data.objects if o.type=="MESH"] + CommonBakePrepandFinish.orig_objects_visible_render = [[o.name, o.hide_render] for o in bpy.data.objects if o.type == "MESH"] + CommonBakePrepandFinish.orig_target_object_visibility = {} + CommonBakePrepandFinish.orig_camera_ray_visibility = {} + record_object_selection_state(context) + if sbp.selected_s2a: + record_target_object_visibility_state(sbp.targetobj) + if sbp.cycles_s2a: + record_target_object_visibility_state(sbp.targetobj_cycles) + + #Disable other addons? + if prefs.disable_other_addons2 and sbp.bgbake!="bg": + p = context.preferences; + allowed_addons = ['io_anim_bvh', 'io_curve_svg', 'io_mesh_uv_layout', 'io_scene_fbx', 'io_scene_gltf2', 'cycles', 'pose_library', 'bl_pkg', 'SimpleBake']; + CommonBakePrepandFinish.disabled_addons = [] + for addon in p.addons.keys(): + if addon not in allowed_addons: + try: + bpy.ops.preferences.addon_disable(module=addon) + CommonBakePrepandFinish.disabled_addons.append(addon) + print_message(context, f"Disabled {addon}") + except: + print_message(context, f"Error while disabling {addon}") + + Bip.was_error = False + + #Refresh objects list + bpy.ops.simplebake.refresh_bake_object_list() + + disable_impossible(context) + + #Things are much easier if we fix this + if (to:=sbp.targetobj)!=None and (i:=sbp.objects_list.find(to.name))!=-1: + print_message(context,f"Removing target object {to.name} from bake list") + sbp.objects_list.remove(i) + refresh_mat_bake_list(context) + + #Save file? + if prefs.saveonbake and is_blend_saved(): + try: + bpy.ops.wm.save_mainfile() + except: + print_message(context, "ERROR: Was unable to save Blend file") + + #Switch to solid shading? + if prefs.solidshadingonbake: + for screen in bpy.data.screens: + for space in find_3d_viewport(screen=screen): + space.shading.type = "SOLID" + + #Sidestep any geometary nodes (before starting checks so materials becomme "real") + if pbr_bake or len(specials_selection_to_list(context))>0: + bpy.ops.simplebake.sidestep_geo_nodes() + #if decals and sbp.targetobj!=None: + #bpy.ops.simplebake.sidestep_geo_nodes(decals_target_name = sbp.targetobj.name) + + #Starting checks + if automatch: + match_mode = "NAME" if sbp.auto_match_mode=="name" else "POSITION" + hl_matches = {} + orig_objects_list=[] + result = match_high_low_objects(context, hl_matches, orig_objects_list, match_mode) + if not result: + raise PrestartFailed + + #Starting checks + for lo in hl_matches.keys(): + if pbr_bake: + sbp.targetobj = context.scene.objects[lo] + record_target_object_visibility_state(sbp.targetobj) + else: + sbp.targetobj_cycles = context.scene.objects[lo] + record_target_object_visibility_state(sbp.targetobj_cycles) + if 'CANCELLED' in bpy.ops.simplebake.starting_checks(): + raise PrestartFailed + + if pbr_bake: + sbp.targetobj = None + else: + sbp.targetobj_cycles = None + else: + if 'CANCELLED' in bpy.ops.simplebake.starting_checks(): + raise PrestartFailed("Starting checks failed!") + + #Fresh start for materials + bpy.ops.simplebake.material_backup(mode=MatManager.MODE_INITIALISE) + + #If newer than Blender 4.0, run this before the Macro!! But after existing material tags have been wiped and after starting checks + if bpy.app.version >= (4,1,0) and pbr_bake: + bpy.ops.simplebake.pbr_pre_bake() + if decals: + bpy.ops.simplebake.pbr_pre_bake(override_target_object_name = sbp.targetobj.name) + + #Process UVs + #Do this near to last, as it's not really possible to reverse it if anything else in the prestart fails + #Snapshot UV state BEFORE process_uvs() changes it, so restore_orig_uv_map has the correct originals + if (sbp.selected_s2a or sbp.cycles_s2a) and automatch: + _pre_uv_objs = list(set(list(hl_matches.keys()) + list(hl_matches.values()))) + else: + _pre_uv_objs = [o.obj_point.name for o in sbp.objects_list] + if sbp.targetobj is not None and sbp.targetobj.name not in _pre_uv_objs: + _pre_uv_objs.append(sbp.targetobj.name) + if sbp.targetobj_cycles is not None and sbp.targetobj_cycles.name not in _pre_uv_objs: + _pre_uv_objs.append(sbp.targetobj_cycles.name) + CommonBakePrepandFinish.orig_object_uvs = {} + CommonBakePrepandFinish.orig_object_uvs_render = {} + CommonBakePrepandFinish.new_uv_option = sbp.new_uv_option + for _o_name in _pre_uv_objs: + _obj = context.scene.objects.get(_o_name) + if not _obj: continue + if _obj.data.uv_layers.active is not None: + CommonBakePrepandFinish.orig_object_uvs[_o_name] = _obj.data.uv_layers.active.name + for _uv in _obj.data.uv_layers: + if _uv.active_render: + CommonBakePrepandFinish.orig_object_uvs_render[_o_name] = _uv.name + bpy.ops.simplebake.process_uvs() + + #Merged bake proxy must come after UVs + #Grab a copy of the original bake objects list + sbp['SB_orig_bake_objects'] = [o.name for o in sbp.objects_list] + if sbp.join_objs_to_proxy: + bpy.ops.simplebake.merged_bake_proxy_create() + + + try: + prestart_actions() + except PrestartFailed as e: + print_message(context, "BAKE ABORTED - Check pop-up for errors") + Bip.is_baking = False + Bip.was_error = True + + #Undo actions from sidestep and also pre-bake + bpy.ops.simplebake.material_backup(mode="working_restore") + bpy.ops.simplebake.material_backup(mode="master_restore") + bpy.ops.simplebake.reverse_geo_nodes_sidestep() + + #Re-enable addons we might have disabled + re_enable_addons(context) + + #Restore panel state + bpy.ops.simplebake.local_preset_load_override(name_override="TMP_Panel_Initial_State") + + restore_common_object_state(context) + + return False + + print_message(context,"Common Prestart Actions Complete") + return True + +def clean_up_after_bg_spawn(context): + print_message(context, "Cleaning up after BG spawn") + sbp = context.scene.SimpleBake_Props + + #Undo actions from sidestep and also pre-bake + bpy.ops.simplebake.material_backup(mode="master_restore") + bpy.ops.simplebake.reverse_geo_nodes_sidestep() + + # If a merged proxy was created for this bake, remove it from the foreground scene. + # common_bake_finishing (which normally handles this) only runs in the background + # process, so we must clean up here. + for name in [o.name for o in bpy.data.objects if "SB_merged_proxy" in o]: + if obj := bpy.data.objects.get(name): + bpy.data.objects.remove(obj) + + # Restore sbp.objects_list to the original bake objects (proxy creation replaced it). + orig_names = list(sbp.get('SB_orig_bake_objects', [])) + if orig_names: + sbp.objects_list.clear() + for n in orig_names: + bpy.ops.simplebake.add_bake_object_by_name(override_target_obj_name=n) + bpy.ops.simplebake.refresh_bake_object_list() + + # Restore render visibility on all objects. + # Proxy creation sets hide_render=True on the originals; common_bake_finishing + # restores this, but only runs in the background process. + for name, hide_render_state in CommonBakePrepandFinish.orig_objects_visible_render: + if ob := context.scene.objects.get(name): + ob.hide_render = hide_render_state + restore_common_object_state(context) + + # Restore active UV and active_render on the original objects. + # common_bake_finishing handles this for foreground bakes; we replicate it here. + for o_name, orig_active in CommonBakePrepandFinish.orig_object_uvs.items(): + obj = context.scene.objects.get(o_name) + if not obj: continue + idx = next((i for i, l in enumerate(obj.data.uv_layers) if l.name == orig_active), None) + if idx is not None: + obj.data.uv_layers.active_index = idx + for o_name, orig_render in CommonBakePrepandFinish.orig_object_uvs_render.items(): + obj = context.scene.objects.get(o_name) + if not obj: continue + for layer in obj.data.uv_layers: + layer.active_render = (layer.name == orig_render) + + return True + + + +def match_high_low_objects(context, hl_matches, orig_objects_list, match_mode): + print_message(context, "Matching high and low poly objects commencing") + sbp = context.scene.SimpleBake_Props + + #Refresh the bake objects list (couldn't hurt) + bpy.ops.simplebake.refresh_bake_object_list() + + #If name mode, remove invalid before we consider anything else + if match_mode == "NAME": + #Remove invalid + to_remove = [] + for o in sbp.objects_list: + if "_high" not in o.name.lower(): + to_remove.append(o.name) + for r in to_remove: + i = sbp.objects_list.find(r) + sbp.objects_list.remove(i) + + hl_matches.clear() + objs = [i.obj_point for i in sbp.objects_list] + orig_objects_list.clear() + orig_objects_list.extend(objs) + + if match_mode == "NAME": + + hs = [o.name for o in objs if o.name.lower().endswith("_high")] + hs_dict = {}#Lowcase to real + for i in hs: + hs_dict[i.lower()] = i + + #ls = [o.name for o in context.scene.objects] #Every object is a potential low at this point + ls = [o.name for o in context.scene.objects if o.name.lower().endswith("_low")] + ls_dict = {}#Lowcase to real + for i in ls: + ls_dict[i.lower()] = i + + matched_ls = [] + + for i in hs_dict.keys(): #LOWER names of high poly objects + if i.replace("_high", "_low") in ls_dict.keys(): + hl_matches[ls_dict[i.replace("_high", "_low")]] = hs_dict[i] + + # Create a normalized version of lows to map to highs + #normalized_to_original = {re.sub(r'_low$', '', s, flags=re.IGNORECASE): s for s in ls} + + #for high in hs: + #base_string = re.sub(r'_high$', '', high, flags=re.IGNORECASE) + #if base_string in normalized_to_original: + # low_string = normalized_to_original[base_string] + # hl_matches[low_string] = high + # matched_ls.append(low_string) + + + + ls = matched_ls + + if match_mode == "POSITION": + hs = [o.name for o in sbp.objects_list] + ls = [] + #Detect low by position for every high object + for h in hs: + l = find_closest_obj(context, h) + if l != None: + ls.append(l.name) + hl_matches[l.name] = h + + #If there were actually no matches, abort here: + if len(hl_matches) <1: + print_message(context, "BAKE ABORTED (AUTO) - Check pop-up for errors") + messages = ([ + "ERROR: You are trying to bake auto match", + "high and low poly, but there are no matches!" + ]) + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + Bip.is_baking = False + restore_common_object_state(context) + return False + + + #Now we have our list, purge all low objects from the bake objects list + #Not sure it's useful, but you could have an object being both a high and a low. Only remove if not also a high + ls_unique = [lo for lo in ls if lo not in hs] + # for lo in ls_unique: + # i = sbp.objects_list.find(lo) + # if i>-1: sbp.objects_list.remove(i) + + for lo in ls: + i = sbp.objects_list.find(lo) + if i>-1: sbp.objects_list.remove(i) + + + #Dry run for starting checks + for lo in ls: + if sbp.global_mode == SBConstants.PBR: sbp.targetobj = context.scene.objects[lo] + else: sbp.targetobj_cycles = context.scene.objects[lo] + if 'CANCELLED' in bpy.ops.simplebake.starting_checks(): #Should work out it's own mode from panel selections + print_message(context, "BAKE ABORTED (AUTO) - Check pop-up for errors") + Bip.is_baking = False + restore_common_object_state(context) + return False + return True + + + +class SimpleBake_OT_Set_Sample_Count(Operator): + bl_idname = "simplebake.set_sample_count" + bl_label = "Set the sample count" + + sample_count: IntProperty() + + def execute(self, context): + context.scene.cycles.samples = self.sample_count + print_message(context, f"Sample count now {self.sample_count}") + return {'FINISHED'} + +class SimpleBake_OT_Compositor_Denoise(Operator): + """Run the target image through compositor denoise""" + bl_idname = "simplebake.compositor_denoise" + bl_label = "Denoise" + + bake_operation_id: StringProperty() + #bake_type: StringProperty() + + def execute(self, context): + + print_message(context, "Running compositor denoiser") + + imgs = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and i["SB_this_bake"] not in SBConstants.ALL_PBR_MODES #Never denoise PBR + and i["SB_this_bake"] not in SBConstants.COMP_NODENOISE_SPECIALS #Only certian specials get denoise + and i["SB_denoised"] == False + ]) + + if len(imgs)== 0: + print_message(context, "No images for compositor denoiser") + return {'FINISHED'} + + print_message(context, f"Compositor denoise for {[i.name for i in imgs]}") + + #[bpy.data.scenes.remove(s) for s in bpy.data.scenes if s.name == "compositor_denoise"] + s = bpy.data.scenes.get("compositor_denoise") + if s!=None: + bpy.data.scenes.remove(s) + + path = os.path.dirname(__file__) + "/../resources/denoise.blend/Scene/" + bpy.ops.wm.append(filename="compositor_denoise", directory=path) + + s = bpy.data.scenes.get("compositor_denoise") + if s==None: + return {'CANCELLED'} + + + #Should all be same size + s.render.resolution_x = imgs[0].size[0] + s.render.resolution_y = imgs[0].size[1] + + if bpy.app.version >= (5, 0, 0): + nodes = s.compositing_node_group.nodes + else: + nodes = s.node_tree.nodes + + i_node = [n for n in nodes if n.label == "image"] + assert(len(i_node) == 1) + i_node= i_node[0] + + temp_dir = Path(tempfile.TemporaryDirectory().name) + + + for img in imgs: + + #Get some settings + #s.render.image_settings.color_management = "OVERRIDE" + s.render.image_settings.file_format = img.file_format + s.render.image_settings.color_depth = img["SB_bit_depth"] + s.render.image_settings.color_mode = img["SB_channels"] + s.render.image_settings.exr_codec = img["SB_exr_codec"] + #s.view_settings.view_transform = img["SB_view_transform"] + s.view_settings.view_transform = "Standard" + + name = img.name + external_path = img.filepath + + #Save the image to tmp dir + #img.save_render(str(temp_dir / f"{name}.exr"), scene=s) + + tiles_nums = [t.number for t in img.tiles] + for tile_num in tiles_nums: + #Load the tile in as an individual image + i = bpy.data.images.load(external_path.replace("", str(tile_num))) + #i.colorspace_settings.name = img.colorspace_settings.name + i_node.image =i + + #Render and get result + bpy.ops.render.render(use_viewport=False, scene=s.name) + render_result_image = bpy.data.images["Render Result"] + + #File should already exist. Remove it or will silently fail. + if os.path.exists(bpy.path.abspath(external_path)): + os.remove(bpy.path.abspath(external_path)) + + #Save this over the file path of the tile image + #Only seems to work for abspath? + external_path = bpy.path.abspath(external_path) + render_result_image.save_render(external_path.replace("", str(tile_num)), scene=s) + + #Remove the tile image we loaded individually + bpy.data.images.remove(i) + + #All tiles done for this image, reload the UDIM image + img.reload() #We've updated 1 or more tiles and Blender still has them in the buffer' + #img.save() + img["SB_denoised"] = True + + #transfer_tags(img, new_img) + + #All done + [bpy.data.scenes.remove(s) for s in bpy.data.scenes if s.name == "compositor_denoise"] + + return {'FINISHED'} + + +class SimpleBake_OT_Compositor_AA(Operator): + """Run the target image through compositor anti-aliasing""" + bl_idname = "simplebake.compositor_aa" + bl_label = "AA" + + bake_operation_id: StringProperty() + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + print_message(context, "Running compositor AA") + + imgs = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and "SB_channel_pack_image" not in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and i["SB_this_bake"] not in [SBConstants.PBR_NORMAL, "NORMAL"] #Never try to AA a normal map + and i["SB_aa"] == False + ]) + + if len(imgs)== 0: + print_message(context, "No images for compositor AA") + return {'FINISHED'} + + print_message(context, f"Compositor AA for {[i.name for i in imgs]}") + + s = bpy.data.scenes.get("compositor_aa") + if s!=None: + bpy.data.scenes.remove(s) + + path = os.path.dirname(__file__) + "/../resources/aa.blend/Scene/" + bpy.ops.wm.append(filename="compositor_aa", directory=path) + + s = bpy.data.scenes.get("compositor_aa") + if s==None: + return {'CANCELLED'} + + #Should all be same size + s.render.resolution_x = imgs[0].size[0] + s.render.resolution_y = imgs[0].size[1] + + if bpy.app.version >= (5, 0, 0): + nodes = s.compositing_node_group.nodes + else: + nodes = s.node_tree.nodes + + i_node = [n for n in nodes if n.label == "image"] + assert(len(i_node) == 1) + i_node= i_node[0] + + aa_node = [n for n in nodes if n.bl_idname == "CompositorNodeAntiAliasing"] + assert(len(aa_node) == 1) + aa_node= aa_node[0] + + #Set the aa props + if bpy.app.version >= (5, 0, 0): + aa_node.inputs[1].default_value = sbp.aa_threshold + aa_node.inputs[2].default_value = sbp.aa_contrast_limit + aa_node.inputs[3].default_value = sbp.aa_corner_radius + else: + aa_node.threshold = sbp.aa_threshold + aa_node.contrast_limit = sbp.aa_contrast_limit + aa_node.corner_rounding = sbp.aa_corner_radius + + temp_dir = Path(tempfile.TemporaryDirectory().name) + + + for img in imgs: + + #Get some settings + if "SB_bit_depth" not in img or "SB_channels" not in img or "SB_exr_codec" not in img: + print_message(context, f"WARNING: {img.name} is missing external save metadata, skipping AA") + continue + s.render.image_settings.file_format = img.file_format + s.render.image_settings.color_depth = img["SB_bit_depth"] + s.render.image_settings.color_mode = img["SB_channels"] + s.render.image_settings.exr_codec = img["SB_exr_codec"] + + s.view_settings.view_transform = "Standard" + + name = img.name + external_path = img.filepath + + + tiles_nums = [t.number for t in img.tiles] + for tile_num in tiles_nums: + #Load the tile in as an individual image + i = bpy.data.images.load(external_path.replace("", str(tile_num))) + #i.colorspace_settings.name = img.colorspace_settings.name + i_node.image =i + + #Render and get result + bpy.ops.render.render(use_viewport=False, scene=s.name) + render_result_image = bpy.data.images["Render Result"] + + #File should already exist. Remove it or will silently fail. + if os.path.exists(bpy.path.abspath(external_path)): + os.remove(bpy.path.abspath(external_path)) + + #Save this over the file path of the tile image + #Only seems to work for abspath? + external_path = bpy.path.abspath(external_path) + render_result_image.save_render(external_path.replace("", str(tile_num)), scene=s) + + #Remove the tile image we loaded individually + bpy.data.images.remove(i) + + #All tiles done for this image, reload the UDIM image + img.reload() #We've updated 1 or more tiles and Blender still has them in the buffer' + img["SB_aa"] = True + + #transfer_tags(img, new_img) + + #All done + [bpy.data.scenes.remove(s) for s in bpy.data.scenes if s.name == "compositor_aa"] + + return {'FINISHED'} + +objects_hidden_for_isolation = [] + + +def hide_render_for_isolation(obj): + if obj.hide_render == False: + obj.hide_render = True + objects_hidden_for_isolation.append(obj.name) + + +class SimpleBake_OT_Isolate_For_Bake_To_Target(Operator): + """Hide objects from rendering for bake-to-target workflows without changing selection""" + bl_idname = "simplebake.isolate_for_bake_to_target" + bl_label = "Isolate for Bake to Target" + + object_name: StringProperty() + high_object_name: StringProperty() + cage_object_name: StringProperty() + isolate_s2a: BoolProperty(default=False) + auto_match: BoolProperty(default=False) + + def execute(self, context): + + if self.auto_match: + #Hide everything (only objects currently visible, to avoid incorrectly restoring pre-hidden objects) + for o in context.scene.objects: + if o.type=="MESH" and o.hide_render == False: + hide_render_for_isolation(o) + + #Unhide low, high, and cage + context.scene.objects[self.object_name].hide_render = False + context.scene.objects[self.high_object_name].hide_render = False + if self.cage_object_name: + cage_obj = context.scene.objects.get(self.cage_object_name) + if cage_obj: + cage_obj.hide_render = False + + return {'FINISHED'} + + + if self.isolate_s2a: + bake_objs = object_list_to_names_list(context) + bake_objs.append(self.object_name) + + #Cage object too if there is one + if context.scene.render.bake.cage_object != None: + bake_objs.append(context.scene.render.bake.cage_object.name) + + #Hide everything + for o in context.scene.objects: + #if o.name not in bake_objs and o.type=="MESH": + if o.hide_render == False: + hide_render_for_isolation(o) + + #Unhide object in bake objects list + for o_name in bake_objs: + context.scene.objects[o_name].hide_render = False + + return {'FINISHED'} + + return {'FINISHED'} + + +class SimpleBake_OT_Select_Only_This(Operator): + """Select only the specified object""" + bl_idname = "simplebake.select_only_this" + bl_label = "Select" + + object_name: StringProperty() + isolate: BoolProperty(default=False) + + def execute(self, context): + + obj = context.scene.objects[self.object_name] + + if self.isolate: + #Unhide the object we are baking. It may not have been unhidden yet + obj.hide_render = False + + #Hide all other objects + for o in context.scene.objects: + if o.name != self.object_name and o.type=="MESH": + if o.hide_render == False: + hide_render_for_isolation(o) + + + #bpy.ops.object.select_all(action="DESELECT") + [o.select_set(state=False) for o in context.scene.objects] + obj.select_set(state=True) + context.view_layer.objects.active = obj + + return {'FINISHED'} + + +class SimpleBake_OT_Select_Selected_To_Active(Operator): + """Select the bake objects as selected, and target object as active""" + bl_idname = "simplebake.select_selected_to_active" + bl_label = "Select" + + mode: StringProperty() + specific_high: StringProperty() + specific_low: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + objs = [i.obj_point for i in sbp.objects_list] + + bpy.ops.object.select_all(action="DESELECT") + + if self.mode == SBConstants.PBRS2A: + target_obj = sbp.targetobj + + if self.mode == SBConstants.CYCLESBAKE_S2A: + target_obj = sbp.targetobj_cycles + + if self.mode == SBConstants.PBRS2A_AUTOMATCH: + target_obj = context.scene.objects[self.specific_low] + #Overide objects list for this purpose + objs = [context.scene.objects[self.specific_high]] + + [obj.select_set(state=True) for obj in objs] + target_obj.select_set(state=True) + context.view_layer.objects.active = target_obj + + return {'FINISHED'} + +class CommonBakePrepandFinish: + #Non-Blender class. No register + orig_object_selection = [] + orig_active_object = None + + #Can't be here as it isn't carried into the background and it is needed. + #orig_bake_objects_list = [] + + orig_objects_visible = [] + orig_objects_visible_render = [] + orig_target_object_visibility = {} + orig_camera_ray_visibility = {} + + orig_object_uvs = {} + orig_object_uvs_render = {} + new_uv_option = False + + orig_render_engine = None + #packed_images = [] + start_time = None + + high_low_matching_list = {} + + #Disabled addons + disabled_addons = [] + + #Disabled handlers + disabled_handlers = [] + + + +class SimpleBake_OT_Pack_Baked_Images(Operator): + """Preperation shared by all types of bake""" + bl_idname = "simplebake.pack_baked_images" + bl_description = "Pack all baked images into blend file" + bl_label = "Pack" + + bake_operation_id: StringProperty() + bake_mode: StringProperty() + + def execute(self, context): + + #BLOCK THIS FOR NOW + return {'FINISHED'} + + + #Get all primary images for this operation + imgs = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + #and i.name not in CommonBakePrepandFinish.packed_images and + and "SB_this_bake" in i and i["SB_this_bake"] == self.bake_mode + ]) + + for img in imgs: + #if img.is_dirty == True: + if img.packed_file == None: + #if True: + print_message(context, f"Packing image {img.name} to blend file") + img.pack() + img.use_fake_user = True + #CommonBakePrepandFinish.packed_images.append(img.name) + + return {'FINISHED'} + +class SimpleBake_OT_Scale_Images_If_Needed(Operator): + """Preperation shared by all types of bake""" + bl_idname = "simplebake.scale_images_if_needed" + bl_description = "Scale images if needed" + bl_label = "Scale" + + bake_operation_id: StringProperty() + this_bake: StringProperty() + + def execute(self, context): + + #Scale images if needed + print_message(context, "Scaling images if needed") + imgs = ([i for i in bpy.data.images + if "SB_bake_operation_id" in i and + i["SB_bake_operation_id"] == self.bake_operation_id and + "SB_this_bake" in i and + "SB_scaled" in i and not i["SB_scaled"] + ]) + sbp = context.scene.SimpleBake_Props + for img in imgs: + width = img.size[0] + height = img.size[1] + #Just gonna assume if one tile has been resized they all have + if width != sbp.outputwidth or height != sbp.outputheight: + print_message(context, f"Scaling {img.name} to {sbp.outputwidth} by {sbp.outputheight}") + + i=0 + ts=len(img.tiles) + while i < ts: + img.tiles.active_index = i + img.scale(sbp.outputwidth, sbp.outputheight, tile_index=i) + i+=1 + #Either way, we considered it + img["SB_scaled"] = True + + + return {'FINISHED'} + +def disable_auto_smooth(context): + + + obj_names = get_bake_objects(context) + modded_objs = [] + for o_name in obj_names: + if not (o:=context.scene.objects.get(o_name)): + continue + if o.data.has_custom_normals and o.data.use_auto_smooth: + o.data.use_auto_smooth = False + print_message(context, f"Disabling auto-smooth setting for object {o.name} (custom split normals)") + modded_objs.append(o.name) + yield True + + for o_name in modded_objs: + if (obj:=context.scene.objects.get(o_name)): + print_message(context, f"Renabling auto-smooth setting for object {o_name}") + obj.data.use_auto_smooth = True + + yield True +das_gen = None + +class SimpleBake_OT_Common_Bake_Prep(Operator): + """Preperation shared by all types of bake""" + bl_idname = "simplebake.common_bake_prep" + bl_description = "Preperation shared by all types of bake" + bl_label = "BakePrep" + + def execute(self, context): + + print_message(context, "================================") + print_message(context, "--------SIMPLEBAKE START--------") + print_message(context, "================================") + + if "SB_Crash_Log" in bpy.data.texts: + bpy.data.texts.remove(bpy.data.texts["SB_Crash_Log"]) + + CommonBakePrepandFinish.start_time = datetime.now() + + sbp = context.scene.SimpleBake_Props + + #Suspend despgraph access for all other addons, as access during bake process will cause Blender crash + CommonBakePrepandFinish.disabled_handlers = list(bpy.app.handlers.depsgraph_update_post) + bpy.app.handlers.depsgraph_update_post.clear() + handler_names = [h.__name__ for h in CommonBakePrepandFinish.disabled_handlers] + print_message(context, f"Just disabled handlers: {handler_names}") + + #Disable autosmooth for all objects that are relevant to us and have custom normals + prefs = context.preferences.addons[base_package].preferences + if prefs.disable_auto_smooth_for_split_normals and bpy.app.version < (4,1,0): + global das_gen + das_gen=disable_auto_smooth(context) + next(das_gen) + + #Auto matching high low needs special treatment + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch": + from .auto_match_operators import SimpleBake_OT_AutoMatch_Operation as amo + hl_matches = amo.hl_matches + bake_objects_names = [] + bake_objects_names.extend(list(hl_matches.keys())) + bake_objects_names.extend(list(hl_matches.values())) + bake_objects_names = list(set(bake_objects_names)) #Just to be sure + else: + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + + + print_message(context, "Common bake prep starting") + + + #Tracking number reset + sbp.current_bake_image_number = 0 + sbp.percent_complete = 0 + + #Render engine + CommonBakePrepandFinish.orig_render_engine = context.scene.render.engine + context.scene.render.engine = 'CYCLES' + + #Object selection + record_object_selection_state(context) + + #Create a new collection, and add selected objects and target objects to it + c = bpy.data.collections.get("SimpleBake_Working") + if c!=None: + bpy.data.collections.remove(c) + + c = bpy.data.collections.new("SimpleBake_Working") + context.scene.collection.children.link(c) + for o_name in bake_objects_names: + obj = context.scene.objects[o_name] + if o_name not in c.objects: + c.objects.link(obj) + if sbp.targetobj != None and sbp.targetobj.name not in c.objects: + c.objects.link(sbp.targetobj) + if sbp.targetobj_cycles != None and sbp.targetobj_cycles.name not in c.objects: + c.objects.link(sbp.targetobj_cycles) + + #Every object must have at least camera ray visibility + camera_vis_objs = [] + for o_name in bake_objects_names: + obj = context.scene.objects[o_name] + camera_vis_objs.append(obj) + if sbp.targetobj != None: + camera_vis_objs.append(sbp.targetobj) + if sbp.targetobj_cycles != None: + camera_vis_objs.append(sbp.targetobj_cycles) + record_camera_ray_visibility_state(camera_vis_objs) + + for o_name in bake_objects_names: + obj = context.scene.objects[o_name] + obj.visible_camera = True + if sbp.targetobj != None: + sbp.targetobj.visible_camera = True + if sbp.targetobj_cycles != None: + sbp.targetobj_cycles.visible_camera = True + + #In case of crash + for m in bpy.data.materials: + if "SB_working_dup" in m: del m["SB_working_dup"] + + return {'FINISHED'} + +class SimpleBake_OT_Common_Bake_Finishing(Operator): + """Finishing actions shared by all types of bake""" + bl_idname = "simplebake.common_bake_finishing" + bl_description = "Finishing shared by all types of bake" + bl_label = "BakeFinish" + + #baked_number: IntProperty() + bake_operation_id: StringProperty() + suppress_report: BoolProperty(default=False) + + #Determined from panel setting + decal_first_run: BoolProperty(default=False) + #Determined from overide from this function, as panel setting not reliable when baking target object (update function turns it off) + decal_second_run: BoolProperty(default=False) + #Class variable + decal_orig_objects = [] + t_object_name = "" + baked_images_running_total = 0 + + def execute(self, context): + + + sbp = context.scene.SimpleBake_Props + + #Hook to anti-aliasing operator. Relevant for all bakes if user has requested it + if sbp.do_aa: + bpy.ops.simplebake.compositor_aa(bake_operation_id=self.bake_operation_id) + + + #Renable autosmooth + prefs = context.preferences.addons[base_package].preferences + if prefs.disable_auto_smooth_for_split_normals and bpy.app.version < (4,1,0): + global das_gen + next(das_gen) + + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + + #print_message(context, "Common bake finishing") + + + #Working collection + to_del = [] + for c in bpy.data.collections: + if "SimpleBake_Working" in c.name: to_del.append(c.name) + for name in to_del: + c = bpy.data.collections.get(name) + if c: + bpy.data.collections.remove(c) + + #Render engine + context.scene.render.engine = CommonBakePrepandFinish.orig_render_engine + + #Force to object mode + if context.active_object == None: + context.view_layer.objects.active = context.view_layer.objects[0] #Pick arbitary + try: bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + except Exception as e: pass # Weird crash when SimpleBake is displayed in the n-panel + + #Object selection + bpy.ops.object.select_all(action="DESELECT") + for obj in CommonBakePrepandFinish.orig_object_selection: + try: obj.select_set(True) + except Exception as e: print(str(e)) #E.g. if user had a copy and apply object selected, and now it's gone + try: context.view_layer.objects.active = CommonBakePrepandFinish.orig_active_object + except: pass + + # #If we applied bakes to the original object, let's assume we want that UV map to end up active for render + # #May be overriden by the next check for the restore option. The user is warned about this on the panel + if sbp.new_uv_option and sbp.apply_bakes_to_original: + objs = [o.obj_point for o in sbp.objects_list] + if sbp.targetobj != None: objs = [sbp.targetobj] + if sbp.targetobj_cycles != None: objs = [sbp.targetobj_cycles] + + for obj in objs: + for uvm in obj.data.uv_layers: + if uvm.name == "SimpleBake": + uvm.active_render = True + + + #If we didn't export the bakes, pack them into the Blend file for safe keeping + if not sbp.save_bakes_external: + #Don't forget decal images. This is only called by the "regular" bake at the end' + decal_op_id = self.bake_operation_id.replace("DECALSBASE_", "") + bis = [i.name for i in bpy.data.images if "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id] + decal_bis = [i.name for i in bpy.data.images if "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == decal_op_id] + bis = list(set(bis + decal_bis)) + for iname in bis: + if i:=bpy.data.images.get(iname): + i.pack() + + #Remove SimpleBake_Bakes if it's empty + c = bpy.data.collections.get("SimpleBake_Bakes") + if c and len(c.objects) == 0: + bpy.data.collections.remove(c) + + bpy.ops.simplebake.material_backup(mode=MatManager.MODE_MASTER_RESTORE) + + m = bpy.data.materials.get("SimpleBake_Placeholder") + if m: + bpy.data.materials.remove(m, do_unlink=True) + + #Report + #Get all images with this bake ID + bis = [i for i in bpy.data.images if "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id] + for bi in bis: + if "SB_counted" not in bi or ("SB_counted" in bi and not bi["SB_counted"]): + __class__.baked_images_running_total+=1 + bi["SB_counted"] = True + if (not self.in_background and not Bip.was_error and not self.decal_first_run + and not self.suppress_report and not sbp.suppress_report + and Bip.Sequence.should_run_teardown()): + #message=f"Foreground bake is complete|{str(self.baked_number)} images baked" + message=f"Foreground bake is complete|{__class__.baked_images_running_total} images baked" + if Bip.Sequence.active and Bip.Sequence.is_last_frame: + message = message + f" for {Bip.Sequence.total_frames} frames" + Bip.Sequence.reset() + + icon="INFO" + centre = True + bpy.ops.simplebake.show_message_box('INVOKE_DEFAULT', message=message, icon=icon, centre=centre) + __class__.baked_images_running_total = 0 + for bi in bis: + bi["SB_counted"] = False + + + #Always reset this - + Bip.was_error = False + + + if self.in_background: + bpy.ops.wm.save_mainfile() + print_message(context, "Saving file") + + #If this was an S2A bake, also hide the bake objects (only target will be hidden by Copy and Apply) + #NOTE: Target may also be in bake objects list + #NOTE: Target object won't be hidden for first decals run, but that's what we want + if Bip.Sequence.should_run_teardown(): + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.hide_source_objects: #Some kind of S2A bake + hide_obj_names = bake_objects_names + if sbp.targetobj != None: + if sbp.targetobj.name in hide_obj_names: + hide_obj_names = [h for h in hide_obj_names if h != sbp.targetobj.name] + + if sbp.targetobj_cycles != None: + if sbp.targetobj_cycles.name in hide_obj_names: + hide_obj_names = [h for h in hide_obj_names if h != sbp.targetobj_cycles.name] + + for obj_name in hide_obj_names: + obj = context.scene.objects[obj_name] + obj.hide_set(True) + + ##If this was an S2A bake, also hide the cage object if user requested this + if Bip.Sequence.should_run_teardown(): + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.copy_and_apply and sbp.hide_cage_object: + obj = context.scene.render.bake.cage_object + if obj != None: #May not have a cage object actually set + obj.hide_set(True) + + + #Restore render state visibility + for name, hide_render_state in CommonBakePrepandFinish.orig_objects_visible_render: + if ob:= bpy.data.objects.get(name): # Make sure the object still exists + ob.hide_render = hide_render_state + + #Do we want to keep the internal images after export? + #Will not affect background bakes anyway, as we are being called after the file save + del_list = [] + if sbp.save_bakes_external and not sbp.keep_internal_after_export:# and not self.in_background: + print_message(context, "Deleting internal baked images") + del_list = [i.name for i in bpy.data.images if "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id] + + for name in del_list: + i = bpy.data.images.get(name) + if i!=None: + print_message(context, f"Deleting {i.name}") + bpy.data.images.remove(i) + + #Unhide for rendering any objects we hid for the isolation function and clear + for o_name in objects_hidden_for_isolation: + context.scene.objects[o_name].hide_render = False + objects_hidden_for_isolation.clear() + + #Reload all baked images + imgs = [i for i in bpy.data.images if ("SB_bake_operation_id" in i and + i["SB_bake_operation_id"] == self.bake_operation_id)] + for i in imgs: + try: + i.reload() + except: + pass + + #Unhide all objects in SimpleBake bakes + if (c:=bpy.data.collections.get("SimpleBake_Bakes")): + for o in c.objects: + if "SB_bake_operation_id" in o and o["SB_bake_operation_id"] == self.bake_operation_id: + o.hide_render = False + + start_time = CommonBakePrepandFinish.start_time + finish_time = datetime.now() + s = (finish_time-start_time).seconds + print_message(context, f"Time taken - {s} seconds ({floor(s/60)} minutes, {s%60} seconds)") + + Bip.is_baking = False + + blender_refresh() + + #Reverse any sidestepping of geo nodes objects + bpy.ops.simplebake.reverse_geo_nodes_sidestep() + + restore_common_object_state(context) + + # In S2A copy/apply, the "source" that should disappear after creating + # the baked copy is the original target object. + if Bip.Sequence.should_run_teardown(): + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.copy_and_apply and sbp.hide_source_objects: + if sbp.selected_s2a and sbp.targetobj != None: + sbp.targetobj.hide_set(True) + if sbp.cycles_s2a and sbp.targetobj_cycles != None: + sbp.targetobj_cycles.hide_set(True) + + #Renable any addons we disabled + if not self.in_background: + re_enable_addons(context) + + #Restore any handlers that we disabled + for h in CommonBakePrepandFinish.disabled_handlers: + try: + bpy.app.handlers.depsgraph_update_post.append(h) + print_message(context,f"Restored handler {h.__name__}") + except: + print_message(context,f"Failed to restore handler {h.__name__}") + + # Remove merged proxy objects + for n in [o.name for o in bpy.data.objects if "SB_merged_proxy" in o]: + if o:= bpy.data.objects.get(n): + bpy.data.objects.remove(o) + + # Remove excluded-material dummy image + dummy = bpy.data.images.get("SB_excluded_mat_dummy") + if dummy is not None: + bpy.data.images.remove(dummy) + + bpy.ops.simplebake.refresh_bake_object_list() + + #Purge unused data from blend file + prefs = context.preferences.addons[base_package].preferences + if prefs.purge_after_bake: + try: + bpy.ops.outliner.orphans_purge() + except: + pass + + #Restore panel state + bpy.ops.simplebake.local_preset_load_override(name_override="TMP_Panel_Initial_State") + tpn = 'TMP_Panel_Initial_State' + if tpn in sbp: + del sbp[tpn] + + # active_index and active_render restoration — must run AFTER local preset load. + # The preset callback sets active_index based on the panel's uvs property (which was + # snapshotted at bake start), but that may differ from the object's actual active UV + # at bake start (e.g. user had a non-panel UV active). We always restore from the + # snapshotted object state so both paths are consistent. + # + # Two name lists are needed: + # _cur_objs — current sbp.objects_list (proxy name if join_objs_to_proxy was used) + # _orig_objs — original bake object names before proxy creation (from SB_orig_bake_objects) + # restore=True must act on the originals; restore=False acts on the current/proxy object. + _cur_objs = list(bake_objects_names) + if sbp.targetobj is not None: _cur_objs.append(sbp.targetobj.name) + if sbp.targetobj_cycles is not None: _cur_objs.append(sbp.targetobj_cycles.name) + + _orig_objs = list(sbp.get('SB_orig_bake_objects', _cur_objs)) + if sbp.targetobj is not None and sbp.targetobj.name not in _orig_objs: + _orig_objs.append(sbp.targetobj.name) + if sbp.targetobj_cycles is not None and sbp.targetobj_cycles.name not in _orig_objs: + _orig_objs.append(sbp.targetobj_cycles.name) + + if sbp.restore_orig_uv_map: + # Restore both active_index and active_render from pre-bake snapshot on the + # original objects (not the proxy, which is a temporary bake artefact). + for o_name in _orig_objs: + obj = context.scene.objects.get(o_name) + if not obj: continue + orig_active = CommonBakePrepandFinish.orig_object_uvs.get(o_name) + if orig_active: + idx = next((i for i, l in enumerate(obj.data.uv_layers) if l.name == orig_active), None) + if idx is not None: + obj.data.uv_layers.active_index = idx + orig_render = CommonBakePrepandFinish.orig_object_uvs_render.get(o_name) + if orig_render: + for layer in obj.data.uv_layers: + layer.active_render = (layer.name == orig_render) + else: + # restore=False: set both active_index and active_render to the baked UV. + # active_render was intentionally NOT set before the bake (to avoid garbling + # material texture sampling); we set it here now that the bake is complete. + if CommonBakePrepandFinish.new_uv_option: + for o_name in _cur_objs: + obj = context.scene.objects.get(o_name) + if not obj: continue + baked_uv = obj.get("SB_uv_used_for_bake") + if baked_uv: + idx = next((i for i, l in enumerate(obj.data.uv_layers) if l.name == baked_uv), None) + if idx is not None: + obj.data.uv_layers.active_index = idx + for layer in obj.data.uv_layers: + layer.active_render = (layer.name == baked_uv) + + try: context.view_layer.objects.active = CommonBakePrepandFinish.orig_active_object + except: pass + + return {'FINISHED'} + + +class SimpleBake_OT_Merged_Proxy_Create(Operator): + """Create the merged bake proxy for baking multiple objects""" + bl_idname = "simplebake.merged_bake_proxy_create" + bl_description = "Create the merged bake proxy from the bake objects list" + bl_label = "MergedBakeProxy" + + def execute(self, context): + + if not True: + print_message(context, "No need to create merged proxy - finishing") + return {'FINISHED'} + + sbp = context.scene.SimpleBake_Props + scene = context.scene + + # Get originals by name (ignore any missing) + names = [o.name for o in sbp.objects_list] + originals = [bpy.data.objects.get(n) for n in names if bpy.data.objects.get(n)] + + if not force_to_object_mode(context): + return {'CANCELLED'} + bpy.ops.object.select_all(action='DESELECT') + + if originals: + # Select originals and make one active + context.view_layer.objects.active = originals[0] + for ob in originals: + ob.select_set(True) + ob.hide_render = True + + # Duplicate; Blender keeps the NEW duplicates selected + bpy.ops.object.duplicate() + + # Capture the duplicates + duplicates = list(context.selected_objects) + + # --- REVISED: unify *edit-active* UV names on all duplicates (for baking) ---------- + TARGET_UV_NAME = "SimpleBake_Merged_Proxy" + + def _unique_uv_name(uv_layers, base): + existing = {l.name for l in uv_layers} + if base not in existing: + return base + i = 1 + while f"{base}_{i}" in existing: + i += 1 + return f"{base}_{i}" + + for ob in duplicates: + me = getattr(ob, "data", None) + if not me or not getattr(me, "uv_layers", None) or len(me.uv_layers) == 0: + continue + + uvs = me.uv_layers + + # Pick the EDIT-active layer (fallback to first if none flagged for any reason) + layer = next((l for l in uvs if getattr(l, "active", False)), None) or uvs[0] + + # If some *other* layer already has the target name, move it aside to avoid a clash + existing_named = next((l for l in uvs if l.name == TARGET_UV_NAME), None) + if existing_named and existing_named is not layer: + existing_named.name = _unique_uv_name(uvs, TARGET_UV_NAME + "_replaced") + + # Rename the edit-active layer to the target name + layer.name = TARGET_UV_NAME + + # Ensure it remains the edit-active layer (so baking uses it) + # Use index-based setter for robustness across Blender versions + idx = next((i for i, l in enumerate(uvs) if l is layer), None) + if idx is not None: + try: + uvs.active_index = idx + except Exception: + # Fallback toggles + for l in uvs: + try: l.active = False + except Exception: pass + try: layer.active = True + except Exception: pass + + # Do NOT delete other UV layers (e.g. "UVMap"). The joined proxy's + # materials may contain UV Map nodes that reference those layers by name — + # removing them causes those nodes to fall back to wrong/zero coordinates, + # garbling the bake. The proxy only needs TARGET_UV_NAME as the *active* + # (bake-target) UV; all other user UV maps are kept so material sampling works. + # active_render stays on whichever layer the user had it on (typically "UVMap"), + # which is correct: Cycles samples the material via active_render, then writes + # the result to the active (edit-active) TARGET_UV_NAME layout. + # ----------------------------------------------------------------------------------- + + # Apply all modifiers (in order) on each duplicate + for ob in duplicates: + context.view_layer.objects.active = ob + for mod in ob.modifiers[:]: # iterate over a copy + try: + bpy.ops.object.modifier_apply(modifier=mod.name) + except Exception: + pass + + # Join the duplicates + if duplicates: + context.view_layer.objects.active = duplicates[0] + for ob in duplicates: + ob.select_set(True) + bpy.ops.object.join() + + # Rename the joined result + context.active_object.name = "SB_Merged_Proxy" + context.active_object["SB_merged_proxy"] = True + context.active_object["SB_uv_used_for_bake"] = TARGET_UV_NAME + context.active_object.hide_render = False + + #Alter the bake objects list + sbp.objects_list.clear() + bpy.ops.simplebake.add_bake_object_by_name(override_target_obj_name=context.active_object.name) + bpy.ops.simplebake.refresh_bake_object_list() + + return {'FINISHED'} + + +class SimpleBake_OT_Reset_Specials_Materials(Operator): + bl_idname = "simplebake.reset_specials_materials" + bl_label = "Reset All Specials Materials" + bl_description = "Reset all Specials Materials to their SimpleBake default. Takes effect on next bake or preview of that Specials material" + + def execute(self, context): + bpy.ops.simplebake.restore_preview() + removed = 0 + target_names = [f"SimpleBake_{m}" for m in SBConstants.ALL_SPECIALS] + ["SB_col_id"] + for name in target_names: + mat = bpy.data.materials.get(name) + if mat is not None: + bpy.data.materials.remove(mat, do_unlink=True) + removed += 1 + self.report({'INFO'}, f"Removed {removed} SimpleBake specials material(s)") + return {'FINISHED'} + + +classes = ([ + SimpleBake_OT_Pack_Baked_Images, + SimpleBake_OT_Scale_Images_If_Needed, + SimpleBake_OT_Common_Bake_Prep, + SimpleBake_OT_Common_Bake_Finishing, + SimpleBake_OT_Isolate_For_Bake_To_Target, + SimpleBake_OT_Select_Only_This, + SimpleBake_OT_Compositor_Denoise, + SimpleBake_OT_Select_Selected_To_Active, + SimpleBake_OT_Set_Sample_Count, + SimpleBake_OT_Compositor_AA, + SimpleBake_OT_Merged_Proxy_Create, + SimpleBake_OT_Reset_Specials_Materials, + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) + diff --git a/scripts/addons/SimpleBake/bake_operators/cycles_bake_operators.py b/scripts/addons/SimpleBake/bake_operators/cycles_bake_operators.py new file mode 100644 index 0000000..c06ba26 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/cycles_bake_operators.py @@ -0,0 +1,588 @@ +import bpy +import uuid +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, Macro +from bpy.props import StringProperty, BoolProperty + +import sys +from ..background_and_progress import BackgroundBakeTasks, BakeInProgress, BakeProgress +from ..utils import (SBConstants, select_only_this, + show_message_box, specials_selection_to_list, force_to_object_mode, + find_closest_obj) +from ..material_management import SimpleBake_OT_Material_Backup as MatManager +from .specials_bake_operators import add_specials_to_macro, add_specials_to_macro_s2a +from ..messages import print_message +from .common_bake_support import match_high_low_objects, common_prestart, clean_up_after_bg_spawn, CommonBakePrepandFinish + + +import re +from .. import __package__ as base_package + +class SimpleBake_OT_CyclesBake_Bake_Macro(Macro): + bl_idname = "simplebake.cyclesbake_bake_macro" + bl_label = "Go" + bl_options = {'BLOCKING', 'INTERNAL'} + + @classmethod + def clean(cls): + try: + bpy.utils.unregister_class(cls) + except: + pass + bpy.utils.register_class(cls) + +class SimpleBake_OT_Bake_Operation_CyclesBake_s2a_Background(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_cyclesbake_s2a_background" + bl_description = "Commence background bake for CyclesBake S2A" + bl_label = "Bake (Background)" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + + if not common_prestart(context): + return {'CANCELLED'} + + #Start operator call for call back + start_command = "bpy.ops.simplebake.bake_operation_cyclesbake_s2a()" + + #Tag objects in case we want to hide them later + bg_bake_id = str(uuid.uuid4()) + def append_to_bg_hide_list(obj, bg_bake_id): + if "SB_BG_HIDE" in obj: + existing = obj["SB_BG_HIDE"] + existing.append(bg_bake_id) + obj["SB_BG_HIDE"] = existing + else: + obj["SB_BG_HIDE"] = [bg_bake_id] + + if sbp.hide_source_objects: + for obj in sbp.objects_list: + o = obj.obj_point + append_to_bg_hide_list(o, bg_bake_id) + #Also hide target object + if sbp.targetobj_cycles != None: + append_to_bg_hide_list(sbp.targetobj_cycles, bg_bake_id) + + if sbp.hide_cage_object and context.scene.render.bake.cage_object != None: + append_to_bg_hide_list(context.scene.render.bake.cage_object, bg_bake_id) + + + BackgroundBakeTasks(sbp.bgbake_name, sbp.copy_and_apply, start_command, bg_bake_id) + clean_up_after_bg_spawn(context) + return{'FINISHED'} + + +class SimpleBake_OT_Bake_Operation_CyclesBake_S2A(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_cyclesbake_s2a" + bl_description = "Commence bake for CyclesBake S2A" + bl_label = "Bake" + + first_run: BoolProperty(default=True) + last_run: BoolProperty(default=False) + bake_id_override: StringProperty(default="") + + _timer = None + hl_matches = {} + orig_objects_list = [] + was_error = False + objects_list_restored = False + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + if BakeInProgress.is_baking: return False + else: return True + + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + if event.type == 'TIMER': + #Always remove the timer if we are not baking + if not BakeInProgress.is_baking: + context.window_manager.event_timer_remove(self._timer) + + return {'PASS_THROUGH'} + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + if not self.in_background: + if not common_prestart(context): + return {'CANCELLED'} + + #Set bake ID, override if needed + if self.bake_id_override != "": + self.bake_operation_id = self.bake_id_override + else: + self.bake_operation_id = str(uuid.uuid4()) + + #Objects + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + if sbp.targetobj_cycles != None: #Starting checks will catch this later if it's None + target_object_name = sbp.targetobj_cycles.name + if target_object_name in bake_objects_names: + bake_objects_names.remove(target_object_name) + + + + BakeProgress(SBConstants.CYCLESBAKE_S2A, 1) + + #----------------------------------------------------- + + #Sidestep any geometary nodes + bpy.ops.simplebake.sidestep_geo_nodes() + + if not force_to_object_mode(context): + return {'CANCELLED'} + + MACRO = SimpleBake_OT_CyclesBake_Bake_Macro + + #Clean macro + MACRO.clean() + + #Common bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake prep starting" + MACRO.define("SIMPLEBAKE_OT_common_bake_prep") + + #CyclesBake specific bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="CyclesBake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_cyclesbake_specific_bake_prep_and_finish") + op.properties.mode="prepare" + + #Process UVs (target object only) + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Processing UVs" + #op = MACRO.define("SIMPLEBAKE_OT_process_uvs") + + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A target object)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = target_object_name #!!! + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Create bake image if needed for TARGET OBJECT and this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Bake image creation (target object)" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.this_bake = context.scene.cycles.bake_type + op.properties.target_object_name = target_object_name #!! + op.properties.global_mode = SBConstants.CYCLESBAKE_S2A + + #Set bake image on TARGET OBJECT + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Object preperation (target object)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.target_name = target_object_name #!!! + op.properties.this_bake = context.scene.cycles.bake_type + op.properties.only_bake_image_node = True + + #Select objects + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Select objects for S2A bake setup" + op = MACRO.define("SIMPLEBAKE_OT_select_selected_to_active") + op.properties.mode = SBConstants.CYCLESBAKE_S2A + if sbp.isolate_objects: + op = MACRO.define("SIMPLEBAKE_OT_isolate_for_bake_to_target") + op.properties.object_name = target_object_name + op.properties.isolate_s2a = True + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation" + def do_bake(): + op = MACRO.define("OBJECT_OT_bake") + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.use_selected_to_active=True + op.properties.margin = context.scene.render.bake.margin + try: #Magin type added after Blender 3.0 + op.properties.margin_type = context.scene.render.bake.margin_type + except: + pass + op.properties.type = context.scene.cycles.bake_type + op.properties.normal_space = context.scene.render.bake.normal_space + op.properties.normal_r = context.scene.render.bake.normal_r + op.properties.normal_g = context.scene.render.bake.normal_g + op.properties.normal_b = context.scene.render.bake.normal_b + op.properties.max_ray_distance = (sbp.ray_distance * sbp.cage_and_ray_multiplier) + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + #Cage--------- + if context.scene.render.bake.cage_object != None: + op.properties.use_cage = True + op.properties.cage_object = context.scene.render.bake.cage_object.name + elif sbp.cage_smooth_hard == "smooth": + op.properties.use_cage = True + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + elif sbp.cage_smooth_hard == "hard": + op.properties.use_cage = False + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + + #Restore all materials (scene wide) for next bake mode (if any) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + + + #Scale all baked images if needed (catching this latest one) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Scaling images if needed" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = self.bake_operation_id + + #Pack + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Packing images into blend file" + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.bake_mode = context.scene.cycles.bake_type + + #Save bakes external? + if sbp.save_bakes_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving bake externally" + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.bake_mode = context.scene.cycles.bake_type + + #Denoise if requested MUST COME AFTER SAVE EXTERNAL + if sbp.rundenoise: + op = MACRO.define("SIMPLEBAKE_OT_compositor_denoise") + op.properties.bake_operation_id = self.bake_operation_id + + #Cycles specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="CyclesBake specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_cyclesbake_specific_bake_prep_and_finish") + op.properties.mode="finish" + + #Add specials to the macro queue + if len(specials_selection_to_list(context))> 0: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Adding specials to macro queue (CB S2A)" + add_specials_to_macro_s2a(MACRO, context, self.bake_operation_id)#!! + + #All bakes done, copy and apply, save_obj_external or in background?? + if sbp.copy_and_apply or sbp.save_obj_external or self.in_background or sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="All bakes done, creating copy and apply object" + op = MACRO.define("SIMPLEBAKE_OT_copy_and_apply") + op.properties.target_object_name = target_object_name + op.properties.bake_operation_id = self.bake_operation_id + op.properties.global_mode = SBConstants.CYCLESBAKE_S2A + + #Are we applying bakes to original objects? + if sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Applyig bakes to original objects" + op = MACRO.define("SIMPLEBAKE_OT_apply_bakes_to_original") + op.properties.bake_operation_id = self.bake_operation_id + + if sbp.save_obj_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving mesh object externally" + #Export obj? (Will also remove copy and apply object if not needed) + op = MACRO.define("SIMPLEBAKE_OT_save_objects_externally") + op.properties.bake_operation_id = self.bake_operation_id + + #Common bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_common_bake_finishing") + #op.properties.baked_number = sbp.total_bake_images_number + op.properties.bake_operation_id = self.bake_operation_id + + #-------------------------------------------------------------------------------- + # if not self.in_background: #Cases a crash in background! + # message_list=([ + # "Foreground bake has started", + # "Please wait...." + # ]) + # show_message_box(context, message_list, "SIMPLEBAKE - FOREGROUND BAKE STARTED", icon = 'INFO') + + BakeInProgress.is_baking = True + context.window_manager.modal_handler_add(self) + self._timer = context.window_manager.event_timer_add(1, window=context.window) + + bpy.ops.simplebake.cyclesbake_bake_macro('INVOKE_DEFAULT') + + return {'RUNNING_MODAL'} + + + +class SimpleBake_OT_Bake_Operation_CyclesBake_Background(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_cyclesbake_background" + bl_description = "Commence background bake for CyclesBake (non S2A)" + bl_label = "Bake (Background)" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + + if not common_prestart(context): + return {'CANCELLED'} + + #Start operator call for call back + start_command = "bpy.ops.simplebake.bake_operation_cyclesbake()" + + #Tag objects in case we want to hide them later + bg_bake_id = str(uuid.uuid4()) + def append_to_bg_hide_list(obj, bg_bake_id): + if "SB_BG_HIDE" in obj: + existing = obj["SB_BG_HIDE"] + existing.append(bg_bake_id) + obj["SB_BG_HIDE"] = existing + else: + obj["SB_BG_HIDE"] = [bg_bake_id] + + if sbp.hide_source_objects: + for obj in sbp.objects_list: + o = obj.obj_point + append_to_bg_hide_list(o, bg_bake_id) + + BackgroundBakeTasks(sbp.bgbake_name, sbp.copy_and_apply, start_command, bg_bake_id) + clean_up_after_bg_spawn(context) + return{'FINISHED'} + + +class SimpleBake_OT_Bake_Operation_CyclesBake(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_cyclesbake" + bl_description = "Commence bake for CyclesBake (non S2A)" + bl_label = "Bake" + + _timer = None + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + if BakeInProgress.is_baking: return False + else: return True + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + if event.type == 'TIMER': + if not BakeInProgress.is_baking: + context.window_manager.event_timer_remove(self._timer) + return {'PASS_THROUGH'} + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + + if not self.in_background: + if not common_prestart(context): + return {'CANCELLED'} + + bake_operation_id = str(uuid.uuid4()) + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + #if sbp.everything_16bit: s8or16 = "16" + #else: s8or16 = "8" + + + + #Progress Tracking + BakeProgress(SBConstants.CYCLESBAKE, len(bake_objects_names)) + + #----------------------------------------------------- + + if not force_to_object_mode(context): + return {'CANCELLED'} + + MACRO = SimpleBake_OT_CyclesBake_Bake_Macro + + #Clean macro + MACRO.clean() + + #Common bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake prep starting" + MACRO.define("SIMPLEBAKE_OT_common_bake_prep") + + #CyclesBake specific bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="CyclesBake specific bake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_cyclesbake_specific_bake_prep_and_finish") + op.properties.mode="prepare" + + #Process UVs + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Processing UVs" + #op = MACRO.define("SIMPLEBAKE_OT_process_uvs") + + obj_counter = 1 + for obj_name in bake_objects_names: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting object: {obj_name}" + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake mode: {context.scene.cycles.bake_type}" + + last_obj = True if obj_counter == len(bake_objects_names) else False + + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = obj_name + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Create bake image if needed for this object and this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating bake image" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = context.scene.cycles.bake_type + op.properties.target_object_name = obj_name + op.properties.global_mode = SBConstants.CYCLESBAKE + + #Configure all object materials for this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Material prep for {context.scene.cycles.bake_type}" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = obj_name + op.properties.this_bake = context.scene.cycles.bake_type + op.properties.only_bake_image_node = True + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation" + op = MACRO.define("SIMPLEBAKE_OT_select_only_this") + op.properties.object_name = obj_name + if sbp.isolate_objects: + op.properties.isolate = True + def do_bake(): + op = MACRO.define("OBJECT_OT_bake") + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.type = context.scene.cycles.bake_type + op.properties.normal_space = context.scene.render.bake.normal_space + op.properties.normal_r = context.scene.render.bake.normal_r + op.properties.normal_g = context.scene.render.bake.normal_g + op.properties.normal_b = context.scene.render.bake.normal_b + op.properties.margin = context.scene.render.bake.margin + try: #Magin type added after Blender 3.0 + op.properties.margin_type = context.scene.render.bake.margin_type + except: + pass + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Restore all materials (scene wide) for next bake mode (if any) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + #-----------If not a merged bake, done with this image. + #-----------If merged bake, only done if this is last object + if not sbp.merged_bake or (sbp.merged_bake and last_obj): + #LAST OPERATION + + + + + #Scale all baked images if needed + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Scaling images if needed" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = bake_operation_id + + #Pack + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Packing images into blend file" + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = context.scene.cycles.bake_type + + #Save bakes external? + if sbp.save_bakes_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving bake externally" + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = context.scene.cycles.bake_type + + #Denoise if requested MUST COME AFTER SAVE EXTERNAL + if sbp.rundenoise: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Running compositor denoiser" + op = MACRO.define("SIMPLEBAKE_OT_compositor_denoise") + op.properties.bake_operation_id = bake_operation_id + + #AA if requested MUST COME AFTER SAVE EXTERNAL + # if sbp.do_aa: + # MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Running compositor aa" + # op = MACRO.define("SIMPLEBAKE_OT_compositor_aa") + # op.properties.bake_operation_id = bake_operation_id + + #---Done with this object--- + obj_counter += 1 + + #---Done with all objects--- + + + #CyclesBake specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="CyclesBake specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_cyclesbake_specific_bake_prep_and_finish") + op.properties.mode="finish" + + #Add specials to the macro queue + if len(specials_selection_to_list(context))> 0: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Adding specials to macro queue" + add_specials_to_macro(MACRO, context, bake_operation_id, bake_objects_names) + + #All bakes done, copy and apply, save_obj_external or in background?? + if sbp.copy_and_apply or sbp.save_obj_external or self.in_background or sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="All bakes done, creating copy and apply" + for obj_name in list(sbp['SB_orig_bake_objects']): + op = MACRO.define("SIMPLEBAKE_OT_copy_and_apply") + op.properties.target_object_name = obj_name + op.properties.bake_operation_id = bake_operation_id + op.properties.global_mode = SBConstants.CYCLESBAKE + + #Are we applying bakes to original objects? + if sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Applyig bakes to original objects" + op = MACRO.define("SIMPLEBAKE_OT_apply_bakes_to_original") + op.properties.bake_operation_id = bake_operation_id + + if sbp.save_obj_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving mesh object externally" + #Export obj? (Will also remove copy and apply object if not needed) + op = MACRO.define("SIMPLEBAKE_OT_save_objects_externally") + op.properties.bake_operation_id = bake_operation_id + + #Common bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_common_bake_finishing") + #op.properties.baked_number = sbp.total_bake_images_number + op.properties.bake_operation_id = bake_operation_id + + #-------------------------------------------------------------------------------- + if not self.in_background: #Cases a crash in background! + message_list=([ + "Foreground bake has started", + "Please wait...." + ]) + show_message_box(context, message_list, "SIMPLEBAKE - FOREGROUND BAKE STARTED", icon = 'INFO') + + BakeInProgress.is_baking = True + context.window_manager.modal_handler_add(self) + self._timer = context.window_manager.event_timer_add(1, window=context.window) + + bpy.ops.simplebake.cyclesbake_bake_macro('INVOKE_DEFAULT') + + + + return {'RUNNING_MODAL'} + +classes = ([ + SimpleBake_OT_Bake_Operation_CyclesBake, + SimpleBake_OT_Bake_Operation_CyclesBake_S2A, + SimpleBake_OT_CyclesBake_Bake_Macro, + SimpleBake_OT_Bake_Operation_CyclesBake_Background, + SimpleBake_OT_Bake_Operation_CyclesBake_s2a_Background + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/cyclesbake_support_operators.py b/scripts/addons/SimpleBake/bake_operators/cyclesbake_support_operators.py new file mode 100644 index 0000000..af48684 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/cyclesbake_support_operators.py @@ -0,0 +1,59 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty + +from ..utils import SBConstants +from ..messages import print_message + +class SimpleBake_OT_CyclesBake_Specific_Bake_Prep_And_Finish(Operator): + """Preperation and finishing specific to PBR baking""" + bl_idname = "simplebake.cyclesbake_specific_bake_prep_and_finish" + bl_description = "Preperation or Finish for CyclesBake bake type" + bl_label = "Prepare or Finish" + + mode: StringProperty() + + orig_sample_count = 0 + orig_object_render_vis = {} + + def finish(self, context): + print_message(context, "CyclesBake specific bake finishing actions") + + #Restore original object visibility + for obj in context.scene.objects: + if obj.name in __class__.orig_object_render_vis: + obj.hide_render = __class__.orig_object_render_vis[obj.name] + + def prepare(self, context): + print_message(context, "CyclesBake specific bake prep actions") + + #Record original object visibility + for obj in context.scene.objects: + __class__.orig_object_render_vis[obj.name] = obj.hide_render + + + def execute(self, context): + if self.mode == "prepare": + self.prepare(context) + elif self.mode == "finish": + self.finish(context) + + return {'FINISHED'} + + + +classes = ([ + SimpleBake_OT_CyclesBake_Specific_Bake_Prep_And_Finish + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/decal_operators.py b/scripts/addons/SimpleBake/bake_operators/decal_operators.py new file mode 100644 index 0000000..26075a8 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/decal_operators.py @@ -0,0 +1,424 @@ +#TODO - Background? + +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, Macro +import uuid +import sys + +from .common_bake_support import CommonBakePrepandFinish, common_prestart, clean_up_after_bg_spawn +from ..utils import (pbr_selections_to_list, specials_selection_to_list, SBConstants, force_to_object_mode) +from ..background_and_progress import BakeInProgress, BakeProgress, BackgroundBakeTasks +from ..material_management import SimpleBake_OT_Material_Backup as MatManager +from .pbr_bake_support_operators import sample_nodes_present +from .specials_bake_operators import add_specials_to_macro_s2a +from ..messages import print_message +from .. import __package__ as base_package + +def determine_cage_settings(context, op, lo, MACRO): + + sbp = context.scene.SimpleBake_Props + + #Cage--------- + #If we are auto matching in name mode, try to auto assign a cage + if context.scene.render.bake.cage_object != None: + op.properties.use_cage = True + op.properties.cage_object = context.scene.render.bake.cage_object.name + elif sbp.cage_smooth_hard == "smooth": + op.properties.use_cage = True + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + elif sbp.cage_smooth_hard == "hard": + op.properties.use_cage = False + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + + return True + +def set_bake_op_settings(context, op, bake_mode, s2a=True): + + sbp = context.scene.SimpleBake_Props + + if s2a: + op.properties.use_selected_to_active=True + + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.margin = context.scene.render.bake.margin + try: op.properties.margin_type = context.scene.render.bake.margin_type + except:pass + + op.properties.type = "NORMAL" if bake_mode == SBConstants.PBR_NORMAL else "EMIT" + op.properties.max_ray_distance = (sbp.ray_distance * sbp.cage_and_ray_multiplier) + +def image_post_processing(context, MACRO, bake_mode, bake_operation_id): + + sbp = context.scene.SimpleBake_Props + + + #Scale all baked images if needed (catching this latest one) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Scaling images if needed" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = bake_operation_id + + #Pack them + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + #Save bakes external + if sbp.save_bakes_external: + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + #MUST COME AFTER SAVE EXTERNAL + #Glossiness and DirectX + #if sbp.rough_glossy_switch == SBConstants.PBR_GLOSSY: + + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Inverting roughness to create glossy" + op = MACRO.define("SIMPLEBAKE_OT_invert_roughness_to_glossy") + op.properties.bake_operation_id = bake_operation_id + + if sbp.normal_format_switch == SBConstants.NORMAL_DIRECTX: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating DirectX normal from OpenGL map" + op = MACRO.define("SIMPLEBAKE_OT_create_directx_normal") + op.properties.bake_operation_id = bake_operation_id + +class SimpleBake_OT_Decals_Operation_Background(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_decals_background" + bl_description = "Commence background bake for Decals" + bl_label = "Bake (Background)" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + + if not common_prestart(context, decals=True): + return {'CANCELLED'} + + #Start operator call for call back + start_command = "bpy.ops.simplebake.bake_operation_decals()" + + #Tag objects in case we want to hide them later + bg_bake_id = str(uuid.uuid4()) + def append_to_bg_hide_list(obj, bg_bake_id): + if "SB_BG_HIDE" in obj: + existing = obj["SB_BG_HIDE"] + existing.append(bg_bake_id) + obj["SB_BG_HIDE"] = existing + else: + obj["SB_BG_HIDE"] = [bg_bake_id] + + if sbp.hide_source_objects: + for obj in sbp.objects_list: + o = obj.obj_point + append_to_bg_hide_list(o, bg_bake_id) + #Also hide target object + if sbp.targetobj != None: + append_to_bg_hide_list(sbp.targetobj, bg_bake_id) + + if sbp.hide_cage_object and context.scene.render.bake.cage_object != None: + append_to_bg_hide_list(context.scene.render.bake.cage_object, bg_bake_id) + + + BackgroundBakeTasks(sbp.bgbake_name, sbp.copy_and_apply, start_command, bg_bake_id) + clean_up_after_bg_spawn(context) + return{'FINISHED'} + + +class SimpleBake_OT_Decals_Macro(Macro): + bl_idname = "simplebake.decals_macro" + bl_options = {'BLOCKING', 'INTERNAL'} + bl_label = "Go" + + @classmethod + def clean(cls): + try: + bpy.utils.unregister_class(cls) + except: + pass + bpy.utils.register_class(cls) + +class SimpleBake_OT_Decals_Operation(Operator): + """Start PBR Decals Bake""" + bl_idname = "simplebake.bake_operation_decals" + bl_description = "Commence Decals Bake" + bl_label = "Bake" + + hl_matches = {} + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + if event.type == 'TIMER': + if not BakeInProgress.is_baking: + context.window_manager.event_timer_remove(self._timer) + return {'PASS_THROUGH'} + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + if not self.in_background: + if not common_prestart(context, decals=True): + return {'CANCELLED'} + + orig_objects_list = [i.obj_point for i in sbp.objects_list] + + + if not force_to_object_mode(context): + return {'CANCELLED'} + + #Run after starting checks (and disable impossible) + bake_modes = pbr_selections_to_list(context) + + #Set up our macro + MACRO = SimpleBake_OT_Decals_Macro + MACRO.clean() + + #Bake op ID + bake_operation_id = str(uuid.uuid4()) + + + #Now we know what we are doing, call bake progress + mode = SBConstants.PBRS2A_DECALS + BakeProgress(mode, len(orig_objects_list)) + + #Common bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake prep starting" + MACRO.define("SIMPLEBAKE_OT_common_bake_prep") + + #Pre-bake (node groups and then reroute nodes) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Pre bake starting" + if not bpy.app.version >= (4,1,0): + MACRO.define("SIMPLEBAKE_OT_pbr_pre_bake_old") + MACRO.define("SIMPLEBAKE_OT_remove_reroutes") + + #PBR specific bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="prepare" + + #Process UVs (Op will adjust for auto match) + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Processing UVs" + #op = MACRO.define("SIMPLEBAKE_OT_process_uvs") + + #Will boost be needed for later on? + boost_needed = False + for o in orig_objects_list: + boost_needed = True if sample_nodes_present(context, o.name) else boost_needed + + #Do the S2A element of the bake + # + for bake_mode in bake_modes: + + #Create image for this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Bake image creation (target object)" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = sbp.targetobj.name + op.properties.global_mode = SBConstants.PBRS2A #Just used for the image name + + #Backup all materials on target object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A source objects)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = sbp.targetobj.name + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Prepare (create the image node) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Object preparation (Auto Match Lows)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = sbp.targetobj.name + op.properties.this_bake = bake_mode + op.properties.only_bake_image_node = True + + #Now prepare the decal objects + for obj in orig_objects_list: + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (Decal Objects)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = obj.name + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Prepare high for this bake mode (no image) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material prep (Decal objects)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = obj.name + op.properties.this_bake = bake_mode + op.properties.no_bake_image_node = True + + #Done preparing Decal objects + + #Select specific high and low objects + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Select objects for S2A auto match setup" + op = MACRO.define("SIMPLEBAKE_OT_select_selected_to_active") + op.properties.mode = SBConstants.PBRS2A + if sbp.isolate_objects: + op = MACRO.define("SIMPLEBAKE_OT_isolate_for_bake_to_target") + op.properties.object_name = sbp.targetobj.name + op.properties.isolate_s2a = True + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation" + def do_bake(): + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + op.properties.sample_count = sbp.boosted_sample_count if boost_needed else prefs.pbr_sample_count2 + + op = MACRO.define("OBJECT_OT_bake") + #Set the core bake options for the bake operation + set_bake_op_settings(context, op, bake_mode) + #Work out cage settings + determine_cage_settings(context, op, sbp.targetobj.name, MACRO) + + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Do scale, glossiness, directx, pack, denoise, export etc. + image_post_processing(context, MACRO, bake_mode, bake_operation_id) + + #Restore the materials WORKING MODE + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + #And now the non-S2A element of the bake + + #orig_bake_operation_id = bake_operation_id + bake_operation_id = "DECALSBASE_" + bake_operation_id + + for bake_mode in bake_modes: + + #Create image for this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Bake image creation (target object)" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = sbp.targetobj.name + op.properties.global_mode = SBConstants.PBR #Just used for the image name + + #Backup all materials on target object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A source objects)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = sbp.targetobj.name + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Prepare + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Object preparation (Auto Match Lows)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = sbp.targetobj.name + op.properties.this_bake = bake_mode + + #Select + op = MACRO.define("SIMPLEBAKE_OT_select_only_this") + op.properties.object_name = sbp.targetobj.name + if sbp.isolate_objects: + op.properties.isolate = True + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation (Non-S2A)" + def do_bake(): + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + op.properties.sample_count = sbp.boosted_sample_count if boost_needed else prefs.pbr_sample_count2 + + op = MACRO.define("OBJECT_OT_bake") + #Set the core bake options for the bake operation + set_bake_op_settings(context, op, bake_mode, s2a=False) + + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Do scale, glossiness, directx, pack, denoise, export etc. + image_post_processing(context, MACRO, bake_mode, bake_operation_id) + + #Restore the materials WORKING MODE + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + #Add specials to the macro queue + if len(specials_selection_to_list(context))> 0: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Adding specials to macro queue" + add_specials_to_macro_s2a(MACRO, context, bake_operation_id)#!! + + #Copy and apply + if sbp.copy_and_apply or sbp.save_obj_external or sbp.apply_bakes_to_original or self.in_background: + op = MACRO.define("SIMPLEBAKE_OT_copy_and_apply") + op.properties.target_object_name = sbp.targetobj.name + op.properties.bake_operation_id = bake_operation_id + op.properties.global_mode = SBConstants.PBRS2A + op.properties.decals_override = True + #Just PBR or CB would be OK too + + #Are we applying bakes to original objects? + if sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Applyig bakes to original objects" + op = MACRO.define("SIMPLEBAKE_OT_apply_bakes_to_original") + op.properties.bake_operation_id = bake_operation_id + + #Save mesh external + if sbp.save_obj_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving mesh object externally" + #Export obj? (Will also remove copy and apply object if not needed) + op = MACRO.define("SIMPLEBAKE_OT_save_objects_externally") + op.properties.bake_operation_id = bake_operation_id + + #PBR specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="finish" + + #Common bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_common_bake_finishing") + op.properties.bake_operation_id = bake_operation_id + + + # #Multiply Diffuse by AO? + # if sbp.multiply_diffuse_ao == "diffusexao": + # op = MACRO.define("SIMPLEBAKE_OT_multiply_ao") + # op.properties.bake_operation_id = bake_operation_id + + #Channel packing x2 + cp_op = "SIMPLEBAKE_OT_channel_packing" + op = MACRO.define(cp_op) + op.properties.bake_operation_id = bake_operation_id + op.properties.global_mode = "BaseObject" #Only used for the texture name + op = MACRO.define(cp_op) + op.properties.bake_operation_id = bake_operation_id.replace("DECALSBASE_","") + op.properties.global_mode = "Decals" #Only used for the texture name + + + + #---------------------------------------------------------------------------------- + + #Setup and then start the Macro + BakeInProgress.is_baking = True + context.window_manager.modal_handler_add(self) + self._timer = context.window_manager.event_timer_add(1, window=context.window) + + #Run macro + bpy.ops.simplebake.decals_macro('INVOKE_DEFAULT') + return {'RUNNING_MODAL'} + + +classes = ([ + SimpleBake_OT_Decals_Operation, + SimpleBake_OT_Decals_Macro, + SimpleBake_OT_Decals_Operation_Background + ]) +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/image_sequence.py b/scripts/addons/SimpleBake/bake_operators/image_sequence.py new file mode 100644 index 0000000..ebae7ac --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/image_sequence.py @@ -0,0 +1,135 @@ +"""Image sequence bake operator. + +Drives a frame-by-frame repeat of the main PBR / Cycles bake operator. + +Architecture: + - This is a modal operator that owns Blender's event loop for the + duration of the sequence. A 1-second timer polls ``Bip.is_baking`` + between frames — this is coarse but reliable across very different + bake durations. + - Because a modal operator needs the event loop, sequence bakes cannot + run under background mode (which fires off a headless subprocess + and exits). The UI disables background mode whenever the image + sequence toggle is on. + - This operator is the single writer of ``Bip.Sequence`` state. All + other modules must consume that state via + ``Bip.Sequence.should_run_setup`` / ``should_run_teardown`` rather + than poking the raw flags. +""" + + +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty +from ..background_and_progress import BakeInProgress as Bip +from ..messages import print_message + + +def _resolve_bpy_op(cmd): + """Resolve ``"simplebake.foo"`` → ``bpy.ops.simplebake.foo``. + + Replaces an older ``eval()``-based call. Raises ValueError if the + operator can't be found or isn't callable. + """ + parts = cmd.split(".") + op = bpy.ops + for part in parts: + op = getattr(op, part, None) + if op is None: + raise ValueError(f"Unknown bpy operator: {cmd}") + if not callable(op): + raise ValueError(f"Resolved object is not callable: {cmd}") + return op + + +class SimpleBake_OT_Image_Sequence(Operator): + """SimpleBake Image Sequence Operator""" + bl_idname = "simplebake.image_sequence" + bl_label = "SimpleBake Image Squence Bake Operator" + + _timer = [] + start_frame = 0 + end_frame = 0 + + cmd: StringProperty() + + def modal(self, context, event): + if event.type == 'TIMER': + + if Bip.was_error: + print_message(context, "Cancelling Image Sequence timer after error") + self.cancel(context) + return {'CANCELLED'} + + cur_frame = context.scene.frame_current + if cur_frame < self.end_frame: + if not Bip.is_baking: + + #Must be after the first run + Bip.Sequence.is_first_frame = False + + #Check if this will be the last run + if cur_frame + 1 == self.end_frame: + #From here on the per-frame teardown operators will + #run (master restore, copy-and-apply, completion + #message). common_bake_support calls + #Bip.Sequence.reset() once the last frame finishes. + Bip.Sequence.is_last_frame = True + + #Advance frame and run the bake again + context.scene.frame_current += 1 + print_message(context, f"Image sequence calling main operator for frame {context.scene.frame_current}") + _resolve_bpy_op(self.cmd)() + else: + self.cancel(context) + return {'CANCELLED'} + + return {'PASS_THROUGH'} + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + print_message(context, f"Image sequence calling main operator: {self.cmd}") + + self.start_frame = sbp.image_sequence_start_frame + self.end_frame = sbp.image_sequence_end_frame + + # Inclusive range: we bake at frames start, start+1, ..., end. + Bip.Sequence.active = True + Bip.Sequence.is_first_frame = True + Bip.Sequence.is_last_frame = (self.start_frame == self.end_frame) + Bip.Sequence.total_frames = (self.end_frame - self.start_frame) + 1 + + context.scene.frame_set(self.start_frame) + + wm = context.window_manager + self._timer.append(wm.event_timer_add(1.0, window=context.window)) + wm.modal_handler_add(self) + + #First run of the chosen command + _resolve_bpy_op(self.cmd)() + + return {'RUNNING_MODAL'} + + def cancel(self, context): + wm = context.window_manager + for t in self._timer: + wm.event_timer_remove(t) + + +classes = ([ + SimpleBake_OT_Image_Sequence + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/pbr_bake_operators.py b/scripts/addons/SimpleBake/bake_operators/pbr_bake_operators.py new file mode 100644 index 0000000..86a8936 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/pbr_bake_operators.py @@ -0,0 +1,705 @@ +import bpy +import uuid +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, Macro +from bpy.props import StringProperty, BoolProperty + + +import sys +from ..background_and_progress import BackgroundBakeTasks, BakeInProgress, BakeProgress +from ..utils import (SBConstants, pbr_selections_to_list, + select_only_this, show_message_box, specials_selection_to_list, force_to_object_mode) +from ..material_management import SimpleBake_OT_Material_Backup as MatManager +from .specials_bake_operators import add_specials_to_macro, add_specials_to_macro_s2a +from .pbr_bake_support_operators import sample_nodes_present +from .common_bake_support import CommonBakePrepandFinish, match_high_low_objects, common_prestart, clean_up_after_bg_spawn + +from ..messages import print_message +from .. import __package__ as base_package +#import re + + +class SimpleBake_OT_PBR_Bake_Macro(Macro): + bl_idname = "simplebake.pbr_bake_macro" + bl_label = "Go" + bl_options = {'BLOCKING', 'INTERNAL'} + + @classmethod + def clean(cls): + try: + bpy.utils.unregister_class(cls) + except: + pass + bpy.utils.register_class(cls) + +class SimpleBake_OT_PBR_Bake_Macro_S2A(Macro): + bl_idname = "simplebake.pbr_bake_macro_s2a" + bl_label = "Go" + bl_options = {'BLOCKING', 'INTERNAL'} + + @classmethod + def clean(cls): + try: + bpy.utils.unregister_class(cls) + except: + pass + bpy.utils.register_class(cls) + +class SimpleBake_OT_Bake_Operation_PBRS2A_Background(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_pbrs2a_background" + bl_description = "Commence background bake for PBR S2A" + bl_label = "Bake (Background)" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + if not common_prestart(context): + return {'CANCELLED'} + + #Start operator call for call back + start_command = "bpy.ops.simplebake.bake_operation_pbrs2a()" + + #Tag objects in case we want to hide them later + bg_bake_id = str(uuid.uuid4()) + def append_to_bg_hide_list(obj, bg_bake_id): + if "SB_BG_HIDE" in obj: + existing = obj["SB_BG_HIDE"] + existing.append(bg_bake_id) + obj["SB_BG_HIDE"] = existing + else: + obj["SB_BG_HIDE"] = [bg_bake_id] + + if sbp.hide_source_objects: + for obj in sbp.objects_list: + o = obj.obj_point + append_to_bg_hide_list(o, bg_bake_id) + #Also hide target object + if sbp.targetobj != None: + append_to_bg_hide_list(sbp.targetobj, bg_bake_id) + + if sbp.hide_cage_object and context.scene.render.bake.cage_object != None: + append_to_bg_hide_list(context.scene.render.bake.cage_object, bg_bake_id) + + BackgroundBakeTasks(sbp.bgbake_name, sbp.copy_and_apply, start_command, bg_bake_id) + + clean_up_after_bg_spawn(context) + return{'FINISHED'} + + +class SimpleBake_OT_Bake_Operation_PBRS2A(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_pbrs2a" + bl_description = "Commence bake for PBR S2A" + bl_label = "Bake" + + first_run: BoolProperty(default=True) + last_run: BoolProperty(default=False) + + bake_id_override: StringProperty(default="") + + _timer = None + hl_matches = {} + orig_objects_list = [] + was_error = False + objects_list_restored = False + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + if BakeInProgress.is_baking: return False + else: return True + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + if event.type == 'TIMER': + + #Always remove the timer if we are not baking + if not BakeInProgress.is_baking: + context.window_manager.event_timer_remove(self._timer) + + return {'PASS_THROUGH'} + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + + if not self.in_background: + if not common_prestart(context): + return {'CANCELLED'} + + #Set bake ID, override if needed + if self.bake_id_override != "": + self.bake_operation_id = self.bake_id_override + else: + self.bake_operation_id = str(uuid.uuid4()) + + #Objects + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + if sbp.targetobj != None: #Starting checks will catch this later if it's None + target_object_name = sbp.targetobj.name + if target_object_name in bake_objects_names: + bake_objects_names.remove(target_object_name) + + + BakeProgress(SBConstants.PBRS2A, len(bake_objects_names)) + + #----------------------------------------------------- + + if not force_to_object_mode(context): + return {'CANCELLED'} + + #After starting checks (and disable impossible) + pbr_bake_modes = pbr_selections_to_list(context) + + MACRO = SimpleBake_OT_PBR_Bake_Macro_S2A + + #Clean macro + MACRO.clean() + + #Common bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake prep starting" + MACRO.define("SIMPLEBAKE_OT_common_bake_prep") + + #Pre-bake (node groups and then reroute nodes) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Pre bake starting" + if not bpy.app.version >= (4,1,0): + MACRO.define("SIMPLEBAKE_OT_pbr_pre_bake_old") + MACRO.define("SIMPLEBAKE_OT_remove_reroutes") + + #PBR specific bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="prepare" + + #Process UVs (target object only) + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Processing UVs" + #op = MACRO.define("SIMPLEBAKE_OT_process_uvs") + + #For each bake mode + for bake_mode in pbr_bake_modes: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake mode: {bake_mode}" + + boost_needed = False + #For each bake object + for obj_name in bake_objects_names: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting object: {obj_name}" + + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A source objects)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = obj_name + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Prepare all materials for this bake mode (no image) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material prep (S2A)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.target_name = obj_name + op.properties.this_bake = bake_mode + op.properties.no_bake_image_node = True + #Done with this bake object + + #Note now if we need boost + boost_needed = True if sample_nodes_present(context, obj_name) else boost_needed + + #Target object only now + + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (S2A target object)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = target_object_name #!!! + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Create bake image if needed for TARGET OBJECT and this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Bake image creation (target object)" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = target_object_name #!! + op.properties.global_mode = SBConstants.PBRS2A + + #Set bake image on TARGET OBJECT + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Object preperation (target object)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.target_name = target_object_name #!!! + op.properties.this_bake = bake_mode + op.properties.only_bake_image_node = True + + #Select objects + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Select objects for S2A bake setup" + op = MACRO.define("SIMPLEBAKE_OT_select_selected_to_active") + op.properties.mode = SBConstants.PBRS2A + if sbp.isolate_objects: + op = MACRO.define("SIMPLEBAKE_OT_isolate_for_bake_to_target") + op.properties.object_name = target_object_name + op.properties.isolate_s2a = True + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation" + def do_bake(): + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + + #Sample count + op.properties.sample_count = sbp.boosted_sample_count if boost_needed else prefs.pbr_sample_count2 + + op = MACRO.define("OBJECT_OT_bake") + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.use_selected_to_active=True + op.properties.margin = context.scene.render.bake.margin + try: #Magin type added after Blender 3.0 + op.properties.margin_type = context.scene.render.bake.margin_type + except: + pass + if bake_mode == SBConstants.PBR_NORMAL: op.properties.type = "NORMAL" + else: op.properties.type = "EMIT" + op.properties.max_ray_distance = (sbp.ray_distance * sbp.cage_and_ray_multiplier) + #Cage--------- + if context.scene.render.bake.cage_object != None: + op.properties.use_cage = True + op.properties.cage_object = context.scene.render.bake.cage_object.name + elif sbp.cage_smooth_hard == "smooth": + op.properties.use_cage = True + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + elif sbp.cage_smooth_hard == "hard": + op.properties.use_cage = False + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Restore all materials (scene wide) for next bake mode (if any) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + #Scale all baked images if needed (catching this latest one) + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Scaling images if needed" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = self.bake_operation_id + + #Pack + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Packing images into blend file" + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.bake_mode = bake_mode + + #Save bakes external? + if sbp.save_bakes_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving bake externally" + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = self.bake_operation_id + op.properties.bake_mode = bake_mode + + #MUST COME AFTER SAVE EXTERNAL + #Should we invert roughness to glossy or normal map to DirecX? + #if bake_mode == SBConstants.PBR_GLOSSY and sbp.rough_glossy_switch == SBConstants.PBR_GLOSSY: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Inverting roughness to create glossy" + op = MACRO.define("SIMPLEBAKE_OT_invert_roughness_to_glossy") + op.properties.bake_operation_id = self.bake_operation_id + + if bake_mode == SBConstants.PBR_NORMAL and sbp.normal_format_switch == SBConstants.NORMAL_DIRECTX: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating DirectX normal from OpenGL map" + op = MACRO.define("SIMPLEBAKE_OT_create_directx_normal") + op.properties.bake_operation_id = self.bake_operation_id + + #Done with this bake mode + + + #--Done with all bake modes + + #PBR specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="finish" + + #Add specials to the macro queue + if len(specials_selection_to_list(context))> 0: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Adding specials to macro queue" + add_specials_to_macro_s2a(MACRO, context, self.bake_operation_id)#!! + + #All bakes done, copy and apply, save_obj_external or in background?? + if not (sbp.selected_s2a == True and sbp.s2a_opmode == "decals"): + if sbp.copy_and_apply or sbp.save_obj_external or self.in_background or sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="All bakes done, creating copy and apply object" + op = MACRO.define("SIMPLEBAKE_OT_copy_and_apply") + op.properties.target_object_name = target_object_name + op.properties.bake_operation_id = self.bake_operation_id + op.properties.global_mode = SBConstants.PBRS2A + + #Are we applying bakes to original objects? + if sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Applyig bakes to original objects" + op = MACRO.define("SIMPLEBAKE_OT_apply_bakes_to_original") + op.properties.bake_operation_id = self.bake_operation_id + + if sbp.save_obj_external and not (sbp.selected_s2a == True and sbp.s2a_opmode == "decals"): #Cos decals will be saved on the second run of the non-S2A operator + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving mesh object externally" + #Export obj? (Will also remove copy and apply object if not needed) + op = MACRO.define("SIMPLEBAKE_OT_save_objects_externally") + op.properties.bake_operation_id = self.bake_operation_id + + #Multiply Diffuse by AO? + if sbp.multiply_diffuse_ao == "diffusexao": + op = MACRO.define("SIMPLEBAKE_OT_multiply_ao") + op.properties.bake_operation_id = self.bake_operation_id + + #Channel packing + cp_op = "SIMPLEBAKE_OT_channel_packing" + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Channel packing - {cp_op}" + op = MACRO.define(cp_op) + op.properties.bake_operation_id = self.bake_operation_id + op.properties.pbrtarget_only = True + op.properties.global_mode = SBConstants.PBRS2A + + #Common bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_common_bake_finishing") + #op.properties.baked_number = sbp.total_bake_images_number + op.properties.bake_operation_id = self.bake_operation_id + if sbp.selected_s2a == True and sbp.s2a_opmode == "decals": + op.properties.decal_first_run=True + + #-------------------------------------------------------------------------------- + if not self.in_background: #Cases a crash in background! + message_list=([ + "Foreground bake has started", + "Please wait...." + ]) + show_message_box(context, message_list, "SIMPLEBAKE - FOREGROUND BAKE STARTED", icon = 'INFO') + + BakeInProgress.is_baking = True + context.window_manager.modal_handler_add(self) + self._timer = context.window_manager.event_timer_add(1, window=context.window) + + + bpy.ops.simplebake.pbr_bake_macro_s2a('INVOKE_DEFAULT') + + + return {'RUNNING_MODAL'} + + + +class SimpleBake_OT_Bake_Operation_PBR_Background(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_pbr_background" + bl_description = "Commence background bake for PBR (non S2A)" + bl_label = "Bake (Background)" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + if not common_prestart(context): + return {'CANCELLED'} + + #Start operator call for call back + start_command = "bpy.ops.simplebake.bake_operation_pbr()" + + #Tag objects in case we want to hide them later + bg_bake_id = str(uuid.uuid4()) + def append_to_bg_hide_list(obj, bg_bake_id): + if "SB_BG_HIDE" in obj: + existing = obj["SB_BG_HIDE"] + existing.append(bg_bake_id) + obj["SB_BG_HIDE"] = existing + else: + obj["SB_BG_HIDE"] = [bg_bake_id] + + if sbp.hide_source_objects: + for obj in sbp.objects_list: + o = obj.obj_point + append_to_bg_hide_list(o, bg_bake_id) + + BackgroundBakeTasks(sbp.bgbake_name, sbp.copy_and_apply, start_command, bg_bake_id) + clean_up_after_bg_spawn(context) + return{'FINISHED'} + +class SimpleBake_OT_Bake_Operation_PBR(Operator): + """Start the bake operation""" + bl_idname = "simplebake.bake_operation_pbr" + bl_description = "Commence bake for PBR (non S2A)" + bl_label = "Bake" + + bake_id_override: StringProperty(default="") + decals_override: BoolProperty(default=False) + + _timer = None + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + if BakeInProgress.is_baking: return False + else: return True + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + if event.type == 'TIMER': + if not BakeInProgress.is_baking: + context.window_manager.event_timer_remove(self._timer) + return {'PASS_THROUGH'} + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + if not self.in_background: + if not common_prestart(context): + return {'CANCELLED'} + + #Bake operation ID + bake_operation_id = self.bake_id_override if self.bake_id_override != "" else str(uuid.uuid4()) + + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + BakeProgress(SBConstants.PBR, len(bake_objects_names)) + + #After starting checks (and disable impossible) + pbr_bake_modes = pbr_selections_to_list(context) + + + #Macro + MACRO = SimpleBake_OT_PBR_Bake_Macro + MACRO.clean() + + #-----------DEF NEEDED ABOVE---------------------------- + #--------------------------------------------------------------------- + + + #----------------------------------------------------- + + if not force_to_object_mode(context): + return {'CANCELLED'} + + #Common bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake prep starting" + MACRO.define("SIMPLEBAKE_OT_common_bake_prep") + + #Pre-bake (node groups) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Pre bake starting" + if not bpy.app.version >= (4,1,0): + MACRO.define("SIMPLEBAKE_OT_pbr_pre_bake_old") + MACRO.define("SIMPLEBAKE_OT_remove_reroutes") + + #PBR specific bake prep + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake prep starting" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="prepare" + + #Process UVs + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Processing UVs" + #op = MACRO.define("SIMPLEBAKE_OT_process_uvs") + + #Merged bake proxy if needed + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating merged bake proxy if needed" + #op = MACRO.define("SIMPLEBAKE_OT_merged_bake_proxy_create") + + obj_counter = 1 + for obj_name in bake_objects_names: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting object: {obj_name}" + + last_obj = True if obj_counter == len(bake_objects_names) else False + + for bake_mode in pbr_bake_modes: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake mode: {bake_mode}" + + #Backup all materials on object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Material backup (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.target_object_name = obj_name + op.properties.mode = MatManager.MODE_WORKING_BACKUP + + #Create bake image if needed for this object and this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating bake image" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = obj_name + op.properties.global_mode = SBConstants.PBR + op.properties.bake_mode = bake_mode + + #Configure all object materials for this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Material prep for {bake_mode}" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = obj_name + op.properties.this_bake = bake_mode + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Starting bake operation" + op = MACRO.define("SIMPLEBAKE_OT_select_only_this") + op.properties.object_name = obj_name + if sbp.isolate_objects: + op.properties.isolate = True + + def do_bake(): + #Sample count + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + op.properties.sample_count = sbp.boosted_sample_count\ + if sample_nodes_present(context, obj_name) else prefs.pbr_sample_count2 + + op = MACRO.define("OBJECT_OT_bake") + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.margin = context.scene.render.bake.margin + try: #Magin type added after Blender 3.0 + op.properties.margin_type = context.scene.render.bake.margin_type + except: + pass + if bake_mode == SBConstants.PBR_NORMAL: op.properties.type = "NORMAL" + else: op.properties.type = "EMIT" + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Restore all materials (scene wide) for next bake mode (if any) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Materials restore (working mode)" + op = MACRO.define("SIMPLEBAKE_OT_material_backup") + op.properties.mode=MatManager.MODE_WORKING_RESTORE + + #-----------If not a merged bake, done with this image. + #-----------If merged bake, only done if this is last object + if not sbp.merged_bake or (sbp.merged_bake and last_obj): + #LAST OPERATION + + + #Scale all baked images if needed (catching this latest one) + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Scaling images if needed" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + + #Pack + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Packing images into blend file" + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + #Save bakes external? + if sbp.save_bakes_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving bake externally" + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + + #---Done with this object--- + obj_counter += 1 + + #---Done with all objects--- + + #MUST COME AFTER SAVE EXTERNAL + #Should we invert roughness to glossy or normal map to DirecX? + #if bake_mode == SBConstants.PBR_GLOSSY and sbp.rough_glossy_switch == SBConstants.PBR_GLOSSY: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Inverting roughness to create glossy (if needed)" + op = MACRO.define("SIMPLEBAKE_OT_invert_roughness_to_glossy") + op.properties.bake_operation_id = bake_operation_id + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Creating DirectX normal from OpenGL map (if needed)" + op = MACRO.define("SIMPLEBAKE_OT_create_directx_normal") + op.properties.bake_operation_id = bake_operation_id + + + #PBR specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="PBR specific bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_pbr_specific_bake_prep_and_finish") + op.properties.mode="finish" + + + #Add specials to the macro queue + if len(specials_selection_to_list(context))> 0: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Adding specials to macro queue" + add_specials_to_macro(MACRO, context, bake_operation_id, bake_objects_names) + + + #All bakes done, copy and apply, save_obj_external or in background?? + if sbp.copy_and_apply or sbp.save_obj_external or self.in_background or sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="All bakes done, creating copy and apply" + for obj_name in list(sbp['SB_orig_bake_objects']): + op = MACRO.define("SIMPLEBAKE_OT_copy_and_apply") + op.properties.target_object_name = obj_name + op.properties.bake_operation_id = bake_operation_id + op.properties.global_mode = SBConstants.PBR + if self.decals_override: + op.properties.decals_override = True + + #Are we applying bakes to original objects? + if sbp.apply_bakes_to_original: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Applyig bakes to original objects" + op = MACRO.define("SIMPLEBAKE_OT_apply_bakes_to_original") + op.properties.bake_operation_id = bake_operation_id + + + if sbp.save_obj_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving mesh object externally" + #Export obj? (Will also remove copy and apply object if not needed) + op = MACRO.define("SIMPLEBAKE_OT_save_objects_externally") + op.properties.bake_operation_id = bake_operation_id + + #Multiply Diffuse by AO? + if sbp.multiply_diffuse_ao == "diffusexao": + op = MACRO.define("SIMPLEBAKE_OT_multiply_ao") + op.properties.bake_operation_id = bake_operation_id + + + #Channel packing + cp_op = "SIMPLEBAKE_OT_channel_packing" + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Channel packing - {cp_op}" + op = MACRO.define(cp_op) + op.properties.bake_operation_id = bake_operation_id + op.properties.pbrtarget_only = False + op.properties.global_mode = SBConstants.PBR + + + #Common bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Common bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_common_bake_finishing") + #op.properties.baked_number = sbp.total_bake_images_number + op.properties.bake_operation_id = bake_operation_id + if self.decals_override: + op.properties.decal_second_run=True + + + + #-------------------------------------------------------------------------------- + # if not self.in_background: #Cases a crash in background! + # message_list=([ + # "Foreground bake has started", + # "Please wait...." + # ]) + # show_message_box(context, message_list, "SIMPLEBAKE - FOREGROUND BAKE STARTED", icon = 'INFO') + + BakeInProgress.is_baking = True + context.window_manager.modal_handler_add(self) + self._timer = context.window_manager.event_timer_add(1, window=context.window) + + + bpy.ops.simplebake.pbr_bake_macro('INVOKE_DEFAULT') + + return {'RUNNING_MODAL'} + +classes = ([ + SimpleBake_OT_Bake_Operation_PBR, + SimpleBake_OT_Bake_Operation_PBRS2A, + SimpleBake_OT_PBR_Bake_Macro, + SimpleBake_OT_PBR_Bake_Macro_S2A, + SimpleBake_OT_Bake_Operation_PBR_Background, + SimpleBake_OT_Bake_Operation_PBRS2A_Background + + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/pbr_bake_support_operators.py b/scripts/addons/SimpleBake/bake_operators/pbr_bake_support_operators.py new file mode 100644 index 0000000..e6d708e --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/pbr_bake_support_operators.py @@ -0,0 +1,1437 @@ +import bpy +import numpy as np +import os +from pathlib import Path +import tempfile +import shutil +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, BoolProperty + +from ..utils import SBConstants, pbr_selections_to_list, select_only_this, force_to_object_mode, blender_refresh, object_list_to_names_list +from ..material_management import SimpleBake_OT_Material_Backup as MatManager +from ..messages import print_message +from ..background_and_progress import BakeInProgress as Bip +from .. import __package__ as base_package +from ..aov import get_list_enabled_aov_names + +convertable_shaders = [ + "ShaderNodeBsdfDiffuse", + "ShaderNodeBsdfGlass", + "ShaderNodeBsdfAnisotropic", + "ShaderNodeEmission", + "ShaderNodeBsdfTransparent", + "ShaderNodeSubsurfaceScattering", + "ShaderNodeBsdfRefraction", + "ShaderNodeBsdfToon", + "ShaderNodeBsdfTranslucent", + "ShaderNodeBsdfSheen" + ] + + +def sample_nodes_present(context, obj_name): + + seeking = ["ShaderNodeBevel", "ShaderNodeAmbientOcclusion"] + + def hunt(node_tree): + result = False + if hasattr(node_tree, "nodes"): + nodes = node_tree.nodes + for n in nodes: + if n.bl_idname in seeking: + for o in n.outputs: + if len(o.links)>0: + result = True + #May as well return here. One positive ends the game + return result + + if n.bl_idname == "ShaderNodeGroup": + result = hunt(n.node_tree) + #Again, may as well return here if there was a positive + if result: + return True + + #Because of the above returns, this will be False if we get here + return result + + + obj = context.scene.objects[obj_name] + for slot in obj.material_slots: + mat = slot.material + result = hunt(mat.node_tree) + + if result: + return True + + return False + + +def _resolve_menu_consumers(socket): + """From a Group Input output socket, follow links (through any reroutes) to the + consumer input sockets that actually receive the value.""" + out = [] + for link in socket.links: + to_sock = link.to_socket + if to_sock.node.bl_idname == "NodeReroute": + out.extend(_resolve_menu_consumers(to_sock.node.outputs[0])) + else: + out.append(to_sock) + return out + + +def create_node_group_dummy_nodes(node, node_tree): + + # print(f"---------Creating dummy nodes for {node.name}") + + nodes = node_tree.nodes + + + # Pattern-matched, unlinked sockets + col_input_sockets = [s for s in node.inputs if s.bl_idname == "NodeSocketColor" and not s.is_linked] + int_input_sockets = [s for s in node.inputs if s.bl_idname.startswith("NodeSocketInt") and not s.is_linked] + float_input_sockets = [s for s in node.inputs if s.bl_idname.startswith("NodeSocketFloat") and not s.is_linked] + vector_input_sockets = [s for s in node.inputs if s.bl_idname.startswith("NodeSocketVector") and not s.is_linked] + bool_input_sockets = [s for s in node.inputs if s.bl_idname == "NodeSocketBool" and not s.is_linked] + + + for s in col_input_sockets: + # print(f"-----------------RGB node for {s.name}") + val = s.default_value + rgb = node_tree.nodes.new("ShaderNodeRGB") + rgb.outputs[0].default_value = val + node_tree.links.new(rgb.outputs[0], s) + + for s in float_input_sockets: + # print(f"-----------------Value node for {s.name}") + val = s.default_value + vnode = node_tree.nodes.new("ShaderNodeValue") + vnode.outputs[0].default_value = val + node_tree.links.new(vnode.outputs[0], s) + + for s in int_input_sockets: + # print(f"-----------------Value node for {s.name}") + val = s.default_value + vnode = node_tree.nodes.new("ShaderNodeValue") + vnode.outputs[0].default_value = val + node_tree.links.new(vnode.outputs[0], s) + + for s in vector_input_sockets: + # print(f"-----------------Vector node for {s.name}") + x = s.default_value[0] + y = s.default_value[1] + z = s.default_value[2] + vnode = node_tree.nodes.new("ShaderNodeCombineXYZ") + vnode.inputs[0].default_value = x + vnode.inputs[1].default_value = y + vnode.inputs[2].default_value = z + node_tree.links.new(vnode.outputs[0], s) + + for s in bool_input_sockets: + val = s.default_value + vnode = node_tree.nodes.new("ShaderNodeValue") + + vnode.outputs[0].default_value = 1 if val else 0 + node_tree.links.new(vnode.outputs[0], s) + + + # Menu sockets (e.g. an exposed Menu Switch selector) can't use the dummy-node + # approach above - no node *outputs* a NodeSocketMenu. Instead, copy the value + # selected on the group node down into the internal Menu Switch socket's default, + # which group_ungroup() preserves. See plan/notes for the diagnostic behind this. + menu_input_sockets = [s for s in node.inputs + if s.bl_idname == "NodeSocketMenu" and not s.is_linked] + + if menu_input_sockets and node.node_tree: + # Don't corrupt a group tree that is shared by other materials - isolate first. + # The copy is left at 0 users once this node is ungrouped away, so tag it for + # cleanup (see purge_temp_node_group_copies, called after group_ungroup). + if node.node_tree.users > 1: + node.node_tree = node.node_tree.copy() + node.node_tree["_sb_temp_copy"] = True + + inner = node.node_tree + group_inputs = [n for n in inner.nodes if n.bl_idname == "NodeGroupInput"] + + for s in menu_input_sockets: + value = s.default_value + for gin in group_inputs: + for out in gin.outputs: + if out.identifier != s.identifier: + continue + for t in _resolve_menu_consumers(out): + if t.bl_idname != "NodeSocketMenu": + continue + try: + t.default_value = value + except Exception: + pass + + + return True + + +def purge_temp_node_group_copies(): + """Remove the throwaway node group copies create_node_group_dummy_nodes made to + isolate shared trees. Once the owning node has been ungrouped they sit at 0 users. + Only our tagged copies are touched - any other orphaned groups are left alone.""" + for ng in list(bpy.data.node_groups): + if ng.get("_sb_temp_copy") and ng.users == 0: + bpy.data.node_groups.remove(ng) + + +def has_node_groups(context, mat_name): + if not (mat:=bpy.data.materials.get(mat_name)): + print(f"ERROR - Couldn't find material {mat_name}") + + #print_message(context, f"Testing {mat.name} for node groups") + node_tree = mat.node_tree + nodes = node_tree.nodes + + prefs = context.preferences.addons[base_package].preferences + ungroup_all = prefs.ungroup_all_node_groups + ungroup_all = True if get_list_enabled_aov_names(context) else ungroup_all + ungroup_all = True if context.scene.SimpleBake_Props.selected_displacement else ungroup_all + + #Ungroup all keeps forcing this function to return True until you can't populate a list of node groups + + result = False + + node_group_nodes = [n for n in nodes if n.bl_idname == "ShaderNodeGroup"] + for n in node_group_nodes: + ss = [s for s in n.outputs if s.bl_idname == "NodeSocketShader" + and len(s.links)>0] + if len(ss)>0 or ungroup_all: result = True + + return result + +def has_convertible_shaders(mat_name): + + if not (m:=bpy.data.materials.get(mat_name)): + print(f"ERROR - Couldn't find material {mat_name}") + return False + + node_tree = m.node_tree + result=[False] #Mutable + + def check_nodes(node_tree): + if not hasattr(node_tree, "nodes"): + return False + #nonlocal result + nodes = node_tree.nodes + for n in nodes: + if n.bl_idname in convertable_shaders and len(n.outputs[0].links)>0: + result[0] = True + if n.bl_idname == "ShaderNodeGroup": + check_nodes(n.node_tree) + + + check_nodes(node_tree) + + return result[0] + + +def process_socket(tnode_name, tnode_sname, pnode_name, pnode_sname, nodes, node_tree): + + #Get the nodes we want + if not (tnode:=nodes.get(tnode_name)): + print(f"Failed to find node {tnode_name}") + return False + if not (pnode:=nodes.get(pnode_name)): + print(f"Failed to find node {pnode_name}") + return False + + #Get sockets + tnode_socket = tnode.inputs.get(tnode_sname) + pnode_socket = pnode.inputs.get(pnode_sname) + + #If it's plugged, transfer to pnode + if len(tnode_socket.links)>0: + from_socket = tnode_socket.links[0].from_socket + node_tree.links.new(from_socket, pnode_socket) + + #Not plugged + else: + pnode_socket.default_value = tnode_socket.default_value + +def swap_shaders_for_p(mat_name): + + to_del = [] + + if not (mat:=bpy.data.materials.get(mat_name)): + print(f"ERROR: Material {mat_name} not found") + return False + + node_tree = mat.node_tree + nodes = node_tree.nodes + + rel_nodes = [n.name for n in nodes if n.bl_idname in convertable_shaders] + + for t_name in rel_nodes: + if not (tnode:=nodes.get(t_name)): + continue #Couldn't find this one, skip + + if len(tnode.outputs[0].links) == 0: + continue #Output not connected + + + #Create a pnode at the same location + pnode = nodes.new(type='ShaderNodeBsdfPrincipled') + pnode.location = tnode.location + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfDiffuse": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Roughness", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfGlass": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Roughness", nodes, node_tree) + process_socket(t_name, "IOR", pnode.name, "IOR", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + pnode.inputs["Transmission Weight"].default_value = 1.0 + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfAnisotropic": #Actually glossy....??? + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Roughness", nodes, node_tree) + process_socket(t_name, "Anisotropy", pnode.name, "Anisotropic", nodes, node_tree) + process_socket(t_name, "Rotation", pnode.name, "Anisotropic Rotation", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + process_socket(t_name, "Tangent", pnode.name, "Tangent", nodes, node_tree) + pnode.inputs["Metallic"].default_value = 1.0 + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeEmission": + process_socket(t_name, "Color", pnode.name, "Emission Color", nodes, node_tree) + process_socket(t_name, "Strength", pnode.name, "Emission Strength", nodes, node_tree) + pnode.inputs["Base Color"].default_value = (0,0,0,1) + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfTransparent": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + pnode.inputs["Alpha"].default_value = 0 + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeSubsurfaceScattering": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Scale", pnode.name, "Subsurface Scale", nodes, node_tree) + process_socket(t_name, "Radius", pnode.name, "Subsurface Radius", nodes, node_tree) + process_socket(t_name, "IOR", pnode.name, "IOR", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Roughness", nodes, node_tree) + process_socket(t_name, "Anisotropy", pnode.name, "Subsurface Anisotropy", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + pnode.inputs["Subsurface Weight"].default_value = 1 + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfRefraction": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Roughness", nodes, node_tree) + process_socket(t_name, "IOR", pnode.name, "IOR", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + pnode.inputs["Transmission Weight"].default_value = 1.0 + to_del.append(t_name) + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfToon": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + pnode.inputs["Roughness"].default_value = 1.0 + to_del.append(t_name) + + + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfTranslucent": + process_socket(t_name, "Color", pnode.name, "Emission Color", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + pnode.inputs["Subsurface Weight"].default_value = 1.0 + pnode.inputs["Subsurface Radius"].default_value = (1,1,1) + to_del.append(t_name) + + + #What node are we talking about? + if tnode.bl_idname == "ShaderNodeBsdfSheen": + process_socket(t_name, "Color", pnode.name, "Base Color", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Sheen Roughness", nodes, node_tree) + process_socket(t_name, "Roughness", pnode.name, "Roughness", nodes, node_tree) + process_socket(t_name, "Normal", pnode.name, "Normal", nodes, node_tree) + pnode.inputs["Sheen Weight"].default_value = 1.0 + pnode.inputs["Roughness"].default_value = 1.0 + to_del.append(t_name) + + + for name in to_del: + if (n:=nodes.get(name)): + #Transfer output and remove + output_dest_socket = n.outputs[0].links[0].to_socket + node_tree.links.new(pnode.outputs[0], output_dest_socket) + nodes.remove(n) + + return True + + + +class SimpleBake_OT_PBR_Pre_Bake(Operator): + """Master backup and remove node groups""" + bl_idname = "simplebake.pbr_pre_bake" + bl_label = "Pre bake for PBR (remove node groups)" + + override_target_object_name: StringProperty(default="") + + def pop_node_group(self, context, mat_name): + + material = bpy.data.materials[mat_name] + node_tree = material.node_tree + + + # Find an object using the material + found_object = None + for obj in context.scene.objects: + if material.name in [slot.material.name for slot in obj.material_slots if slot.material]: + found_object = obj + break + + if not found_object: + return False + + # Select and activate the object + context.view_layer.objects.active = found_object + for obj in context.selected_objects: + obj.select_set(False) + found_object.select_set(True) + + found_space = None + found_area = None + found_screen = None + found_region = None + + + for screen in bpy.data.screens: + for area in screen.areas: + if area.type == 'NODE_EDITOR': + for space in area.spaces: + if space.type == 'NODE_EDITOR' and space.tree_type == 'ShaderNodeTree': + for region in area.regions: + if region.type == 'WINDOW': + found_space = space + found_screen = screen + found_area = area + found_region = region + break + if found_region: + break + if found_region: + break + if found_region: + break + + # Ensure a Node Editor space was found + if not found_space or not found_area or not found_screen or not found_region: + return False + + found_space.node_tree = node_tree + + + # Select all node groups + prefs = context.preferences.addons[base_package].preferences + ungroup_all = prefs.ungroup_all_node_groups + ungroup_all = True if get_list_enabled_aov_names(context) else ungroup_all + ungroup_all = True if context.scene.SimpleBake_Props.selected_displacement else ungroup_all + + for n in list(node_tree.nodes): + ss = [s for s in n.outputs if s.bl_idname == "NodeSocketShader" + and len(s.links)>0] + if n.bl_idname == "ShaderNodeGroup" and (len(ss)>0 or ungroup_all) and n.select == False: + create_node_group_dummy_nodes(n, node_tree) + n.select = True + else: + if n.select == True: + n.select = False + + with context.temp_override( + area=found_area, + screen=found_screen, + space_data=found_space, + region=found_region, # explicit WINDOW region, not blind [-1] + window=context.window, + edit_tree=node_tree, + active_object=found_object + ): + bpy.ops.node.group_ungroup() + + purge_temp_node_group_copies() + blender_refresh() + + return True + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + #Quick refresh of the bake objects list + bpy.ops.simplebake.refresh_bake_object_list() + + #Get the list of relevant objects + if self.override_target_object_name != "": + objs = [context.scene.objects[self.override_target_object_name]] + else: + objs = [l.obj_point for l in sbp.objects_list] + + #Backup of all materials + #We ALWAYS want a master backup, so put this ahead of any possible return + for obj in objs: + bpy.ops.simplebake.material_backup( + target_object_name = obj.name, + mode = MatManager.MODE_MASTER_BACKUP) + + #Force us into object mode + if not force_to_object_mode(context): + return {'CANCELLED'} + + #Get all relevant material names + mats = [] + for o in objs: + for slot in o.material_slots: + if slot.material != None: + mats.append(slot.material.name) + mats = list(set(mats)) + + #Do we actually have any node groups at all? Also skip entirely for Cycles bake + result = False + for m_name in mats: + result = True if has_node_groups(context, m_name) else result + result = True if has_convertible_shaders(m_name) else result + + if not result: + print_message(context, "No node groups or convertible shaders are in play. Proceeding to bake") + return{'FINISHED'} + else: + print_message(context, "Node groups or convertible shaders detected. Proceeding to remove them") + + for m_name in mats: + mat = bpy.data.materials[m_name] + + while has_node_groups(context, m_name): + + self.pop_node_group(context, m_name) + + + #No more node groups. Swap out the non-PBR nodes that we want to + prefs = context.preferences.addons[base_package].preferences + if not prefs.dont_replace_nonpbr_shaders: + for m_name in mats: + swap_shaders_for_p(m_name) + + + return {'FINISHED'} + + + + + +class SimpleBake_OT_PBR_Pre_Bake_Old(Operator): + """Pre bake actions for PBR (remove node groups)""" + bl_idname = "simplebake.pbr_pre_bake_old" + bl_label = "Pre bake for PBR (remove node groups) OLD VERSION" + + _timer = None + + #orig_active_mat_indexes = {} + + original_uitype = None + slot_index = 0 + object_index = 0 + ready_to_bake = False + + @classmethod + def go_to_bake(cls): + pass + + + def modal(self, context, event): + sbp = context.scene.SimpleBake_Props + + if event.type == 'TIMER': #Only respond to timer events + + #We are ready to bake + if self.__class__.ready_to_bake: + #Remove timer + wm = context.window_manager + wm.event_timer_remove(self._timer) + + #Bake + self.go_to_bake() + + return {'FINISHED'} + + #Finished - no more objects in list + if self.__class__.object_index > len(sbp.objects_list)-1: + + #Restore the UI + context.area.ui_type = self.__class__.original_uitype + #Bake on next come back + self.__class__.ready_to_bake = True + return {'RUNNING_MODAL'} + + #Current obj has more slots, or more objs in list. Either way, press on + obj = sbp.objects_list[self.__class__.object_index].obj_point + #If the object we want to work on isn't selected, select it and wait for next timer + if context.active_object != obj: + select_only_this(context, obj) + return {'RUNNING_MODAL'} + + #Object we want must be selected - press on + + l = len(obj.material_slots) + #We've reached the end of the slots - we are done with this object, set for the next and wait for come back + if self.__class__.slot_index == l: + self.__class__.slot_index = 0 + self.__class__.object_index += 1 + print_message(context, f"Finished popping node groups for object '{obj.name}'") + return {'RUNNING_MODAL'} + + #If the correct mat slot is active, pop the node groups + elif obj.active_material_index == self.__class__.slot_index: + mat = obj.material_slots[self.__class__.slot_index].material + + #Ignore empty slot + if mat == None: + self.__class__.slot_index += 1 + return {'RUNNING_MODAL'} + + print_message(context, f"Popping node groups for material '{mat.name}' in slot {obj.active_material_index} on object '{obj.name}'") + node_tree = mat.node_tree + nodes = node_tree.nodes + + for node in nodes: + node.select = False + + for node in nodes: + if node.bl_idname == "ShaderNodeGroup": + #Get all output sockets that are type shader and linked to something + prefs = context.preferences.addons[base_package].preferences + ungroup_all = prefs.ungroup_all_node_groups + ungroup_all = True if get_list_enabled_aov_names() else ungroup_all + ungroup_all = True if context.scene.SimpleBake_Props.selected_displacement else ungroup_all + + if ungroup_all: + ss = [True] #Hacky! :-( + else: + ss = [s for s in node.outputs if s.bl_idname == "NodeSocketShader" and len(s.links)>0] + + if len(ss)>0: + #We care about this node group node + create_node_group_dummy_nodes(node, node_tree) + node.select = True + nodes.active = node + bpy.ops.node.group_ungroup('INVOKE_DEFAULT') + purge_temp_node_group_copies() + break #Just one per cycle or Blender gets grumpy + + if not has_node_groups(context, mat): # Only move on when all node groups are gone + self.__class__.slot_index += 1 #Incrament slot index by 1 for next time + + return {'RUNNING_MODAL'} + + #If correct mat slot not set, set it and wait to come back + else: + obj.active_material_index = self.__class__.slot_index + return {'RUNNING_MODAL'} + + return {'PASS_THROUGH'} + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + print_message(context, "Falling back to old method for ungrouping node groups (Blender 4.0 bug)") + + + #Quick refresh of the bake objects list + bpy.ops.simplebake.refresh_bake_object_list() + + #Force us into object mode + if not force_to_object_mode(context): + return {'CANCELLED'} + + #Get the list of relevant objects + objs = [l.obj_point for l in sbp.objects_list] + + #Do we actually have any node groups at all? Also skip entirely for Cycles bake + ngs_present = False + for obj in objs: + for slot in obj.material_slots: + if slot.material != None: + if has_node_groups(context, slot.material.name): + ngs_present = True + #Start fresh + for obj in objs: + for slot in obj.material_slots: + if slot.material != None: + if "SB_master_dup" in slot.material: del slot.material["SB_master_dup"] + + + #Backup of all materials + #We always want a master backup, so put this ahead of any possible return + for obj in objs: + bpy.ops.simplebake.material_backup( + target_object_name = obj.name, + mode = MatManager.MODE_MASTER_BACKUP) + + if not ngs_present: + print_message(context, "No node groups are in play. Proceeding to bake") + self.go_to_bake() + return{'FINISHED'} + + print_message(context, "Going to process materials to remove node groups") + + + + #Reset variables + self.__class__.original_uitype = context.area.ui_type + self.__class__.slot_index = 0 + self.__class__.object_index = 0 + self.__class__.ready_to_bake = False + + #Set timer and away we go + context.area.ui_type = "ShaderNodeTree" + wm = context.window_manager + self._timer = wm.event_timer_add(0.1, window=context.window) + wm.modal_handler_add(self) + + return {'RUNNING_MODAL'} + + + +class SimpleBake_OT_Invert_Roughness_To_Glossy(Operator): + """Preperation shared by all types of bake""" + bl_idname = "simplebake.invert_roughness_to_glossy" + bl_description = "Invert roughness map to create glossy map" + bl_label = "Invert" + + bake_operation_id: StringProperty() + bake_mode: StringProperty(default="") + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + print_message(context, "Creating glossy image from roughness if required") + + + this_bake_glossy_types = [] + if sbp.rough_glossy_switch != SBConstants.PBR_ROUGHNESS: + print_message(context, "Glossiness map requested") + this_bake_glossy_types.append(SBConstants.PBR_GLOSSY) + if sbp.ccrough_glossy_switch != SBConstants.PBR_CLEARCOAT_ROUGH: + print_message(context, "Clearcoat Glossiness map requested") + this_bake_glossy_types.append(SBConstants.PBR_CLEARCOAT_GLOSS) + + #Find all images that are glossy bakes + input_images = ([ + i for i in bpy.data.images if + "SB_bake_operation_id" in i and + i["SB_bake_operation_id"] == self.bake_operation_id and + (("SB_glossy_converted" in i and i["SB_glossy_converted"] == False) or + "SB_glossy_converted" not in i) and + "SB_this_bake" in i and i["SB_this_bake"] in this_bake_glossy_types + ]) + + + # #If we are being bake_mode specific, then filter for that + # if self.bake_mode != "": + # input_images = [i for i in input_images if "SB_this_bake" in i and i["SB_this_bake"] == self.bake_mode] + + if len(input_images) == 0: + print_message(context, "Didn't find any glossy images that needed to be converted") + return {'FINISHED'} + + + for input_image in input_images: + #Will have been saved externally. Maybe udim, maybe not + # external_path = input_image.filepath + # print(f"--------------------{external_path}") + # print(f"--------------------{input_image['SB_full_save_path']}") + + + if 'SB_full_save_path' not in input_image: + print_message(context, f"WARNING: {input_image.name} is missing SB_full_save_path, falling back to filepath") + external_path = bpy.path.abspath(input_image.filepath) + else: + external_path = input_image['SB_full_save_path'] + + tiled = True if "" in external_path else False + + # if tiled: + tiles_nums = [t.number for t in input_image.tiles] + for tile_num in tiles_nums: + i = bpy.data.images.load(external_path.replace("", str(tile_num))) + i.colorspace_settings.name = input_image.colorspace_settings.name + w, h = i.size + pixel_data = np.zeros((w, h, 4), 'f') + # Fast copy of pixel data from bpy.data to numpy array. + i.pixels.foreach_get(pixel_data.ravel()) + #Invert RGB channels + pixel_data[:, :, :3] = 1.0 - pixel_data[:, :, :3] + #Output the result and update + i.pixels.foreach_set(pixel_data.ravel()) + i.update() + i.save() + bpy.data.images.remove(i) + + # else: + # #Edit the image directly as it already exists + # w, h = input_image.size + # pixel_data = np.zeros((w, h, 4), 'f') + # input_image.pixels.foreach_get(pixel_data.ravel()) + # pixel_data[:, :, :3] = 1.0 - pixel_data[:, :, :3] + # input_image.pixels.foreach_set(pixel_data.ravel()) + # input_image.save() + + #Either way, this image isn't caputred again + input_image.update() + input_image.reload() + input_image["SB_glossy_converted"] = True + + return {'FINISHED'} + +class SimpleBake_OT_Create_Directx_Normal(Operator): + """Preperation shared by all types of bake""" + bl_idname = "simplebake.create_directx_normal" + bl_description = "Flip Y to create DirectX normal map" + bl_label = "Create" + + bake_operation_id: StringProperty() + bake_mode: StringProperty(default="") + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + if sbp.normal_format_switch == "OpenGL": + print_message(context,"No DirectX conversion needed") + return {'FINISHED'} + + print_message(context, "Creating DirectX normal maps") + + #Find all images that are normal bakes + input_images = ([ + i for i in bpy.data.images if + "SB_bake_operation_id" in i and + i["SB_bake_operation_id"] == self.bake_operation_id and + (("SB_directx_converted" in i and i["SB_directx_converted"] == False) or + "SB_directx_converted" not in i) and + "SB_this_bake" in i and i["SB_this_bake"] == SBConstants.PBR_NORMAL + ]) + + #If we are being bake_mode specific, then filter for that + if self.bake_mode != "": + input_images = [i for i in input_images if "SB_this_bake" in i and i["SB_this_bake"] == self.bake_mode] + + if len(input_images) == 0: + return {'FINISHED'} + + print_message(context, f"DirectX conversion needed for {input_images}") + + for input_image in input_images: + #Will have been saved externally. Maybe udim, maybe not + if 'SB_full_save_path' not in input_image: + print_message(context, f"WARNING: {input_image.name} is missing SB_full_save_path, falling back to filepath") + external_path = bpy.path.abspath(input_image.filepath) + else: + external_path = input_image['SB_full_save_path'] + + #tiled = True if "" in external_path else False + + #if tiled: + tiles_nums = [t.number for t in input_image.tiles] + for tile_num in tiles_nums: + i = bpy.data.images.load(external_path.replace("", str(tile_num))) + i.colorspace_settings.name = input_image.colorspace_settings.name + w, h = i.size + pixel_data = np.zeros((w, h, 4), 'f') + # Fast copy of pixel data from bpy.data to numpy array. + i.pixels.foreach_get(pixel_data.ravel()) + #Invert G channel + pixel_data[:, :, 1] = 1.0 - pixel_data[:, :, 1] + #Output the result and update + i.pixels.foreach_set(pixel_data.ravel()) + i.save() + bpy.data.images.remove(i) + + # else: + # #Edit the image directly as it already exists + # w, h = input_image.size + # pixel_data = np.zeros((w, h, 4), 'f') + # input_image.pixels.foreach_get(pixel_data.ravel()) + # #Invert G channel + # pixel_data[:, :, 1] = 1.0 - pixel_data[:, :, 1] + # input_image.pixels.foreach_set(pixel_data.ravel()) + # input_image.save() + + #Either way, this image isn't caputred again + input_image.update() + input_image.reload() + input_image["SB_directx_converted"] = True + + return {'FINISHED'} + + + +class SimpleBake_OT_PBR_Specific_Bake_Prep_And_Finish(Operator): + """Preperation and finishing specific to PBR baking""" + bl_idname = "simplebake.pbr_specific_bake_prep_and_finish" + bl_description = "Preperation or Finish for PBR bake type" + bl_label = "Prepare or Finish" + + mode: StringProperty() + + orig_sample_count = 0 + + def finish(self, context): + #print_message(context, "PBR specific bake finishing actions") + #Restore original sample count + context.scene.cycles.samples = self.__class__.orig_sample_count + + def prepare(self, context): + sbp = context.scene.SimpleBake_Props + + #Store original sample count + self.__class__.orig_sample_count = context.scene.cycles.samples + + #S2A must be off if not S2A + if not sbp.selected_s2a: + context.scene.render.bake.use_selected_to_active=False + + def execute(self, context): + if self.mode == "prepare": + self.prepare(context) + elif self.mode == "finish": + self.finish(context) + + return {'FINISHED'} + +class SimpleBake_OT_Remove_Reroutes(Operator): + bl_idname = "simplebake.remove_reroutes" + bl_label = "Remove" + + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + #Setup + bpy.ops.simplebake.refresh_bake_object_list() + if not force_to_object_mode(context): + return {'CANCELLED'} + objs = [l.obj_point for l in sbp.objects_list] + + for obj in objs: + for matslot in obj.material_slots: + mat = matslot.material + print_message(context, f"Removing reroute nodes for material {mat.name}") + node_tree = mat.node_tree + nodes = node_tree.nodes + + reroute_nodes = [n for n in nodes if n.bl_idname == "NodeReroute"] + + for node in reroute_nodes: + #Nothing plugged in + if len(node.inputs[0].links) == 0: + nodes.remove(node) + continue + + #Otherwise... + origin_socket = node.inputs[0].links[0].from_socket #Can only be one input + output_links = [l for l in node.outputs[0].links] + + for l in output_links: + dest_socket = l.to_socket + node_tree.links.new(origin_socket, dest_socket) + + #Remove all reroute nodes, as now all bypassed + [nodes.remove(n) for n in nodes if n.bl_idname == "NodeReroute"] + return {'FINISHED'} + +class SimpleBake_OT_Multiply_AO(Operator): + """Multiple Diffuse by AO""" + bl_idname = "simplebake.multiply_ao" + bl_description = "Multiply Diffuse by AO" + bl_label = "Multiply" + + bake_operation_id: StringProperty() + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + #Find all diffuse images for this bake operation ID + diffuse_images = [i for i in bpy.data.images if\ + "SB_bake_operation_id" in i and\ + i["SB_bake_operation_id"] == self.bake_operation_id and\ + "SB_this_bake" in i and\ + i["SB_this_bake"] == SBConstants.PBR_DIFFUSE] + + #Find the AO image + ao_images = [i for i in bpy.data.images if\ + "SB_bake_operation_id" in i and\ + i["SB_bake_operation_id"] == self.bake_operation_id and\ + "SB_this_bake" in i and\ + i["SB_this_bake"] == SBConstants.AO] + + #Pair them up (this also works for merged bake, apprently) + paired = {} + for d in diffuse_images: + o = d["SB_bake_object"] + matched = [a for a in ao_images if "SB_bake_object" in a and a["SB_bake_object"] == o] + assert(len(matched) == 1), f"Didn't find exactly one matching AO image for {d.name}" + paired[d] = matched[0] + + #Import the compositing scene that we needed + path = os.path.dirname(__file__) + "/../resources/multiply.blend/Scene/" + if "SBCompositing_Multiply" in bpy.data.scenes: + bpy.data.scenes.remove(bpy.data.scenes["SBCompositing_Multiply"]) + bpy.ops.wm.append(filename="SBCompositing_Multiply", directory=path) + + s = bpy.data.scenes["SBCompositing_Multiply"] + s.render.resolution_x = diffuse_images[0].size[0] + s.render.resolution_y = diffuse_images[0].size[1] + + if bpy.app.version >= (5, 0, 0): + node_tree = s.compositing_node_group + nodes = s.compositing_node_group.nodes + else: + node_tree = s.node_tree + nodes = node_tree.nodes + + for d in paired: + + #Set up our scene + #Get some settings + if "SB_bit_depth" not in d or "SB_channels" not in d or "SB_view_transform" not in d: + print_message(context, f"WARNING: {d.name} is missing external save metadata, skipping diffuse x AO multiply") + continue + s.render.image_settings.file_format = d.file_format + s.render.image_settings.color_depth = d["SB_bit_depth"] + s.render.image_settings.color_mode = d["SB_channels"] + s.view_settings.view_transform = d["SB_view_transform"] + + + tiles_nums = [t.number for t in d.tiles] + for tile_num in tiles_nums: + path_d = d.filepath.replace("", str(tile_num)) + path_ao = paired[d].filepath.replace("", str(tile_num)) + + #Load the tiles in as an individual images + img_d = bpy.data.images.load(path_d.replace("", str(tile_num))) + img_ao = bpy.data.images.load(path_ao.replace("", str(tile_num))) + + #Setup the nodes + nodes["Base"].image = img_d + nodes["Multiplant"].image = img_ao + nodes["Mix"].inputs[0].default_value = (sbp.multiply_diffuse_ao_percent/100) + + #Render and get result + bpy.ops.render.render(use_viewport=False, scene=s.name) + render_result_image = bpy.data.images["Render Result"] + + #File should already exist. Remove it or will silently fail. + if os.path.exists(bpy.path.abspath(path_d)): + os.remove(bpy.path.abspath(path_d)) + + #Save this over the file path of the tile image + #Only seems to work for abspath? + path_d = bpy.path.abspath(path_d) + render_result_image.save_render(path_d.replace("", str(tile_num)), scene=s) + + #Remove the tile image we loaded individually + bpy.data.images.remove(img_d) + bpy.data.images.remove(img_ao) + + #All tiles done for this image, reload the UDIM image + d.reload() #We've updated 1 or more tiles and Blender still has them in the buffer' + d.save() + #img["SB_denoised"] = True + + #transfer_tags(img, new_img) + + #All done + [bpy.data.scenes.remove(s) for s in bpy.data.scenes if s.name == "SBCompositing_Multiply"] + + return {'FINISHED'} + + +class SimpleBake_OT_autodetect_pbr_channels(Operator): + bl_idname = "simplebake.autodetect_pbr_channels" + bl_label = "Autodetect" + bl_description = "Try to identify the necessary maps based on the materials applied to your selected bake objects. If your materials are disorganized (e.g., disconnected nodes not connected to the material output), it might suggest more maps than needed. It should not suggest fewer maps than necessary." + + default_values = { + "Base Color": (0.8,0.8,0.8,1), + "Metallic": 0.0, + "Roughness": 0.5, + "Alpha": 1.0, + "Subsurface Weight": 0.0, + "Transmission Weight": 0.0, + "Coat Weight": 0.0, + "Coat Roughness": 0.0, + "Emission Color": (1,1,1,1), + "Emission Strength": 0.0, + "Specular IOR Level": 0.5 + } + + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + #Sidestep + bpy.ops.simplebake.sidestep_geo_nodes() + + #Clear the bake types list + #bpy.ops.simplebake.selectnone_pbr() + + #Get a list of objects + o_names = object_list_to_names_list(context) + + bpy.ops.simplebake.pbr_pre_bake() + + #Add target object if it's not none and we are in DECALS mode + if sbp.selected_s2a and sbp.targetobj!=None and sbp.s2a_opmode=="decals": + bpy.ops.simplebake.pbr_pre_bake(override_target_object_name=sbp.targetobj.name) + o_names.append(sbp.targetobj.name) + + #Get all materials + mat_names = [] + for name in o_names: + o = context.scene.objects.get(name) + if o!=None: + for slot in o.material_slots: + if slot.material != None: + mat_names.append(slot.material.name) + + found_socket_names = [] + def check_node_tree(node_tree): + nodes = node_tree.nodes + for n in nodes: + if n.bl_idname == "ShaderNodeGroup": + check_node_tree(n.node_tree) + + if n.bl_idname == "ShaderNodeBsdfPrincipled" and len(n.outputs[0].links)>0: + for i in n.inputs: + + #Something plugged in + if len(i.links)>0: + test=None + from_n = i.links[0].from_node + if i.bl_idname in ["NodeSocketFloatFactor", "NodeSocketFloat"]: + if from_n.bl_idname == "ShaderNodeValue": + test = round(from_n.outputs[0].default_value, 1) + if i.bl_idname == "NodeSocketColor": + if from_n.bl_idname == "ShaderNodeRGB": + dv = from_n.outputs[0].default_value + test = (round(dv[0], 1),round(dv[1], 1),round(dv[2], 1),round(dv[3], 1)) + + if test!=None and i.name in self.default_values and test == self.default_values[i.name]: + pass + else: + found_socket_names.append(i.name) + + #Nothing plugged in, but default value may have changed + else: + test=None + if i.bl_idname == "NodeSocketColor": + dv = i.default_value + test = (round(dv[0], 1),round(dv[1], 1),round(dv[2], 1),round(dv[3], 1)) + elif i.bl_idname in ["NodeSocketFloatFactor", "NodeSocketFloat"]: + test = round(i.default_value, 1) + + if test!=None and i.name in self.default_values and test != self.default_values[i.name]: + found_socket_names.append(i.name) + + if n.bl_idname == "ShaderNodeBump" and len(n.outputs[0].links)>0: + #Just assume we need it if it's there and plugged in + found_socket_names.append("Bump") + + for name in mat_names: + m = bpy.data.materials.get(name) + if m!=None: + check_node_tree(m.node_tree) + + #And a special check for displacement + mos = [n for n in m.node_tree.nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output == True] + for mo in mos: + if len(mo.inputs["Displacement"].links)>0: + found_socket_names.append("Displacement") + + + sbp.selected_col = True if "Base Color" in found_socket_names else False + sbp.selected_metal = True if "Metallic" in found_socket_names else False + sbp.selected_rough = True if "Roughness" in found_socket_names else False + sbp.selected_trans = True if "Transmission Weight" in found_socket_names else False + sbp.selected_clearcoat = True if "Coat Weight" in found_socket_names else False + sbp.selected_clearcoat_rough = True if "Coat Roughness" in found_socket_names else False + sbp.selected_emission = True if "Emission Color" in found_socket_names else False + sbp.selected_emission_strength = True if "Emission Strength" in found_socket_names else False + sbp.selected_specular = True if "Specular IOR Level" in found_socket_names else False + sbp.selected_sss = True if "Subsurface Weight" in found_socket_names else False + sbp.selected_sss_scale = True if "Subsurface Scale" in found_socket_names else False + sbp.selected_alpha = True if "Alpha" in found_socket_names else False + sbp.selected_normal = True if "Normal" in found_socket_names else False + sbp.selected_bump = True if "Bump" in found_socket_names else False + sbp.selected_displacement = True if "Displacement" in found_socket_names else False + + bpy.ops.simplebake.material_backup(mode="working_restore") + bpy.ops.simplebake.material_backup(mode="master_restore") + + #Reverse sidestep + bpy.ops.simplebake.reverse_geo_nodes_sidestep() + + return {'FINISHED'} + +class SimpleBake_OT_Sidestep_Geo_Nodes(Operator): + + + + bl_idname = "simplebake.sidestep_geo_nodes" + bl_label = "Go" + bl_description = "Replace objects with geo nodes with an applied proxy" + + #decals_target_name: StringProperty(default="") + + def execute(self, context): + + + sbp = context.scene.SimpleBake_Props + #decals = True if self.decals_target_name!="" else False + + # #Start fresh + # for o in context.scene.objects: + # if "SB_proxy_bake_object" in o: + # del o["SB_proxy_bake_object"] + # if "SB_replaced_orig_name" in o: + # del o["SB_replaced_orig_name"] + + + object_names = [i.name for i in sbp.objects_list] + if sbp.selected_s2a and sbp.targetobj != None: + object_names.append(sbp.targetobj.name) + sbp.targetobj["SB_sidestepd_orig_target"] = True + if sbp.cycles_s2a and sbp.targetobj_cycles != None: + object_names.append(sbp.targetobj_cycles.name) + sbp.targetobj_cycles["SB_sidestepd_orig_target"] = True + + + # List to store new objects + new_objects = [] + + for obj_name in object_names: + obj = bpy.data.objects.get(obj_name) + + if not obj: + continue + + # Check if the object has any geometry node modifiers + geo_modifiers = [mod for mod in obj.modifiers if mod.type == 'NODES'] + + #Are we interested in this object? + if not geo_modifiers: + continue + + #Record the name + orig_name = obj.name + + #Remove the original object from the bake list if it's there + i = sbp.objects_list.find(orig_name) + if i!=-1: + sbp.objects_list.remove(i) + + # Duplicate the object + new_obj = obj.copy() + new_obj.data = obj.data.copy() + bpy.context.collection.objects.link(new_obj) + + # Hide the original object from rendering + obj.hide_render = True + + # Tags + new_obj["SB_proxy_bake_object"] = orig_name + obj["SB_replaced_orig_name"] = orig_name + + # Add the new object to the list + new_objects.append(new_obj) + + #Steal the original objects's name + obj.name = f"SB_sidestepd" + new_obj.name = orig_name + + #Add our new object to the bake list in it's place (unless it was decals target) + if "SB_sidestepd_orig_target" not in new_obj: +# if not decals: + bpy.ops.simplebake.add_bake_object_by_name(override_target_obj_name=f"{new_obj.name}") + else: + #Change the target object to proxy instead + if sbp.selected_s2a: + sbp.targetobj = new_obj + if sbp.cycles_s2a: + sbp.targetobj_cycles = new_obj + + #Make sure new object is visible for rendering + new_obj.hide_render = False + + + for new_obj in new_objects: + # Loop over each geometry node modifier and try to apply it + #geo_modifiers = [mod for mod in new_obj.modifiers if mod.type == 'NODES'] + + select_only_this(context, new_obj) + bpy.ops.object.convert(target='MESH') + + # #for mod in geo_modifiers: + # for mod in new_obj.modifiers: + # try: + # if mod.show_render: + # # Try to apply the modifier + # bpy.context.view_layer.objects.active = new_obj + # bpy.ops.object.modifier_apply(modifier=mod.name) + # else: + # new_obj.modifiers.remove(mod) + # except Exception as e: + # # Remove the modifier if application fails + # new_obj.modifiers.remove(mod) + + for new_obj in new_objects: + materials_to_remove = [] + # Iterate through material slots + for i, mat_slot in enumerate(new_obj.material_slots): + # Check if the material is used by any face + material_used = False + for poly in new_obj.data.polygons: + if poly.material_index == i: + material_used = True + break + # If the material is not used, mark it for removal + if not material_used: + materials_to_remove.append(i) + + #Cannot beleive we have to do a context override just to remove mat slot + # Create a context override dictionary + override = { + 'object': new_obj, + 'active_object': new_obj, + 'selected_objects': [new_obj], + 'selected_editable_objects': [new_obj], + 'window': bpy.context.window, + 'screen': bpy.context.screen, + 'area': None, + 'region': None + } + + # Look for the Properties editor with the 'MATERIAL' context + for area in bpy.context.screen.areas: + if area.type == 'PROPERTIES': + override['area'] = area + for region in area.regions: + if region.type == 'WINDOW': + override['region'] = region + for space in area.spaces: + if space.type == 'PROPERTIES' and space.context == 'MATERIAL': + override['space_data'] = space + break + break + + # Remove the materials that aren't used + for index in reversed(materials_to_remove): + new_obj.active_material_index = index + with bpy.context.temp_override(**override): + bpy.ops.object.material_slot_remove() + + + return {'FINISHED'} + +class SimpleBake_OT_Reverse_Geo_Nodes_Sidestep(Operator): + bl_idname = "simplebake.reverse_geo_nodes_sidestep" + bl_label = "Go" + bl_description = "Reverse the side stepping of objects with geo nodes" + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + to_del = [] + for o in context.scene.objects: + if "SB_proxy_bake_object" in o: + + #Remove from bake object list + i = sbp.objects_list.find(o.name) + if i!=-1: + sbp.objects_list.remove(i) + + o.name = "SB_to_del" + to_del.append(o.name) + + + for o in context.scene.objects: + if "SB_replaced_orig_name" in o: + #Restore original name + o.name = o["SB_replaced_orig_name"] + + #Restore to bake objects list + if sbp.objects_list.find(o.name) == -1 and "SB_sidestepd_orig_target" not in o: + bpy.ops.simplebake.add_bake_object_by_name(override_target_obj_name=f"{o.name}") + + #Make sure to unhide for rendering + o.hide_render = False + + #Remove tag + del o["SB_replaced_orig_name"] + + + + for td in to_del: + if o:= bpy.data.objects.get(td): + bpy.data.objects.remove(o) + + for o in context.scene.objects: #Only works AFTER to_del objects have been deleted + if "SB_sidestepd_orig_target" in o: + sbp.targetobj = o + del o["SB_sidestepd_orig_target"] + + # #Let's be sure + # for o in context.scene.objects: + # if "SB_proxy_bake_object" in o: + # del o["SB_proxy_bake_object"] + # if "SB_replaced_orig_name" in o: + # del o["SB_replaced_orig_name"] + + return {'FINISHED'} + + +classes = ([ + SimpleBake_OT_Invert_Roughness_To_Glossy, + SimpleBake_OT_Create_Directx_Normal, + SimpleBake_OT_PBR_Specific_Bake_Prep_And_Finish, + SimpleBake_OT_PBR_Pre_Bake, + SimpleBake_OT_PBR_Pre_Bake_Old, + SimpleBake_OT_Remove_Reroutes, + SimpleBake_OT_Multiply_AO, + SimpleBake_OT_autodetect_pbr_channels, + SimpleBake_OT_Sidestep_Geo_Nodes, + SimpleBake_OT_Reverse_Geo_Nodes_Sidestep + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/bake_operators/specials_bake_operators.py b/scripts/addons/SimpleBake/bake_operators/specials_bake_operators.py new file mode 100644 index 0000000..ef74424 --- /dev/null +++ b/scripts/addons/SimpleBake/bake_operators/specials_bake_operators.py @@ -0,0 +1,656 @@ +import bpy +import os +import random +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, Macro +from bpy.props import StringProperty, BoolProperty, IntProperty +import sys + +from ..utils import SBConstants, specials_selection_to_list +from ..messages import print_message +from .. import __package__ as base_package + +class SimpleBake_OT_Specials_Bake_Macro(Macro): + bl_idname = "simplebake.specials_bake_macro" + bl_label = "Go" + + @classmethod + def clean(cls): + try: + bpy.utils.unregister_class(cls) + except: + pass + bpy.utils.register_class(cls) + +class SimpleBake_OT_Specials_Mats_Swapping(Operator): + bl_idname = "simplebake.specials_mats_swapping" + bl_label = "Record or Restore" + + mode: StringProperty() + obj_name: StringProperty() + + original_mats = {} + + def record(self, context): + obj = context.scene.objects[self.obj_name] + obj_name = self.obj_name + orig_mats_dict = self.__class__.original_mats + + i=0 + for matslot in obj.material_slots: + if matslot.material != None: + if self.obj_name not in orig_mats_dict: + orig_mats_dict[self.obj_name] = {} + orig_mats_dict[self.obj_name][i] = matslot.material.name + print_message(context, f"RECORDED {matslot.material.name} for slot {i} for {obj_name}") + i+=1 + self.__class__.original_mats = orig_mats_dict + + def restore(self, context): + obj = context.scene.objects[self.obj_name] + obj_name = self.obj_name + orig_mats_dict = self.__class__.original_mats + + i=0 + for matslot in obj.material_slots: + #Remove the bake image node from our special material (for possilbe re-use) + if matslot.material != None: + nodes = matslot.material.node_tree.nodes + [nodes.remove(n) for n in nodes if "SB_bake_image_node" in n] + + #Restore the material originally in this slot + try: + matslot.material = bpy.data.materials[orig_mats_dict[obj_name][i]] + print_message(context, f"RESTORED {orig_mats_dict[obj_name][i]} for slot {i} on {obj_name}") + except: + print_message(context, f"ERROR - was unable to restore material after specials bake") + i+=1 + + def execute(self, context): + if self.mode == "record": + self.record(context) + + if self.mode == "restore": + self.restore(context) + + return {'FINISHED'} + + +class SimpleBake_OT_Specials_Specific_Bake_Prep_And_Finish(Operator): + bl_idname = "simplebake.specials_specific_bake_prep_and_finish" + bl_label = "Prepare or Finish" + + mode: StringProperty() + orig_sample_count: IntProperty() + + def finish(self, context): + #print_message(context, "Specials specific bake finishing actions") + context.scene.cycles.samples = self.orig_sample_count + + def prepare(self, context): + print_message(context, "Specials specific bake prep actions") + + SimpleBake_OT_Setup_Col_ID.clear() + + #Sample count + prefs = context.preferences.addons[base_package].preferences + context.scene.cycles.samples = prefs.pbr_sample_count2 + + def execute(self, context): + if self.mode == "prepare": + self.prepare(context) + elif self.mode == "finish": + self.finish(context) + + return {'FINISHED'} + +class SimpleBake_OT_Import_And_Assign_Specials(Operator): + bl_idname = "simplebake.import_and_assign_specials" + bl_label = "Import" + + bake_mode: StringProperty() + obj_name: StringProperty() + + def _strip_sb_prefixes(self, name): + if name.startswith("SBW_"): + name = name[4:] + if name.startswith("SBM_"): + name = name[4:] + return name + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + import_mat_name = f"SimpleBake_{self.bake_mode}" + if import_mat_name not in bpy.data.materials: + path = os.path.dirname(__file__) + "/../resources/specials.blend/Material/" + bpy.ops.wm.append(filename=import_mat_name, directory=path) + base_mat = bpy.data.materials[import_mat_name] + + obj = context.scene.objects[self.obj_name] + orig_mats_dict = SimpleBake_OT_Specials_Mats_Swapping.original_mats + + for slot_idx, matslot in enumerate(obj.material_slots): + if matslot.material is None: + continue + + if sbp.tex_per_mat: + mat = base_mat.copy() + mat.name = f"SB_special_{self.bake_mode}_{slot_idx}" + orig_name = orig_mats_dict.get(self.obj_name, {}).get(slot_idx, matslot.material.name) + mat["SB_original_mat_name"] = self._strip_sb_prefixes(orig_name) + else: + mat = base_mat + + matslot.material = mat + if "SB_bake_config" in mat: + del mat["SB_bake_config"] + + for matslot in obj.material_slots: + if matslot.material is None: + continue + ao_nodes = [n for n in matslot.material.node_tree.nodes + if n.bl_idname == "ShaderNodeAmbientOcclusion"] + for ao_node in ao_nodes: + ao_node.samples = sbp.ao_sample_count + + return {'FINISHED'} + +class SimpleBake_OT_Setup_Vertex_Col(Operator): + bl_idname = "simplebake.setup_vertex_col" + bl_label = "Setup" + + obj_name: StringProperty() + + def execute(self, context): + + obj = context.scene.objects[self.obj_name] + for matslot in obj.material_slots: + if matslot.material is None: + continue + nodes = matslot.material.node_tree.nodes + vc_nodes = [n for n in nodes if n.bl_idname == "ShaderNodeVertexColor"] + if len(vc_nodes) == 1: + vc_nodes[0].layer_name = obj.data.color_attributes[0].name + + return {'FINISHED'} + + + +class SimpleBake_OT_Setup_Col_ID(Operator): + bl_idname = "simplebake.setup_col_id" + bl_label = "Setup" + + obj_name: StringProperty() + + existing_col_id_mats = {} + used_cols = [] + + @classmethod + def clear(cls): + cls.existing_col_id_mats = {} + cls.used_cols = [] + + def check_col_distance_from_existing(self,context, r, g, b, min_diff): + used_cols = self.__class__.used_cols + + #Free pass + if len(used_cols) < 1: + used_cols.append((r,g,b)) + self.__class__.used_cols = used_cols + return True + + for uc in used_cols: + if round(abs(r - uc[0]),1) > min_diff or round(abs(g - uc[1]), 1) > min_diff or round(abs(b - uc[2]),1) > min_diff: + used_cols.append([r,g,b]) + self.__class__.used_cols = used_cols + return True + else: + #self.__class__.used_cols = used_cols + return False #At least one rgb was too close + + def _strip_sb_prefixes(self, name): + if name.startswith("SBW_"): + name = name[4:] + if name.startswith("SBM_"): + name = name[4:] + return name + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + obj = context.scene.objects[self.obj_name] + orig_mats_dict = SimpleBake_OT_Specials_Mats_Swapping.original_mats + + for slot_idx, slot in enumerate(obj.material_slots): + orig_mat_name = slot.material.name + existing_col_id_mats = self.__class__.existing_col_id_mats + + if orig_mat_name in existing_col_id_mats: + col_id_mat = existing_col_id_mats[orig_mat_name] + slot.material = col_id_mat + else: + col_id_mat = bpy.data.materials.new("SB_col_id") + slot.material = col_id_mat + + col_id_mat.use_nodes = True + node_tree = col_id_mat.node_tree + nodes = node_tree.nodes + + m_output_node = [n for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output] + assert(len(m_output_node)==1) + m_output_node = m_output_node[0] + + e_node = nodes.new("ShaderNodeEmission") + + #First attempt + randr = random.randint(0,10) / 10 + randg = random.randint(0,10) / 10 + randb = random.randint(0,10) / 10 + + min_diff = 0.6 + i=0 + giveup = False + while self.check_col_distance_from_existing(context, randr,randg,randb, min_diff) == False and not giveup: + randr = random.randint(0,10) / 10 + randg = random.randint(0,10) / 10 + randb = random.randint(0,10) / 10 + i+=1 + if i == 100: + #We've tried 100 times and got nothing, reduce required min_diff + i=0 + min_diff = min_diff - 0.1 + print_message(context, f"Just reduced min_diff to {min_diff}") + + #If we are now at 0, give up + if min_diff == 0: + print_message(context, "Giving up. Couldn't find a distanced colour") + giveup = True + + e_node.inputs[0].default_value = (randr,randg,randb, 1) + node_tree.links.new(e_node.outputs[0], m_output_node.inputs[0]) + + self.__class__.existing_col_id_mats[orig_mat_name] = col_id_mat + + if sbp.tex_per_mat: + recorded_name = orig_mats_dict.get(self.obj_name, {}).get(slot_idx, orig_mat_name) + col_id_mat["SB_original_mat_name"] = self._strip_sb_prefixes(recorded_name) + + return {'FINISHED'} + + +def add_specials_to_macro_s2a(MACRO, context, bake_operation_id, specific_high="", specific_low="", mode=""): + + #Set variables from panel + sbp = context.scene.SimpleBake_Props + if specific_high == "": + if sbp.global_mode == SBConstants.PBR: + mode = SBConstants.PBRS2A + target_object_name = sbp.targetobj.name + else: + mode = SBConstants.CYCLESBAKE_S2A + target_object_name = sbp.targetobj_cycles.name + else: #Auto match with specific high and low + mode = SBConstants.PBRS2A_AUTOMATCH + target_object_name = specific_low + + specials_bake_modes = specials_selection_to_list(context) + + global_mode = SBConstants.PBR #########????????????????????????????????????????????? + bake_objects_names = [o.obj_point.name for o in sbp.objects_list] + orig_sample_count = context.scene.cycles.samples + lightmap_apply_colman = sbp.lightmap_apply_colman + denoise = sbp.rundenoise + + #Specials specific bake prep + op = MACRO.define("SIMPLEBAKE_OT_specials_specific_bake_prep_and_finish") + op.properties.mode = "prepare" + + #Record all bake object materials + for obj_name in bake_objects_names: + #Record original mats being used + op = MACRO.define("SIMPLEBAKE_OT_specials_mats_swapping") + op.properties.mode = "record" + op.properties.obj_name = obj_name + + #Also the target object + op = MACRO.define("SIMPLEBAKE_OT_specials_mats_swapping") + op.properties.mode = "record" + op.properties.obj_name = target_object_name + + + for bake_mode in specials_bake_modes: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake mode: {bake_mode}" + + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Now baking {bake_mode}" + + for obj_name in bake_objects_names: + op = MACRO.define("SIMPLEBAKE_OT_import_and_assign_specials") + op.properties.bake_mode = bake_mode + op.properties.obj_name = obj_name + + #Create bake image if needed for TARGET OBJECT and this bake mode + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Creating bake image (specials)" + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = target_object_name #!! + op.properties.global_mode = global_mode + + #Set bake image on TARGET OBJECT + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Setting bake image on target object" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = target_object_name #!!! + op.properties.this_bake = bake_mode + op.properties.only_bake_image_node = True + + #Select all bake objects with target as target + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Selecting objects for S2A baking setup" + op = MACRO.define("SIMPLEBAKE_OT_select_selected_to_active") + op.properties.mode = mode + if mode == SBConstants.PBRS2A_AUTOMATCH: + op.properties.specific_high = specific_high + op.properties.specific_low = specific_low + if sbp.isolate_objects: + op = MACRO.define("SIMPLEBAKE_OT_isolate_for_bake_to_target") + op.properties.auto_match = True + op.properties.object_name = specific_low + op.properties.high_object_name = specific_high + elif sbp.isolate_objects: + op = MACRO.define("SIMPLEBAKE_OT_isolate_for_bake_to_target") + op.properties.object_name = target_object_name + op.properties.isolate_s2a = True + + #Bake------------------------------------------------------- + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake operation" + def do_bake(): + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + if bake_mode in [SBConstants.AO, SBConstants.THICKNESS, SBConstants.CURVATURE]: + op.properties.sample_count =sbp.boosted_sample_count + else: + prefs = context.preferences.addons[base_package].preferences + op.properties.sample_count = prefs.pbr_sample_count2 + + op = MACRO.define("OBJECT_OT_bake") + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.use_selected_to_active=True + op.properties.type = "EMIT" + op.properties.max_ray_distance = (sbp.ray_distance * sbp.cage_and_ray_multiplier) + #Cage--------- + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.auto_match_mode == "name" and sbp.s2a_opmode == "automatch": + parts = target_object_name.split("_") + base_name = '_'.join(parts[:-1]).lower() + for o in context.scene.objects: + if o.name.lower() == f"{base_name}_cage": + op.properties.use_cage = True + op.properties.cage_object = o.name + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Using cage object for specials {o.name}" + #Not auto-match + else: + if context.scene.render.bake.cage_object != None: + op.properties.use_cage = True + op.properties.cage_object = context.scene.render.bake.cage_object.name + elif sbp.cage_smooth_hard == "smooth": + op.properties.use_cage = True + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + elif sbp.cage_smooth_hard == "hard": + op.properties.use_cage = False + op.properties.cage_extrusion = (sbp.cage_extrusion * sbp.cage_and_ray_multiplier) + + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + + do_bake() + + #Restore material on target object before next bake mode + #Will actually just remove the bake image node, as the material never changed for target + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Restore materials (specials)" + op = MACRO.define("SIMPLEBAKE_OT_specials_mats_swapping") + op.properties.mode = "restore" + op.properties.obj_name = target_object_name + + + + #Scale all baked images if needed (catching this latest one) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Scale or images if needed (specials)" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + + #Pack + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Packing images into blend file (specials)" + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + #Save external + if sbp.save_bakes_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving baked images externally (specials)" + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + op.properties.lightmap_apply_colman = sbp.lightmap_apply_colman + + + #Restore materials on all bake objects as we are done + for obj_name in bake_objects_names: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Restoring materials for {obj_name} (specials)" + op = MACRO.define("SIMPLEBAKE_OT_specials_mats_swapping") + op.properties.mode = "restore" + op.properties.obj_name = obj_name + + + #Denoise lightmap, AO or thickness MUST COME AFTER SAVE EXTERNAL + if denoise and bake_mode in [SBConstants.LIGHTMAP, SBConstants.AO, SBConstants.THICKNESS]: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Running denoise (specials)" + op = MACRO.define("SIMPLEBAKE_OT_compositor_denoise") + op.properties.bake_operation_id = bake_operation_id + #op.properties.bake_type = bake_mode + + + #Specials specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Specials bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_specials_specific_bake_prep_and_finish") + op.properties.mode = "finish" + op.properties.orig_sample_count = orig_sample_count + + + +def add_specials_to_macro(MACRO, context, bake_operation_id, bake_objects_names): + + #Will always run second, so a lot of the setup (UVs etc.) will be done. + + sbp = context.scene.SimpleBake_Props + + #Set variables from panel + denoise = sbp.rundenoise + specials_bake_modes = specials_selection_to_list(context) + global_mode = SBConstants.PBR #TODO-------------------------? + lightmap_apply_colman = sbp.lightmap_apply_colman + orig_sample_count = context.scene.cycles.samples + #----------------------------------------------------- + #MACRO = SimpleBake_OT_Specials_Bake_Macro + + #Clean macro + #MACRO.clean() + + #Specials specific bake prep + op = MACRO.define("SIMPLEBAKE_OT_specials_specific_bake_prep_and_finish") + op.properties.mode = "prepare" + + obj_counter = 1 + for obj_name in bake_objects_names: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting object: {obj_name}" + if obj_counter == len(bake_objects_names): + last_obj = True + #print_message(context, "Last operation") + else: last_obj = False + + for bake_mode in specials_bake_modes: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake mode: {bake_mode}" + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Now baking {bake_mode}" + + #Create bake image if needed for this object and this bake mode + op = MACRO.define("SIMPLEBAKE_OT_bake_image") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + op.properties.target_object_name = obj_name + op.properties.global_mode = global_mode + + #Record original mats being used + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Backup materials (specials)" + op = MACRO.define("SIMPLEBAKE_OT_specials_mats_swapping") + op.properties.mode = "record" + op.properties.obj_name = obj_name + + if bake_mode == SBConstants.COLOURID: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Setting up for ColID map (specials)" + op = MACRO.define("SIMPLEBAKE_OT_setup_col_id") + op.properties.obj_name = obj_name + + elif bake_mode == SBConstants.VERTEXCOL: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Setting up for VertexCol bake (specials)" + #Import needed special into scene, and set to object + op = MACRO.define("SIMPLEBAKE_OT_import_and_assign_specials") + op.properties.bake_mode = bake_mode + op.properties.obj_name = obj_name + op = MACRO.define("SIMPLEBAKE_OT_setup_vertex_col") + op.properties.obj_name = obj_name + + elif bake_mode == SBConstants.LIGHTMAP: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Setting up for LightMap bake (specials)" + op = MACRO.define("SIMPLEBAKE_OT_import_and_assign_specials") + op.properties.bake_mode = bake_mode + op.properties.obj_name = obj_name + + #AO, Curvature, Thickness + else: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Setting up for AO/Curvate/Thickness bake (specials)" + #Import needed special into scene, and set to object + op = MACRO.define("SIMPLEBAKE_OT_import_and_assign_specials") + op.properties.bake_mode = bake_mode + op.properties.obj_name = obj_name + + #Config (mostly just adding the bake image node) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Specials pre-bake config (add image node)" + op = MACRO.define("SIMPLEBAKE_OT_prepare_object_mats_pbr") + op.properties.bake_operation_id = bake_operation_id + op.properties.target_name = obj_name + op.properties.this_bake = bake_mode + + #Bake + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Starting bake operation" + op = MACRO.define("SIMPLEBAKE_OT_select_only_this") + op.properties.object_name = obj_name + if sbp.isolate_objects: + op.properties.isolate = True + + def do_bake(): + if bake_mode == SBConstants.LIGHTMAP: + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + op.properties.sample_count = orig_sample_count + op = MACRO.define("OBJECT_OT_bake") + op.properties.type = "COMBINED" + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.margin = context.scene.render.bake.margin + try: #Magin type added after Blender 3.0 + op.properties.margin_type = context.scene.render.bake.margin_type + except: + pass + #op = MACRO.define("SIMPLEBAKE_OT_update_progress") + #op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + #prefs = context.preferences.addons[base_package].preferences + #op.properties.sample_count = prefs.pbr_sample_count2 + else: + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + if bake_mode in [SBConstants.AO, SBConstants.THICKNESS, SBConstants.CURVATURE]: + op.properties.sample_count = sbp.boosted_sample_count + else: + prefs = context.preferences.addons[base_package].preferences + op.properties.sample_count = prefs.pbr_sample_count2 + op = MACRO.define("OBJECT_OT_bake") + op.properties.type = "EMIT" + op.properties.use_clear = False + op.properties.target = "IMAGE_TEXTURES" + op.properties.margin = context.scene.render.bake.margin + try: #Magin type added after Blender 3.0 + op.properties.margin_type = context.scene.render.bake.margin_type + except: + pass + op = MACRO.define("SIMPLEBAKE_OT_set_sample_count") + op.properties.sample_count = orig_sample_count + op = MACRO.define("SIMPLEBAKE_OT_update_progress") + do_bake() + + #Restore all materials (and repair specials material if applicable) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Restore materials (specials)" + op = MACRO.define("SIMPLEBAKE_OT_specials_mats_swapping") + op.properties.mode = "restore" + op.properties.obj_name = obj_name + + #If not a merged bake, done with this image. If merged bake, only done if this is last object + if not sbp.merged_bake or (sbp.merged_bake and last_obj): + + + + #Scale all baked images if needed (catching this latest one) + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Scale or images if needed (specials)" + op = MACRO.define("SIMPLEBAKE_OT_scale_images_if_needed") + op.properties.bake_operation_id = bake_operation_id + op.properties.this_bake = bake_mode + + #Pack + #MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Packing images into blend file (specials)" + op = MACRO.define("SIMPLEBAKE_OT_pack_baked_images") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + + #Save external + if sbp.save_bakes_external: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Saving baked images externally (specials)" + op = MACRO.define("SIMPLEBAKE_OT_save_images_externally") + op.properties.bake_operation_id = bake_operation_id + op.properties.bake_mode = bake_mode + op.properties.lightmap_apply_colman = sbp.lightmap_apply_colman + + + #Done with this object + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Finished baking {obj_name} (specials)" + obj_counter += 1 + + #Done with all objects + + #Denoise lightmap, AO or thickness MUST COME AFTER SAVE EXTERNAL + if denoise and bake_mode in [SBConstants.LIGHTMAP, SBConstants.AO, SBConstants.THICKNESS]: + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message=f"Running denoise (specials)" + op = MACRO.define("SIMPLEBAKE_OT_compositor_denoise") + op.properties.bake_operation_id = bake_operation_id + #op.properties.bake_type = bake_mode + + #Specials specific bake finishing + MACRO.define("SIMPLEBAKE_OT_print_message").properties.message="Specials bake finishing" + op = MACRO.define("SIMPLEBAKE_OT_specials_specific_bake_prep_and_finish") + op.properties.mode = "finish" + op.properties.orig_sample_count = orig_sample_count + + +classes = ([ + SimpleBake_OT_Specials_Specific_Bake_Prep_And_Finish, + SimpleBake_OT_Import_And_Assign_Specials, + SimpleBake_OT_Setup_Col_ID, + SimpleBake_OT_Setup_Vertex_Col, + SimpleBake_OT_Specials_Mats_Swapping, + SimpleBake_OT_Specials_Bake_Macro, + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/channel_packing.py b/scripts/addons/SimpleBake/channel_packing.py new file mode 100644 index 0000000..1a7ca26 --- /dev/null +++ b/scripts/addons/SimpleBake/channel_packing.py @@ -0,0 +1,455 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, BoolProperty + +from pathlib import Path +import tempfile +import shutil +import os +import numpy as np +import sys + +from .utils import get_bake_objects +from .messages import print_message +from .background_and_progress import BakeInProgress as Bip +from . import __package__ as base_package + +FILE_EXTENSIONS = {"PNG": "png", "JPEG": "jpg", "TIFF": "tiff", "TARGA": "tga","TARGA_RAW": "tga", "OPEN_EXR": "exr"} + +def parse_channel_value(value): + """Return (bake_type, mat_name). mat_name is '' if no material is encoded.""" + if "||" in value: + bake_type, mat_name = value.split("||", 1) + return bake_type, mat_name + return value, "" + + + +def load_image(image_path): + # Load an image file as a numpy array + try: + image = bpy.data.images.load(image_path) + pixels = np.array(image.pixels) + width, height = image.size + # Reshape and isolate the desired channel (r, g, b or a) + channel_data = pixels.reshape((height, width, 4)) + return channel_data[:, :, :3], channel_data[:, :, 3], image # RGB and Alpha + except Exception as e: + print(f"Error loading image {image_path}: {e}") + return None, None, image + +def channel_pack_images_isolate(red_image, green_image, blue_image, alpha_image, imgname, gammashift=False, file_format="PNG"): + + archetype_img_data = None + to_remove = [] + + # Load each image and extract its corresponding channel + if red_image != None: + r_data, r_alpha, r_loaded = load_image(red_image) + packed_image = np.zeros(r_data.shape) + archetype_img_data = r_data + to_remove.append(r_loaded) + + if green_image != None: + g_data, g_alpha, g_loaded = load_image(green_image) + packed_image = np.zeros(g_data.shape) + archetype_img_data = g_data + to_remove.append(g_loaded) + + if blue_image != None: + b_data, b_alpha, b_loaded = load_image(blue_image) + packed_image = np.zeros(b_data.shape) + archetype_img_data = b_data + to_remove.append(b_loaded) + + if alpha_image != None: + a_data, a_alpha, a_loaded = load_image(alpha_image) + packed_image = np.zeros(a_data.shape) + archetype_img_data = a_data + to_remove.append(a_loaded) + + + #----------------Gamma shift stuff--------------------------------------------- + + # Apply gamma correction to the RGB channels if noncolour + if red_image is not None: + r_corrected = np.power(r_data[:, :, 0], 1.0 / 2.2) if gammashift else r_data[:, :, 0] + else: + r_corrected = np.zeros_like(archetype_img_data[:, :, 0]) + + if green_image is not None: + g_corrected = np.power(g_data[:, :, 1], 1.0 / 2.2) if gammashift else g_data[:, :, 1] + else: + g_corrected = np.zeros_like(archetype_img_data[:, :, 0]) + + if blue_image is not None: + b_corrected = np.power(b_data[:, :, 2], 1.0 / 2.2) if gammashift else b_data[:, :, 2] + else: + b_corrected = np.zeros_like(archetype_img_data[:, :, 0]) + + # Assign corrected channels to packed_image + packed_image[:, :, 0] = r_corrected # Red + packed_image[:, :, 1] = g_corrected # Green + packed_image[:, :, 2] = b_corrected # Blue + + if alpha_image is not None: + a_corrected = np.power(a_data[:, :, 0], 1.0 / 2.2) if gammashift else a_data[:, :, 0] + else: + a_corrected = np.ones_like(archetype_img_data[:, :, 0]) + + #----------------Gamma shift stuff--------------------------------------------- + + packed_pixels = np.concatenate((packed_image, a_corrected[:, :, None]), axis=2) + packed_pixels = packed_pixels.flatten() + + # Create a new image in Blender and assign the pixels + bpy.data.images.remove(bpy.data.images[imgname]) if imgname in bpy.data.images else False + output_image = bpy.data.images.new(name=imgname, width=archetype_img_data.shape[1], height=archetype_img_data.shape[0], alpha=True, float_buffer=(file_format == "OPEN_EXR")) + output_image["SB_channel_pack_image"] = True + + output_image.pixels = packed_pixels + + for i in to_remove: + bpy.data.images.remove(i) + + output_image.use_fake_user = True + return output_image + +class SimpleBake_OT_Channel_Packing(Operator): + """Perform channel packing""" + bl_idname = "simplebake.channel_packing" + bl_label = "Pack" + + bake_operation_id: StringProperty() + pbrtarget_only: BoolProperty(default=False) + in_background: BoolProperty(default=False) + global_mode: StringProperty() + target_obj_name_override: StringProperty(default="") + + def delete_components(self,context): + sbp = context.scene.SimpleBake_Props + #Delete externally saved CPT components if the user wants us to do that + + del_list = [] + for obj_name in self.objects: + if not (obj:=context.scene.objects.get(obj_name)): + continue + for cpt in self.cp_list: + r_img = self.resolve_image(context, cpt.R, obj.name) + g_img = self.resolve_image(context, cpt.G, obj.name) + b_img = self.resolve_image(context, cpt.B, obj.name) + a_img = self.resolve_image(context, cpt.A, obj.name) + + if r_img != None and r_img.name in bpy.data.images: + print_message(context, f"Deleting {r_img.name} from local file system") + filepath = bpy.path.abspath(r_img.filepath) + if len(r_img.tiles)>1: + for t in r_img.tiles: + thispath = filepath.replace("", str(t.number)) + os.remove(thispath) if os.path.isfile(thispath) else False + else: + os.remove(filepath) if os.path.isfile(filepath) else False + del_list.append(r_img.name) + + if g_img != None and g_img.name in bpy.data.images: + print_message(context, f"Deleting {g_img.name} from local file system") + filepath = bpy.path.abspath(g_img.filepath) + if len(g_img.tiles)>1: + for t in g_img.tiles: + thispath = filepath.replace("", str(t.number)) + os.remove(thispath) if os.path.isfile(thispath) else False + else: + os.remove(filepath) if os.path.isfile(filepath) else False + del_list.append(g_img.name) + + if b_img != None and b_img.name in bpy.data.images: + print_message(context, f"Deleting {b_img.name} from local file system") + filepath = bpy.path.abspath(b_img.filepath) + if len(b_img.tiles)>1: + for t in b_img.tiles: + thispath = filepath.replace("", str(t.number)) + os.remove(thispath) if os.path.isfile(thispath) else False + else: + os.remove(filepath) if os.path.isfile(filepath) else False + del_list.append(b_img.name) + + if a_img != None and a_img.name in bpy.data.images: + print_message(context, f"Deleting {a_img.name} from local file system") + filepath = bpy.path.abspath(a_img.filepath) + if len(a_img.tiles)>1: + for t in a_img.tiles: + thispath = filepath.replace("", str(t.number)) + os.remove(thispath) if os.path.isfile(thispath) else False + else: + os.remove(filepath) if os.path.isfile(filepath) else False + del_list.append(a_img.name) + + + for iname in del_list: + if iname in bpy.data.images: + bpy.data.images.remove(bpy.data.images[iname]) + + + + def find_images(self, context, selection, objname): + if selection == "none": + return None + img = [i for i in bpy.data.images if + "SB_this_bake" in i and i["SB_this_bake"] == selection and + "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id and + "SB_bake_object" in i and i["SB_bake_object"] == objname and + "SB_bake_material" not in i] + if len(img) != 1: + return None + return img[0] + + def find_images_per_mat(self, context, selection, objname, mat_name): + if selection == "none": + return None + img = [i for i in bpy.data.images if + i.get("SB_this_bake") == selection and + i.get("SB_bake_operation_id") == self.bake_operation_id and + i.get("SB_bake_object") == objname and + i.get("SB_bake_material") == mat_name] + if len(img) != 1: + return None + return img[0] + + def find_images_merged(self, context, selection): + if selection == "none": + return None + else: + img = ([i for i in bpy.data.images if + "SB_this_bake" in i and i["SB_this_bake"] == selection and + "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id]) + assert(len(img)==1), f"Found {len(img)} images, should have been 1" + img = img[0] + return img + + def resolve_image(self, context, raw_value, obj_name): + """Find the image for a channel value, handling encoded mat names.""" + if raw_value == "none": + return None + bake_type, mat_name = parse_channel_value(raw_value) + if self.merged_bake: + return self.find_images_merged(context, bake_type) + elif mat_name: + return self.find_images_per_mat(context, bake_type, obj_name, mat_name) + else: + return self.find_images(context, bake_type, obj_name) + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + #Grab what we need from panel + self.merged_bake = sbp.merged_bake + self.merged_bake_name = sbp.merged_bake_name + self.export_folder_per_object = sbp.export_folder_per_object + self.batch_name = sbp.batch_name + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + to_del = [] + for cp in sbp.cp_list: + if cp["R"]=="none" and cp["G"]=="none" and cp["B"]=="none" and cp["A"]=="none": + to_del.append(cp.name) + for d in to_del: + if (i:=sbp.cp_list.find(d))!=-1: + sbp.cp_list.remove(i) + + self.cp_list = sbp.cp_list + + #Just in case + if len(self.cp_list) == 0: + print_message(context, "No channel packing") + return {'FINISHED'} + + + self.objects = get_bake_objects(context) + + + #Figure out the save folder for each object + efpo = self.export_folder_per_object + mb = self.merged_bake + mbn = self.merged_bake_name + obj_savefolders = {} + + if self.in_background: + p = sbp.export_path.replace("//", "") + base_save_folder = Path(sbp.base_folder_override) / p + else: + base_save_folder = Path(bpy.path.abspath(sbp.export_path)) + + + for obj_name in self.objects: + if not (obj:=context.scene.objects.get(obj_name)): + continue + + if efpo and mb: + savefolder = base_save_folder / mbn + obj_savefolders[obj.name] = savefolder #Every object gets the same based on merged bake name + elif efpo: + savefolder = base_save_folder / obj.name + obj_savefolders[obj.name] = savefolder + else: + savefolder = base_save_folder + obj_savefolders[obj.name] = savefolder + + #Create each of the CPTs + for obj_name in self.objects: + if not (obj:=context.scene.objects.get(obj_name)): + continue + #Hacky + if not mb: t_name = obj.name + else: t_name = mbn + + for cpt in self.cp_list: + file_format = cpt.file_format + cpt_name = cpt.name + extension = FILE_EXTENSIONS[file_format] + if context.preferences.addons[base_package].preferences.capitalise_file_extensions: + extension = extension.upper() + + print_message(context, f"Creating packed texture \"{cpt_name}\" for \"{t_name}\" with format {file_format}") + + r_img = self.resolve_image(context, cpt.R, obj.name) + g_img = self.resolve_image(context, cpt.G, obj.name) + b_img = self.resolve_image(context, cpt.B, obj.name) + a_img = self.resolve_image(context, cpt.A, obj.name) + + if r_img is None and g_img is None and b_img is None and a_img is None: + print_message(context, f"Skipping packed texture \"{cpt_name}\" for \"{t_name}\" - no images found for any channel") + continue + + #--Create the texture-- + prefs = context.preferences.addons[base_package].preferences + + #Determine the name + proposed_name = prefs.img_name_format + if Bip.Sequence.active: + if "%FRAME%" not in proposed_name: + proposed_name = f"{proposed_name}.%FRAME%" + proposed_name = proposed_name.replace("%FRAME%", f"{context.scene.frame_current:04d}") + else: + proposed_name = proposed_name.replace(".%FRAME%", "") + proposed_name = proposed_name.replace("%FRAME%", "") + proposed_name = proposed_name.replace("%OBJ%", t_name) + proposed_name = proposed_name.replace("%BAKEMODE%", self.global_mode) + proposed_name = proposed_name.replace("%BAKETYPE%", cpt.name) + proposed_name = proposed_name.replace("%BATCH%", self.batch_name) + res = f"{sbp.outputwidth}x{sbp.outputheight}" + proposed_name = proposed_name.replace("%RESOLUTION%", res) + proposed_name = proposed_name.replace("%MAT%", "") + imgname = proposed_name + + #Do we need gamma correct? (16Bit or Non-Colour) + #EXR is linear — no gamma correction needed or wanted + gammashift = sbp.everything_16bit and file_format != "OPEN_EXR" + + #Let's go + def save_external(img, cpt, output_path, file_format): + + #Save the image + output_image.file_format = file_format + output_image.filepath_raw = output_path + output_image.alpha_mode = 'CHANNEL_PACKED' + + s = bpy.data.scenes.new("SB_CP_Export_Temp") + s.render.image_settings.file_format = file_format + s.view_settings.view_transform = "Standard" #default + + s.render.image_settings.color_mode = "RGBA" if a_img != None else "RGB" + if file_format == "OPEN_EXR": + s.render.image_settings.exr_codec = cpt.exr_codec + s.render.image_settings.color_depth = "32" + if file_format == "PNG": + s.render.image_settings.exr_codec = cpt.exr_codec + s.render.image_settings.color_depth = "16" if sbp.everything_16bit else "8" + if "png_compression" in cpt: + s.render.image_settings.compression = cpt.png_compression + else: + s.render.image_settings.compression = 15 + + if file_format in {"TARGA", "TARGA_RAW"}: + s.render.image_settings.color_depth = "8" + + img.save_render(str(output_path), scene=s) + img.source = "FILE" + bpy.data.scenes.remove(s) + + #Will we be working with tiled images or not + #If one is tiled, they all wil be. However, they could also be None + tiled = False + tiles = [] + if r_img != None and len(r_img.tiles)>1: + tiled = True + tiles = r_img.tiles + if g_img != None and len(g_img.tiles)>1: + tiled = True + tiles = g_img.tiles + if b_img != None and len(b_img.tiles)>1: + tiled = True + tiles = b_img.tiles + if a_img != None and len(a_img.tiles)>1: + tiled = True + tiles = a_img.tiles + + #UDIM image + if tiled: + for t in tiles: + this_i_name = imgname + f".{str(t.number)}" + r_path = r_img.filepath.replace("", str(t.number)) if r_img!=None else None + g_path = g_img.filepath.replace("", str(t.number)) if g_img!=None else None + b_path = b_img.filepath.replace("", str(t.number)) if b_img!=None else None + a_path = a_img.filepath.replace("", str(t.number)) if a_img!=None else None + + output_image = channel_pack_images_isolate(r_path, g_path, b_path, a_path,\ + this_i_name, gammashift=gammashift, file_format=file_format) + + output_path = Path(obj_savefolders[obj.name] / (this_i_name + f".{extension}")) + save_external(output_image, cpt, str(output_path), file_format) + + output_image["SB_bake_operation_id"] = self.bake_operation_id + + #Non-UDIM image + else: + r_path = r_img.filepath if r_img!=None else None + g_path = g_img.filepath if g_img!=None else None + b_path = b_img.filepath if b_img!=None else None + a_path = a_img.filepath if a_img!=None else None + + output_image = channel_pack_images_isolate(r_path, g_path, b_path, a_path,\ + imgname, gammashift=gammashift, file_format=file_format) + + output_path = Path(obj_savefolders[obj.name] / (imgname + f".{extension}")) + save_external(output_image, cpt, str(output_path), file_format) + + output_image["SB_bake_operation_id"] = self.bake_operation_id + + #------------------------------------------------------ + + #Hacky - If this is a mergedbake, break out of the object loop + if sbp.merged_bake: + break + + if sbp.del_cptex_components: + self.delete_components(context) + + return {'FINISHED'} + + + +classes = ([ + SimpleBake_OT_Channel_Packing + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/cleanup.py b/scripts/addons/SimpleBake/cleanup.py new file mode 100644 index 0000000..a5b9d78 --- /dev/null +++ b/scripts/addons/SimpleBake/cleanup.py @@ -0,0 +1,225 @@ +import bpy +from bpy.types import Operator +from bpy.utils import register_class, unregister_class +from bpy.props import StringProperty + +from . import property_group + +import re + +def format_to_regex(user_input): + # Escape all regex special characters except for * + escaped_input = re.escape(user_input) + # Replace the escaped * with .* + regex_pattern = escaped_input.replace(r'\*', '.*') + + # If the original input ends with *, modify the pattern to end with .*$ + if user_input.endswith('*'): + regex_pattern = regex_pattern[:-2] + '.*$' + + # Check if the original input starts with * + if user_input.startswith('*'): + regex_pattern = '^.*' + regex_pattern[2:] + + return regex_pattern + +def replace_pattern(text, pattern, replacement): + # Format the pattern to include wildcards + formatted_pattern = format_to_regex(pattern) + + # Use re.sub to replace all occurrences of the formatted pattern with the replacement string + result = re.sub(formatted_pattern, replacement, text) + return result + +def find_and_replace(col, find, replace, limit_to_sb=False): + for item in col: + if limit_to_sb and "SB_bake_operation_id" not in item: + continue + + original_name = item.name + new_name = original_name.replace(find, replace) + # If the new name is different, apply the change + if new_name != original_name: + item.name = new_name + print(f"Renamed '{original_name}' to '{new_name}'") + else: + print(f"No change for '{original_name}'") + + +def find_and_replace_wildcard(context, col, find, replace, limit_to_sb=False): + sbp = context.scene.SimpleBake_Props + + for item in col: + if limit_to_sb and "SB_bake_operation_id" not in item: + continue + item.name = replace_pattern(item.name, find, replace) + + + + +class SimpleBake_OT_Purge_Settings(Operator): + bl_idname = "simplebake.purge_settings" + bl_label = "Purge Settings" + bl_description = "WARNING - Purge ALL SimpleBake settings from this Blend file and reset to DEFAULTS. CANNOT BE UNDONE. INCLUDES BLEND FILE PRESETS (but not global presets)" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + + #del context.scene["SimpleBake_Props"] + context.scene.property_unset("SimpleBake_Props") + + self.report({'INFO'}, "SimpleBake settings restored to defaults") + + return {'FINISHED'} + +class SimpleBake_OT_Purge_Images(Operator): + bl_idname = "simplebake.purge_images" + bl_label = "Purge Images" + bl_description = "WARNING - Purge all SimpleBake created IMAGES from this blend file. CANNOT BE UNDONE" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + to_remove = [] + for i in bpy.data.images: + if "SB_bake_operation_id" in i: + to_remove.append(i.name) + + for name in to_remove: + im = bpy.data.images.get(name) + if im != None: + bpy.data.images.remove(im, do_unlink=True) + + + self.report({'INFO'}, "SimpleBake images have been purged") + + + return {'FINISHED'} + +class SimpleBake_OT_Purge_Objects(Operator): + bl_idname = "simplebake.purge_objects" + bl_label = "Purge Objects" + bl_description = "WARNING - Purge all SimpleBake created OBJECTS from this blend file. CANNOT BE UNDONE" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + + bpy.ops.simplebake.reverse_geo_nodes_sidestep() + + to_remove = [] + for o in context.scene.objects: + if "SB_bake_operation_id" in o: + to_remove.append(o.name) + + for name in to_remove: + ob = context.scene.objects.get(name) + if ob != None: + if "SB_copy_and_apply_from" in ob: + uh = context.scene.objects.get(ob["SB_copy_and_apply_from"]) + if uh !=None: + uh.hide_set(False) + + bpy.data.objects.remove(ob, do_unlink=True) + + if "SimpleBake_Bakes" in bpy.data.collections: + bpy.data.collections.remove(bpy.data.collections["SimpleBake_Bakes"]) + + + bpy.ops.simplebake.reverse_geo_nodes_sidestep() + + + self.report({'INFO'}, "SimpleBake objects have been purged") + + + return {'FINISHED'} + +class SimpleBake_OT_restorematerials(Operator): + bl_idname = "simplebake.restorematerials" + bl_label = "Restore" + bl_description = "WARNING - Attempt to restore all materials and purge SimpleBake created MATERIALS from this blend file. CANNOT BE UNDONE" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + + bpy.ops.simplebake.material_backup(mode="working_restore") + bpy.ops.simplebake.material_backup(mode="master_restore") + + to_del= [] + for m in bpy.data.materials: + if "SB_bake_operation_id" in m: + to_del.append(m.name) + + for m_name in to_del: + m = bpy.data.materials.get(m_name) + if m !=None: + bpy.data.materials.remove(m) + + self.report({'INFO'}, "Materials restored") + + + return {'FINISHED'} + + +class SimpleBake_OT_findandreplace(Operator): + bl_idname = "simplebake.findandreplace" + bl_label = "Find and replace" + bl_description = "Find and replace names for the given data type. Basic wildcards are supported as *" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + find = sbp.findreplace_find + replace = sbp.findreplace_replace + + if sbp.findreplace_type == "image": + col = bpy.data.images + if sbp.findreplace_type == "object": + col = context.scene.objects + if sbp.findreplace_type == "material": + col = bpy.data.materials + + + if "*" in find: + find_and_replace_wildcard(context, col, find, replace, limit_to_sb=sbp.limit_findandreplace_to_sb) + else: + find_and_replace(col, find, replace, limit_to_sb=sbp.limit_findandreplace_to_sb) + + self.report({'INFO'}, "Find and replace done") + + + return {'FINISHED'} +classes = ([ + SimpleBake_OT_Purge_Settings, + SimpleBake_OT_Purge_Images, + SimpleBake_OT_Purge_Objects, + SimpleBake_OT_findandreplace, + SimpleBake_OT_restorematerials + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) + diff --git a/scripts/addons/SimpleBake/copy_and_apply.py b/scripts/addons/SimpleBake/copy_and_apply.py new file mode 100644 index 0000000..6cd649e --- /dev/null +++ b/scripts/addons/SimpleBake/copy_and_apply.py @@ -0,0 +1,821 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, BoolProperty + +import os +import sys + +from .utils import SBConstants +from .messages import print_message +from .background_and_progress import BakeInProgress as Bip + +def remove_and_bypass_invert_node(material_name, invert_node_name): + # Get the material + mat = bpy.data.materials.get(material_name) + if not mat: + print(f"Material '{material_name}' not found") + return + + # Ensure the material uses nodes + if not mat.use_nodes: + print(f"Material '{material_name}' does not use nodes") + return + + # Get the node tree of the material + nodes = mat.node_tree.nodes + + # Find the specified invert node by name + invert_node = nodes.get(invert_node_name) + if not invert_node: + print(f"Invert node named '{invert_node_name}' not found") + return + if invert_node.type != 'INVERT': + print(f"The node named '{invert_node_name}' is not an invert node") + return + + # Check the input connections to the invert node + if invert_node.inputs['Color'].is_linked: + input_link = invert_node.inputs['Color'].links[0].from_socket + else: + return + + # Check the output connections from the invert node + if invert_node.outputs['Color'].is_linked: + # There could be multiple links, handle each one + output_links = invert_node.outputs['Color'].links + for link in output_links: + # Connect each linked output to the original input link's socket + mat.node_tree.links.new(input_link, link.to_socket) + else: + return + + # Delete the invert node + nodes.remove(invert_node) + +def create_aov_nodes(node_tree, bake_operation_id, obj, merged_bake=False): + + #Find them all + aov_images = [] + for i in bpy.data.images: + if "SB_this_bake" in i and "SB_bake_operation_id" in i: + if i["SB_bake_operation_id"] == bake_operation_id and "AOV_" in i["SB_this_bake"]: + aov_images.append(i) + + #If this isn't a merged bake we only want the images for this object + if not merged_bake: + aov_images = [img for img in aov_images if img['SB_bake_object'] == obj['SB_copy_and_apply_from']] + + #Keep this names only + aov_images = [img.name for img in aov_images] + + + #Find MO node + mo_node = [n for n in node_tree.nodes if n.bl_idname == 'ShaderNodeOutputMaterial' and n.is_active_output] + assert(len(mo_node)==1) + mo_node = mo_node[0] + + base_x, base_y = mo_node.location + + i=0 + for aov in aov_images: + img = bpy.data.images.get(aov) + if not img: + continue + + img_node = node_tree.nodes.new("ShaderNodeTexImage") + img_node.hide = True # collapsed + img_node.location = (base_x, base_y - 160 - i * 40) + img_node.image = img + i+=1 + + +class SimpleBake_OT_Apply_Bakes_To_Original(Operator): + """Apply the baked textures to the original objects""" + bl_idname = "simplebake.apply_bakes_to_original" + bl_description = "Apply the baked textures to the original objects" + bl_label = "Apply bakes to original" + + bake_operation_id: StringProperty() + + def execute(self, context): + + if not Bip.Sequence.should_run_teardown(): + return {'FINISHED'} #Nope out if this is part of a sequence unless last + + for m in bpy.data.materials: + if ("SB_baked_orig_objects" in m) and ("SB_bake_operation_id" in m): + if m["SB_bake_operation_id"] == self.bake_operation_id: + os = list(m["SB_baked_orig_objects"]) + for o_name in os: + if (obj:=context.scene.objects.get(o_name)): + + actual_obj = None + #Is this a proxy object for sidestep? + if "SB_proxy_bake_object" in obj: + actual_obj_name = obj["SB_proxy_bake_object"] + + #Find a sidestepped object with this tag + for o in context.scene.objects: + if "SB_replaced_orig_name" in o and o["SB_replaced_orig_name"] == actual_obj_name: + actual_obj = o + else: + actual_obj = obj + + if actual_obj == None: + print_message(context, "ERROR: Apply bakes to original object operator couldn't locate original object!!") + return {'CANCELLED'} + + for slot in actual_obj.material_slots: + slot.material = m + return {'FINISHED'} + + +class SimpleBake_OT_Copy_And_Apply(Operator): + """Copy the baked objects and apply baked textures""" + bl_idname = "simplebake.copy_and_apply" + bl_description = "Copy baked objects and apply bakes" + bl_label = "Copy and apply" + + target_object_name: StringProperty() + bake_operation_id: StringProperty() + global_mode: StringProperty() + decals_override: BoolProperty(default=False) + + def import_cyclesbake_mat_setup(self, context, new_obj, merged=False): + + + if self.cyclesbake_mat_format == "emission": + import_mat_name = "SB_cyclesbake_e" + elif self.cyclesbake_mat_format == "background": + import_mat_name = "SB_cyclesbake_b" + else: + import_mat_name = "SB_cyclesbake_p" + + rm_list = [mat.name for mat in bpy.data.materials if mat.name == import_mat_name] + for rm_name in rm_list: + mat = bpy.data.materials.get(rm_name) + if mat != None: + bpy.data.materials.remove(mat) + + path = os.path.dirname(__file__) + "/resources/copy_and_apply_mats.blend/Material/" + bpy.ops.wm.append(filename=import_mat_name, directory=path) + mat = bpy.data.materials[import_mat_name] + + if merged: + mat.name = f"{self.merged_bake_name}_Baked" + mat["SB_bake_operation_id"] = self.bake_operation_id + mat["SB_merged_copy_and_apply_mat"] = True + elif not self.mat_only: + mat.name = f"{new_obj.name}" #Already includes "_baked" + else: + mat.name = f"{self.target_object_name}_baked" + + if new_obj !=None: + #Assign to object + new_obj.data.materials.append(mat) + + return mat + + + def import_pbr_mat_setup(self, context, new_obj, merged=False): + sbp = context.scene.SimpleBake_Props + + #Decals + if self.decals_override: + if self.used_directx: + import_mat_name = "SB_pbr_directx_decals" + else: + import_mat_name = "SB_standard_pbr_decals" + + #Not decals + else: + if self.used_directx: + import_mat_name = "SB_pbr_directx" + else: + import_mat_name = "SB_standard_pbr" + + + #Import the PBR node setup that we need and assign to object + rm_list = [mat.name for mat in bpy.data.materials if mat.name == import_mat_name] + for rm_name in rm_list: + mat = bpy.data.materials.get(rm_name) + if mat != None: + bpy.data.materials.remove(mat) + + + path = os.path.dirname(__file__) + "/resources/copy_and_apply_mats.blend/Material/" + bpy.ops.wm.append(filename=import_mat_name, directory=path) + mat = bpy.data.materials[import_mat_name] + + #Deal with the case where the user has selected glossy + if not self.used_glossy: + remove_and_bypass_invert_node(import_mat_name, "invert_roughgloss") + remove_and_bypass_invert_node(import_mat_name, "decal_invert_roughgloss") + if not self.used_ccglossy: + remove_and_bypass_invert_node(import_mat_name, "invert_ccroughgloss") + remove_and_bypass_invert_node(import_mat_name, "decal_invert_ccroughgloss") + + if self.used_glossy: + gns = [n for n in mat.node_tree.nodes if n.label == SBConstants.PBR_ROUGHNESS] + for n in gns: + n.label = SBConstants.PBR_GLOSSY + gns = [n for n in mat.node_tree.nodes if n.label == f"Decal_{SBConstants.PBR_ROUGHNESS}"] + for n in gns: + n.label = f"Decal_{SBConstants.PBR_GLOSSY}" + + if self.used_ccglossy: + gns = [n for n in mat.node_tree.nodes if n.label == SBConstants.PBR_CLEARCOAT_ROUGH] + for n in gns: + n.label = SBConstants.PBR_CLEARCOAT_GLOSS + gns = [n for n in mat.node_tree.nodes if n.label == f"Decal_{SBConstants.PBR_CLEARCOAT_ROUGH}"] + for n in gns: + n.label = f"Decal_{SBConstants.PBR_CLEARCOAT_GLOSS}" + + #Assign to object + if new_obj != None: + new_obj.data.materials.append(mat) + + if merged: + mat.name = f"{self.merged_bake_name}_Baked" + mat["SB_bake_operation_id"] = self.bake_operation_id + mat["SB_merged_copy_and_apply_mat"] = True + elif not self.mat_only: + mat.name = f"{new_obj.name}" #Already includes "_baked" + else: + mat.name = f"{self.target_object_name}_baked" + + #If we are baking alpha or transparency, set the blend mode + if sbp.selected_alpha or sbp.selected_trans: + mat.blend_method = "BLEND" + + return mat + + def create_cyclesbake_setup(self, context, new_obj): + mat = self.import_cyclesbake_mat_setup(context, new_obj) + node_tree = mat.node_tree + nodes = node_tree.nodes + + #The non-specials texture + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and "SB_this_bake" in i and i["SB_this_bake"] not in SBConstants.ALL_SPECIALS + and i["SB_bake_object"] == self.target_object_name + ]) + assert len(tex) == 1 + tex = tex[0] + + node = [n for n in nodes if n.label=="cyclesbake"] + assert len(node) == 1 + node = node[0] + node.image = tex + + #The specials textures + for bake_type in SBConstants.ALL_SPECIALS: + node = [n for n in nodes if n.label==bake_type] + if len(node) == 0: continue #E.g. Glossy will not be there for standard + else: node = node[0] + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and "SB_this_bake" in i and i["SB_this_bake"] == bake_type + and i["SB_bake_object"] == self.target_object_name + ]) + if len(tex) == 1: + tex = tex[0] + node.image = tex + else: + nodes.remove(node) + return mat + + def create_cyclesbake_setup_merged(self, context, new_obj): + + #Check if we already have the merged texture + for mat in bpy.data.materials: + if "SB_merged_copy_and_apply_mat" in mat\ + and "SB_bake_operation_id" in mat\ + and mat["SB_bake_operation_id"] == self.bake_operation_id: + #Assign existing merged mat to object and leave + if new_obj is not None: + new_obj.data.materials.append(mat) + return mat +# +# mat_name = f"{self.merged_bake_name}_Baked" +# if mat_name in bpy.data.materials: +# mat = bpy.data.materials[mat_name] +# if "SB_bake_operation_id" in mat and mat["SB_bake_operation_id"] == self.bake_operation_id: +# mat = bpy.data.materials[mat_name] +# #Assign existing merged mat to object and leave +# if new_obj != None: +# new_obj.data.materials.append(mat) +# return mat + + mat = self.import_cyclesbake_mat_setup(context, new_obj, merged=True) + node_tree = mat.node_tree + nodes = node_tree.nodes + + #The non-specials texture + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and "SB_this_bake" in i and i["SB_this_bake"] not in SBConstants.ALL_SPECIALS + ]) + assert len(tex) == 1 + tex = tex[0] + + node = [n for n in nodes if n.label=="cyclesbake"] + assert len(node) == 1 + node = node[0] + node.image = tex + + #The specials textures + for bake_type in SBConstants.ALL_SPECIALS: + node = [n for n in nodes if n.label==bake_type] + if len(node) == 0: continue #E.g. Glossy will not be there for standard + else: node = node[0] + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and "SB_this_bake" in i and i["SB_this_bake"] == bake_type]) + if len(tex) == 1: + tex = tex[0] + node.image = tex + else: + nodes.remove(node) + return mat + + def create_pbrdecal_setup(self, context, new_obj): + + + BAKE_OP_PREFIX = "DECALSBASE_" + #Called with the prefix. S2A textures will NOT have the prefix + + + #Setup + mat = self.import_pbr_mat_setup(context, new_obj) + node_tree = mat.node_tree + nodes = node_tree.nodes + bake_types = SBConstants.ALL_PBR_MODES #Every possible bake mode for PBR + bake_types += SBConstants.ALL_SPECIALS #Every possible bake mode for specials + + + #Find the master decal alpha + decal_alpha_tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"]== self.bake_operation_id.replace(BAKE_OP_PREFIX, "") and + "SB_this_bake" in i and i["SB_this_bake"] == SBConstants.PBR_ALPHA and + "SB_global_mode" in i and i["SB_global_mode"] == SBConstants.PBRS2A + ]) + assert(len(decal_alpha_tex)==1) + node = [n for n in nodes if n.label=="Master_Decal_Alpha"] + assert(len(node)==1) + node[0].image = decal_alpha_tex[0] + + + #Now the base/target object PBR textures: + for bake_type in bake_types: + node = [n for n in nodes if n.label==bake_type] + if len(node) == 0: continue #E.g. Glossy will not be there for standard + else: node = node[0] + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i and + i["SB_bake_operation_id"] == self.bake_operation_id and + "SB_this_bake" in i and i["SB_this_bake"] == bake_type and + "SB_bake_object" in i and i["SB_bake_object"] == self.target_object_name]) + if len(tex) == 1: + tex = tex[0] + node.image = tex + else: + nodes.remove(node) + + + + # #Now the Decal/S2A textures: + for bake_type in bake_types: + node = [n for n in nodes if n.label=="Decal_" + bake_type] + if len(node) == 0: continue #E.g. Glossy will not be there for standard + else: node = node[0] + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i and + i["SB_bake_operation_id"] == self.bake_operation_id.replace(BAKE_OP_PREFIX, "") and + "SB_this_bake" in i and i["SB_this_bake"] == bake_type and + "SB_bake_object" in i and i["SB_bake_object"] == self.target_object_name]) + if len(tex) == 1: + tex = tex[0] + node.image = tex + else: + nodes.remove(node) + + #Now get rid of the unused MixRGB nodes + mnodes = [n for n in nodes if n.bl_idname == "ShaderNodeMix"] + for mnode in mnodes: + a_color_input = [i for i in mnode.inputs if i.identifier=="A_Color"][0] + #factor_float_input = [i for i in mnode.inputs if i.identifier=="Factor_Float"][0] + #color_output = [o for o in mnode.outputs if o.identifier=="Result_Color"][0] + + if len(a_color_input.links) == 0: + #fsocket = factor_float_input.links[0].from_socket + #tsocket = color_output.links[0].to_socket + #node_tree.links.new(fsocket, tsocket) + nodes.remove(mnode) + + #Finally the AOVs + create_aov_nodes(node_tree, self.bake_operation_id, new_obj) + + return mat + + + def create_pbr_setup_tex_per_mat(self, context, new_obj): + """Create one PBR material per original material slot using per-material baked images.""" + source_obj = context.scene.objects[self.target_object_name] + original_mat_only = self.mat_only + self.mat_only = True # Prevent import_pbr_mat_setup crashing when new_obj is None + + # Save face→material-slot mapping from the source before create_object()'s + # materials.clear() resets all polygon material_index values to 0. + if new_obj is not None: + face_mat_indices = [p.material_index for p in source_obj.data.polygons] + + mats = [] + for slot in source_obj.material_slots: + if slot.material is None: + continue + # master_restore has not run yet when copy_and_apply is called, so slot names + # still carry the "SBM_" prefix — strip it to match the SB_bake_material tag. + mat_name = slot.material.name + if mat_name.startswith("SBM_"): + mat_name = mat_name[4:] + + mat = self.import_pbr_mat_setup(context, new_obj=None) + mat.name = f"{self.target_object_name}_{mat_name}_Baked" + + node_tree = mat.node_tree + nodes = node_tree.nodes + + bake_types = SBConstants.ALL_PBR_MODES + SBConstants.ALL_SPECIALS + for bake_type in bake_types: + node = [n for n in nodes if n.label == bake_type] + if not node: + continue + node = node[0] + + tex = [i for i in bpy.data.images if + i.get("SB_bake_operation_id") == self.bake_operation_id and + i.get("SB_this_bake") == bake_type and + i.get("SB_bake_object") == self.target_object_name and + i.get("SB_bake_material") == mat_name] + + if len(tex) == 1: + node.image = tex[0] + else: + nodes.remove(node) + + create_aov_nodes(node_tree, self.bake_operation_id, new_obj) + + if new_obj is not None: + new_obj.data.materials.append(mat) + mats.append(mat) + + # Restore face→material-slot assignments now that the baked materials are in place. + if new_obj is not None: + for poly, idx in zip(new_obj.data.polygons, face_mat_indices): + poly.material_index = idx + + self.mat_only = original_mat_only + return mats + + def create_cyclesbake_setup_tex_per_mat(self, context, new_obj): + """Create one CyclesBake material per original material slot using per-material baked images.""" + source_obj = context.scene.objects[self.target_object_name] + original_mat_only = self.mat_only + self.mat_only = True # Prevent import_cyclesbake_mat_setup crashing when new_obj is None + + # Save face→material-slot mapping from the source before create_object()'s + # materials.clear() resets all polygon material_index values to 0. + if new_obj is not None: + face_mat_indices = [p.material_index for p in source_obj.data.polygons] + + mats = [] + for slot in source_obj.material_slots: + if slot.material is None: + continue + # master_restore has not run yet when copy_and_apply is called, so slot names + # still carry the "SBM_" prefix — strip it to match the SB_bake_material tag. + mat_name = slot.material.name + if mat_name.startswith("SBM_"): + mat_name = mat_name[4:] + + mat = self.import_cyclesbake_mat_setup(context, new_obj=None) + mat.name = f"{self.target_object_name}_{mat_name}_Baked" + + node_tree = mat.node_tree + nodes = node_tree.nodes + + # Non-specials cyclesbake image — per material + tex = [i for i in bpy.data.images if + i.get("SB_bake_operation_id") == self.bake_operation_id and + i.get("SB_this_bake") not in SBConstants.ALL_SPECIALS and + i.get("SB_bake_object") == self.target_object_name and + i.get("SB_bake_material") == mat_name] + if len(tex) == 1: + node = [n for n in nodes if n.label == "cyclesbake"] + if node: + node[0].image = tex[0] + + for bake_type in SBConstants.ALL_SPECIALS: + node = [n for n in nodes if n.label == bake_type] + if not node: + continue + node = node[0] + spec_tex = [i for i in bpy.data.images if + i.get("SB_bake_operation_id") == self.bake_operation_id and + i.get("SB_this_bake") == bake_type and + i.get("SB_bake_object") == self.target_object_name and + i.get("SB_bake_material") == mat_name] + if len(spec_tex) == 1: + node.image = spec_tex[0] + else: + nodes.remove(node) + + if new_obj is not None: + new_obj.data.materials.append(mat) + mats.append(mat) + + # Restore face→material-slot assignments now that the baked materials are in place. + if new_obj is not None: + for poly, idx in zip(new_obj.data.polygons, face_mat_indices): + poly.material_index = idx + + self.mat_only = original_mat_only + return mats + + def create_pbr_setup(self, context, new_obj): + + + mat = self.import_pbr_mat_setup(context, new_obj) + node_tree = mat.node_tree + nodes = node_tree.nodes + + bake_types = SBConstants.ALL_PBR_MODES #Every possible bake mode for PBR + bake_types += SBConstants.ALL_SPECIALS #Every possible bake mode for specials + #Set the textures + for bake_type in bake_types: + node = [n for n in nodes if n.label==bake_type] + if len(node) == 0: continue #E.g. Glossy will not be there for standard + else: node = node[0] + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and "SB_this_bake" in i and i["SB_this_bake"] == bake_type + and "SB_bake_object" in i and i["SB_bake_object"] == self.target_object_name]) + if len(tex) == 1: + tex = tex[0] + node.image = tex + else: + nodes.remove(node) + + #Finally the AOVs + create_aov_nodes(node_tree, self.bake_operation_id, new_obj) + + return mat + + def create_pbr_setup_merged(self, context, new_obj): + + + #Should be the only material with our bake id + for mat in bpy.data.materials: + if "SB_merged_copy_and_apply_mat" in mat\ + and "SB_bake_operation_id" in mat\ + and mat["SB_bake_operation_id"] == self.bake_operation_id: + #Assign existing merged mat to object and leave + if new_obj is not None: + new_obj.data.materials.append(mat) + return mat + + + + #No existing merged bake material + mat = self.import_pbr_mat_setup(context, new_obj, merged=True) + node_tree = mat.node_tree + nodes = node_tree.nodes + + bake_types = SBConstants.ALL_PBR_MODES #Every possible bake mode for PBR + bake_types += SBConstants.ALL_SPECIALS #Every possible bake mode for specials + #Set the textures + for bake_type in bake_types: + node = [n for n in nodes if n.label==bake_type] + if len(node) == 0: continue #E.g. Glossy will not be there for standard + else: node = node[0] + tex = ([i for i in bpy.data.images if "SB_bake_operation_id" in i + and i["SB_bake_operation_id"] == self.bake_operation_id + and "SB_this_bake" in i and i["SB_this_bake"] == bake_type + and "SB_merged_bake" in i and i["SB_merged_bake"] == True + and "SB_merged_bake_name" in i and i["SB_merged_bake_name"] == self.merged_bake_name + ]) + if len(tex) == 1: + tex = tex[0] + node.image = tex + else: + nodes.remove(node) + + #Finally the AOVs + create_aov_nodes(node_tree, self.bake_operation_id, new_obj, merged_bake=True) + + return mat + + def hook_up_glTF_node(self, context, mat): + node_tree = mat.node_tree + nodes = node_tree.nodes + + glTF_node = [n for n in nodes if n.label == "gltf"] + assert(len(glTF_node)) + glTF_node = glTF_node[0] + + target_option = self.glTF_option + + target_node = [n for n in nodes if n.label == target_option] + assert(len(target_node)) + target_node = target_node[0] + + node_tree.links.new(target_node.outputs[0], glTF_node.inputs[0]) + + def create_object(self,context): + sbp = context.scene.SimpleBake_Props + + source_obj = context.scene.objects[self.target_object_name] + + if (source_obj.name + "_Baked") in context.scene.objects: + bpy.data.objects.remove(context.scene.objects[source_obj.name + "_Baked"]) + + new_obj = source_obj.copy() + new_obj.data = source_obj.data.copy() + + new_obj["SB_copy_and_apply_from"] = source_obj.name + new_obj["SB_bake_operation_id"] = self.bake_operation_id + + new_obj.name = source_obj.name + "_Baked" + + new_obj.data.materials.clear() + + if "SB_BG_HIDE" in new_obj: + del new_obj["SB_BG_HIDE"] + + #Create a collection for our baked objects if it doesn't exist + col_name = "SimpleBake_Bakes_Background" if self.in_background else "SimpleBake_Bakes" + + if col_name not in bpy.data.collections: + col = bpy.data.collections.new(col_name) + context.scene.collection.children.link(col) + else: + col = bpy.data.collections[col_name] + if col_name not in context.scene.collection.children: + context.scene.collection.children.link(col) + + try: col.color_tag = "COLOR_05" + except AttributeError: pass + + #Make sure it's visible and enabled for current view laywer + context.view_layer.layer_collection.children[col_name].exclude = False + context.view_layer.layer_collection.children[col_name].hide_viewport = False + + #Link object to our new collection + col.objects.link(new_obj) + + #Remove tags from geo nodes sidestep + if "SB_proxy_bake_object" in new_obj: + del new_obj["SB_proxy_bake_object"] + if "SB_sidestepd_orig_target" in new_obj: + del new_obj["SB_sidestepd_orig_target"] + if "SB_replaced_orig_name" in new_obj: + del new_obj["SB_replaced_orig_name"] + + + #Set active uv to one we used for bake for this object. Remove others. + bake_uv_name = source_obj.get("SB_uv_used_for_bake") + if bake_uv_name and bake_uv_name in new_obj.data.uv_layers: + new_obj.data.uv_layers.active = new_obj.data.uv_layers[bake_uv_name] + del_list = [uvl.name for uvl in new_obj.data.uv_layers if uvl.name != bake_uv_name] + [new_obj.data.uv_layers.remove(new_obj.data.uv_layers[name]) for name in del_list] + + #Hide source objects? + if self.hide_source_objects: + source_obj.hide_set(True) + + return new_obj + + + def remove_unused_pbr(self,context,mat): + + node_tree = mat.node_tree + nodes = node_tree.nodes + + d_nodes_names = [n.name for n in nodes if n.bl_idname == "ShaderNodeDisplacement"] + nm_nodes_names = [n.name for n in nodes if n.bl_idname == "ShaderNodeNormalMap"] + gltf_node_names =[n.name for n in nodes if n.bl_idname == "ShaderNodeGroup" and n.label == "gltf"] + + node_names = d_nodes_names + nm_nodes_names + gltf_node_names + + for name in node_names: + if (n := nodes.get(name)): + unused = True + for i in n.inputs: + if len(i.links)>0: + unused = False + if unused: + nodes.remove(n) + + rr_nodes = [n.name for n in nodes if n.bl_idname == "NodeReroute"] + + for name in rr_nodes: + if (n := nodes.get(name)): + unused = True + for o in n.outputs: + if len(o.links)>0: + unused = False + if unused: + nodes.remove(n) + + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + if not Bip.Sequence.should_run_teardown(): + print_message(context, "No object preperation - sequence and not last run") + return {'FINISHED'} #Nope out if this is part of a sequence + + used_glossy = True if sbp.rough_glossy_switch == SBConstants.PBR_GLOSSY else False + used_ccglossy = True if sbp.ccrough_glossy_switch == SBConstants.PBR_CLEARCOAT_GLOSS else False + + used_directx = True if sbp.normal_format_switch == SBConstants.NORMAL_DIRECTX else False + + #Grab what we need from the panel + self.used_glossy = used_glossy + self.used_ccglossy = used_ccglossy + self.used_directx = used_directx + self.hide_source_objects = sbp.hide_source_objects + self.glTF = sbp.create_glTF_node + self.glTF_option = sbp.glTF_selection + self.merged_bake = sbp.merged_bake + self.cyclesbake_mat_format = sbp.cyclesbake_copy_and_apply_mat_format + self.merged_bake_name = sbp.merged_bake_name + self.mat_only = True if sbp.apply_bakes_to_original else False + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + + print_message(context, f"Creating prepared object {self.target_object_name}") + + tex_per_mat = sbp.tex_per_mat and not self.merged_bake and not self.decals_override + + if self.mat_only and not tex_per_mat: + new_obj = None + else: + new_obj = self.create_object(context) + + if tex_per_mat and self.global_mode in [SBConstants.PBR, SBConstants.PBRS2A]: + mats = self.create_pbr_setup_tex_per_mat(context, new_obj) + elif tex_per_mat and self.global_mode in [SBConstants.CYCLESBAKE, SBConstants.CYCLESBAKE_S2A]: + mats = self.create_cyclesbake_setup_tex_per_mat(context, new_obj) + else: + if self.decals_override: + mat = self.create_pbrdecal_setup(context, new_obj) + elif self.global_mode in [SBConstants.PBR, SBConstants.PBRS2A] and self.merged_bake: + mat = self.create_pbr_setup_merged(context, new_obj) + elif self.global_mode in [SBConstants.PBR, SBConstants.PBRS2A]: + mat = self.create_pbr_setup(context, new_obj) + elif self.global_mode in [SBConstants.CYCLESBAKE, SBConstants.CYCLESBAKE_S2A] and self.merged_bake: + mat = self.create_cyclesbake_setup_merged(context, new_obj) + elif self.global_mode in [SBConstants.CYCLESBAKE, SBConstants.CYCLESBAKE_S2A]: + mat = self.create_cyclesbake_setup(context, new_obj) + else: + print_message(context, "Something went wrong with Copy and Apply") + return {'FINISHED'} + mats = [mat] + + for mat in mats: + orig_objects = list(mat.get("SB_baked_orig_objects", [])) + orig_objects.append(self.target_object_name) + mat["SB_baked_orig_objects"] = orig_objects + mat["SB_bake_operation_id"] = self.bake_operation_id + + if not tex_per_mat: + mat = mats[0] + #Hook up glTF node? + if self.glTF: + self.hook_up_glTF_node(context, mat) + + #Make sure this happens after the GLTF node is corrected + if self.global_mode in [SBConstants.PBR, SBConstants.PBRS2A] or self.decals_override: + for mat in mats: + self.remove_unused_pbr(context, mat) + + + return {'FINISHED'} + +classes = ([ + SimpleBake_OT_Copy_And_Apply, + SimpleBake_OT_Apply_Bakes_To_Original + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/external_save.py b/scripts/addons/SimpleBake/external_save.py new file mode 100644 index 0000000..fd409ab --- /dev/null +++ b/scripts/addons/SimpleBake/external_save.py @@ -0,0 +1,494 @@ +import bpy +from bpy.types import Operator +from bpy.utils import register_class, unregister_class +from bpy.props import StringProperty, BoolProperty, IntProperty + +from pathlib import Path +import os +import sys +import re + +from .utils import SBConstants, get_base_folder_patho, select_only_this, select_only_these, get_texture_channels, blender_default_colorspace +from .messages import print_message +from .background_and_progress import BakeInProgress as Bip + +FILE_EXTENSIONS = {"PNG": "png", "JPEG": "jpg", "TIFF": "tiff", "TARGA": "tga","TARGA_RAW": "tga", "OPEN_EXR": "exr"} + +def apply_scene_col_settings(context, scene): + scene.display_settings.display_device = context.scene.display_settings.display_device + scene.view_settings.view_transform = context.scene.view_settings.view_transform + scene.view_settings.look = context.scene.view_settings.look + scene.view_settings.exposure = context.scene.view_settings.exposure + scene.view_settings.gamma = context.scene.view_settings.gamma + scene.sequencer_colorspace_settings.name = context.scene.sequencer_colorspace_settings.name + return True + + +class SimpleBake_OT_Save_Images_Externally(Operator): + """Saved baked images externally""" + bl_idname = "simplebake.save_images_externally" + bl_description = "Save baked images externally" + bl_label = "Save" + + bake_operation_id: StringProperty() + bake_mode: StringProperty() + lightmap_apply_colman: BoolProperty(default=False) + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + #Set what we need from the panel + self.file_format = sbp.export_file_format + self.folder_per_object = sbp.export_folder_per_object + self.apply_col_man_to_col = sbp.apply_col_man_to_col + self.merged_bake = sbp.merged_bake + self.merged_bake_name = sbp.merged_bake_name + self.export_cycles_col_space = sbp.export_cycles_col_space + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + + + #Get all the images we want to save externally + imgs = ([img for img in bpy.data.images + if "SB_bake_operation_id" in img and + img["SB_bake_operation_id"] == self.bake_operation_id and + "SB_this_bake" in img and img["SB_this_bake"] == self.bake_mode + ]) + + + #Remove any already exported + for img in list(imgs): + exported_list = list(img["SB_exported_list"]) + if self.bake_operation_id in exported_list: + print_message(context, f"{img.name} has already been exported") + imgs.remove(img) + + #Exit here if there aren't any + if len(imgs) == 0: + print_message(context, f"No images to export, exiting") + return {'FINISHED'} + + + + #Find the save location for each image + save_locations = {} + + if self.in_background: + p = sbp.export_path.replace("//", "") + base_save_folder = Path(sbp.base_folder_override) / p + else: + base_save_folder = Path(bpy.path.abspath(sbp.export_path)) + + print_message(context, f"Saving baked images to {str(base_save_folder)}") + + if not self.folder_per_object:#Not folder per object + for img in imgs: + save_locations[img.name] = base_save_folder #All the same + else: #Folder per object + if self.merged_bake: + for img in imgs: + save_locations[img.name] = base_save_folder / self.merged_bake_name #All the same + else: + for img in imgs: + obj_name = img["SB_bake_object"] + if img.get("SB_bake_material"): + save_locations[img.name] = base_save_folder / obj_name / img["SB_bake_material"] + else: + save_locations[img.name] = base_save_folder / obj_name + + #Create the base save folder if it doesn't already exist + if not os.path.isdir(str(base_save_folder)): + os.makedirs(str(base_save_folder)) + + #We want a scene so we can control bit depth etc. + s = bpy.data.scenes.new("SB_Export_Temp") + s.render.image_settings.file_format = self.file_format + + #Do we want to apply colour management from current scene? + #CyclesBake + s.view_settings.view_transform = "Standard" #default + + if sbp.global_mode == "CyclesBake": + if self.export_cycles_col_space and self.bake_mode != "NORMAL": + print_message(context, "Applying scene col management settings CyclesBake") + apply_scene_col_settings(context, s) + else: + print_message(context, f"No col management settings for {self.bake_mode}") + + #PBR + else: + if self.apply_col_man_to_col and self.bake_mode == SBConstants.PBR_DIFFUSE: + print_message(context, "Applying scene col management settings to PBR Diffuse") + apply_scene_col_settings(context, s) + else: + print_message(context, f"No col management settings for {self.bake_mode}") + + #Either + if self.lightmap_apply_colman and self.bake_mode == SBConstants.LIGHTMAP: + print_message(context, "Applying scene col management settings lightmap") + apply_scene_col_settings(context, s) + + + + #Bit depth + if self.file_format in ["JPEG", "TARGA", "TARGA_RAW"]: + pass # Skip this entirely + elif (sbp.everything_16bit or + self.bake_mode == SBConstants.PBR_NORMAL and not sbp.no_force_32bit_normals or + self.bake_mode == "NORMAL" and not sbp.no_force_32bit_normals): + s.render.image_settings.color_depth = "16" + elif self.file_format == "OPEN_EXR": + s.render.image_settings.color_depth = "32" + else: + s.render.image_settings.color_depth = "8" + + #Channels + if self.file_format == "JPEG": + s.render.image_settings.color_mode = get_texture_channels(context, self.bake_mode) + else: + ua = sbp.texture_bg_col[3] < 1.0 + if ua: s.render.image_settings.color_mode = "RGBA" + else: s.render.image_settings.color_mode = get_texture_channels(context, self.bake_mode) + + print_message(context, f"Chosen {s.render.image_settings.color_mode} for {self.bake_mode}") + + #Extras + if self.file_format == "JPEG": + s.render.image_settings.quality = sbp.jpeg_quality + if self.file_format == "OPEN_EXR": + s.render.image_settings.exr_codec = sbp.exr_codec_export + + #Save to disk + for img in imgs: + save_folder = save_locations[img.name] + #Create the folder in the file system if it's not there already + create_dir_if_needed(save_folder) + + ext = FILE_EXTENSIONS[self.file_format] + prefs = context.preferences.addons[__package__].preferences + if prefs.capitalise_file_extensions: + ext = ext.upper() + + #Some housekeeping to do if we are going to save a UDIM image + udim_marker = "." if len(img.tiles)>1 else "" + if len(img.tiles)>1: + pattern = re.compile(rf"^{re.escape(img.name)}\.(\d{{4,}})\.{re.escape(ext)}$") + for file in save_folder.iterdir(): + if file.is_file() and pattern.match(file.name): + print(f"Deleting: {file}") # optional + file.unlink() + + + save_path = save_folder / (img.name + "." + udim_marker + ext) + print_message(context, f"Save path: {str(save_path)}") + + #Save image + #Let's try this + img.save_render(str(save_path).encode('utf-8').decode('utf-8'), scene=s) + + #Store full path. We may need it later on. About to update to relative path + full_save_path = str(save_path) + img["SB_full_save_path"] = full_save_path + + #Store the bit depth and channels too as this is oddly hard to get back later + img["SB_bit_depth"] = s.render.image_settings.color_depth + img["SB_channels"] = s.render.image_settings.color_mode + img["SB_view_transform"] = s.view_settings.view_transform + img["SB_exr_codec"] = s.render.image_settings.exr_codec + + #Some changes needed for UDIM images + img.source = "TILED" if len(img.tiles)>1 else "FILE" + + #TRY TO covnert to relative path. Even if in the background, as the append op will fix this + try: + img.filepath = bpy.path.relpath(full_save_path) + except ValueError: + print_message(context, "Converting to relative path failed - probably different drive on Windows") + img.filepath = full_save_path + + + try: + img.unpack(method="REMOVE") + except: + pass + + #Colour space settings for (what is now) external image + if self.file_format == "OPEN_EXR": + #Get default for non-col (for OpenEXR) + img.colorspace_settings.name = blender_default_colorspace(float_buffer=False, col=False)[1] + + elif "SB_denoised" in img and img["SB_denoised"] and( + sbp.global_mode in [SBConstants.CYCLESBAKE, SBConstants.CYCLESBAKE_S2A]): + img.colorspace_settings.name = sbp.cyclesbake_cs + else: + pass # Keep the defaults from when image was created + + + #Record that we exported this image for this bake job + exported_list = list(img["SB_exported_list"]) + exported_list.append(self.bake_operation_id) + img["SB_exported_list"] = exported_list + + print_message(context, f"{img.name} saved externally") + + #When all done, remove the temp scene + bpy.data.scenes.remove(s) + + return {'FINISHED'} + +def create_dir_if_needed(path): + path = str(path) + if not os.path.isdir(path): + os.makedirs(path) + +class SimpleBake_OT_Save_Objects_Externally(Operator): + """Saved baked objects externally""" + bl_idname = "simplebake.save_objects_externally" + bl_description = "Save baked objects externally" + bl_label = "Save" + + bake_operation_id: StringProperty() + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + if not Bip.Sequence.should_run_teardown(): + print_message(context, "No external mesh save - sequence and not last run") + return {'FINISHED'} #Nope out if this is part of a sequence + + #Set what we need from the panel + self.apply_mods_on_mesh_export = sbp.apply_mods_on_mesh_export + self.apply_transformation = sbp.apply_transformation + self.copy_and_apply = sbp.copy_and_apply + self.export_folder_per_object = sbp.export_folder_per_object + self.merged_bake = sbp.merged_bake + self.merged_bake_name = sbp.merged_bake_name + self.in_background = True if "--background" in sys.argv or sbp.fake_background else False + self.mesh_mode = sbp.export_mesh_individual_or_combined + + blend_name = os.path.splitext(os.path.basename(bpy.data.filepath))[0] + mesh_export_name = sbp.mesh_export_name if sbp.mesh_export_name != "%blend_file_name%" else blend_name + + #Find objects we want to export. Depends what we are actually doing: + if sbp.apply_bakes_to_original and (sbp.cycles_s2a or sbp.selected_s2a): + if sbp.cycles_s2a: + objs = [sbp.targetobj_cycles] + if sbp.selected_s2a: + objs = [sbp.targetobj] + elif sbp.apply_bakes_to_original: + objs = [i.obj_point for i in sbp.objects_list] + else: + objs = ([o for o in context.scene.objects if "SB_copy_and_apply_from" in o and + "SB_bake_operation_id" in o and o["SB_bake_operation_id"] == self.bake_operation_id]) + + #Maybe merge the objects + if sbp.merge_export_obj and sbp.export_mesh_individual_or_combined == "combined" and sbp.merged_bake: + print_message(context, "Merging baked objects within the output mesh file") + + dup_objects_names = [] + + for o in objs: + select_only_this(context, o) + bpy.ops.object.duplicate_move() + new_obj = bpy.context.active_object + dup_objects_names.append(new_obj.name) + + #Join them together + select_only_these(context, [o:=bpy.data.objects.get(o_name) for o_name in dup_objects_names if o!=None]) + bpy.ops.object.join() + + #Just the one object now + objs = [context.active_object] + + #Clear all materials except the first one + o = context.active_object + i=0 + for slot in o.material_slots: + if i != 0: + slot.material = None + i+=1 + + + #Name the mesh + context.active_object.name = f"{mesh_export_name}_Baked" + + #Keep track of this for later deletion + merged_mesh_obj_name = context.active_object.name + + + + #Export + if self.in_background: + p = sbp.export_path.replace("//", "") + base_save_folder = Path(sbp.base_folder_override) / p + else: + base_save_folder = Path(bpy.path.abspath(sbp.export_path)) + + print_message(context, f"Saving exported mesh to {str(base_save_folder)}") + + #Create the base save folder if it doesn't already exist + create_dir_if_needed(base_save_folder) + + if sbp.export_format == "fbx": + operator = getattr(bpy.ops.export_scene, "fbx") + extension = ".fbx" + #preset_path = bpy.utils.preset_paths('operator/export_scene.fbx/') + use_selection_name = "use_selection" + + myargs = { + 'check_existing': False, + 'use_selection': True, + 'use_mesh_modifiers': self.apply_mods_on_mesh_export, + 'bake_space_transform': self.apply_transformation, + 'path_mode': "STRIP" + } + + elif sbp.export_format == "obj": + operator = getattr(bpy.ops.wm, "obj_export") + extension = ".obj" + #preset_path = bpy.utils.preset_paths('operator/wm.obj_export/') + use_selection_name = "export_selected_objects" + + myargs = { + 'check_existing': False, + 'export_selected_objects': True, + 'apply_modifiers': self.apply_mods_on_mesh_export, + 'path_mode': "STRIP" + } + + elif sbp.export_format == "dae": + operator = getattr(bpy.ops.wm, "collada_export") + extension = ".dae" + #preset_path = bpy.utils.preset_paths('operator/wm.obj_export/') + use_selection_name = "selected" + + myargs = { + 'check_existing': False, + 'selected': True, + 'apply_modifiers': self.apply_mods_on_mesh_export, + 'use_texture_copies': False + } + + else: + operator = getattr(bpy.ops.export_scene, "gltf") + extension = ".glb" + preset_path = bpy.utils.preset_paths('operator/export_scene.gltf/') + use_selection_name = "use_selection" + + myargs = { + 'check_existing': False, + 'use_selection': True, + 'export_apply': self.apply_mods_on_mesh_export + } + + kwargs = None + #If we are using a preset, gather those settings + if (preset_name:=sbp.export_mesh_preset_name) not in ["None",""]: + filepath = sbp.export_mesh_preset_name #Internal name is the path to the preset file + + class Container(object): + __slots__ = ('__dict__',) + + op = Container() + file = open(filepath, 'r') + + # storing the values from the preset on the class + for line in file.readlines()[3::]: + exec(line, globals(), locals()) + kwargs = op.__dict__ + + + def do_export(filepath): + + if kwargs: + print_message(context,f"Using mesh export preset {preset_name}") + print_message(context, f"Using {sbp.export_format} preset values - {preset_name}") + kwargs["filepath"] = str(filepath).encode('utf-8').decode('utf-8') + kwargs[use_selection_name] = True + operator(**kwargs) + else: + print_message(context,f"No mesh export preset. Using default export settings") + myargs["filepath"] = str(filepath).encode('utf-8').decode('utf-8') + operator(**myargs) + + #Not merged bake, sub-folder, combined mesh + if not self.merged_bake and self.export_folder_per_object and self.mesh_mode != 'individual': + filepath = base_save_folder / (mesh_export_name + extension) + #Make sure folder definitely exists + create_dir_if_needed(base_save_folder) + select_only_these(context, objs) + do_export(filepath) + + #Folder per object, but not merged bake OR folder per object and merged bake but want individual meshes + elif self.export_folder_per_object and ((not self.merged_bake) or (self.merged_bake and self.mesh_mode=="individual")): + for obj in objs: + if "SB_copy_and_apply_from" in obj: + original_name = obj["SB_copy_and_apply_from"] + else: + original_name = obj.name + filepath = base_save_folder / original_name / (original_name + extension) + #Make sure folder definitely exists + create_dir_if_needed(base_save_folder / original_name) + select_only_this(context, obj) + do_export(filepath) + + #Folder per object and merged bake. Combined mesh + elif self.export_folder_per_object and self.merged_bake: + filepath = base_save_folder / self.merged_bake_name / (mesh_export_name + extension) + create_dir_if_needed(base_save_folder / self.merged_bake_name) + select_only_these(context, objs) + do_export(filepath) + + + #Not folder per object, but we still want individual mesh files + elif self.mesh_mode=="individual": + for obj in objs: + if "SB_copy_and_apply_from" in obj: + original_name = obj["SB_copy_and_apply_from"] + else: + original_name = obj.name + filepath = base_save_folder / (original_name + extension) + #Make sure folder definitely exists + create_dir_if_needed(base_save_folder) + select_only_this(context, obj) + do_export(filepath) + + #Not folder per object (either merged bake or not), but not apply to original objects + else: + filepath = base_save_folder / (mesh_export_name + extension) + create_dir_if_needed(base_save_folder) + select_only_these(context, objs) + do_export(filepath) + + + #If we didn't actually want copy and apply, remove the objects (unless in background + #AND UNLESS we are applying bakes to original objects + if not self.copy_and_apply and not self.in_background and not sbp.apply_bakes_to_original: + [bpy.data.objects.remove(o) for o in objs] + + #If we merged the objects for export, remove the duplicate file + if sbp.merge_export_obj and sbp.export_mesh_individual_or_combined == "combined" and sbp.merged_bake: + if o:=bpy.data.objects.get(merged_mesh_obj_name): + bpy.data.objects.remove(o) + + + + return {'FINISHED'} + + +classes = ([ + SimpleBake_OT_Save_Images_Externally, + SimpleBake_OT_Save_Objects_Externally + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/image_management.py b/scripts/addons/SimpleBake/image_management.py new file mode 100644 index 0000000..6118c3c --- /dev/null +++ b/scripts/addons/SimpleBake/image_management.py @@ -0,0 +1,399 @@ +import bpy +from bpy.types import Operator +from bpy.utils import register_class, unregister_class +from bpy.props import BoolProperty, StringProperty, IntProperty + +import uuid +import numpy as np +import os + +from .utils import SBConstants, get_udim_tiles, get_cached_udim_tiles, get_bake_objects, blender_default_colorspace +from .messages import print_message +from .background_and_progress import BakeInProgress as Bip +from .aov import get_aov_colspace, get_aov_type, get_aov_name +from . import __package__ as base_package + +def gen_image_name(context, name, globalmode, baketype, mat_name=""): + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + proposed_name = prefs.img_name_format + + if SBConstants.PBRAOVS in baketype: + baketype = get_aov_name(context, baketype) + + filepath = bpy.data.filepath + if filepath: + filename_no_ext = os.path.splitext(os.path.basename(filepath))[0] + else: + filename_no_ext = "" + + + if Bip.Sequence.active: + if "%FRAME%" not in proposed_name: + proposed_name = f"{proposed_name}.%FRAME%" + proposed_name = proposed_name.replace("%FRAME%", f"{context.scene.frame_current:04d}") + else: + proposed_name = proposed_name.replace(".%FRAME%", "") + proposed_name = proposed_name.replace("%FRAME%", "") + + proposed_name = proposed_name.replace("%OBJ%", name) + proposed_name = proposed_name.replace("%BAKEMODE%", globalmode) + proposed_name = proposed_name.replace("%BAKETYPE%", baketype) + proposed_name = proposed_name.replace("%BATCH%", sbp.batch_name) + proposed_name = proposed_name.replace("%BLEND_FILE_NAME%", filename_no_ext) + res = f"{sbp.outputwidth}x{sbp.outputheight}" + if prefs.abbr_res and sbp.outputwidth % 1024 == 0 and sbp.outputheight % 1024 == 0: + res = f"{int(sbp.outputwidth / 1024)}K" + proposed_name = proposed_name.replace("%RESOLUTION%", res) + + if mat_name: + if "%MAT%" in proposed_name: + proposed_name = proposed_name.replace("%MAT%", mat_name) + else: + proposed_name = f"{proposed_name}_{mat_name}" + else: + proposed_name = proposed_name.replace("%MAT%", "") + + return proposed_name + + +class SimpleBake_OT_Bake_Image(Operator): + """Generate image to be baked to if needed""" + bl_idname = "simplebake.bake_image" + bl_description = "Generates image to be baked to if needed" + bl_label = "GenImage" + + need_first_time_settings = [] + + + bake_operation_id: StringProperty() + this_bake: StringProperty() + target_object_name: StringProperty() + global_mode: StringProperty() + bake_mode: StringProperty() + + + + def create_individual_bake_image(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "Getting individual baked image") + + prefs = context.preferences.addons[base_package].preferences + + alias_dict = prefs.get_alias_dict() + if self.this_bake in alias_dict: this_bake = alias_dict[self.this_bake] + else: this_bake = self.this_bake + + proposed_name = gen_image_name(context, self.target_object_name, self.global_mode, this_bake) + + need_new = False + if proposed_name in bpy.data.images and not self.clear_image: + #It's there, and we aren't going to clear it + + #No action for now + i = bpy.data.images[proposed_name] + self.created_images.append(i) + self.set_image_tags(i) + need_new = False + + elif proposed_name in bpy.data.images: + #It's there, but we want to clear it + if sbp.replace_previous_bakes: + bpy.data.images.remove(bpy.data.images[proposed_name]) + need_new = True + + else: + #It's not there + need_new = True + + if need_new: + #Actually Create the image + tiled = True if (self.total_tiles > 1 and sbp.auto_detect_udims) else False + ua = sbp.texture_bg_col[3] < 1.0 + i = bpy.data.images.new(proposed_name, self.img_width, self.img_height, alpha=ua, float_buffer=self.float_buffer, tiled=tiled) + + + self.created_images.append(i) + self.set_image_tags(i) + self.need_first_time_settings.append(i) + else: + #self.need_first_time_settings = False + pass + + + def create_merged_bake_image(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "Getting merged bake image") + + prefs = context.preferences.addons[base_package].preferences + + alias_dict = prefs.get_alias_dict() + if self.this_bake in alias_dict: this_bake = alias_dict[self.this_bake] + else: this_bake = self.this_bake + + proposed_name = gen_image_name(context, self.merged_bake_name, self.global_mode, this_bake) + + need_new = False + + if proposed_name not in bpy.data.images: + need_new = True + else: + i = bpy.data.images[proposed_name] + if "SB_bake_operation_id" in i and i["SB_bake_operation_id"] != self.bake_operation_id: + #It's there, but different bake ID + if self.clear_image: + if sbp.replace_previous_bakes: + bpy.data.images.remove(i) + need_new = True + else: + #Essentially do nothing + pass + + elif "SB_bake_operation_id" not in i: + #It's there, but it doesn't even have an ID. This will be a weird coincidence + if self.clear_image: + if sbp.replace_previous_bakes: + bpy.data.images.remove(i) + need_new = True + else: + #Essentially do nothing + pass + + elif "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id: + #It's there, and it's our bake + need_new = False + + if need_new: + tiled = True if (self.total_tiles > 1 and sbp.auto_detect_udims) else False + ua = sbp.texture_bg_col[3] < 1.0 + i = bpy.data.images.new(proposed_name, self.img_width, self.img_height, alpha=ua, float_buffer=self.float_buffer, tiled=tiled) + + #Create all the tiles + # if tiled: + # for t in self.active_tiles: + # i.tiles.new(t) + + self.created_images.append(i) + self.set_image_tags(i) + self.need_first_time_settings.append(i) + + else: + #Just using existing image, pretend we created it + #i is created up on line 113 + self.created_images.append(i) + self.set_image_tags(i) + + + + def create_per_mat_bake_image(self, context): + """Create one bake image per enabled material for tex_per_mat mode.""" + sbp = context.scene.SimpleBake_Props + prefs = context.preferences.addons[base_package].preferences + + alias_dict = prefs.get_alias_dict() + this_bake = alias_dict.get(self.this_bake, self.this_bake) + + # Get enabled materials for this object from mat_bake_list + all_entries = [e for e in sbp.mat_bake_list if e.obj_name == self.target_object_name] + enabled_mats = [e.mat_name for e in all_entries if e.enabled] + + # If the object has no mat_bake_list entries at all (e.g. it's an S2A target object), + # fall back to standard single-image creation. + # If it has entries but all are disabled, skip image creation entirely. + if not all_entries: + self.create_individual_bake_image(context) + return + if not enabled_mats: + return + + for mat_name in enabled_mats: + proposed_name = gen_image_name( + context, self.target_object_name, self.global_mode, this_bake, + mat_name=mat_name + ) + + need_new = False + if proposed_name in bpy.data.images and not self.clear_image: + i = bpy.data.images[proposed_name] + self.created_images.append(i) + self.set_image_tags(i, mat_name=mat_name) + need_new = False + elif proposed_name in bpy.data.images: + if sbp.replace_previous_bakes: + bpy.data.images.remove(bpy.data.images[proposed_name]) + need_new = True + else: + need_new = True + + if need_new: + tiled = True if (self.total_tiles > 1 and sbp.auto_detect_udims) else False + ua = sbp.texture_bg_col[3] < 1.0 + i = bpy.data.images.new( + proposed_name, self.img_width, self.img_height, + alpha=ua, float_buffer=self.float_buffer, tiled=tiled + ) + self.created_images.append(i) + self.set_image_tags(i, mat_name=mat_name) + self.need_first_time_settings.append(i) + + def set_image_tags(self, i, mat_name=""): + i["SB_bake_object"] = self.target_object_name + i["SB_global_mode"] = self.global_mode + i["SB_this_bake"] = self.this_bake + i["SB_merged_bake"] = self.merged_bake + i["SB_merged_bake_name"] = self.merged_bake_name + i["SB_bake_operation_id"] = self.bake_operation_id + i["SB_float_buffer"] = self.float_buffer + i["SB_scaled"] = False + i["SB_exported_list"] = [] + i["SB_denoised"] = False + i["SB_aa"] = False + if mat_name: + i["SB_bake_material"] = mat_name + + + def set_image_settings(self, context, imgs): + + sbp = context.scene.SimpleBake_Props + + for i in imgs: + print_message(context, f"Adjusting settings on new image {i.name}") + + if self.this_bake == SBConstants.PBR_NORMAL: + gc = (0.5,0.5,1.0,1.0) #Normal ignores the use alpha option + elif self.this_bake == "NORMAL": #CyclesBake normal + gc = (0.5,0.5,1.0,1.0) #Normal ignores the use alpha option + #elif self.use_alpha: + #gc = (0.0,0.0,0.0,0.0) + else: + gc = sbp.texture_bg_col + + i.generated_color = gc + #If this is a tiled image, let's go for all the tiles too + #if len(i.tiles) > 1: #Even an untiled image has tile length of 1 + + if i.source == 'TILED': + area = context.screen.areas[0] + + old_type = area.type + area.type = "IMAGE_EDITOR" + area.spaces[0].image = i + with context.temp_override(area=area): + + for t in self.active_tiles: + if t==1001: + continue + print(f"Going to add tile {t}") + ua = sbp.texture_bg_col[3] < 1.0 + bpy.ops.image.tile_add(number=t, count=1, label="", fill=True, color=gc, generated_type='BLANK', width=self.img_width, height=self.img_height, float=self.float_buffer, alpha=ua) + + + area.type = old_type + + print(f"Len tiles now {len(i.tiles)}") + + + prefs = context.preferences.addons[base_package].preferences + cs_dict = prefs.get_cs_dict() + + + if self.this_bake in cs_dict: + cs = cs_dict[self.this_bake] + elif self.global_mode in [SBConstants.CYCLESBAKE,SBConstants.CYCLESBAKE_S2A] and context.scene.cycles.bake_type != "NORMAL": + cs = sbp.cyclesbake_cs + elif SBConstants.PBRAOVS in self.this_bake: + print(f"AOV DETECTED BASED ON {self.this_bake}") + cs = get_aov_colspace(context, self.this_bake) + else: + cs = blender_default_colorspace(float_buffer=False, col=True)[1] + + i.colorspace_settings.name = cs + print_message(context, f"Image colour space set to {cs}") + + i.use_fake_user = True + + + + def execute(self, context): + + + sbp = context.scene.SimpleBake_Props + self.merged_bake = sbp.merged_bake + self.total_tiles = 0 + self.active_tiles = [] + + if sbp.auto_detect_udims: + if not self.merged_bake: + #Nice and simple + r = get_cached_udim_tiles(context, self.target_object_name) + self.total_tiles = r["total_tiles"] + self.active_tiles = r["active_tiles"] + print_message(context, f"Object {self.target_object_name} has maximum UDIM tile {self.total_tiles}") + print_message(context, f"Object {self.target_object_name} has active UDIM tiles {self.active_tiles}") + else: + #Way more complicated + self.active_tiles = set() + self.total_tiles = 0 + objects = get_bake_objects(context) + for o_name in objects: + if not (o:=context.scene.objects.get(o_name)): + continue + r = get_cached_udim_tiles(context, o.name) + these_active_tiles = r["active_tiles"] + self.active_tiles.update(these_active_tiles) + + this_total_tiles = r["total_tiles"] + self.total_tiles = this_total_tiles if this_total_tiles > self.total_tiles else self.total_tiles + self.active_tiles = list(self.active_tiles) + + print_message(context, f"Merged bake with maximum UDIM tile {self.total_tiles}") + print_message(context, f"Merged bake with active UDIM tiles {self.active_tiles}") + + + + #Grab what we need from the panel + self.merged_bake_name = sbp.merged_bake_name + #self.use_alpha = sbp.use_alpha + self.img_height = sbp.imgheight + self.img_width = sbp.imgwidth + self.clear_image = sbp.clear_image + self.float_buffer = True if (self.bake_mode == SBConstants.PBR_NORMAL and not sbp.no_force_32bit_normals) or sbp.everything32bitfloat else False + + self.need_first_time_settings = [] + self.created_images = [] + + + if self.merged_bake: + self.create_merged_bake_image(context) + elif sbp.tex_per_mat: + self.create_per_mat_bake_image(context) + else: + self.create_individual_bake_image(context) + + + #We had to create a new image + if self.created_images != []: + #Set image settings for images that are freshly created + self.set_image_settings(context, self.need_first_time_settings) + + else: + print_message(context, "Using existing image") + + return {'FINISHED'} + + + +classes = ([ + SimpleBake_OT_Bake_Image + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/material_management.py b/scripts/addons/SimpleBake/material_management.py new file mode 100644 index 0000000..21e73ad --- /dev/null +++ b/scripts/addons/SimpleBake/material_management.py @@ -0,0 +1,148 @@ +import bpy +from bpy.types import Operator +from bpy.props import EnumProperty, StringProperty +from bpy.utils import register_class, unregister_class + +from .utils import SBConstants +from .messages import print_message +from .background_and_progress import BakeInProgress as Bip + +class SimpleBake_OT_Material_Backup(Operator): + """Backup object materials""" + bl_idname = "simplebake.material_backup" + bl_description = "Backup and restore materials on an object" + bl_label = "Backup/Restore" + + mode: EnumProperty(items=[ + ("initialise", "initialise", ""), + ("master_backup", "master_backup", ""), + ("master_restore", "master_restore", ""), + ("working_backup", "working_backup", ""), + ("working_restore", "working_restore", "") + ]) + target_object_name: StringProperty() + + MODE_MASTER_BACKUP = "master_backup" + MODE_MASTER_RESTORE = "master_restore" + MODE_WORKING_BACKUP = "working_backup" + MODE_WORKING_RESTORE = "working_restore" + MODE_INITIALISE = "initialise" + + def initialise(self, context): + + print_message(context, "Initialising material tags") + for mat in bpy.data.materials: + if "SB_working_dup" in mat: del mat["SB_working_dup"] + if "SB_master_dup" in mat: del mat["SB_master_dup"] + + + def backup(self, context): + print_message(context, f"Backup materials mode {self.tag}") + obj = context.scene.objects[self.target_object_name] + slots = [slot for slot in obj.material_slots if slot.material != None] + + for slot in slots: + + mat = slot.material + + #Does a dup already exist for this mat. If so, use it and skip this slot + possible_dups = [m for m in bpy.data.materials if self.tag in m and m[self.tag]==mat.name] + if len(possible_dups)>0: + print_message(context, f"Backup of material {mat.name} already exists. Using {possible_dups[0].name}") + slot.material = possible_dups[0] + continue + + dup = mat.copy() + dup[self.tag] = mat.name + + prefix = self.tag[:4].upper().replace("_","") + + dup.name = prefix + "_" + mat.name + slot.material = dup + + #In case of crash + mat["SB_orig_fake_user"] = mat.use_fake_user + mat.use_fake_user = True + + def restore(self, context): + + + #Do this scene wide + print_message(context, f"Restoring materials mode {self.tag}") + + objs = context.scene.objects + del_list_mat_names = [] + + for obj in objs: + slots = [slot for slot in obj.material_slots if slot.material != None] + + for slot in slots: + mat = slot.material + + if self.tag in mat: + del_list_mat_names.append(mat.name) + orig_mat_name = mat[self.tag] + #Don't want to try and restore the placeholder material. Doesn't exist. + #if "SimpleBake_Placeholder" not in orig_mat_name: + if (m:=bpy.data.materials.get(orig_mat_name)): + slot.material = bpy.data.materials[orig_mat_name] + + if "SB_orig_fake_user" in slot.material and not slot.material["SB_orig_fake_user"]: + slot.material.use_fake_user = False + + + for mat_name in del_list_mat_names: + if mat_name in bpy.data.materials: + mat = bpy.data.materials[mat_name] + bpy.data.materials.remove(mat, do_unlink=True) + + def execute(self, context): + #Master backup and initialise are one-shot setup — only run on the + #first frame of a sequence (or on every bake when not in a sequence). + if not Bip.Sequence.should_run_setup(): + if self.mode == self.__class__.MODE_MASTER_BACKUP: + print_message(context, "No master backup - sequence and not first run") + return{'FINISHED'} + if self.mode == self.__class__.MODE_INITIALISE: + print_message(context, "No materials initialise - sequence and not first run") + return{'FINISHED'} + + #Master restore is one-shot teardown — only run on the last frame of + #a sequence (or on every bake when not in a sequence). + if not Bip.Sequence.should_run_teardown(): + if self.mode == self.__class__.MODE_MASTER_RESTORE: + print_message(context, "No master restore - sequence and not last run") + return{'FINISHED'} + + if self.mode == self.__class__.MODE_WORKING_BACKUP: + self.tag = "SB_working_dup" + self.backup(context) + elif self.mode == self.__class__.MODE_WORKING_RESTORE: + self.tag = "SB_working_dup" + self.restore(context) + elif self.mode == self.__class__.MODE_MASTER_BACKUP: + self.tag = "SB_master_dup" + self.backup(context) + elif self.mode == self.__class__.MODE_MASTER_RESTORE: + self.tag = "SB_master_dup" + self.restore(context) + elif self.mode == self.__class__.MODE_INITIALISE: + self.initialise(context) + + return{'FINISHED'} + + + +classes = ([ + SimpleBake_OT_Material_Backup + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/messages.py b/scripts/addons/SimpleBake/messages.py new file mode 100644 index 0000000..b52c08f --- /dev/null +++ b/scripts/addons/SimpleBake/messages.py @@ -0,0 +1,154 @@ +import bpy +from bpy.types import Operator +from bpy.props import StringProperty +from bpy.utils import register_class, unregister_class + +from .background_and_progress import BakeInProgress +import blf +import gpu +from gpu_extras.batch import batch_for_shader +from datetime import datetime + +_handle = None +past_messages = [""] +current_obj = "" +current_mode = "" + + +debug_only = False + + +def redraw_3d_viewport(): + s = bpy.context.screen + viewport_areas = [] + for a in s.areas: + if a.type == "VIEW_3D": + viewport_areas.append(a) + + for a in viewport_areas: + a.tag_redraw() + + +def remove_callback_px(): + global _handle + global past_messages + # Check if condition is met + if BakeInProgress.is_baking: + # Reset timer + bpy.app.timers.unregister(remove_callback_px) + bpy.app.timers.register(remove_callback_px, first_interval=5.0) + else: + bpy.app.timers.unregister(remove_callback_px) + past_messages = [""] + try: + bpy.types.SpaceView3D.draw_handler_remove(_handle, 'WINDOW') + _handle = None + except Exception as e: + _handle = None + +def draw_callback_px(): + global _handle + global past_messages + global current_mode + global current_obj + sbp=bpy.context.scene.SimpleBake_Props + + # + # if past_messages[-1] != sbp.fg_status_message: + # past_messages.append(sbp.fg_status_message) + # past_messages = past_messages[-3:] + + font_id = 0 + blf.size(font_id, 20) + blf.color(font_id, 1, 1, 1, 1) + + COUNT=10 + pms = past_messages[-1*COUNT:] + + i=0 + while i < len(pms): + blf.position(font_id, 15, (COUNT-i)*30, 0) + blf.draw(font_id, pms[i]) + i+=1 + + if not BakeInProgress.is_baking: + return True + + if BakeInProgress.Sequence.active: + blf.position(font_id, 15, (COUNT+4)*30, 0) + blf.draw(font_id, f"FRAME NUMBER - {bpy.context.scene.frame_current} (End Frame: {sbp.image_sequence_end_frame})") + blf.position(font_id, 15, (COUNT+3)*30, 0) + blf.draw(font_id, f"SIMPLEBAKE - BAKING IN PROGRESS - {sbp.percent_complete}% COMPLETE") + blf.position(font_id, 15, (COUNT+2)*30, 0) + if BakeInProgress.is_baking: + blf.draw(font_id, f"CURRENTLY BAKING | {current_obj} | {current_mode}") + blf.position(font_id, 15, (COUNT+1)*30, 0) + blf.draw(font_id, f"------------------------------------------------------------------------") + + +def print_message(context, msg, screen=True, debug=False): + + #import time + #time.sleep(0.1) # Sleep for 100 milliseconds + + if (debug_only and debug) or not debug_only: + print(f"SIMPLEBAKE: -- {msg}") + + + + global _handle + if _handle == None and screen: + args = () + _handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL') + bpy.app.timers.register(remove_callback_px, first_interval=5.0) + + global past_messages + try:#Because we can be called on Blender load and get that restricted context error + sbp=context.scene.SimpleBake_Props + current_time = datetime.now().time() + formatted_time = current_time.strftime('%H:%M:%S') + sbp.fg_status_message = f"[{formatted_time}] - {msg}" + past_messages.append(sbp.fg_status_message) + + redraw_3d_viewport() + except: + pass + + global current_mode + global current_obj + if "Starting bake mode:" in msg: + current_mode = msg.replace("Starting bake mode: ","") + if "Starting object:" in msg: + current_obj = msg.replace("Starting object: ","") + + +class SimpleBake_OT_Print_Message(Operator): + bl_idname = "simplebake.print_message" + bl_label = "" + + message: StringProperty() + + def execute(self, context): + global _handle + if _handle == None: + args = () + _handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL') + + print_message(context, self.message) + + return {'FINISHED'} + +classes = ([ + SimpleBake_OT_Print_Message + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/object_preperation.py b/scripts/addons/SimpleBake/object_preperation.py new file mode 100644 index 0000000..eb7fbed --- /dev/null +++ b/scripts/addons/SimpleBake/object_preperation.py @@ -0,0 +1,657 @@ +import bpy +from bpy.types import Operator +from bpy.props import StringProperty, BoolProperty +from bpy.utils import register_class, unregister_class + +from .utils import SBConstants +from .messages import print_message +from .aov import get_aov_name + +class SimpleBake_OT_PrepareObjectMatsPbr(Operator): + """Prepare an object for PBR baking""" + bl_idname = "simplebake.prepare_object_mats_pbr" + bl_description = "Prepare object for PBR bake" + bl_label = "Prepare" + + target_name: StringProperty() + this_bake: StringProperty() + bake_operation_id: StringProperty() + no_bake_image_node: BoolProperty(default=False) + only_bake_image_node: BoolProperty(default=False) + + def create_dummy_nodes(self, context, mat): + print_message(context, f"Creating dummy nodes for {self.target_name}") + + node_tree = mat.node_tree + nodes = node_tree.nodes + p_nodes = [n for n in nodes if n.bl_idname == "ShaderNodeBsdfPrincipled"] + + #Special case for bump + if self.this_bake == SBConstants.PBR_BUMP: + for p_node in p_nodes: + #Nothing connected + if len(p_node.inputs["Normal"].links) == 0: + p_node["SB_Ignore_Normal"]= True + continue + #Connected but not a bump node + bump_node = p_node.inputs["Normal"].links[0].from_node + if bump_node.bl_idname != "ShaderNodeBump": + p_node["SB_Ignore_Normal"]= True + continue + #Nothing connected to bump node height input + if len(bump_node.inputs['Height'].links) == 0: + p_node["SB_Ignore_Normal"]= True + continue + #Must be OK to be treated normally + + + #p_node.inputs["Normal"]["SB_Ignore"] = False + #if len(bump_node.inputs[2].links) == 0: + #val = bump_node.inputs[2].default_value + #vnode = nodes.new("ShaderNodeValue") + #vnode.outputs[0].default_value = val + #vnode.label = "SimpleBake" + #node_tree.links.new(vnode.outputs[0], bump_node.inputs[2]) + + #Normal case, not bump + else: + socket_name = SBConstants.get_socket_names()[self.this_bake] + + for p_node in p_nodes: + #Get the sockets we care about (correct name + empty) + sockets = [s for s in p_node.inputs if s.name == socket_name and len(s.links)==0] + + for socket in sockets: + #If not, get value of the unconnected socket + val = socket.default_value + + socket_type = socket.bl_idname + + #if socket_type == "NodeSocketColor": + #Not needed, but future proofing + if socket_type.startswith("NodeSocketColor"): + rgb = nodes.new("ShaderNodeRGB") + rgb.outputs[0].default_value = val + rgb.label = "SimpleBake" #???????????????????????????? + node_tree.links.new(rgb.outputs[0], socket) + + #if socket_type in ["NodeSocketFloat", "NodeSocketFloatFactor", "NodeSocketFloatDistance"]: + if socket_type.startswith("NodeSocketFloat"): + vnode = nodes.new("ShaderNodeValue") + vnode.outputs[0].default_value = val + vnode.label = "SimpleBake" #????????????????????????????????????????? + node_tree.links.new(vnode.outputs[0], socket) + + def bypass_muted_mix_shaders(self, mat): + #Let's bypass all the muted mix shader nodes + node_tree = mat.node_tree + nodes = node_tree.nodes + + for n in nodes: + if n.bl_idname == "ShaderNodeMixShader" and n.mute: + + if len(n.inputs[1].links) > 0: + fs = n.inputs[1].links[0].from_socket + else: fs = False + + if len(n.outputs[0].links) > 0: + ts = n.outputs[0].links[0].to_socket + else: ts = False + + if fs and ts: + node_tree.links.new(fs, ts) + nodes.remove(n) + + def swap_e_for_p(self,mat): + + node_tree = mat.node_tree + nodes = node_tree.nodes + + enodes = [n for n in nodes if n.bl_idname == "ShaderNodeEmission"] + + for e in enodes: + cval = e.inputs[0].default_value + sval = e.inputs[1].default_value + pos = e.location + + if len(e.inputs[0].links) > 0: + cfs = e.inputs[0].links[0].from_socket + else: + cfs = False + + if len(e.inputs[1].links) > 0: + sfs = e.inputs[1].links[0].from_socket + else: + sfs = False + + os = e.outputs[0].links[0].to_socket + + #Create principled BSDF + p = nodes.new("ShaderNodeBsdfPrincipled") + + if cfs: + node_tree.links.new(cfs, p.inputs["Emission Color"]) + else: + p.inputs["Emission Color"].default_value = cval + + if sfs: + node_tree.links.new(sfs, p.inputs["Emission Strength"]) + else: + p.inputs["Emission Strength"].default_value = sval + + p.inputs["Base Color"].default_value = (0.0,0.0,0.0,1.0) + + node_tree.links.new(p.outputs[0], os) + + p.location = pos + + #Last action, remove all the e nodes + [nodes.remove(n) for n in enodes] + + + def remove_disconnected(self, context, mat): + print_message(context, f"Removing disconnected nodes from {mat.name}") + nodes = mat.node_tree.nodes + + #Start with the material output node + #Remove any not in use. So not to confuse matters. + [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and len(n.inputs[0].links)==0] + + #Find the active material output + mos = [n for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output == True] + assert(len(mos) == 1) + active_mo = mos[0] + + #Is it Cycles? + if active_mo.target in ["CYCLES", "ALL"]: + #Yes. So we are good. Just remove the others + mos = [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output == False] + else: + #Active not Cycles. Can we find a pre-existing Cycles one somewhere? + mos = [n for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.target in ["CYCLES","ALL"]] + if len(mos)>0: + #Found existing Cycles one, make it active and remove the others + mos[0].is_active_output = True + #Set to All, just for the viewport candy + mos[0].target = "ALL" + [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output == False] + else: + #Active isn't Cycles, and no Cycles in the material. Pick one at random. Force to Cycles + mos = [n for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial"] + mos[0].is_active_output = True + mos[0].target = "ALL" + [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output == False] + + #Loop through nodes to remove disconnected nodes that we care about + repeat = False + r = [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeBsdfPrincipled" and len(n.outputs[0].links) == 0 ] + if len(r) >0: repeat = True #We removed something + r = [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeEmission" and len(n.outputs[0].links) == 0 ] + if len(r) >0: repeat = True #We removed something + r = [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeMixShader" and len(n.outputs[0].links) == 0 ] + if len(r) >0: repeat = True #We removed something + + #Special case for Shader to RGB node + r = [nodes.remove(n) for n in nodes if n.bl_idname == "ShaderNodeShaderToRGB" and len(n.outputs[0].links) == 0 ] + if len(r) >0: repeat = True #We removed something + + #If we removed any nodes, we need to do this again + if repeat: self.remove_disconnected(context, mat) + + def get_active_output_node(self, mat): + nodes = mat.node_tree.nodes + output_nodes = [n for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial"] + assert(len(output_nodes)==1) + return output_nodes[0] + + def get_surface_shader_node(self, mat): + output_node = self.get_active_output_node(mat) + surface = output_node.inputs.get("Surface") + if surface == None or len(surface.links) == 0: + return None + return surface.links[0].from_node + + def setup_pure_p_mat(self, context, mat): + print_message(context, f"Setup for pure P material for {self.target_name}") + node_tree = mat.node_tree + nodes = node_tree.nodes + output_node = self.get_active_output_node(mat) + p_node = self.get_surface_shader_node(mat) + + if p_node == None or p_node.bl_idname != "ShaderNodeBsdfPrincipled": + print_message(context, f"Material {mat.name} is not a pure Principled material") + return False + + #Create an emission shader and connect to output + emissnode = nodes.new("ShaderNodeEmission") + emissnode.label = "SimpleBake" #?????????????????????????????????? + emissnode.location = (output_node.location.x, output_node.location.y+200) + node_tree.links.new(emissnode.outputs[0], output_node.inputs[0]) + + #Connect whatever is in Principled Shader for this bakemode to the emission + if self.this_bake == SBConstants.PBR_BUMP: + normal_socket = p_node.inputs["Normal"] + if "SB_Ignore_Normal" in p_node: + emissnode.inputs[0].default_value = (0.5,0.5,0.5,1) + else: + bump_node = p_node.inputs["Normal"].links[0].from_node + bump_input = bump_node.inputs['Height'].links[0].from_socket + node_tree.links.new(bump_input, emissnode.inputs[0]) + else: + socket_name = SBConstants.get_socket_names()[self.this_bake] + socket = p_node.inputs[socket_name] + node_tree.links.new(socket.links[0].from_socket, emissnode.inputs[0]) + + return True + + + def setup_mix_mat(self, context, mat): + print_message(context, f"Setup for mix material for {self.target_name}") + node_tree = mat.node_tree + nodes = node_tree.nodes + + output_node = self.get_active_output_node(mat) + surface_node = self.get_surface_shader_node(mat) + if surface_node == None or surface_node.bl_idname != "ShaderNodeMixShader": + print_message(context, f"Material {mat.name} is not a Mix Shader material") + return False + + #For every mix shader, create a mixrgb above it + mix_nodes = [n for n in nodes if n.bl_idname == "ShaderNodeMixShader"] + for mix_node in mix_nodes: + #Create RGB mix for every mix shader node + rgbmix = nodes.new("ShaderNodeMixRGB") + rgbmix.location = (mix_node.location.x, mix_node.location.y+200) + rgbmix.label="SimpleBake" #???????????????????????????????????????? + rgbmix["SB_rgb_proxy_for"] = mix_node.name + + #If there is one, plug the factor from the original mix node into our new mix node + if len(mix_node.inputs[0].links) > 0: + node_tree.links.new(mix_node.inputs[0].links[0].from_socket, rgbmix.inputs[0]) + #Else, copy the default value + else: + rgbmix.inputs[0].default_value = mix_node.inputs[0].default_value + + #Loop over the new RGBmix nodes + rgbmix_nodes = [n for n in nodes if "SB_rgb_proxy_for" in n] + assert(len(rgbmix_nodes)>0) + + for rgbmix_node in rgbmix_nodes: + #Get the original mix node + mix_node = nodes[rgbmix_node["SB_rgb_proxy_for"]] + + #Socket 1 (back to p_node) + if len(mix_node.inputs[1].links)>0 and mix_node.inputs[1].links[0].from_node.bl_idname == "ShaderNodeBsdfPrincipled": + origin_p_node = mix_node.inputs[1].links[0].from_node + if self.this_bake == SBConstants.PBR_BUMP: + normal_socket = origin_p_node.inputs["Normal"] + if "SB_Ignore_Normal" in origin_p_node: + rgbmix_node.inputs[1].default_value = (0.5,0.5,0.5,1) + else: + bump_node = origin_p_node.inputs["Normal"].links[0].from_node + bump_input = bump_node.inputs['Height'].links[0].from_socket + node_tree.links.new(bump_input, rgbmix_node.inputs[1]) + else: + socket_name = SBConstants.get_socket_names()[self.this_bake] + origin_socket = origin_p_node.inputs[socket_name].links[0].from_socket + node_tree.links.new(origin_socket, rgbmix_node.inputs[1]) + + #Socket 2 (back to p_node) + if len(mix_node.inputs[2].links)>0 and mix_node.inputs[2].links[0].from_node.bl_idname == "ShaderNodeBsdfPrincipled": + origin_p_node = mix_node.inputs[2].links[0].from_node + if self.this_bake == SBConstants.PBR_BUMP: + normal_socket = origin_p_node.inputs["Normal"] + if "SB_Ignore_Normal" in origin_p_node: + rgbmix_node.inputs[2].default_value = (0.5,0.5,0.5,1) + else: + bump_node = origin_p_node.inputs["Normal"].links[0].from_node + bump_input = bump_node.inputs['Height'].links[0].from_socket + node_tree.links.new(bump_input, rgbmix_node.inputs[2]) + else: + socket_name = SBConstants.get_socket_names()[self.this_bake] + origin_socket = origin_p_node.inputs[socket_name].links[0].from_socket + node_tree.links.new(origin_socket, rgbmix_node.inputs[2]) + + #Socket 1 (back to mix node) + if len(mix_node.inputs[1].links)>0 and mix_node.inputs[1].links[0].from_node.bl_idname == "ShaderNodeMixShader": + origin_mix_node = mix_node.inputs[1].links[0].from_node + #Get the RGB mix for that origin mix node + origin_rgbmix = [n for n in nodes if "SB_rgb_proxy_for" in n and n["SB_rgb_proxy_for"] == origin_mix_node.name] + assert(len(origin_rgbmix) == 1) + origin_rgbmix = origin_rgbmix[0] + + node_tree.links.new(origin_rgbmix.outputs[0], rgbmix_node.inputs[1]) + + #Socket 2 (back to mix node) + if len(mix_node.inputs[2].links)>0 and mix_node.inputs[2].links[0].from_node.bl_idname == "ShaderNodeMixShader": + origin_mix_node = mix_node.inputs[2].links[0].from_node + #Get the RGB mix for that origin mix node + origin_rgbmix = [n for n in nodes if "SB_rgb_proxy_for" in n and n["SB_rgb_proxy_for"] == origin_mix_node.name] + assert(len(origin_rgbmix) == 1) + origin_rgbmix = origin_rgbmix[0] + + node_tree.links.new(origin_rgbmix.outputs[0], rgbmix_node.inputs[2]) + + #Back to nowhere + if len(mix_node.inputs[1].links) == 0: + rgbmix_node.inputs[1].default_value = (0,0,0,1) + if len(mix_node.inputs[2].links) == 0: + rgbmix_node.inputs[2].default_value = (0,0,0,1) + + #Finally connect to the output + final_mix = output_node.inputs[0].links[0].from_node + final_rgbmix = [n for n in nodes if "SB_rgb_proxy_for" in n and n["SB_rgb_proxy_for"] == final_mix.name] + assert(len(final_rgbmix)>0) + final_rgbmix = final_rgbmix[0] + + node_tree.links.new(final_rgbmix.outputs[0], output_node.inputs[0]) + + return True + + def setup_displacement(self, context, mat): + print_message(context, f"Setup for displacement bake on {self.target_name}") + node_tree = mat.node_tree + nodes = node_tree.nodes + + #Find the active MO node + mo_node = None + + for n in nodes: + if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output: + mo_node = n + + if mo_node == None: + print(f"Error - no active Material Output in material {mat.name}") + return False + + #See if anything is plugged into the Displacement Socket + mo_disp_socket = mo_node.inputs["Displacement"] + if len(mo_disp_socket.links) <1: + print_message(context, f"Skipping. Nothing plugged into displacement socket for material {mat.name}") + return True + + #Find the from node. Check it's either Displacement or Displacement Vector + disp_node = mo_disp_socket.links[0].from_node + if disp_node.bl_idname not in ["ShaderNodeDisplacement", "ShaderNodeVectorDisplacement"]: + return False + + #Found disp node + + source_socket = None + socket_name = "Height" if disp_node.bl_idname == "ShaderNodeDisplacement" else "Vector" + + #Is something plugged into Height/Vector?? + if len(disp_node.inputs[socket_name].links)>0: + source_socket = disp_node.inputs[socket_name].links[0].from_socket + else: + #NOTHING PLUGGED IN + if disp_node.inputs[socket_name].bl_idname == "NodeSocketColor": + #No dummy node possible + return False + else: + value_node = nodes.new(type='ShaderNodeValue') + value_node.outputs[0].default_value = disp_node.inputs[socket_name].default_value + source_socket = value_node.outputs[0] + + if source_socket == None: + return False + + #Create emission node and hook it up + emission_node = nodes.new(type='ShaderNodeEmission') + emission_node.location = (mo_node.location.x, mo_node.location.y+150) + node_tree.links.new(source_socket, emission_node.inputs["Color"]) + node_tree.links.new(emission_node.outputs[0], mo_node.inputs["Surface"]) + + + def setup_aov(self, context, mat, aovname): + print_message(context, f"Setup for AOV bake for {aovname}") + node_tree = mat.node_tree + nodes = node_tree.nodes + + aov_node = None + #Find the AOV node that we want + for n in nodes: + if n.bl_idname == "ShaderNodeOutputAOV": + if n.aov_name == aovname: + #Found it + aov_node = n + + #Give up if we can't find the AOV node we want (for whatver reason) + if aov_node == None: + return False + + + #Find the active MO node + mo_node = None + for n in nodes: + if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output: + mo_node = n + assert(mo_node!=None) + + #Col is prioritised to fit with how vanilla Blender does it + if len(aov_node.inputs['Color'].links)>0: + source_socket = aov_node.inputs['Color'].links[0].from_socket + elif len(aov_node.inputs['Value'].links)>0: + source_socket = aov_node.inputs['Value'].links[0].from_socket + else: + print_message(context, "ERROR - Couldn't find source of AOV node") + return False + + #Create emission node and hook it up + emission_node = nodes.new(type='ShaderNodeEmission') + emission_node.location = (mo_node.location.x, mo_node.location.y+150) + node_tree.links.new(source_socket, emission_node.inputs["Color"]) + node_tree.links.new(emission_node.outputs[0], mo_node.inputs["Surface"]) + + + def create_bake_image_node(self, mat, mat_name=""): + + node_tree = mat.node_tree + nodes = node_tree.nodes + + existing_bake_nodes = [n for n in nodes if "SB_bake_image_node" in n] + + if len(existing_bake_nodes) !=0: + #Just quit if there is already a node in this material + #e.g. Specials are used more than once. Also object may have same PBR material multiple times + return True + + image_node = nodes.new("ShaderNodeTexImage") + #Where is the image we want? This is different for a merged bake or per-mat bake + if not self.merged_bake: + if mat_name: + # tex_per_mat: find the image specific to this material + image_name = ([i.name for i in bpy.data.images if + i.get("SB_bake_object") == self.target_name and + i.get("SB_bake_operation_id") == self.bake_operation_id and + i.get("SB_this_bake") == self.this_bake and + i.get("SB_bake_material") == mat_name + ]) + else: + image_name = ([i.name for i in bpy.data.images if + "SB_bake_object" in i and i["SB_bake_object"] == self.target_name and + "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id and + "SB_this_bake" in i and i["SB_this_bake"] == self.this_bake + ]) + else: + image_name = ([i.name for i in bpy.data.images if + "SB_bake_operation_id" in i and i["SB_bake_operation_id"] == self.bake_operation_id and + "SB_this_bake" in i and i["SB_this_bake"] == self.this_bake + ]) + assert len(image_name)==1, f"Found {len(image_name)} images looking for {self.this_bake}" + image_name = image_name[0] + + image_node.image = bpy.data.images[image_name] + #Leave it the only node selected + for n in nodes: + n.select = False + image_node.select = True + nodes.active = image_node + + image_node["SB_bake_image_node"] = True + + return True + + def create_dummy_bake_image_node(self, mat): + """Create a throwaway 1x1 image node for excluded materials so Blender has + somewhere to write their pixels (output is discarded).""" + node_tree = mat.node_tree + nodes = node_tree.nodes + + existing_bake_nodes = [n for n in nodes if "SB_bake_image_node" in n] + if existing_bake_nodes: + return + + dummy_name = "SB_excluded_mat_dummy" + if dummy_name not in bpy.data.images: + dummy = bpy.data.images.new(dummy_name, 1, 1, alpha=False) + dummy["SB_dummy"] = True + else: + dummy = bpy.data.images[dummy_name] + + image_node = nodes.new("ShaderNodeTexImage") + image_node.image = dummy + for n in nodes: + n.select = False + image_node.select = True + nodes.active = image_node + image_node["SB_bake_image_node"] = True + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + self.merged_bake = sbp.merged_bake + mats=[] + + if not (o:= context.scene.objects.get(self.target_name)): + print_message(context, f"ERROR: Preparing object. Couldn't find {self.target_name}!") + return {'CANCELLED'} + else: + #Get list of materials for target object + mats = [slot.material for slot in o.material_slots if slot.material!=None] + + # Build per-material enabled/disabled sets from mat_bake_list (empty = no restrictions) + # Working backup materials have an SBW_ prefix — strip it to get the original name + mat_entries = [e for e in sbp.mat_bake_list if e.obj_name == self.target_name] + enabled_mat_names = {e.mat_name for e in mat_entries if e.enabled} + disabled_mat_names = {e.mat_name for e in mat_entries if not e.enabled} + has_restrictions = bool(mat_entries) # any mat_bake_list entries for this object + + def orig_name(mat): + """Return the original material name, stripping SBW_ (working) and SBM_ (master) backup prefixes.""" + name = mat.name + if name.startswith("SBW_"): + name = name[4:] + if name.startswith("SBM_"): + name = name[4:] + return name + + #No prep needed for normal or any specials. Just create bake image node (if that) + if (self.this_bake == SBConstants.PBR_NORMAL) or (self.this_bake in SBConstants.ALL_SPECIALS): + print_message(context, "No object prep needed - specials or normal map") + if not self.no_bake_image_node: + for mat in mats: + oname = orig_name(mat) + if self.this_bake in SBConstants.ALL_SPECIALS and "SB_original_mat_name" in mat: + oname = mat["SB_original_mat_name"] + if has_restrictions and oname in disabled_mat_names: + self.create_dummy_bake_image_node(mat) + else: + use_per_mat = sbp.tex_per_mat and not self.merged_bake and has_restrictions + bake_mat_name = oname if use_per_mat else "" + self.create_bake_image_node(mat, mat_name=bake_mat_name) + mat["SB_bake_config"] = self.this_bake + return {'FINISHED'} + + #Otherwise, prepare each material for this bake type + for mat in mats: + + oname = orig_name(mat) + + # Handle excluded materials + if has_restrictions and oname in disabled_mat_names: + print_message(context, f"Material {mat.name} is excluded - creating dummy node") + self.create_dummy_bake_image_node(mat) + continue + + if "SB_bake_config" in mat and mat["SB_bake_config"] == self.this_bake: + print_message(context, f"Material {mat.name} is already in correct config for {self.this_bake}") + continue + + # mat_name to use when looking up per-material image (use original name, not working backup name) + # Only use per-mat lookup if this object has mat_bake_list entries (i.e. it's a source object, + # not an S2A target object which won't have any entries) + bake_mat_name = oname if (sbp.tex_per_mat and not self.merged_bake and has_restrictions) else "" + + if self.only_bake_image_node: + print_message(context, f"Just creating bake image node in mat {mat}") + self.create_bake_image_node(mat, mat_name=bake_mat_name) + continue + + #Special case for displacement. Don't need to mess with outher nodes + if self.this_bake == SBConstants.PBR_DISPLACEMENT: + self.setup_displacement(context, mat) + if not self.no_bake_image_node: + self.create_bake_image_node(mat, mat_name=bake_mat_name) + mat["SB_bake_config"] = self.this_bake #TODO-----------------CHECK FOR ISSUES + continue + + #Special case for AOVs. Don't need to mess with outher nodes + print(f"--------------- {self.this_bake}") + if SBConstants.PBRAOVS in self.this_bake: + aovname = get_aov_name(context, self.this_bake) + + self.setup_aov(context, mat, aovname) + if not self.no_bake_image_node: + self.create_bake_image_node(mat, mat_name=bake_mat_name) + mat["SB_bake_config"] = self.this_bake + continue + + #Bypass muted mix shaders + self.bypass_muted_mix_shaders(mat) + + #Remove disconnected nodes + self.remove_disconnected(context, mat) + + #Swap all e for p + self.swap_e_for_p(mat) + + #What kind of material is this? + node_tree = mat.node_tree + nodes = node_tree.nodes + surface_node = self.get_surface_shader_node(mat) + + if surface_node != None and surface_node.bl_idname == "ShaderNodeMixShader": + print_message(context, "This is a Mix Material") + self.create_dummy_nodes(context, mat) + if self.setup_mix_mat(context, mat): + mat["SB_bake_config"] = self.this_bake #TODO-----------------CHECK FOR ISSUES + elif(surface_node != None and surface_node.bl_idname == "ShaderNodeBsdfPrincipled"): + #print_message(context, "This is a Pure P material") + self.create_dummy_nodes(context, mat) + if self.setup_pure_p_mat(context, mat): + mat["SB_bake_config"] = self.this_bake #TODO-----------------CHECK FOR ISSUES + else: + print_message(context, "Non-PBR material type - will still create bake image node") + + if not self.no_bake_image_node: + self.create_bake_image_node(mat, mat_name=bake_mat_name) + + + return {'FINISHED'} + + +classes = ([ + SimpleBake_OT_PrepareObjectMatsPbr + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/presets.py b/scripts/addons/SimpleBake/presets.py new file mode 100644 index 0000000..87a7f14 --- /dev/null +++ b/scripts/addons/SimpleBake/presets.py @@ -0,0 +1,514 @@ +#LEGACY FIX - Non SB settings now being stored with their full name relative from context.scene. But previously +#stored with just their last name + + +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, BoolProperty + +import os +import json +from pathlib import Path + +from .utils import clean_file_name, SBConstants, show_message_box +from . import utils +from .messages import print_message +from .ui.objects_list import refresh_mat_bake_list + +def fix_legacy(d): + + name_mapping = { + "bake_type": "cycles.bake_type", + "use_pass_direct": "render.bake.use_pass_direct", + "use_pass_indirect": "render.bake.use_pass_indirect", + "use_pass_diffuse": "render.bake.use_pass_diffuse", + "use_pass_glossy": "render.bake.use_pass_glossy", + "use_pass_transmission": "render.bake.use_pass_transmission", + "use_pass_emit": "render.bake.use_pass_emit", + "samples": "cycles.samples", + "bake.normal_space": "render.bake.normal_space", + "normal_r": "render.bake.normal_r", + "normal_g": "render.bake.normal_g", + "normal_b": "render.bake.normal_b", + "use_pass_color": "render.bake.use_pass_color", + "bake.margin": "render.bake.margin", + "bake.margin_type": "render.bake.margin_type", + "exr_codec": "render.image_settings.exr_codec", + "cycles_denoise": "cycles.use_denoising", + "cycles_denoiser": "cycles.denoiser", + "cycles_denoising_input_passes": "cycles.denoising_input_passes", + "cycles_denoising_prefilter": "cycles.denoising_prefilter" + } + + new_dict = {} + for old_key, value in d.items(): + # Use the new key if it exists in the name_mapping, otherwise keep the old key + new_key = name_mapping.get(old_key, old_key) + new_dict[new_key] = value + return new_dict + + +def deep_setattr(obj, attr, value): + """Recursively set attributes on an object, including sub-objects.""" + pre, _, post = attr.rpartition('.') + return setattr(deep_getattr(obj, pre) if pre else obj, post, value) + +def deep_getattr(obj, attr): + """Recursively get attributes from an object, including sub-objects.""" + for part in attr.split('.'): + obj = getattr(obj, part) + return obj + +basic_props = ([ + "global_mode", + "ray_distance", + "cage_and_ray_multiplier", + "cage_extrusion", + "auto_match_mode", + "selected_s2a", + "s2a_opmode", + "merged_bake", + "merged_bake_name", + "cycles_s2a", + "imgheight", + "imgwidth", + "outputheight", + "outputwidth", + "everything32bitfloat", + #"use_alpha", + "texture_bg_col", + "rough_glossy_switch", + "ccrough_glossy_switch", + "multiply_diffuse_ao", + "multiply_diffuse_ao_percent", + "normal_format_switch", + "tex_per_mat", + "selected_col", + "selected_metal", + "selected_rough", + "selected_normal", + "selected_trans", + "selected_transrough", + "selected_emission", + "selected_emission_strength", + "selected_sss", + "selected_sss_scale", + "selected_ssscol", + "selected_clearcoat", + "selected_clearcoat_rough", + "selected_specular", + "selected_alpha", + "selected_col_mats", + "selected_col_vertex", + "selected_ao", + "selected_thickness", + "selected_curvature", + "selected_lightmap", + "selected_displacement", + "lightmap_apply_colman", + "new_uv_option", + "prefer_existing_sbmap", + "new_uv_method", + "restore_orig_uv_map", + "uvpackmargin", + "average_uv_size", + "expand_mat_uvs", + "auto_detect_udims", + "unwrapmargin", + "uvcorrectaspect", + "channelpackfileformat", + "del_cptex_components", + "save_bakes_external", + "export_folder_per_object", + "export_mesh_individual_or_combined", + "export_format", + "jpeg_quality", + "save_obj_external", + "merge_export_obj", + "mesh_export_name", + "copy_and_apply", + "apply_bakes_to_original", + "hide_source_objects", + "hide_cage_object", + "preserve_materials", + "everything_16bit", + "export_file_format", + "apply_col_man_to_col", + "export_cycles_col_space", + "rundenoise", + "apply_mods_on_mesh_export", + "objects_list_index", + "bgbake", + "memLimit", + "batch_name", + "first_texture_show", + "bgbake_name", + "apply_transformation", + "create_glTF_node", + "glTF_selection", + "export_path", + "move_new_uvs_to_top", + "selected_bump", + "cyclesbake_cs", + #"fbx_preset_name", + #"gltf_preset_name", + "export_mesh_preset_name", + "cyclesbake_copy_and_apply_mat_format", + "clear_image", + "replace_previous_bakes", + "cage_smooth_hard", + "boosted_sample_count", + "no_force_32bit_normals", + "bw_to_rgb", + "keep_internal_after_export", + "ao_sample_count", + "isolate_objects", + "uv_advanced_packing_show", + "uvp_shape_method", + "uvp_scale", + "uvp_rotate", + "uvp_rotation_method", + "uvp_margin_method", + "uvp_lock_pinned", + "uvp_lock_method", + "uvp_merge_overlapping", + "uvp_pack_to", + "showtips", + "presets_show", + "bake_objects_show", + "pbr_settings_show", + "aov_settings_show", + "cyclesbake_settings_show", + "specials_show", + "textures_show", + "export_show", + "admin_settings_show", + "uv_show", + "other_show", + "channelpacking_show", + "bg_status_show", + "image_sequence_enabled", + "image_sequence_start_frame", + "image_sequence_end_frame", + "findreplace_find", + "findreplace_replace", + "findreplace_type", + "do_aa", + "aa_threshold", + "aa_contrast_limit", + "aa_corner_radius", + "join_objs_to_proxy", + "available_uv_maps", + "materials_show", +]) + +scene_props = ([ + "cycles.bake_type", + "render.bake.use_pass_direct", + "render.bake.use_pass_indirect", + "render.bake.use_pass_diffuse", + "render.bake.use_pass_glossy", + "render.bake.use_pass_transmission", + "render.bake.use_pass_emit", + "render.bake.view_from", + "cycles.samples", + "render.bake.normal_space", + "render.bake.normal_r", + "render.bake.normal_g", + "render.bake.normal_b", + "render.bake.use_pass_color", + "render.bake.margin", + "render.bake.margin_type", + "render.image_settings.exr_codec", + "cycles.use_denoising", + "cycles.denoiser", + "cycles.denoising_input_passes", + "cycles.denoising_prefilter" +]) + + + +class SimpleBake_OT_preset_save(Operator): + """Save current SimpleBake settings to preset""" + bl_idname = "simplebake.preset_save" + bl_label = "Save" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + return sbp.preset_name != "" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + if sbp.preset_name != clean_file_name(sbp.preset_name): + message_items = ["ERROR: Preset name can only contain characters that", + "are valid for the external file system"] + show_message_box(context, message_items, "ERROR", icon = "ERROR") + return {'CANCELLED'} + + d = {} + + for p in basic_props: + try: + val = getattr(sbp, p) + except UnicodeDecodeError as e: + print(f"[SimpleBake] UnicodeDecodeError on prop '{p}': {e}") + + if isinstance(val, bpy.types.bpy_prop_array): + d[p] = list(val) + else: + d[p] = val + + for p in scene_props: + d[p] = deep_getattr(context.scene, p) + + #Grab the objects in the advanced list (if any) + d["objects_list"] = [o.name for o in sbp.objects_list] + d["mat_bake_list"] = [(e.obj_name, e.mat_name, e.enabled) for e in sbp.mat_bake_list] + #Grab the target objects if there is one + if sbp.targetobj != None: + d["pbr_target_obj"] = sbp.targetobj.name + else: + d["pbr_target_obj"] = None + if sbp.targetobj_cycles != None: + d["cycles_target_obj"] = sbp.targetobj_cycles.name + else: + d["cycles_target_obj"] = None + #Cage object if there is one + if context.scene.render.bake.cage_object != None: + d["cage_object"] = context.scene.render.bake.cage_object.name + else: + d["cage_object"] = None + + #Channel packed images + cp_images_dict = {} + for cpt in sbp.cp_list: + thiscpt_dict = {} + thiscpt_dict["R"] = cpt.R + thiscpt_dict["G"] = cpt.G + thiscpt_dict["B"] = cpt.B + thiscpt_dict["A"] = cpt.A + + thiscpt_dict["file_format"] = cpt.file_format + thiscpt_dict["exr_codec"] = cpt.exr_codec + thiscpt_dict["png_compression"] = cpt.png_compression + + cp_images_dict[cpt.name] = thiscpt_dict + if len(cp_images_dict)>0: + d["channel_packed_images"] = cp_images_dict + + + #AOVs + aovs = [] + for aov in sbp.aov_items: + aovs.append([aov.name, aov.cs, aov.enabled]) + d["aovs"] = aovs + + #UV map list + d["uvs"] = [(i.name, i.uv_name) for i in sbp.uv_items] + + + #Find where we want to save + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" + savename = clean_file_name(sbp.preset_name) + + if not os.path.isdir(str(p)): + os.makedirs(str(p)) + + print_message(context, f"Saving preset to {str(p)}") + + jsonString = json.dumps(d) + jsonFile = open(str(p / savename), "w") + jsonFile.write(jsonString) + jsonFile.close() + + #Refreh the list + bpy.ops.simplebake.preset_refresh() + + self.report({"INFO"}, "Preset saved") + return {'FINISHED'} + +class SimpleBake_OT_preset_load(Operator): + """Load selected SimpleBake preset""" + bl_idname = "simplebake.preset_load" + bl_label = "Load" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + try: + sbp.presets_list[sbp.presets_list_index].name + return True + except: + return False + + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + s = context.scene + utils.suppress_for_preset_load = True + + #Load it + loadname = clean_file_name(sbp.presets_list[sbp.presets_list_index].name) + + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" / loadname + + print_message(context, f"Loading preset from {str(p)}") + + try: + fileObject = open(str(p), "r") + except: + bpy.ops.simplebake.preset_refresh() + self.report({"ERROR"}, f"Preset {loadname} no longer exists") + return {'CANCELLED'} + + + json_content = fileObject.read() + d = json.loads(json_content) + + #Fix the legacy entries + d = fix_legacy(d) + + + for p in basic_props: + try: + cur = getattr(sbp, p) # what's there now? + val = d[p] + + if hasattr(cur, "to_list"): + setattr(sbp, p, tuple(val)) # tuple/list both work; tuple is safe + else: + setattr(sbp, p, val) + + setattr(sbp, p, d[p]) + except Exception as e: + print(f"Unable to load preset value for {p}: {e}") + + for p in scene_props: + try: + deep_setattr(context.scene, p, d[p]) + except Exception as e: + print(f"Unable to load preset value for {p}") + print(e) + + #Channel packing images + sbp.cp_list.clear() + + + if "channel_packed_images" in d: + channel_packed_images = d["channel_packed_images"] + + if len(channel_packed_images) > 0: + sbp.cp_list.clear() + + for imgname in channel_packed_images: + + thiscpt_dict = channel_packed_images[imgname] + + #Create the list item + li = sbp.cp_list.add() + li.name = imgname + + #Set the list item properies + li.R = thiscpt_dict["R"] + li.G = thiscpt_dict["G"] + li.B = thiscpt_dict["B"] + li.A = thiscpt_dict["A"] + + li.file_format = thiscpt_dict["file_format"] + li.exr_codec = thiscpt_dict["exr_codec"] + if "png_compression" in thiscpt_dict: + li.png_compression = thiscpt_dict["png_compression"] + else: + li.png_compression = 15 + + + + #Refresh the set values in the packed textures list (so it doesn't look like it hasn't been saved) + #Go to first item (just in case the preset loads fewer than we already had + if len(sbp.cp_list) > 0: + sbp.cp_list_index = 0 + + + #And now the objects, if they are here + + #Clear list if that was asked for + if sbp.preset_load_clear_obj: + sbp.objects_list.clear() + + for obj_name in d["objects_list"]: + if obj_name in context.scene.objects: + #Find where name attribute of each object in the advanced selection list matches the name + l = [o.name for o in sbp.objects_list if o.name == obj_name] + if len(l) == 0: + #Not already in the list + i = sbp.objects_list.add() + i.name = obj_name #Advanced object list has a name and pointers arritbute + i.obj_point = context.scene.objects[obj_name] + + if d["pbr_target_obj"] != None and d["pbr_target_obj"] in context.scene.objects: + sbp.targetobj = context.scene.objects[d["pbr_target_obj"]] + if d["cycles_target_obj"] != None and d["cycles_target_obj"] in context.scene.objects: + sbp.targetobj_cycles = context.scene.objects[d["cycles_target_obj"]] + #Cage object + if d["cage_object"] != None and d["cage_object"] in context.scene.objects: + context.scene.render.bake.cage_object = context.scene.objects[d["cage_object"]] + + #Mat bake list — refresh first to populate all materials, then apply saved enabled states + refresh_mat_bake_list(context) + if "mat_bake_list" in d: + saved_states = {(obj_name, mat_name): enabled for obj_name, mat_name, enabled in d["mat_bake_list"]} + for entry in sbp.mat_bake_list: + key = (entry.obj_name, entry.mat_name) + if key in saved_states: + entry.enabled = saved_states[key] + + + #AOVs + bpy.ops.simplebake.refresh_aov_list() + if "aovs" in d: + aovs = d["aovs"] + for aov in aovs: + name = aov[0] + cs = aov[1] + enabled = aov[2] + + if name in sbp.aov_items: + i = sbp.aov_items[name] + i.cs = cs + i.enabled = enabled + + utils.suppress_for_preset_load = False + self.report({"INFO"}, f"Preset {loadname} loaded") + + #UVlist (Must come after the object list is populated) + if "uvs" in d: + bpy.ops.simplebake.sync_uv_list() + for n, uvn in d["uvs"]: + if (i:=sbp.uv_items.find(n)) != -1: + sbp.uv_items[i].uv_name = uvn + + + return {'FINISHED'} + +classes = ([ + SimpleBake_OT_preset_load, + SimpleBake_OT_preset_save + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/presets_local.py b/scripts/addons/SimpleBake/presets_local.py new file mode 100644 index 0000000..421e850 --- /dev/null +++ b/scripts/addons/SimpleBake/presets_local.py @@ -0,0 +1,305 @@ +import bpy +from bpy.types import Operator +from bpy.utils import register_class, unregister_class +from bpy.props import StringProperty + +from .presets import basic_props, scene_props +from .messages import print_message +from . import utils +from .ui.objects_list import refresh_mat_bake_list + +import json + +#TODO - Loading order problem + +def deep_setattr(obj, attr, value): + """Recursively set attributes on an object, including sub-objects.""" + pre, _, post = attr.rpartition('.') + return setattr(deep_getattr(obj, pre) if pre else obj, post, value) + +def deep_getattr(obj, attr): + """Recursively get attributes from an object, including sub-objects.""" + for part in attr.split('.'): + obj = getattr(obj, part) + return obj + +def sb_prop_group_to_dict(context): + """ + Puts all SimpleBake current settings into a dict + """ + sbp = context.scene.SimpleBake_Props + + d = {} + + for p in basic_props: + try: + val = getattr(sbp, p) + except UnicodeDecodeError as e: + print(f"[SimpleBake] UnicodeDecodeError on prop '{p}': {e}") + + if isinstance(val, bpy.types.bpy_prop_array): + d[p] = list(val) + else: + d[p] = val + + #Now for the objects + d["objects_list"] = [o.name for o in sbp.objects_list] + d["mat_bake_list"] = [(e.obj_name, e.mat_name, e.enabled) for e in sbp.mat_bake_list] + d["pbr_target_obj"] = sbp.targetobj.name if sbp.targetobj != None else None + d["cycles_target_obj"] = sbp.targetobj_cycles.name if sbp.targetobj_cycles != None else None + + #Cage object if there is one + if context.scene.render.bake.cage_object != None: + d["cage_object"] = context.scene.render.bake.cage_object.name + else: + d["cage_object"] = None + + #Now the channel pack images + cp_images_dict = {} + for cpt in sbp.cp_list: + thiscpt_dict = {} + thiscpt_dict["R"] = cpt.R + thiscpt_dict["G"] = cpt.G + thiscpt_dict["B"] = cpt.B + thiscpt_dict["A"] = cpt.A + + thiscpt_dict["file_format"] = cpt.file_format + thiscpt_dict["exr_codec"] = cpt.exr_codec + thiscpt_dict["png_compression"] = cpt.png_compression + + cp_images_dict[cpt.name] = thiscpt_dict + if len(cp_images_dict)>0: + d["channel_packed_images"] = cp_images_dict + + #UV map list + d["uvs"] = [(i.name, i.uv_name) for i in sbp.uv_items] + + return d + + +def existing_preset_to_dict(context, friendly_name): + """ + Pulls out an existing saved local preset into a dict + """ + sbp = context.scene.SimpleBake_Props + + name = f"SB_local_preset_{friendly_name}" + s = sbp[name] + d = json.loads(s) + return d + +def save_preset(context, friendly_name): + """ + Saves the current SimpleBake settings to a local preset of name friendly_name + """ + sbp = context.scene.SimpleBake_Props + + sb = sb_prop_group_to_dict(context) + cs = {} + for p in scene_props: + cs[p] = deep_getattr(context.scene, p) + + + + sbp[f"SB_local_preset_{friendly_name}"] = json.dumps(sb | cs) + +def _apply_preset_dict(context, d): + """Apply a settings dict to the current scene. d is modified in-place.""" + sbp = context.scene.SimpleBake_Props + utils.suppress_for_preset_load = True + + sbp.objects_list.clear() + + #First the object list + for obj_name in d["objects_list"]: + if obj_name in context.scene.objects: + #Find where name attribute of each object in the advanced selection list matches the name + l = [o.name for o in sbp.objects_list if o.name == obj_name] + if len(l) == 0: + #Not already in the list + i = sbp.objects_list.add() + i.name = obj_name #Advanced object list has a name and pointers arritbute + i.obj_point = context.scene.objects[obj_name] + + if d["pbr_target_obj"] != None and d["pbr_target_obj"] in context.scene.objects: + sbp.targetobj = context.scene.objects[d["pbr_target_obj"]] + if d["cycles_target_obj"] != None and d["cycles_target_obj"] in context.scene.objects: + sbp.targetobj_cycles = context.scene.objects[d["cycles_target_obj"]] + if d["cage_object"] != None and d["cage_object"] in context.scene.objects: + context.scene.render.bake.cage_object = context.scene.objects[d["cage_object"]] + + #Mat bake list — refresh first to populate all materials, then apply saved enabled states + refresh_mat_bake_list(context) + if "mat_bake_list" in d: + saved_states = {(obj_name, mat_name): enabled for obj_name, mat_name, enabled in d["mat_bake_list"]} + for entry in sbp.mat_bake_list: + key = (entry.obj_name, entry.mat_name) + if key in saved_states: + entry.enabled = saved_states[key] + + del d["objects_list"] + d.pop("mat_bake_list", None) + + #Now channel pack + if "channel_packed_images" in d: + channel_packed_images = d["channel_packed_images"] + + if len(channel_packed_images) > 0: + sbp.cp_list.clear() + + for imgname in channel_packed_images: + thiscpt_dict = channel_packed_images[imgname] + + #Create the list item + li = sbp.cp_list.add() + li.name = imgname + + #Set the list item properies + li.R = thiscpt_dict["R"] + li.G = thiscpt_dict["G"] + li.B = thiscpt_dict["B"] + li.A = thiscpt_dict["A"] + + li.file_format = thiscpt_dict["file_format"] + li.exr_codec = thiscpt_dict["exr_codec"] + if "png_compression" in thiscpt_dict: + li.png_compression = thiscpt_dict["png_compression"] + else: + li.png_compression = 15 + + #UV maps list + bpy.ops.simplebake.sync_uv_list() + if "uvs" in d: + for n, uvn in d["uvs"]: + if (i:=sbp.uv_items.find(n)) != -1: + sbp.uv_items[i].uv_name = uvn + + try: + for k in d: + if k not in scene_props: + try: + setattr(sbp, k, d[k]) + except: + pass + else: + try: + deep_setattr(context.scene, k, d[k]) + except: + pass + finally: + utils.suppress_for_preset_load = False + + +def load_preset(context, friendly_name): + _apply_preset_dict(context, existing_preset_to_dict(context, friendly_name)) + + + +class SimpleBake_OT_local_preset_save(Operator): + """Save current SimpleBake settings to local preset""" + bl_idname = "simplebake.local_preset_save" + bl_label = "Save local preset" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + return sbp.local_preset_name != "" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + save_preset(context, sbp.local_preset_name) + bpy.ops.simplebake.local_preset_refresh() + + self.report({"INFO"}, f"Local Preset {sbp.local_preset_name} saved") + return {'FINISHED'} + +class SimpleBake_OT_local_preset_save_override(Operator): + """Save current SimpleBake settings to local preset overriding the UI for the name""" + bl_idname = "simplebake.local_preset_save_override" + bl_label = "Save local preset" + + name_override: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + save_preset(context, self.name_override) + return {'FINISHED'} + +class SimpleBake_OT_local_preset_load(Operator): + """Load selected SimpleBake preset""" + bl_idname = "simplebake.local_preset_load" + bl_label = "Load local preset" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + try: + sbp.local_presets_list[sbp.local_presets_list_index].name + return True + except: + return False + + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + load_preset(context, friendly_name=sbp.local_preset_name) + self.report({"INFO"}, f"Local Preset {sbp.local_preset_name} loaded") + return {'FINISHED'} + +class SimpleBake_OT_local_preset_load_override(Operator): + """Load selected SimpleBake preset overriding the UI for the name""" + bl_idname = "simplebake.local_preset_load_override" + bl_label = "Load local preset" + + name_override: StringProperty() + + def execute(self, context): + load_preset(context, friendly_name=self.name_override) + return {'FINISHED'} + +class SimpleBake_OT_Paste_Settings_Clipboard(Operator): + """Paste SimpleBake settings from clipboard JSON (copied via Copy Settings to Clipboard)""" + bl_idname = "simplebake.paste_settings_clipboard" + bl_label = "Paste Settings from Clipboard" + + def execute(self, context): + raw = context.window_manager.clipboard + if not raw or not raw.strip(): + self.report({"ERROR"}, "Clipboard is empty") + return {'CANCELLED'} + + try: + d = json.loads(raw) + except json.JSONDecodeError as e: + self.report({"ERROR"}, f"Clipboard does not contain valid JSON: {e}") + return {'CANCELLED'} + + required = {"objects_list", "pbr_target_obj", "cycles_target_obj", "cage_object"} + if not required.issubset(d.keys()): + self.report({"ERROR"}, "Clipboard JSON does not look like SimpleBake settings") + return {'CANCELLED'} + + _apply_preset_dict(context, d) + self.report({"INFO"}, "SimpleBake settings pasted from clipboard") + return {'FINISHED'} + + +classes = ([ + SimpleBake_OT_local_preset_load, + SimpleBake_OT_local_preset_save, + SimpleBake_OT_local_preset_save_override, + SimpleBake_OT_local_preset_load_override, + SimpleBake_OT_Paste_Settings_Clipboard, + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/preview_operators.py b/scripts/addons/SimpleBake/preview_operators.py new file mode 100644 index 0000000..165b518 --- /dev/null +++ b/scripts/addons/SimpleBake/preview_operators.py @@ -0,0 +1,134 @@ +import bpy +from bpy.types import Operator +from bpy.props import StringProperty +from bpy.utils import register_class, unregister_class + +from .messages import print_message +from .utils import SBConstants + + +class SimpleBake_OT_PreviewBakeType(Operator): + """Preview what will be baked for this bake type by configuring materials""" + bl_idname = "simplebake.preview_bake_type" + bl_label = "Preview" + bl_description = "Preview this bake type in the viewport by configuring object materials" + + bake_type: StringProperty() + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + bake_type = self.bake_type + + # Start by removing any existing preview + bpy.ops.simplebake.restore_preview() + + bake_objects = [item.obj_point for item in sbp.objects_list if item.obj_point is not None] + + if bake_type in SBConstants.ALL_SPECIALS: + if bake_type == SBConstants.COLOURID: + from .bake_operators.specials_bake_operators import SimpleBake_OT_Setup_Col_ID + SimpleBake_OT_Setup_Col_ID.clear() + + for obj in bake_objects: + bpy.ops.simplebake.specials_mats_swapping(mode="record", obj_name=obj.name) + + if bake_type == SBConstants.COLOURID: + bpy.ops.simplebake.setup_col_id(obj_name=obj.name) + elif bake_type == SBConstants.VERTEXCOL: + if not obj.data.color_attributes: + continue + bpy.ops.simplebake.import_and_assign_specials(bake_mode=bake_type, obj_name=obj.name) + bpy.ops.simplebake.setup_vertex_col(obj_name=obj.name) + else: # AO, Thickness, Curvature, Lightmap + bpy.ops.simplebake.import_and_assign_specials(bake_mode=bake_type, obj_name=obj.name) + + else: + # Initialise / clear any stale material tags from a previous preview or bake + bpy.ops.simplebake.material_backup(mode="initialise") + + # Remove node groups (also performs master backup of all object materials). + # Only available on Blender 4.1+, which is the minimum for this addon. + bpy.ops.simplebake.pbr_pre_bake() + + # Remove reroute nodes from all object materials + bpy.ops.simplebake.remove_reroutes() + + # Per-object: working backup then configure materials for the target bake type + for obj in bake_objects: + bpy.ops.simplebake.material_backup( + target_object_name=obj.name, + mode="working_backup" + ) + bpy.ops.simplebake.prepare_object_mats_pbr( + target_name=obj.name, + this_bake=bake_type, + bake_operation_id="", + no_bake_image_node=True + ) + + # Switch Solid viewports to Material Preview so the preview is visible + sbp.preview_changed_shading = False + for area in context.screen.areas: + if area.type == 'VIEW_3D': + for space in area.spaces: + if space.type == 'VIEW_3D': + if space.shading.type == 'SOLID': + space.shading.type = 'MATERIAL' + sbp.preview_changed_shading = True + + print_message(context, f"Preview active: {bake_type}") + sbp.preview_active = True + sbp.preview_bake_type = bake_type + return {'FINISHED'} + + +class SimpleBake_OT_RestorePreview(Operator): + """Restore materials after a bake type preview""" + bl_idname = "simplebake.restore_preview" + bl_label = "Restore Materials" + bl_description = "Restore object materials to their original state after previewing" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + if sbp.preview_bake_type in SBConstants.ALL_SPECIALS: + bake_objects = [item.obj_point for item in sbp.objects_list if item.obj_point is not None] + for obj in bake_objects: + bpy.ops.simplebake.specials_mats_swapping(mode="restore", obj_name=obj.name) + else: + # Restore working-mode duplicates first (scene-wide, no object name needed) + bpy.ops.simplebake.material_backup(mode="working_restore") + # Then restore master duplicates (scene-wide) + bpy.ops.simplebake.material_backup(mode="master_restore") + + if sbp.preview_changed_shading: + for area in context.screen.areas: + if area.type == 'VIEW_3D': + for space in area.spaces: + if space.type == 'VIEW_3D': + if space.shading.type == 'MATERIAL': + space.shading.type = 'SOLID' + sbp.preview_changed_shading = False + + print_message(context, "Preview materials restored") + sbp.preview_active = False + sbp.preview_bake_type = "" + return {'FINISHED'} + + +classes = [ + SimpleBake_OT_PreviewBakeType, + SimpleBake_OT_RestorePreview, +] + + +def register(): + global classes + for cls in classes: + register_class(cls) + + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/property_group.py b/scripts/addons/SimpleBake/property_group.py new file mode 100644 index 0000000..29c64a6 --- /dev/null +++ b/scripts/addons/SimpleBake/property_group.py @@ -0,0 +1,1130 @@ +import bpy +from bpy.props import (FloatProperty, StringProperty, BoolProperty, + EnumProperty, PointerProperty, IntProperty, CollectionProperty, FloatVectorProperty) +from bpy.types import PropertyGroup +from bpy.utils import register_class, unregister_class +import os +import math +import getpass +import tempfile +from pathlib import Path + +from .utils import SBConstants, show_message_box, get_cs_list, select_only_this, disable_impossible, blender_default_colorspace +from . import utils +from . import __package__ as base_package + +from .aov import get_list_enabled_aov_names, get_aov_number + + +class ObjectListItem(PropertyGroup): + """Group of properties representing an item in the list.""" + + obj_point: PointerProperty( + name="Bake Object", + description="An object in the scene to be baked", + type=bpy.types.Object) + + name: StringProperty( + name="Name", + description="A name for this item", + default= "Untitled") + + expanded: BoolProperty( + name="Show Materials", + default=False) + + +class MatBakeItem(PropertyGroup): + """Per-object, per-material inclusion state for baking.""" + + obj_name: StringProperty() + mat_name: StringProperty() + enabled: BoolProperty(default=True) + + # target: StringProperty( + # name="Target", + # description="Target when we are doing an S2A bake", + # default= "Untitled") + +class PresetItem(PropertyGroup): + """Group of properties representing a SimpleBake preset.""" + + name: bpy.props.StringProperty( + name="Name", + description="A name for this item", + default= "Untitled") + +class CPTexItem(PropertyGroup): + """Group of properties representing a SimpleBake CP Texture.""" + + name: StringProperty( + name="Name", + description="A name for this item", + default= "Untitled") + R: StringProperty( + name="R", + description="Bake type for R channel") + G: StringProperty( + name="G", + description="Bake type for G channel") + B: StringProperty( + name="B", + description="Bake type for B channel") + A: StringProperty( + name="A", + description="Bake type for A channel") + file_format: StringProperty( + name="File Format", + description="File format for CP texture") + exr_codec: StringProperty() + png_compression: IntProperty() + + +def auto_set_bake_margin(context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + multiplier = 4 + + current_width = sbp.imgwidth + margin = (current_width / 1024) * multiplier + margin = round(margin, 0) + + context.scene.render.bake.margin = int(margin) + + return True + +def selected_col_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + if not sbp.selected_col: + sbp.apply_col_man_to_col = False + sbp.multiply_diffuse_ao = "purediffuse" + disable_impossible(context) + +def tex_per_mat_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.tex_per_mat == True: + sbp.merged_bake = False + sbp.selected_s2a = False + sbp.cycles_s2a = False + sbp.new_uv_option = False + sbp.expand_mat_uvs = False + disable_impossible(context) + +def expand_mat_uvs_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + utils.suppress_for_preset_load = True + if sbp.expand_mat_uvs: + sbp.new_uv_option = True + sbp.prefer_existing_sbmap = False + utils.suppress_for_preset_load = False + disable_impossible(context) + +def copy_and_apply_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.copy_and_apply == False: + sbp.hide_source_objects = False + sbp.hide_cage_object = False + sbp.create_glTF_node = False + else: + sbp.hide_source_objects = True + sbp.hide_cage_object = True + sbp.apply_bakes_to_original = False + sbp.del_cptex_components = False + #disable_impossible(context) + +def apply_bakes_to_original_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.apply_bakes_to_original: + sbp.copy_and_apply = False + sbp.del_cptex_components = False + disable_impossible(context) + + +def export_file_format_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.export_file_format == "JPEG" or sbp.export_file_format == "TARGA": + sbp.everything_16bit = False + #sbp.use_alpha = False + disable_impossible(context) + +def save_bakes_external_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.save_bakes_external == False: + sbp.everything_16bit = False + #sbp.rundenoise = False + sbp.export_folder_per_object = False + sbp.cp_list.clear() + + sbp.rough_glossy_switch = SBConstants.PBR_ROUGHNESS + sbp.ccrough_glossy_switch = SBConstants.PBR_CLEARCOAT_ROUGH + sbp.normal_format_switch = SBConstants.NORMAL_OPENGL + + sbp.do_aa = False + + disable_impossible(context) + +def new_uv_option_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.new_uv_option == True: + sbp.prefer_existing_sbmap = False + sbp.auto_detect_udims = False + else: + sbp.auto_detect_udims = True + sbp.expand_mat_uvs = False + + disable_impossible(context) + +def global_mode_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + if not sbp.global_mode == SBConstants.CYCLESBAKE: + sbp.cycles_s2a = False + sbp.targetobj_cycles = None + + + if not sbp.global_mode == SBConstants.PBR: + sbp.selected_s2a = False + sbp.targetobj = None + sbp.s2a_opmode = "single" + + disable_impossible(context) + + +def selected_rough_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if not sbp.selected_rough: + sbp.rough_glossy_switch = SBConstants.PBR_ROUGHNESS + disable_impossible(context) + +def selected_ccrough_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if not sbp.selected_clearcoat_rough: + sbp.ccrough_glossy_switch = SBConstants.PBR_CLEARCOAT_ROUGH + disable_impossible(context) + +def selected_normal_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if not sbp.selected_normal: + sbp.normal_format_switch = SBConstants.NORMAL_OPENGL + disable_impossible(context) + + +def presets_list_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + index = sbp.presets_list_index + item = sbp.presets_list[index] + + sbp.preset_name = item.name + disable_impossible(context) + +def local_presets_list_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + index = sbp.local_presets_list_index + item = sbp.local_presets_list[index] + + sbp.local_preset_name = item.name + disable_impossible(context) + +def presets_show_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + bpy.ops.simplebake.preset_refresh() + disable_impossible(context) + +def image_sequence_start_frame_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + # Keep end_frame strictly greater than start_frame. + if sbp.image_sequence_end_frame <= sbp.image_sequence_start_frame: + sbp.image_sequence_end_frame = sbp.image_sequence_start_frame + 1 + +def image_sequence_end_frame_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + # Keep end_frame strictly greater than start_frame. + if sbp.image_sequence_end_frame <= sbp.image_sequence_start_frame: + sbp.image_sequence_end_frame = sbp.image_sequence_start_frame + 1 + +def imgheight_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + sbp.outputheight = sbp.imgheight + disable_impossible(context) + +def imgwidth_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + sbp.outputwidth = sbp.imgwidth + disable_impossible(context) + +def textures_show_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + if sbp.first_texture_show: + auto_set_bake_margin(context) + sbp.first_texture_show = False + disable_impossible(context) + +def bake_objects_show_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.first_texture_show: + auto_set_bake_margin(context) + sbp.first_texture_show = False + disable_impossible(context) + +def selected_s2a_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if not sbp.selected_s2a: + sbp.targetobj = None + sbp.s2a_opmode = 'single' + + + if sbp.selected_s2a: + sbp.selected_col_mats = False + sbp.selected_lightmap = False + sbp.tex_per_mat = False + disable_impossible(context) + +def cycles_s2a_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if not sbp.cycles_s2a: + sbp.targetobj_cycles = None + + if sbp.cycles_s2a: + sbp.selected_col_mats = False + sbp.selected_lightmap = False + sbp.tex_per_mat = False + disable_impossible(context) + +def cp_list_index_update(self, context): + if utils.suppress_for_preset_load: + return + sbp = context.scene.SimpleBake_Props + index = sbp.cp_list_index + cpt = sbp.cp_list[index] + + messages = [] + try: #EXR no longer an option, but old presets and the examples may contain it + sbp.channelpackfileformat = cpt.file_format + sbp.exr_codec_cpts = cpt.exr_codec + except: + pass + + if "png_compression" in cpt: + sbp.png_compression = cpt.png_compression + + def cp_display(value): + return value.replace("||", " - ") + try: + sbp.cptex_R = cpt.R + except: + messages.append(f"WARNING: {cpt.name} depends on {cp_display(cpt.R)} for the Red channel, but you are not baking it") + messages.append("You can enable the required bake, or change the bake for that channel") + try: + sbp.cptex_G = cpt.G + except: + messages.append(f"WARNING: {cpt.name} depends on {cp_display(cpt.G)} for the Green channel, but you are not baking it") + messages.append("You can enable the required bake, or change the bake for that channel") + try: + sbp.cptex_B = cpt.B + except: + messages.append(f"WARNING: {cpt.name} depends on {cp_display(cpt.B)} for the Blue channel, but you are not baking it") + messages.append("You can enable the required bake, or change the bake for that channel") + try: + sbp.cptex_A = cpt.A + except: + messages.append(f"WARNING: {cpt.name} depends on {cp_display(cpt.A)} for the Alpha channel, but you are not baking it") + messages.append("You can enable the required bake, or change the bake for that channel") + + sbp.cp_name = cpt.name + + try: + context.scene.render.image_settings.exr_codec = cpt.exr_codec + except: + pass + + #Show messages + if len(messages)>0: + show_message_box(context, messages, title = "Warning", icon = "ERROR") + disable_impossible(context) + +def clear_image_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + #if not sbp.clear_image: + #sbp.use_alpha = False + disable_impossible(context) + +def bgbake_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.bgbake == "bg": + sbp.apply_bakes_to_original = False + disable_impossible(context) + + +def s2a_opmode_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.s2a_opmode == "decals": + sbp.selected_alpha = True + disable_impossible(context) + + +def auto_match_mode_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + disable_impossible(context) + + +def objects_list_index_update(self, context): + + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + i = sbp.objects_list_index + if i != -1: #Not sure what causes this, but at least one bug report flagged it + if len(sbp.objects_list)>0: + o = sbp.objects_list[i] + if o.obj_point != None: + select_only_this(context, o.obj_point) + + disable_impossible(context) + +def keep_internal_after_export_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + if not sbp.keep_internal_after_export: + sbp.copy_and_apply = False + +def merged_bake_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + if sbp.merged_bake: + sbp.tex_per_mat = False + else: + sbp.merge_export_obj = False + sbp.join_objs_to_proxy = False + + +def join_objs_to_proxy_update(self, context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + if sbp.join_objs_to_proxy: + sbp.showtips = True + sbp.isolate_objects = False + + +def batch_name_update(self, context): + prefs = context.preferences.addons[base_package].preferences + maxlen = prefs.batch_name_max_length + if len(self.batch_name) > maxlen: + self.batch_name = self.batch_name[:maxlen] + + + +def multiply_diffuse_ao_update(self,context): + if utils.suppress_for_preset_load: return + sbp = context.scene.SimpleBake_Props + + if sbp.multiply_diffuse_ao == "diffusexao": + sbp.selected_ao = True + + + #disable_impossible(context) #Recursion error...? + +def auto_cage_extrusion_update(self,context): + sbp = context.scene.SimpleBake_Props + + to = None + if sbp.global_mode == "PBR": + to = sbp.targetobj + else: + to = sbp.targetobj_cycles + + if to == None: + return False + + #Find the auto cage object + co = [o for o in context.scene.objects if "SB_auto_cage" in o and o["SB_auto_cage"] == to.name] + if len(co) != 1: + #ERROR + return False + else: + co = co[0] + + #Adjust the modifier + if 'SB_AUTO_CAGE' in co.modifiers: + co.modifiers['SB_AUTO_CAGE'].mid_level = 1-sbp.auto_cage_extrusion + + + + +#------------------------------------------------------------------- + +def get_selected_bakes_dropdown(self, context): + sbp = context.scene.SimpleBake_Props + items = [] + + items.append(("none", "None","")) + + use_per_mat = sbp.tex_per_mat and not sbp.merged_bake + + # Collect PBR bake type items. When tex_per_mat is on these are only used + # to generate per-material variants — the plain versions are not added + # because only per-material images are actually baked in that mode. + pbr_items = [] + if sbp.selected_col: + pbr_items.append((SBConstants.PBR_DIFFUSE, SBConstants.PBR_DIFFUSE,"")) + if sbp.selected_metal: + pbr_items.append((SBConstants.PBR_METAL, SBConstants.PBR_METAL,"")) + if sbp.selected_sss: + pbr_items.append((SBConstants.PBR_SSS, SBConstants.PBR_SSS,"")) + if sbp.selected_sss_scale: + pbr_items.append((SBConstants.PBR_SSS_SCALE, SBConstants.PBR_SSS_SCALE,"")) + if sbp.selected_ssscol: + pbr_items.append((SBConstants.PBR_SSSCOL, SBConstants.PBR_SSSCOL,"")) + if sbp.selected_rough: + if sbp.rough_glossy_switch == SBConstants.PBR_GLOSSY: + pbr_items.append((SBConstants.PBR_GLOSSY, SBConstants.PBR_GLOSSY,"")) + else: + pbr_items.append((SBConstants.PBR_ROUGHNESS, SBConstants.PBR_ROUGHNESS,"")) + if sbp.selected_normal: + pbr_items.append((SBConstants.PBR_NORMAL, SBConstants.PBR_NORMAL,"")) + if sbp.selected_trans: + pbr_items.append((SBConstants.PBR_TRANSMISSION, SBConstants.PBR_TRANSMISSION,"")) + if sbp.selected_transrough: + pbr_items.append((SBConstants.PBR_TRANSMISSION_ROUGH, SBConstants.PBR_TRANSMISSION_ROUGH,"")) + if sbp.selected_clearcoat: + pbr_items.append((SBConstants.PBR_CLEARCOAT, SBConstants.PBR_CLEARCOAT,"")) + if sbp.selected_clearcoat_rough: + if sbp.ccrough_glossy_switch == SBConstants.PBR_CLEARCOAT_GLOSS: + pbr_items.append((SBConstants.PBR_CLEARCOAT_GLOSS, SBConstants.PBR_CLEARCOAT_GLOSS,"")) + else: + pbr_items.append((SBConstants.PBR_CLEARCOAT_ROUGH, SBConstants.PBR_CLEARCOAT_ROUGH,"")) + if sbp.selected_emission: + pbr_items.append((SBConstants.PBR_EMISSION, SBConstants.PBR_EMISSION,"")) + if sbp.selected_emission_strength: + pbr_items.append((SBConstants.PBR_EMISSION_STRENGTH, SBConstants.PBR_EMISSION_STRENGTH,"")) + if sbp.selected_specular: + pbr_items.append((SBConstants.PBR_SPECULAR, SBConstants.PBR_SPECULAR,"")) + if sbp.selected_alpha: + pbr_items.append((SBConstants.PBR_ALPHA, SBConstants.PBR_ALPHA,"")) + if sbp.selected_bump: + pbr_items.append((SBConstants.PBR_BUMP, SBConstants.PBR_BUMP,"")) + if sbp.selected_displacement: + pbr_items.append((SBConstants.PBR_DISPLACEMENT, SBConstants.PBR_DISPLACEMENT,"")) + + if use_per_mat: + # Per-mat mode: expand each PBR type into per-material variants only. + enabled_mats = [e.mat_name for e in sbp.mat_bake_list if e.enabled] + for identifier, label, desc in pbr_items: + for mat_name in enabled_mats: + items.append(( + f"{identifier}||{mat_name}", + f"{label} - {mat_name}", + "" + )) + else: + items.extend(pbr_items) + + specials_items = [] + if sbp.selected_col_mats: + specials_items.append((SBConstants.COLOURID, SBConstants.COLOURID,"")) + if sbp.selected_col_vertex: + specials_items.append((SBConstants.VERTEXCOL, SBConstants.VERTEXCOL,"")) + if sbp.selected_ao: + specials_items.append((SBConstants.AO, SBConstants.AO,"")) + if sbp.selected_thickness: + specials_items.append((SBConstants.THICKNESS, SBConstants.THICKNESS,"")) + if sbp.selected_curvature: + specials_items.append((SBConstants.CURVATURE, SBConstants.CURVATURE,"")) + if sbp.selected_lightmap: + specials_items.append((SBConstants.LIGHTMAP, SBConstants.LIGHTMAP,"")) + + if use_per_mat: + for identifier, label, desc in specials_items: + for mat_name in enabled_mats: + items.append(( + f"{identifier}||{mat_name}", + f"{label} - {mat_name}", + "" + )) + else: + items.extend(specials_items) + + #AOVs + aov_names = get_list_enabled_aov_names(context) + for name in aov_names: + ident = f"{SBConstants.PBRAOVS}_{get_aov_number(context, name)}" + des = "" + items.append((ident, f"AOV: {name}", des)) + + return items + +def get_presets_dropdown(self, context): + sbp = context.scene.SimpleBake_Props + path = "" + if sbp.export_format == "fbx": + path = 'operator/export_scene.fbx/' + if sbp.export_format == "obj": + path = 'operator/wm.obj_export/' + if sbp.export_format == "gltf": + path = 'operator/export_scene.gltf/' + if sbp.export_format == "dae": + path = 'operator/wm.collada_export/' + + preset_paths = bpy.utils.preset_paths(path) + + if preset_paths: + items = [] + for d in preset_paths: + entries = os.listdir(d) + for e in entries: + if not os.path.isdir(d + e): + items.append((d+e, e.replace(".py",""), "", 'EXPORT', len(items))) + + items.insert(0, ("None", "None", "", 'CANCEL', len(items))) + return items + + else: + return [("None", "None", "")] + +def get_uv_options_dropdown(self, context): + sbp = context.scene.SimpleBake_Props + + uv_options = [] + names = [i.name for i in sbp.objects_list] + for name in names: + if o:=bpy.data.objects.get(name): + uv_options.extend([l.name for l in o.data.uv_layers]) + + if len(uv_options) == 0: + return [("None", "None", "")] + else: + return [(n, n, "") for n in sorted(set(uv_options))] + + +# def get_obj_presets_dropdown(self, context): +# preset_path = bpy.utils.preset_paths('operator/wm.obj_export/') +# +# if preset_path: +# items = os.listdir(preset_path[0]) +# items = [ (i, i.replace(".py", ""), "") for i in items if not os.path.isdir(preset_path[0] + i)] +# items.insert(0, ("None", "None", "")) +# +# return items +# +# else: +# return [("None", "None", "")] +# +# def get_fbx_presets_dropdown(self, context): +# preset_path = bpy.utils.preset_paths('operator/export_scene.fbx/') +# +# if preset_path: +# items = os.listdir(preset_path[0]) +# items = [ (i, i.replace(".py", ""), "") for i in items if not os.path.isdir(preset_path[0] + i)] +# items.insert(0, ("None", "None", "")) +# +# return items +# +# else: +# return [("None", "None", "")] +# +# def get_gltf_presets_dropdown(self, context): +# preset_path = bpy.utils.preset_paths('operator/export_scene.gltf/') +# +# if preset_path: +# items = os.listdir(preset_path[0]) +# items = [ (i, i.replace(".py", ""), "") for i in items if not os.path.isdir(preset_path[0] + i)] +# items.insert(0, ("None", "None", "")) +# +# return items +# +# else: +# return [("None", "None", "")] + + + + +def get_s2aopmode_options(self, context): + sbp = context.scene.SimpleBake_Props + + items=[ + ("single", "Standard (bake list to target)", ""), + ("automatch", "Auto-match high to low", "") + ] + + if sbp.global_mode == SBConstants.PBR: + items.append(("decals", "Decals to target", "")) + + return items + +# 1. Define a PropertyGroup for each AOV item +class AOVItem(bpy.types.PropertyGroup): + name: bpy.props.StringProperty() + aov_type: bpy.props.StringProperty(default="C") + aov_number: bpy.props.IntProperty() + enabled: bpy.props.BoolProperty(name="Enabled") + cs: bpy.props.EnumProperty(name="", items=get_cs_list, default=blender_default_colorspace(float_buffer=False, col=True)[0]) + object_name: bpy.props.StringProperty() + mat_name: bpy.props.StringProperty() + +def _set_edit_active_uv_by_name(ob: bpy.types.Object, uv_name: str): + me = getattr(ob, "data", None) + if not me or not getattr(me, "uv_layers", None): + return + for i, l in enumerate(me.uv_layers): + if l.name == uv_name: + # Prefer index setter for robustness + try: + me.uv_layers.active_index = i + except Exception: + # Fallback toggles if index setter isn't available + for ll in me.uv_layers: + try: ll.active = False + except Exception: pass + try: l.active = True + except Exception: pass + break + +class SimpleBakeUVItem(PropertyGroup): + #object_name: StringProperty(name="Object" + name: StringProperty(name="Object") + uv_name: StringProperty( + name="Edit-Active UV", + description="Select the UV map to be edit-active for this object", + update=lambda self, context: _set_edit_active_uv_by_name( + #bpy.data.objects.get(self.object_name, None), self.uv_name + bpy.data.objects.get(self.name, None), self.uv_name + ) + ) + + +class SimpleBakePropGroup(bpy.types.PropertyGroup): + + uv_items: CollectionProperty(type=SimpleBakeUVItem) + uv_items_index: IntProperty(default=0) + + global_mode: EnumProperty(name="Bake Mode", default=SBConstants.PBR, description="", items=[\ + (SBConstants.PBR, "PBR Bake", "Bake PBR maps from materials created around the Principled BSDF and Emission shaders"),\ + (SBConstants.CYCLESBAKE, "Cycles Bake", "Bake the 'traditional' cycles bake modes")\ + ], update = global_mode_update) + + ray_distance: FloatProperty(name="Ray Distance", default = 0.0, min=0, description="Distance to cast rays from target object to selected object(s)") + cage_and_ray_multiplier: FloatProperty(name="Multiplier", default = 1, min=0, description="A multiplier for BOTH Cage Extrusion and Ray Distance. This can help you more easily dial in the correct values") + auto_cage_extrusion: FloatProperty(name="Extrusion", default = 0, min=0, max=1, description="Adjust this value to inflate or deflate the auto cage object", update=auto_cage_extrusion_update) + + cage_extrusion: FloatProperty(name="Cage Extrusion", default = 0.1, min=0, description="The distance for Blender to extrude the automatically generated cage for baking to target. See the tooltip for the \"Auto extruded cage type\" option for more info. NOTE: If you are auto-matching high poly to low poly objects in name mode, this setting will only be relevant where a cage object is not detected for that low object. It will be ignored whenever a cage is present. See the Monkey Tip.") + + #CyclesBake settings + cyclesbake_cs: EnumProperty(name="Colour Space", description="Select the colour space for the baked texture", items=get_cs_list, default=blender_default_colorspace(float_buffer=False, col=True)[0]) + isolate_objects: BoolProperty(name="Isolate objects from each other during baking", description="Bake each object on its own, hiding the others so they don't influence the bake. When baking to target, this hides the influence of all objects *except those in your bake list*, so they no longer influence the objects that are in the list. Lights are unaffected") + + #Bake mechanics (S2A etc) + selected_s2a: BoolProperty(name="Bake selected objects to target object", description="Bake maps from one or more source objects (usually high poly) to a single target object (usually low poly). Source and target objects must be in the same location (overlapping). See Blender documentation on selected to active baking for more details. Disabled when 'Texture per material' is enabled — disable that option first to use this.", update=selected_s2a_update) + targetobj: PointerProperty(name="Target Object", description="Specify the target object for the baking. Note, this need not be part of your selection in the viewport (though it can be)", type=bpy.types.Object) + auto_match_mode: EnumProperty(name="Auto match mode", default="position", update=auto_match_mode_update, + description="Choose the mode for detecting low poly objects. This can either be by name (\"obj_low\" and \"obj_high\") or by position (the closest object to the one in the bake list)", items=[ + ("name", "By name", ""), + ("position", "By position", "") + ]) + + cage_smooth_hard: EnumProperty(name="Auto extruded cage type", default="smooth", + description="If you are not using a custom cage object, Blender will automatically extrude a cage from your target object when baking to target. That automatically extruded cage can be either smooth or hard. NOTE: If you are auto-matching high poly to low poly objects in name mode, this setting will only be relevant where a cage object is not detected for that low object. It will be ignored whenever a cage is present. See the Monkey Tip.", items=[ + ("smooth", "Smooth", ""), + ("hard", "Hard", "") + ]) + + merged_bake: BoolProperty(name="Multiple objects to one texture set", default = False, description="Bake multiple objects to one set of textures. Not available with 'Bake maps to target object' (would not make sense), UNLESS you are using the \"Auto match high and low poly\" option. You must be baking more than one object. Not available when Texture Per Material is enabled.", update=merged_bake_update) + join_objs_to_proxy: BoolProperty(name="Join objects for bake", default = False, description=( + "Join bake objects into one to speed up the baking process. " + "Note: Any modifiers will be applied for baking (not permanently). " + "⚠️ WARNING ⚠️: If your materials use Generated or Object texture coordinates, " + "these will change when objects are combined, so the baked result may not " + "match the original material appearance." + ), update=join_objs_to_proxy_update) + + merged_bake_name: StringProperty(name="Texture name for multiple bake", default = "MergedBake", description="When baking one object at a time, the object's name is used in the texture name. Baking multiple objects to one texture set, however requires you to provide a name for the textures") + cycles_s2a: BoolProperty(name="Selected to Active", description="Bake using the Cycles selected to active option. Disabled when 'Texture per material' is enabled — disable that option first to use this.", update=cycles_s2a_update) + targetobj_cycles: PointerProperty(name="Target Object", description="Specify the target object to bake to (this would be the active object with vanilla Blender baking)", type=bpy.types.Object) + + #S2A op mode + s2a_opmode: EnumProperty(name="Bake to target mode", default=0, + description="SimpleBake offers different ways of baking to a target object", items=get_s2aopmode_options, update=s2a_opmode_update) + + #Texture settings related + tex_override: BoolProperty(name="Override and bake to existing image", default = False, description="Bake to an existing image, override all other texture related settings") + tex_override_tex: PointerProperty(name="Existing Image:", description="Existing image to bake to", type=bpy.types.Image) + + imgheight: IntProperty(name="Bake height", default=1024, description="Set the height of the baked image that will be produced", update=imgheight_update) + imgwidth: IntProperty(name="Bake width", default=1024, description="Set the width of the baked image that will be produced", update=imgwidth_update) + outputheight: IntProperty(name="Output Height", default=1024, description="Set the height of the baked image that will be output") + outputwidth: IntProperty(name="Output Width", default=1024, description="Set the width of the baked image that will be output") + everything32bitfloat: BoolProperty(name="All internal 32bit float", default = False, description="Normal maps are always created as 32bit float images, but this option causes all images to be created as 32bit float. Image quality is theoretically increased, but often it will not be noticeable.") + clear_image: BoolProperty(name="Clear existing bake image before bake", default = True, description="Clear the existing bake image (if any) before baking to it. Keeping this enabled will ensure that SimpleBake starts with a blank image for each bake. Turn this off to allow iterative baking where each bake will add to the existing image.", update=clear_image_update) + + replace_previous_bakes: BoolProperty(name="Replace previous bakes", default=True, description="Replace existing bake images with the same name. When disabled, new bake images are always created with unique names, preserving any previously baked images") + + rough_glossy_switch: EnumProperty(name="", default=SBConstants.PBR_ROUGHNESS, + description="Switch between roughness and glossiness (inverts of each other). NOTE: Roughness is the default for Blender so, if you change this, texture probably won't look right when used in Blender. Only available if you are exporting your bakes (see the \"Export settings\" section.)", items=[ + (SBConstants.PBR_ROUGHNESS, "Rough", ""), + (SBConstants.PBR_GLOSSY, "Glossy", "") + ]) + ccrough_glossy_switch: EnumProperty(name="", default=SBConstants.PBR_CLEARCOAT_ROUGH, + description="Switch between roughness and glossiness for CLEARCOAT (inverts of each other). NOTE: Roughness is the default for Blender so, if you change this, texture probably won't look right when used in Blender. Only available if you are exporting your bakes (see the \"Export settings\" section.)", items=[ + (SBConstants.PBR_CLEARCOAT_ROUGH, "Rough", ""), + (SBConstants.PBR_CLEARCOAT_GLOSS, "Glossy", "") + ]) + normal_format_switch: EnumProperty(name="", default=SBConstants.NORMAL_OPENGL, + description="Switch between OpenGL and DirectX formats for normal map. NOTE: OpenGL is the default for Blender so, if you change this, texture probably won't look right when used in Blender. Only available if you are exporting your bakes (see the \"Export settings\" section.)", items=[ + (SBConstants.NORMAL_OPENGL, "OpenGL", ""), + (SBConstants.NORMAL_DIRECTX, "DirectX", "") + ]) + tex_per_mat: BoolProperty(name="Texture per material", description="Bake each material into its own set of textures. Not available when Multiple Objects to One Texture Set is enabled. Also disabled when 'Bake to target' is enabled — disable that option first to use this.", update=tex_per_mat_update) + + do_aa: BoolProperty(name="Anti-aliasing", description="Run baked textures through the compositor anti-aliasing node. Must be exporting your bakes or this will be greyed out. Does not operate on normal map images") + aa_threshold: FloatProperty(name="AA threshold", description="Threshold to use for compositor anti-aliasing", default=1.0, max=1.0, min=0.0, subtype='FACTOR') + aa_contrast_limit: FloatProperty(name="AA contrast limit", description="Contrast limit to use for compositor anti-aliasing", default=0.2, max=1.0, min=0.0, subtype='FACTOR') + aa_corner_radius: FloatProperty(name="AA corner radius", description="Corner radius to use for compositor anti-aliasing", default=0.250, max=1.0, min=0.0, subtype='FACTOR') + + #PBR bake types selection + selected_col: BoolProperty(name=SBConstants.PBR_DIFFUSE, default = True, description="Bake a PBR Colour map", update=selected_col_update) + multiply_diffuse_ao: EnumProperty(name="", default="purediffuse", update=multiply_diffuse_ao_update, + description="Choose between either pure colour/diffuse or multiply colour/diffuse with AO. Must also be baking AO (will be auto-enabled if you choose the multiply option). Must be exporting your bakes or this will be greyed out", items=[ + ("purediffuse", "Diffuse only", ""), + ("diffusexao", "Diffuse with AO", "") + ]) + multiply_diffuse_ao_percent: IntProperty(name="%", default=50, min=0, max=100, description="Percentage to multiply the AO with the colour/diffuse") + + selected_metal: BoolProperty(name=SBConstants.PBR_METAL, description="Bake a PBR Metalness map") + selected_rough: BoolProperty(name="Roughness/Glossy", description="Bake a PBR Roughness or Glossy map", update=selected_rough_update) + selected_normal: BoolProperty(name=SBConstants.PBR_NORMAL, description="Bake a Normal map", update=selected_normal_update) + selected_trans: BoolProperty(name=SBConstants.PBR_TRANSMISSION, description="Bake a PBR Transmission map") + selected_transrough: BoolProperty(name=SBConstants.PBR_TRANSMISSION_ROUGH, description="Bake a PBR Transmission Roughness map") + selected_emission: BoolProperty(name=SBConstants.PBR_EMISSION, description="Bake an Emission map") + selected_emission_strength: BoolProperty(name=SBConstants.PBR_EMISSION_STRENGTH, description="Bake an Emission Strength map") + selected_sss: BoolProperty(name=SBConstants.PBR_SSS, description="Bake a Subsurface map") + selected_sss_scale: BoolProperty(name=SBConstants.PBR_SSS_SCALE, description="Bake a Subsurface scale map") + selected_ssscol: BoolProperty(name=SBConstants.PBR_SSSCOL, description="Bake a Subsurface colour map") + selected_clearcoat: BoolProperty(name=SBConstants.PBR_CLEARCOAT, description="Bake a PBR Clearcoat Map") + selected_clearcoat_rough: BoolProperty(name="Clearcoat Roughness/Glossy", description="Bake a PBR Clearcoat Roughness or Glossy map", update=selected_ccrough_update) + selected_specular: BoolProperty(name=SBConstants.PBR_SPECULAR, description="Bake a Specular/Reflection map") + selected_alpha: BoolProperty(name=SBConstants.PBR_ALPHA, description="Bake a PBR Alpha map") + selected_bump: BoolProperty(name=SBConstants.PBR_BUMP, description="Bakes the Height input for Bump nodes used in your material. Bump node must be plugged into the normal input of the Principled BSDF(s)") + selected_displacement: BoolProperty(name=SBConstants.PBR_DISPLACEMENT, description="Bakes either the \"Height\" input for a Displacement node, or the \"Vector\" input for a Vector Displacement node, in either case plugged into the \"Displacement\" socket of the Material Output node. Only works with a single Displacement or Vector Displacement node plugged in (Vector Math nodes not supported)") + + #Specials bake types selection + selected_col_mats: BoolProperty(name=SBConstants.COLOURID, description="ColourID Map based on random colour per material") + selected_col_vertex: BoolProperty(name=SBConstants.VERTEXCOL, description="Bake the active vertex colours to a texture") + selected_ao: BoolProperty(name=SBConstants.AO, description="Ambient Occlusion") + selected_thickness: BoolProperty(name=SBConstants.THICKNESS, description="Thickness map") + selected_curvature: BoolProperty(name=SBConstants.CURVATURE, description="Curvature map") + selected_lightmap: BoolProperty(name=SBConstants.LIGHTMAP, description="Lightmap map") + lightmap_apply_colman: BoolProperty(name="Export with colour management settings", default=False, description="Apply the colour management settings you have set in the render properties panel to the lightmap. Only available when you are exporting your bakes. Will be ignored if exporting to EXR files as these don't support colour management") + ao_sample_count: IntProperty(name="AO Sample Count", description="Sample count to be used for all specials materials with an AO component (thickness, and AO itself)", default = 16) + + #UV related + new_uv_option: BoolProperty(name="New UV Map(s)", description="Use Smart UV Project to create a new UV map for your objects (or target object if baking to a target). See Blender Market FAQs for more details", update=new_uv_option_update) + prefer_existing_sbmap: BoolProperty(name="Prefer existing UV maps called SimpleBake", description="If one exists for the object being baked, use any existing UV maps called 'SimpleBake' for baking (rather than the active UV map)") + new_uv_method: EnumProperty(name="New UV Method", default="SmartUVProject_Atlas", description="New UV Method", items=[ + ("SmartUVProject_Individual", "Smart UV Project (Individual)", "Each object gets a new UV map using Smart UV Project"), + ("SmartUVProject_Atlas", "Smart UV Project (Atlas)", "Create a combined UV map (atlas map) using Smart UV Project"), + ("CombineExisting", "Combine Active UVs (Atlas)", "Create a combined UV map (atlas map) by combining the existing, active UV maps on each object") + ]) + restore_orig_uv_map: BoolProperty(name="Restore originally active UV map at end", description="If you are creating new UVs, or preferring an existing UV map called SimpleBake, the UV map used for baking may not be the one you had displayed in the viewport before baking. This option restores what you had active before baking", default=True) + uvpackmargin: FloatProperty(name="Pack Margin", default=0.03, description="Margin to use when packing combined UVs into Atlas map") + average_uv_size: BoolProperty(name="Average UV Island Size", default=True, description="Average the size of the UV islands when combining them into the atlas map") + expand_mat_uvs: BoolProperty(name="New UVs per material, expanded to bounds", description="When using 'Texture per material', Create a new UV map, and expand the UVs from each material to fill that map using Smart UV Project", update=expand_mat_uvs_update) + auto_detect_udims: BoolProperty(name="Auto detect UDIMs", default=True, description="Automatically detect where each bake object's UV map is using UDIM tiles, and bake to those tiles. Disable to bake regular UV space (i.e. the first tile) only") + unwrapmargin: FloatProperty(name="UV Unwrap Margin", default=0.03, description="Margin between islands to use for Smart UV Project") + uvcorrectaspect: BoolProperty(name="Correct aspect", default=True, description="Use the correct aspect option for SmartUVProject") + angle_limit: FloatProperty(name="Angle Limit", default=math.radians(66.0), min=0.0, max=math.radians(89.0), subtype='ANGLE', description="Angle limit for Smart UV Project — lower values produce more UV islands") + area_weight: FloatProperty(name="Area Weight", default=0.0, min=0.0, max=1.0, description="Weight UV island size by face area — larger faces get proportionally more UV space") + scale_to_bounds: BoolProperty(name="Scale to Bounds", default=False, description="Scale UV islands to fill the UV space after Smart UV Project") + move_new_uvs_to_top: BoolProperty(name="Move new UVs to top", description="Move the newly generated UV map to be the first item in the UV maps list") + available_uv_maps: EnumProperty(name="UV Maps", description="A list of available UV maps", items=get_uv_options_dropdown) + + #UV packing related + uvp_shape_method: EnumProperty(name="Shape method", default="CONCAVE", description="", items=[ + ("CONCAVE", "Concave", ""), + ("CONVEX", "Convex", "") + ]) + uvp_scale: BoolProperty(name="Scale", default = True, description="") + uvp_rotate: BoolProperty(name="Rotate", default = True, description="") + uvp_rotation_method: EnumProperty(name="Rotation method", default="ANY", description="", items=[ + ("AXIS_ALIGNED", "Axis Aligned", ""), + ("CARDINAL", "Cardinal", ""), + ("ANY", "Any", "") + ]) + uvp_margin_method: EnumProperty(name="Margin method", default="SCALED", description="", items=[ + ("SCALED", "Scaled", ""), + ("ADD", "Add", ""), + ("FRACTION", "Fraction", "") + ]) + uvp_lock_pinned: BoolProperty(name="Lock pinned", default = False, description="") + uvp_lock_method: EnumProperty(name="Lock method", default="LOCKED", description="", items=[ + ("SCALE", "Scale", ""), + ("ROTATION", "Rotation", ""), + ("ROTATION_SCALE", "Rotation Scale", ""), + ("LOCKED", "All", "") + ]) + uvp_merge_overlapping: BoolProperty(name="Merge overlapping", default = False, description="") + uvp_pack_to: EnumProperty(name="Pack to", default="CLOSEST_UDIM", description="", items=[ + ("CLOSEST_UDIM", "Closest UDIM", ""), + ("ACTIVE_UDIM", "Active UDIM", ""), + ("ORIGINAL_AABB", "Original", "") + ]) + + #Export related + save_bakes_external: BoolProperty(name="Export bakes", default = False, description="Export your bakes to the folder specified below, under the same folder where your .blend file is saved. Not available if .blend file not saved", update = save_bakes_external_update) + export_folder_per_object: BoolProperty(name="Sub-folder per object", default = False, description="Create a sub-folder for the textures and mesh file of each baked object. Only available if you are exporting bakes and/or mesh.") + save_obj_external: BoolProperty(name="Export mesh", default = False, description="Export your mesh ready for import elsewhere. Requires 'Export bakes' to be enabled — baked images must be saved to disk before mesh export so they can be referenced by the exported file") + merge_export_obj: BoolProperty(name="Merge mesh on export", default=False, description="Merge objects into single object within the export file. Must be used in combination with 'Multiple Objects to One Texture Set'. Must also be using the 'Combined mesh file' option above") + mesh_export_name: StringProperty(name="File name", description="File name of the mesh export. NOTE: To maintain compatibility, only MS Windows acceptable characters will be used. You can use %blend_file_name% to have this be automatically set to the name of the current blend file", default="%blend_file_name%", maxlen=50) + export_format: EnumProperty(name="Export format", default="fbx", description="Format of the exported mesh", items=[ + ("fbx", "FBX", ""), + ("obj", "OBJ", ""), + ("gltf", "GLTF", ""), + ("dae", "DAE", "") + ]) + export_mesh_individual_or_combined: EnumProperty(name="Export mesh single or combined", default="individual", description="Either export to a single file or export each object to its own file", items=[ + ("individual", "Individual mesh files", ""), + ("combined", "Combined mesh file", "") + ]) + apply_col_man_to_col: BoolProperty(name="Export diffuse with col management settings", default = False, description="Apply colour space settings (exposure, gamma etc.) from current scene when saving the diffuse image externally. Only available if you are exporting baked images. Will be ignored if exporting to EXR files as these don't support colour management") + export_cycles_col_space: BoolProperty(name="Export with col management settings", default = True, description="Apply colour space settings (exposure, gamma etc.) from current scene when saving the image externally. Only available if you are exporting baked images. Not available if you have Cycles bake mode set to Normal. Will be ignored if exporting to EXR files as these don't support colour management") + rundenoise: BoolProperty(name="Denoise", description="Run baked images through the compositor. Your blend file must be saved, and you must be exporting your bakes", default=False) + apply_mods_on_mesh_export: BoolProperty(name="Apply object modifiers", description="Apply modifiers to object on export of the mesh", default=True) + apply_transformation: BoolProperty(name="Apply transformation", description="Use the 'Apply Transformation' option when exporting", default=False) + + if bpy.app.version >= (4, 5, 0): + export_path: StringProperty(subtype="DIR_PATH", description="Filepath to export to. NOTE: Blender uses '//' to denote the folder that your Blend file is saved (e.g. '//SimpleBake_Bakes/'). However, you can also type a full path if you prefer. Either will work.", default="//SimpleBake_Bakes", options={'PATH_SUPPORTS_BLEND_RELATIVE'}) + else: + export_path: StringProperty(subtype="DIR_PATH", description="Filepath to export to. NOTE: Blender uses '//' to denote the folder that your Blend file is saved (e.g. '//SimpleBake_Bakes/'). However, you can also type a full path if you prefer. Either will work.", default="//SimpleBake_Bakes") + + keep_internal_after_export: BoolProperty(name="Keep internal images after export", description="Keep baked images internal within Blender after exporting", default=True, update=keep_internal_after_export_update) + export_mesh_preset_name: EnumProperty(name = "Use export preset", items=get_presets_dropdown, description="Enter the name of an existing export preset to use that for mesh export", default=0) + + everything_16bit: BoolProperty(name="All exports 16bit", default = True, description="Normal maps are always exported as 16bit, but this option causes all images to be exported 16bit. This should probably stay enabled unless file sizes are an issue") + export_file_format: EnumProperty(name="Export File Format", update=export_file_format_update, default="PNG", + description="Select the file format for exported bakes. Also applies to Sketchfab upload images", items=[ + ("PNG", "PNG", ""), + ("JPEG", "JPG", ""), + ("TIFF", "TIFF", ""), + ("TARGA", "TGA", ""), + ("TARGA_RAW", "TGA RAW", ""), + ("OPEN_EXR", "Open EXR", "") + ]) + exr_codec_export: EnumProperty(name="Codec", default="ZIP", description="Codec for EXR file", items=[ + ("NONE", "NONE", ""), + ("PXR24", "PXR24", ""), + ("ZIP", "ZIP", ""), + ("PIZ", "PIZ", ""), + ("RLE", "RLE", ""), + ("ZIPS", "ZIPS", ""), + ("DWAA", "DWAA", "") + ]) + jpeg_quality: IntProperty(name = "JPEG quality", default = 90, description="Quality for JPEG as it uses lossy compression. Same as native Blender setting", min=0, max=100) + png_compression: IntProperty(name="PNG Compression", default=15, description="PNG compression level to use when saving baked images", min=0, max=100) + + #Advanced object selection list + objects_list: CollectionProperty(type = ObjectListItem) + objects_list_index: IntProperty(name = "Index for bake objects list", default = 0, update=objects_list_index_update) + mat_bake_list: CollectionProperty(type = MatBakeItem) + + #Background baking + bgbake: EnumProperty(name="Background Bake", default="fg", items=[ + ("fg", "Foreground", "Perform baking in the foreground. Blender will lock up until baking is complete"), + ("bg", "Background", "Perform baking in the background, leaving you free to continue to work in Blender while the baking is being carried out") + ], update=bgbake_update) + bgbake_name: StringProperty(name="Background bake task name", description="Name to help you identify the background bake task. This can be anything, and is only to help keep track of multiple background bake tasks. The name will show in the list below.") + + #Misc + memLimit: EnumProperty(name="GPU Memory Limit", default="4096", + description="Limit memory usage by limiting render tile size. More memory means faster bake times, but it is possible to exceed the capabilities of your computer which will lead to a crash or slow bake times", items=[ + ("512", "Ultra Low", "Ultra Low memory usage (max 512 tile size)"), + ("1024", "Low", "Low memory usage (max 1024 tile size)"), + ("2048", "Medium", "Medium memory usage (max 2048 tile size)"), + ("4096", "Normal", "Normal memory usage, for a reasonably modern computer (max 4096 tile size)"), + ("Off", "No Limit", "Don't limit memory usage (tile size matches render image size)") + ]) + batch_name: StringProperty(name="Batch name", description="Name to apply to these bakes (is incorporated into the bakes file name, provided you have included this in the image format string - see addon preferences). NOTE: To maintain compatibility, only MS Windows acceptable characters will be used", default="Bake1", update=batch_name_update) + create_glTF_node: BoolProperty(name="Create glTF settings", description="Create the glTF settings node group", default=False) + glTF_selection: EnumProperty(name="glTF selection", default=SBConstants.AO, + description="Which map should be plugged into the glTF settings node", items=[ + (SBConstants.AO, SBConstants.AO, "Use ambient occlusion"), + (SBConstants.LIGHTMAP, SBConstants.LIGHTMAP, "Use lightmap") + ]) + boosted_sample_count: IntProperty(name="Boosted sample count (AO and Bevel)", description="PBR bakes are done at 2 samples by default (as they are baked as emission and noise should not be possible). However, sample count needs to be boosted for materials containing Bevel or AO nodes. If those nodes are detected in your material(s), this count is used", default=50) + no_force_32bit_normals: BoolProperty(name="Don't force high bit-depth normal maps", default=False, description="Usually, normal maps are treated as a special case. Regardless of your other settings, they are ALWAYS 32 bit floats internally and 16/32 bit external exports (maximum for chosen file type). Enabling this option turns off that special treatment. Normal maps will follow the same rules as other textures, and be affected by the \"All internal 32bit float\" and \"All exports 16 bit\" options") + bw_to_rgb: BoolProperty(name="Output BW maps as RGB", default=False, description="Output grayscale (BW) bake types as RGB images instead of single-channel BW. Useful for software that doesn't handle BW images well") + + #Advanced functions + findreplace_find: StringProperty(name="Find", default="", description="Text to search for") + findreplace_replace: StringProperty(name="Replace", default="", description="Text to replace with") + findreplace_type: EnumProperty(name="Data type", default="image", + description="Type of data on which to do the find and replace", items=[ + ("image", "Images", ""), + ("object", "Objects", ""), + ("material", "Materials", "") + ]) + limit_findandreplace_to_sb: BoolProperty("Limit", default=False, description="Limit the find and replace operation to objects/materials/images created by SimpleBake") + + #Presets + presets_list: CollectionProperty(type=PresetItem, name="Presets", description="Presets") + presets_list_index: IntProperty(name = "Index for bake presets list", default = 0, update=presets_list_update) + preset_name: StringProperty(name="Name: ", description="Name to save this preset under", default="Preset Name", maxlen=64) + preset_load_clear_obj: BoolProperty(name="Replace bake objects list with preset", description="Clear the bake object list when loading a preset. Any bake objects list stored in the preset will be applied instead", default=True) + + local_presets_list: CollectionProperty(type=PresetItem, name="Local Presets", description="Local Presets") + local_presets_list_index: IntProperty(name = "Index for local bake presets list", default = 0, update=local_presets_list_update) + local_preset_name: StringProperty(name="Name: ", description="Name to save this preset under", default="Preset Name", maxlen=64) + + #Show/Hide + showtips: BoolProperty(name="", default=False) + presets_show: BoolProperty(name="", description="Show SimpleBake presets", default=False, update=presets_show_update) + bake_objects_show: BoolProperty(name="", description="Show bake objects", default=False, update=bake_objects_show_update) + materials_show: BoolProperty(name="", description="Show materials", default=False) + pbr_settings_show: BoolProperty(name="", description="Show PBR settings", default=False) + aov_settings_show: BoolProperty(name="", description="Show AOV settings", default=False) + cyclesbake_settings_show: BoolProperty(name="", description="Show CyclesBake settings", default=False) + specials_show: BoolProperty(name="", description="Show Specials settings", default=False) + textures_show: BoolProperty(name="", description="Show Texture settings", default=False, update=textures_show_update) + export_show: BoolProperty(name="", description="Show Export settings", default=False) + uv_show: BoolProperty(name="", description="Show UV settings", default=False) + other_show: BoolProperty(name="", description="Show Other settings", default=False) + channelpacking_show: BoolProperty(name="", description="Show Channel Packing settings", default=False) + admin_settings_show: BoolProperty(name="", description="Show Admin Settings", default=False) + bg_status_show: BoolProperty(name="BG Bakes Status", description="Show status of currently running background bakes", default=True) + uv_advanced_packing_show: BoolProperty(name="Advanced UV packing options", description="Show advanced UV packing options", default=False) + + #Behind the scenes + first_texture_show: BoolProperty(name="", description="", default=True) + + #Channel packing + cptex_R: EnumProperty(items=get_selected_bakes_dropdown, description="Bake type to use for the Red channel of the channel packed image") + cptex_G: EnumProperty(items=get_selected_bakes_dropdown, description="Bake type to use for the Green channel of the channel packed image") + cptex_B: EnumProperty(items=get_selected_bakes_dropdown, description="Bake type to use for the Blue channel of the channel packed image") + cptex_A: EnumProperty(items=get_selected_bakes_dropdown, description="Bake type to use for the Alpha channel of the channel packed image") + cp_name: StringProperty(name="Name: ", default="PackedTex", maxlen=30, description="Name for the channel packed texture") + cp_list: CollectionProperty(type=CPTexItem, name="CP Textures", description="CP Textures") + cp_list_index: IntProperty(name = "Index for CP Textures list", default = 0, update=cp_list_index_update) + exr_codec_cpts: EnumProperty(name="Codec", default="ZIP", description="Codec for EXR file", items=[ + ("NONE", "NONE", ""), + ("PXR24", "PXR24", ""), + ("ZIP", "ZIP", ""), + ("PIZ", "PIZ", ""), + ("RLE", "RLE", ""), + ("ZIPS", "ZIPS", ""), + ("DWAA", "DWAA", "") + ]) + channelpackfileformat: EnumProperty(name="Export File Format for Channel Packing", + description="File format for channel pack image", + items=[("PNG", "PNG", ""), ("TARGA", "TGA", ""), ("TARGA_RAW", "TGA RAW", ""), ("OPEN_EXR", "Open EXR", "")]) + + del_cptex_components: BoolProperty(name="Delete bakes after channel pack", description="Delete bakes (internal and external) after the packed texture has been created in the external file system. Unavailable if you are also using the Copy Objects and Apply Bakes option or the Apply Bakes to Original Objects option, as in both cases you need the individual textures for the new materials", default=False) + + image_sequence_enabled: BoolProperty(name="Image sequence", default=False, description="Repeat the bake process between the specified frames of the scene, creating an image sequence. Make sure that you have the frame number as part of the image format string in the SimpleBake addon preferences") + image_sequence_start_frame: IntProperty(name="Start", default = 1, description = "The first frame of the image sequence", min = 0, update=image_sequence_start_frame_update) + image_sequence_end_frame: IntProperty(name="End", default = 2, description = "The last frame of the image sequence", min = 1, update=image_sequence_end_frame_update) + + copy_and_apply: BoolProperty(name="Copy objects and apply bakes", default = False, description="Copy your bake objects, and apply the baked textures to the copies as a new material. When baking to target, this copies the target object and applies the baked textures to that copy. If you are baking in the background, this happens after you import. Cannot be used at the same time as 'Apply bakes to original objects'. You cannot use this option if you have deselected 'Keep internal images after export' as you need them for the new material. When 'Texture per material' is enabled, each material slot on the copy will receive its own baked material.", update=copy_and_apply_update) + apply_bakes_to_original: BoolProperty(name="Apply bakes to original object", default = False, description="Apply the baked textures to the original objects. When baking to target, this applies the baked textures directly to the target object. Cannot be used at the same time as 'Copy objects and apply bakes'. Cannot be used when baking in the background", update=apply_bakes_to_original_update) + cyclesbake_copy_and_apply_mat_format: EnumProperty(name="Material format", default="emission", + description="Material on your Copy and Apply object based around Principled BSDF, Emission BSDF or Background node", items=[ + ("principled", "Principled BSDF", ""), + ("emission", "Emission", ""), + ("background", "Background", "") + ]) + hide_source_objects: BoolProperty(name="Hide source objects after bake", default = False, description="Hide the source object that you baked from in the viewport after baking. If you are baking in the background, this happens after you import") + hide_cage_object: BoolProperty(name="Hide cage object after bake", default = False, description="Hide the cage object that you baked from in the viewport after baking. If you are baking in the background, this happens after you import") + preserve_materials: BoolProperty(name="Preserve object original materials (BETA)", description="Preserve original material assignments for baked objects (NOTE: all materials will be identical, and point to the baked texture set, but face assignments for each material will be preserved)") + + highlight_col: FloatVectorProperty( + name="Col", + subtype='COLOR', + min=0.0, max=1.0, + default=(1.0, 0.0, 0.0), + description="Choose an RGB color", + size=3 + ) + + texture_bg_col: FloatVectorProperty( + name="Col", + subtype='COLOR', + min=0.0, max=1.0, + default=(0.0, 0.0, 0.0, 1.0), + description="Choose an RGBA color for the texture background", + size=4 + ) + + aov_items: bpy.props.CollectionProperty(type=AOVItem) + + #Internal + t = Path(tempfile.TemporaryDirectory().name).as_posix() + bgbake_temp_dir: StringProperty(default=t) + total_bake_images_number: IntProperty() + current_bake_image_number: IntProperty(default=0) + base_folder_override: StringProperty(default = "") + fg_status_message: StringProperty() + percent_complete: IntProperty() + testing: StringProperty(maxlen=0) + highlight_on: BoolProperty(default=False) + suppress_report: BoolProperty(default=False) + fake_background: BoolProperty(default=False) + + preview_active: BoolProperty(name="Preview Active", default=False) + preview_bake_type: StringProperty(name="Preview Bake Type", default="") + preview_changed_shading: BoolProperty(name="Preview Changed Shading", default=False) + try: + l = getpass.getuser() + safe_context_check: StringProperty(default=l) + except: + safe_context_check: StringProperty(default="") + +classes = ([ + ObjectListItem, + MatBakeItem, + SimpleBakeUVItem, + PresetItem, + CPTexItem, + AOVItem, + SimpleBakePropGroup + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + #Register property group + bpy.types.Scene.SimpleBake_Props = bpy.props.PointerProperty(type=SimpleBakePropGroup) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/resources/Old/copy_and_apply_mats.blend b/scripts/addons/SimpleBake/resources/Old/copy_and_apply_mats.blend new file mode 100644 index 0000000..d8c75c3 --- /dev/null +++ b/scripts/addons/SimpleBake/resources/Old/copy_and_apply_mats.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:121a1a8c2b5f000e54bae5164afc8fee8c0a0f61bf856a0d6bbd223c127629df +size 2353068 diff --git a/scripts/addons/SimpleBake/resources/aa.blend b/scripts/addons/SimpleBake/resources/aa.blend new file mode 100644 index 0000000..6c9de3e --- /dev/null +++ b/scripts/addons/SimpleBake/resources/aa.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb86b656c36d644c2570d8d25a6902967afb6b037e28547db5883e981685f705 +size 1187714 diff --git a/scripts/addons/SimpleBake/resources/channel_packing.blend b/scripts/addons/SimpleBake/resources/channel_packing.blend new file mode 100644 index 0000000..e10fccd --- /dev/null +++ b/scripts/addons/SimpleBake/resources/channel_packing.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49ef728b2940a72b36e087f81d5e8946e34780cde5b696263164b28a6d4fd20b +size 681256 diff --git a/scripts/addons/SimpleBake/resources/copy_and_apply_mats.blend b/scripts/addons/SimpleBake/resources/copy_and_apply_mats.blend new file mode 100644 index 0000000..bf00b77 --- /dev/null +++ b/scripts/addons/SimpleBake/resources/copy_and_apply_mats.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:449a9b83af4b83582351f4b0451392c1b81bb4211666fc088da52cfd9c162e5d +size 2524970 diff --git a/scripts/addons/SimpleBake/resources/denoise.blend b/scripts/addons/SimpleBake/resources/denoise.blend new file mode 100644 index 0000000..8fc69b4 --- /dev/null +++ b/scripts/addons/SimpleBake/resources/denoise.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8f26e484a3c43568363742e35e8a5e0eb1317239923f71955681e39870e8d64 +size 800454 diff --git a/scripts/addons/SimpleBake/resources/multiply.blend b/scripts/addons/SimpleBake/resources/multiply.blend new file mode 100644 index 0000000..8b473f6 --- /dev/null +++ b/scripts/addons/SimpleBake/resources/multiply.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e814e747edf9a2dc2ea12e70e52f05692dc14e48363597a0cc3a7db64c48537 +size 893424 diff --git a/scripts/addons/SimpleBake/resources/specials.blend b/scripts/addons/SimpleBake/resources/specials.blend new file mode 100644 index 0000000..431d3bc --- /dev/null +++ b/scripts/addons/SimpleBake/resources/specials.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:155876e4769d13bb643a8b48929da0a2e349c29935ab52e93f307c769a234246 +size 885260 diff --git a/scripts/addons/SimpleBake/sketchfab_upload.py b/scripts/addons/SimpleBake/sketchfab_upload.py new file mode 100644 index 0000000..4b4fde2 --- /dev/null +++ b/scripts/addons/SimpleBake/sketchfab_upload.py @@ -0,0 +1,153 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty, BoolProperty + +import os +from pathlib import Path +from zipfile import ZipFile +import webbrowser + +from . import sketchfabapi +from .utils import get_base_folder_patho, clean_file_name, is_blend_saved +from .messages import print_message + +def get_file_name(): + fullpath = bpy.data.filepath + pathelements = os.path.split(fullpath) + return pathelements[1] + +class SimpleBake_OT_Sketchfab_Upload(Operator): + """Upload selected SimpleBake generated objects to Sketchfab""" + bl_idname = "simplebake.sketchfab_upload" + bl_description = "Upload selected SimpleBake generated objects to Sketchfab. Your blend file must be saved. You can only upload objects created with SimpleBake's 'Copy objects and apply bakes' option. Select those object(s) in the viewport and click upload." + bl_label = "Upload" + + @classmethod + def poll(cls,context): + + if not is_blend_saved(): + return False + + if context.mode != "OBJECT": + return False + + sbp = context.scene.SimpleBake_Props + + objs_list = context.selected_objects + r =[o for o in objs_list if "SB_bake_operation_id" in o] + + if len(objs_list) == 0: return False + elif len(r) == len(objs_list): return True + else: return False + + def execute(self, context): + + print_message(context, "Sketchfab Upload Beginning") + + #Get the currently selected objects + objs_list = context.selected_objects + + #Get all the textures being used by our objects. Should only have one material each + images_imgs = [] + for obj in objs_list: + nodes = obj.material_slots[0].material.node_tree.nodes + for node in nodes: + if node.bl_idname == "ShaderNodeTexImage": + images_imgs.append(node.image) + + #Create a temp folder for SFUpload in the folder where blend saved + f = get_base_folder_patho(context) / "SFUpload" + + if not os.path.isdir(str(f)): + os.mkdir(str(f)) + + #Save each image into that folder + + writtenfilenames_strlist = [] + for img in images_imgs: + + #If it is internal only + if img.filepath == "": + #Just set it's file path and save. This one is easy + img.file_format = "PNG" + img.filepath = str(f / clean_file_name(img.name)) + ".png" + img.save() + writtenfilenames_strlist.append(Path(img.filepath).parts[-1]) + img.filepath = "" + + #If it's already been saved externally, copy it + else: + op = img.filepath + off = img.file_format + + img.pack() #Or else changing its filepath will screw it up + img.file_format = "PNG" + img.filepath = str(f / clean_file_name(img.name)) + ".png" + + img.save() + writtenfilenames_strlist.append(Path(img.filepath).parts[-1]) + + img.unpack(method="REMOVE") + img.filepath = op + img.file_format = off + + #In either case, add the image name to our list + + + + #Export the fbx (we might have multiple objects) + bpy.ops.object.select_all(action="DESELECT") + for obj in objs_list: + obj.select_set(state=True) + + filename = get_file_name().replace(".blend", "") + bpy.ops.export_scene.fbx(filepath=str(f / f"{filename}.fbx"), check_existing=False, use_selection=True, use_mesh_modifiers=True, use_mesh_modifiers_render=True, path_mode="STRIP") + + #Zip it up + zip_path = str(f / f"{filename}.zip") + zip = ZipFile(str(zip_path), mode="w") + + #First the images + for fn in writtenfilenames_strlist: + zip.write(str(f / fn), arcname=fn) + + #And now the fbx + zip.write(str(f / f"{filename}.fbx"), arcname=f"{filename}.fbx") + zip.close() + + #Get Sketchfab API key + preferences = context.preferences + addon_prefs = preferences.addons[__package__].preferences + apikey = addon_prefs.apikey + + #Call Sketchfab Upload + upload_url = sketchfabapi.upload(zip_path, get_file_name(), apikey) + + if not upload_url: + print_message(context, "Upload to Sketchfab failed. See console messages for details") + return False + else: + #Open URL that is returned + webbrowser.open(upload_url, new=0, autoraise=True) + print_message(context, "Upload complete. Your web broswer should have opened.") + + #Delete Zip file + #os.remove(zip_path) + + return {'FINISHED'} + +classes = ([ + SimpleBake_OT_Sketchfab_Upload + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/sketchfabapi.py b/scripts/addons/SimpleBake/sketchfabapi.py new file mode 100644 index 0000000..6758981 --- /dev/null +++ b/scripts/addons/SimpleBake/sketchfabapi.py @@ -0,0 +1,111 @@ + +import json +import os +import bpy + +from time import sleep + +# import the requests library +# http://docs.python-requests.org/en/latest +# pip install requests +import requests +#from .utils import print_message +from .messages import print_message + +## +# Uploading a model to Sketchfab is a two step process +# +# 1. Upload a model. If the upload is successful, the API will return +# the model's uid in the `Location` header, and the model will be placed in the processing queue +# +# 2. Poll for the processing status +# You can use your model id (see 1.) to poll the model processing status +# The processing status can be one of the following: +# - PENDING: the model is in the processing queue +# - PROCESSING: the model is being processed +# - SUCCESSED: the model has being sucessfully processed and can be view on sketchfab.com +# - FAILED: the processing has failed. An error message detailing the reason for the failure +# will be returned with the response +# +# HINTS +# - limit the rate at which you poll for the status (once every few seconds is more than enough) +## + +SKETCHFAB_DOMAIN = 'sketchfab.com' +SKETCHFAB_API_URL = 'https://api.{}/v3'.format(SKETCHFAB_DOMAIN) + + +def _get_request_payload(apikey, data={}, files={}, json_payload=False): + """Helper method that returns the authentication token and proper content + type depending on whether or not we use JSON payload.""" + headers = {'Authorization': 'Token {}'.format(apikey)} + + if json_payload: + headers.update({'Content-Type': 'application/json'}) + data = json.dumps(data) + + return {'data': data, 'files': files, 'headers': headers} + + +def upload(model_file, uploadname, apikey): + """POST a model to sketchfab. + + This endpoint only accepts formData as we upload a file. + """ + #model_endpoint = os.path.join(SKETCHFAB_API_URL, 'models') + + model_endpoint = SKETCHFAB_API_URL + '/models' + + print_message(bpy.context, f"Sketchfab URL is going to be: {model_endpoint}") + + # Optional parameters + name = uploadname + description = 'Uploaded with SimpleBake for Blender 2.8' + #password = 'my-password' # requires a pro account + #private = 1 # requires a pro account + #tags = ['bob', 'character', 'video-games'] # Array of tags + #categories = ['people'] # Array of categories slugs + #license = 'CC Attribution' # License label + isPublished = False, # Model will be on draft instead of published + #isInspectable = True, # Allow 2D view in model inspector + + data = { + 'name': name, + 'description': description, + #'tags': tags, + #'categories': categories, + #'license': license, + #'private': private, + #'password': password, + 'isPublished': isPublished, + 'source': "simplebake-for-blender" + #'isInspectable': isInspectable + } + + f = open(model_file, 'rb') + + files = {'modelFile': f} + + try: + r = requests.post( + model_endpoint, **_get_request_payload(apikey, + data, files=files)) + except requests.exceptions.RequestException as e: + print_message(bpy.context, 'An error occured: {}'.format(e)) + return False + finally: + f.close() + + print_message(bpy.context, f"Status code from Sketchfab was {r.status_code}"); + + if r.status_code != requests.codes.created: + print_message(bpy.context, 'Upload failed with error: {}'.format(r.json())) + return False + + # Should be https://api.sketchfab.com/v3/models/XXXX + model_url = r.headers['Location'] + + #For some reason this is wrong. Correct it here. + return model_url.replace("https://api.sketchfab.com/v3/models/", "https://sketchfab.com/3d-models/") + + diff --git a/scripts/addons/SimpleBake/starting_checks.py b/scripts/addons/SimpleBake/starting_checks.py new file mode 100644 index 0000000..cfab42e --- /dev/null +++ b/scripts/addons/SimpleBake/starting_checks.py @@ -0,0 +1,820 @@ +import bpy +from bpy.types import Operator +from bpy.utils import register_class, unregister_class + +from .utils import show_message_box, clean_file_name, SBConstants, specials_selection_to_list, pbr_selections_to_list, blender_refresh, get_cached_udim_tiles +from .messages import print_message +from .ui.objects_list import refresh_bake_objects_list +from pathlib import Path +from .utils import can_write_to_location +from .bake_operators.pbr_bake_support_operators import has_node_groups, convertable_shaders +from . import __package__ as base_package + + + + +def check_mat_valid_for_displacement(mat_name, obj_name, messages): + + mat = bpy.data.materials.get(mat_name) + if mat == None: + return True + + node_tree = mat.node_tree + nodes = node_tree.nodes + + valid = False + + #groups = [n.name for n in this_node_set if n.bl_idname == "ShaderNodeGroup"] + + #Find our MO node + mo = [n for n in nodes if n.bl_idname == "ShaderNodeOutputMaterial" and n.is_active_output] + assert len(mo)==1, "Couldn't find the Material Output node" + mo = mo[0] + + #Empty is OK + if len(mo.inputs["Displacement"].links)==0: + valid = True + + if len(mo.inputs["Displacement"].links)>0 and not valid: + from_node = mo.inputs["Displacement"].links[0].from_node + + #Check if this is straightforward + if from_node.bl_idname in ["ShaderNodeDisplacement", "ShaderNodeVectorDisplacement"]: + valid = True + + #Maybe it's in a node group + elif from_node.bl_idname == "ShaderNodeGroup": + #Recursive search for the nodes we want + trees = [from_node.node_tree] + for tree in trees: + for node in tree.nodes: + if node.bl_idname == "ShaderNodeGroup": + trees.append(node.node_tree) + continue + + if node.bl_idname in ["ShaderNodeDisplacement", "ShaderNodeVectorDisplacement"]: + if len(node.outputs[0].links)>0: + if node.outputs[0].links[0].to_node.bl_idname == "NodeGroupOutput": + valid = True + if valid: + return True + else: + messages.append(f"ERROR: Baking Displacement map, but material \"{mat_name}\" on object \"{obj_name}\" has an") + messages.append("invalid node plugged into the Material Output displacement socket.") + messages.append("SimpleBake can only bake a single Displacement node or Vector Displacement node") + messages.append("connected to the Displacement socket of the active Material Output node.") + messages.append("If such a node is inside a node group, it must be connected directly to the Group Output node.") + return False + + +def find_shader_node_editor(): + + found_space = False + + for screen in bpy.data.screens: + for area in screen.areas: + if area.type == 'NODE_EDITOR': + for space in area.spaces: + if space.type == 'NODE_EDITOR' and space.tree_type == 'ShaderNodeTree': + found_space = True + break + if found_space: + break + if found_space: + break + + + return found_space + + +def check_for_connected_viewer_node(context, mat): + sbp = context.scene.SimpleBake_Props + + mat.use_nodes = True + + node_tree = mat.node_tree + nodes = node_tree.nodes + #onode = find_onode(node_tree) + + #Get all nodes with label "Viewer" + viewer_nodes = [n for n in nodes if n.label == "Viewer"] + + #Check if any of those viewer nodes are connected to the Material Output + for n in viewer_nodes: + #if n.name == onode.inputs[0].links[0].from_node.name: + if len(n.outputs[0].links)>1: + if n.outputs[0].links[0].to_node.type == "OUTPUT_MATERIAL": + return True + + return False + +def check_mats_valid_for_pbr(context, mat): + prefs = context.preferences.addons[base_package].preferences + skip = prefs.skip_pbr_nodes_check + + allowed_list = convertable_shaders + [ + "ShaderNodeBsdfPrincipled", "ShaderNodeMixShader", + "ShaderNodeEmission", "NodeReroute", "ShaderNodeGroup", + "NodeGroupInput", "NodeGroupOutput"] + + + if skip: + print_message(context, "Skipping check for invalid PBR nodes") + return [] + + sbp = context.scene.SimpleBake_Props + node_sets = [mat.node_tree.nodes] + invalid_node_names = [] + + i = 0 + while i < len(node_sets): + this_node_set = node_sets[i] + + #Find any node groups, and add their node_set to the list + groups = [n.name for n in this_node_set if n.bl_idname == "ShaderNodeGroup"] + for n_name in groups: + if(n:=this_node_set.get(n_name)): + if hasattr(n, "node_tree"): + node_tree = n.node_tree + if hasattr(node_tree, "nodes"): + node_sets.append(n.node_tree.nodes) + + #Now check for offending nodes in this node set + offending = [n for n in this_node_set if + len(n.outputs)>0 and + n.outputs[0].type == "SHADER" and + len(n.outputs[0].links) > 0 and + n.bl_idname not in allowed_list] + for o in offending: + invalid_node_names.append(o.name) + + #Second case, the shader to RGB node + offending = ([n for n in this_node_set if + len(n.outputs)>0 and + len(n.outputs[0].links) > 0 and + n.bl_idname == "ShaderNodeShaderToRGB" + ]) + for o in offending: + invalid_node_names.append(o.name) + + i+=1 + + return invalid_node_names + +def ensure_valid_material_config(context, obj): + + sbp = context.scene.SimpleBake_Props + + if "SimpleBake_Placeholder" in bpy.data.materials: + mat = bpy.data.materials["SimpleBake_Placeholder"] + else: + mat = bpy.data.materials.new("SimpleBake_Placeholder") + bpy.data.materials["SimpleBake_Placeholder"].use_nodes = True + + # Assign it to object + if len(obj.material_slots) > 0: + #Assign it to every empty slot + for slot in obj.material_slots: + if slot.material == None: + slot.material = mat + else: + # no slots + obj.data.materials.append(mat) + + #All materials must use nodes + for slot in obj.material_slots: + mat = slot.material + if mat.use_nodes == False: + mat.use_nodes = True + + return True + + +def ensure_target_object_bake_visibility(obj): + if obj == None: + return + + obj.hide_viewport = False + obj.hide_set(False) + obj.hide_select = False + obj.hide_render = False + + +class SimpleBake_OT_Starting_Checks(Operator): + """Perform pre-bake starting checks""" + bl_idname = "simplebake.starting_checks" + bl_description = "Perform bake starting checks" + bl_label = "Go" + + def universal_checks(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "Universal pre-bake checks") + bake_objects = self.bake_objects + targetobj = self.targetobj + targetobj_cycles = self.targetobj_cycles + messages = [] + + #Universal Checks + if(context.mode != "OBJECT"): + messages.append("ERROR: Not in object mode") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #If exporting, check we can write to the folder given + if sbp.save_bakes_external or sbp.save_obj_external: + path = Path(bpy.path.abspath(sbp.export_path)) + #path = path.parent + if not can_write_to_location(path): + messages.append(f"ERROR: Blender reports that it cannot write to the Export Path you have") + messages.append(f'specified under Export settings') + messages.append(f'CANNOT WRITE TO: "{bpy.path.abspath(str(path))}"') + messages.append(f"Try specifying a different export path") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #Check no cp textures rely on bakes that are no longer enabled + if sbp.global_mode == SBConstants.PBR: + pbr_bakes = pbr_selections_to_list(context) + special_bakes = specials_selection_to_list(context) + bakes = pbr_bakes + special_bakes + bakes.append("none") + def cp_channel_invalid(value): + """Return True if this channel value can't be satisfied by the current bake settings.""" + if value == "none": + return False + if "||" in value: + # Per-material value — only valid when tex_per_mat is on + if not sbp.tex_per_mat: + return True + bake_type = value.split("||", 1)[0] + else: + bake_type = value + return bake_type not in bakes + def cp_display(value): + """Human-readable form of a channel value, safe for the | -delimited message box.""" + return value.replace("||", " - ") + for cpt in sbp.cp_list: + if cp_channel_invalid(cpt.R): + messages.append(f"ERROR: Channel packed texture \"{cpt.name}\" depends on {cp_display(cpt.R)}, but you are no longer baking it") + if cp_channel_invalid(cpt.G): + messages.append(f"ERROR: Channel packed texture \"{cpt.name}\" depends on {cp_display(cpt.G)}, but you are no longer baking it") + if cp_channel_invalid(cpt.B): + messages.append(f"ERROR: Channel packed texture \"{cpt.name}\" depends on {cp_display(cpt.B)}, but you are no longer baking it") + if cp_channel_invalid(cpt.A): + messages.append(f"ERROR: Channel packed texture \"{cpt.name}\" depends on {cp_display(cpt.A)}, but you are no longer baking it") + messages = list(set(messages)) #Remove duplicates + if len(messages) >0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #Is anything seleccted at all for bake? + if len(bake_objects) == 0: + messages.append("ERROR: Nothing in the bake objects list!") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #Check everything selected (or target) is mesh + l = [bpy.data.objects.get(name) for name in bake_objects] + l = [o for o in l if o!=None and o.type != "MESH"] + + if len(l)>0: + ([messages.append(f"ERROR: Object '{obj.name}' is not mesh") for obj in l]) + if sbp.selected_s2a and targetobj != None and targetobj.type != "MESH": + messages.append(f"ERROR: Object '{targetobj.name}' (your target object) is not mesh") + if sbp.cycles_s2a and targetobj_cycles != None and targetobj_cycles.type != "MESH": + messages.append(f"ERROR: Object '{targetobj.name}' (your target object) is not mesh") + if len(messages) > 0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #if sbp.save_bakes_external or sbp.save_obj_external: + #if sbp.save_external_folder != clean_file_name(sbp.save_external_folder): + #message_items = ["ERROR: Folder name can only contain characters that", + #"are valid for the external file system"] + #show_message_box(context, message_items, "ERROR", icon = "ERROR") + #return {'CANCELLED'} + + + #Ensure valid material config + objs = [bpy.data.objects.get(name) for name in bake_objects] + objs = [o for o in objs if o!=None] + for obj in objs: + ensure_valid_material_config(context, obj) + if targetobj!=None: ensure_valid_material_config(context, targetobj) + if targetobj_cycles!=None: ensure_valid_material_config(context, targetobj_cycles) + + #Check object visibility + if len([o for o in context.view_layer.objects if o.type=="MESH"])==0: + messages.append("There must be at least one mesh object visible in the current view layer") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + if sbp.selected_s2a: + ensure_target_object_bake_visibility(sbp.targetobj) + if sbp.cycles_s2a: + ensure_target_object_bake_visibility(sbp.targetobj_cycles) + + obj_test_list = bake_objects.copy() + if sbp.selected_s2a and sbp.targetobj != None: + obj_test_list.append(sbp.targetobj.name) + if sbp.cycles_s2a and sbp.targetobj_cycles != None: + obj_test_list.append(sbp.targetobj_cycles.name) + + for obj_name in obj_test_list: + if (o:=bpy.data.objects.get(obj_name)): + if o.hide_viewport == True: + messages.append(f"Object '{o.name}' is hidden in viewport (monitor icon in outliner)") + if o.hide_render == True: + messages.append(f"Object '{o.name}' is hidden for render (camera icon in outliner)") + if o.hide_get() == True: + messages.append(f"Object '{o.name}' is hidden in viewport eye (eye icon in outliner)") + if o.hide_select == True: + messages.append(f"Object '{o.name}' is hidden for selection (arrow icon in outliner)") + + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #None of the objects can have zero faces + for obj_name in bake_objects: + o = bpy.data.objects.get(obj_name) + if o!= None and len(o.data.polygons) < 1: messages.append(f"ERROR: Object '{o.name}' has no faces") + if sbp.selected_s2a and targetobj != None: + if len(targetobj.data.polygons) < 1: messages.append(f"ERROR: Object '{targetobj.name}' has no faces") + if sbp.cycles_s2a and targetobj_cycles != None: + if len(targetobj_cycles.data.polygons) < 1: messages.append(f"ERROR: Object '{targetobj_cycles.name}' has no faces") + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #Check for viewer nodes still connected + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + mat = slot.material + if mat != None: #It'll get a placeholder material later on if it's none + if check_for_connected_viewer_node(context, mat): + messages.append(f"ERROR: Material '{mat.name}' on object '{o.name}' has a Viewer node connected to the Material Output") + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #glTF + if sbp.create_glTF_node: + if sbp.glTF_selection == SBConstants.AO and not sbp.selected_ao: + messages.append(f"ERROR: You have selected AO for glTF settings (in the 'Other Settings' section), but you aren't baking AO") + if sbp.glTF_selection == SBConstants.LIGHTMAP and not sbp.selected_lightmap: + messages.append(f"ERROR: You have selected Lightmap for glTF settings (in the 'Other Settings' section), but you aren't baking Lightmap") + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + prefs = context.preferences.addons[__package__].preferences + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + if o.name != clean_file_name(o.name) and sbp.save_bakes_external and "%OBJ%" in prefs.img_name_format: + messages.append(f"ERROR: You are trying to save external images, but object with name \"{o.name}\" contains invalid characters for saving externally.") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #Merged bake checks + if sbp.merged_bake and sbp.merged_bake_name == "": + messages.append(f"ERROR: You are baking multiple objects to one texture set, but the texture name is blank") + if (sbp.merged_bake_name != clean_file_name(sbp.merged_bake_name)) and sbp.save_bakes_external: + messages.append(f"ERROR: The texture name you inputted for baking multiple objects to one texture set (\"{sbp.merged_bake_name}\") contains invalid characters for saving externally.") + + if sbp.merged_bake: + if sbp.selected_s2a or sbp.cycles_s2a: + if sbp.s2a_opmode!="automatch": + messages.append("You can't use the Bake Multiple Objects to One Texture Set option when baking to target") + + #Export bakes checkes + if (sbp.save_bakes_external or sbp.save_obj_external) and sbp.export_path == "": + messages.append(f"You are saving your bakes and/or mesh externally, but your " + "Export Path (under the Export settings section) is blank") + + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + # Background bake + UDIMs requires external save to be enabled + if sbp.bgbake == "bg" and not sbp.save_bakes_external: + if sbp.selected_s2a: + udim_check_objects = [targetobj.name] if targetobj else [] + elif sbp.cycles_s2a: + udim_check_objects = [targetobj_cycles.name] if targetobj_cycles else [] + else: + udim_check_objects = list(bake_objects) + + for obj_name in udim_check_objects: + result = get_cached_udim_tiles(context, obj_name, threshold=0.001) + if result["total_tiles"] > 1: + messages.append("ERROR: Bake objects have UDIMs. Background baking with UDIMs") + messages.append('requires "Export Bakes" to be enabled in the Export settings.') + show_message_box(context, messages, "Errors occurred", icon='ERROR') + return {'CANCELLED'} + + return {'FINISHED'} + + def pbr_no_s2a_checks(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "PBR no S2A pre-bake checks") + bake_objects = self.bake_objects + targetobj = self.targetobj + targetobj_cycles = self.targetobj_cycles + messages = [] + + #Check if we have a shader node editor to use_nodes + ngs = False + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + if slot.material != None: + ngs = has_node_groups(context, slot.material.name) + break + if ngs: + break + if ngs and not find_shader_node_editor(): + messages.append(f"Some or all of your materials have node groups. To process node groups, SimpleBake needs there") + messages.append(f"to be a Shader Node Editor open somewhere in one of your Blender workspaces. You don't seem to have") + messages.append(f"one open anywhere! Open a Shader Node Editor (as if you were editing a material) somewhere in one of") + messages.append(f"your Blender workspaces, then try again") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #If baking displacement, do all materials meet the rules + if sbp.selected_displacement: + mats = {} + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + if slot.material != None: + mats[obj_name] = slot.material.name + for m in mats: + if not check_mat_valid_for_displacement(mats[m], m, messages): + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + for obj_name in bake_objects: + + if not (o:=bpy.data.objects.get(obj_name)): + break + + #Are UVs OK? + generating_uvs = sbp.new_uv_option or (sbp.tex_per_mat and sbp.expand_mat_uvs) + if not generating_uvs and len(o.data.uv_layers) == 0: + messages.append(f"ERROR: Object {o.name} has no UVs, and you aren't generating new ones") + + if sbp.new_uv_option and sbp.new_uv_method=='CombineExisting' and len(o.data.uv_layers) == 0: + messages.append(f"ERROR: You are combining existing UVs, but object {o.name} has no UVs") + + + #Do all materials have valid PBR config? + for slot in o.material_slots: + mat = slot.material + result = check_mats_valid_for_pbr(context, mat) + warn = False + if len(result) > 0: + for node_name in result: + messages.append(f"ERROR: Node '{node_name}' in material '{mat.name}' on object '{o.name}' is not valid for PBR bake. Principled BSDFs and/or Emission only!") + warn = True + if warn: + messages.append("NOTE: There is an option to disable this check in the SimpleBake addon preferences, but it is not recommended. Baking PBR with nodes that are not PBR compatible may give unexpected results, Black bakes or even CRASHES!") + + #Checked for invalid nodes, now let's check for just absent any useful nodes: + else: + + #Do all materials have at least one material output node? + for slot in o.material_slots: + mat = slot.material + mos = [node for node in mat.node_tree.nodes if node.bl_idname == "ShaderNodeOutputMaterial"\ + and len(node.inputs[0].links)>0] + if len(mos) == 0: + messages.append(f"ERROR: Material '{mat.name}' on object '{o.name}' is broken. Must have at least one Material Output node that's plugged in!") + + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + return {'FINISHED'} + + def pbr_s2a_checks(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "PBR S2A pre-bake checks") + bake_objects = self.bake_objects + targetobj = self.targetobj + targetobj_cycles = self.targetobj_cycles + messages = [] + + ngs = False + for obj_name in bake_objects: + if(o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + if slot.material != None: + ngs = has_node_groups(context, slot.material.name) + break + if ngs: + break + if ngs and not find_shader_node_editor(): + messages.append(f"Some or all of your materials have node groups. To process node groups, SimpleBake needs there") + messages.append(f"to be a Shader Node Editor open somewhere in one of your Blender workspaces. You don't seem to have") + messages.append(f"one open anywhere! Open a Shader Node Editor (as if you were editing a material) somewhere in one of") + messages.append(f"your Blender workspaces, then try again") + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + + #Do all materials have valid PBR config? + warn = False + for obj_name in bake_objects: + if(o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + mat = slot.material + result = check_mats_valid_for_pbr(context, mat) + if len(result) > 0: + for node_name in result: + messages.append(f"ERROR: Node '{node_name}' in material '{mat.name}' on object '{o.name}' is not valid for PBR bake. Principled BSDFs and/or Emission only!") + warn = True + if warn: + messages.append("NOTE: There is an option to disable this check in the SimpleBake addon preferences, but it is not recommended. Baking PBR with nodes that are not PBR compatible may give unexpected results, Black bakes or even CRASHES!") + + #Checked for invalid nodes, now let's check for just absent any useful nodes: + else: + #Do all materials have at least one material output node? + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + mat = slot.material + mos = [node for node in mat.node_tree.nodes if node.bl_idname == "ShaderNodeOutputMaterial"\ + and len(node.inputs[0].links)>0] + if len(mos) == 0: + messages.append(f"ERROR: Material '{mat.name}' on object '{o.name}' is broken. Must have at least one Material Output node that's plugged in!") + + #Checks for baking displacement + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + for slot in o.material_slots: + if slot.material!=None: + mat = slot.material + if not check_mat_valid_for_displacement(mat.name, o.name, messages): + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + if len(messages)>0: + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + return {'CANCELLED'} + + #From this point onward, we only care about the target object + #------------------------------------------------------------------------- + + #Do we have a target object? + if targetobj == None: + messages.append("ERROR: You are trying to bake to a target object with PBR Bake, but you have not selected one in the SimpleBake panel") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + #If declas, need to do the displacement check again as the target object materials get baked + for slot in targetobj.material_slots: + if slot.material!=None: + mat = slot.material + if not check_mat_valid_for_displacement(mat.name, targetobj.name, messages): + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + + #Have we got more selected than just the target object? + if len(bake_objects) == 1 and bake_objects[0] == targetobj.name: + messages.append("ERROR: You are trying to bake to a target object, but the only object you have selected is your target") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + #If the target object is in the bake objects list, remove it now + i = sbp.objects_list.find(targetobj.name) + if i>-1: sbp.objects_list.remove(i) + + #Are UVs OK? + if sbp.new_uv_option == False and len(targetobj.data.uv_layers) == 0: + messages.append(f"ERROR: Object {targetobj.name} has no UVs, and you aren't generating new ones") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + #All existing materials must use nodes + for slot in targetobj.material_slots: + if slot.material != None: + if not slot.material.use_nodes: + slot.material.use_nodes = True + + return {'FINISHED'} + + + def cyclesbake_no_s2a_checks(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "CyclesBake no S2A pre-bake checks") + bake_objects = self.bake_objects + targetobj = self.targetobj + targetobj_cycles = self.targetobj_cycles + messages = [] + + + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + #Are UVs OK? + if not sbp.tex_per_mat: + if sbp.new_uv_option == False and len(o.data.uv_layers) == 0: + messages.append(f"ERROR: Object {o.name} has no UVs, and you aren't generating new ones") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + if sbp.new_uv_option and sbp.new_uv_method=='CombineExisting' and len(o.data.uv_layers) == 0: + messages.append(f"ERROR: You are combining existing UVs, but object {o.name} has no UVs") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + else: + if sbp.expand_mat_uvs == False and len(o.data.uv_layers) == 0: + messages.append(f"ERROR: Object {o.name} has no UVs, and you aren't generating new ones") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + return {'FINISHED'} + + def cyclesbake_s2a_checks(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "CyclesBake S2A pre-bake checks") + bake_objects = self.bake_objects + targetobj = self.targetobj + targetobj_cycles = self.targetobj_cycles + messages = [] + + #Do we actually have a target object? + if targetobj_cycles == None: + messages.append(f"ERROR: You are trying to bake to target with CyclesBake, but there is no target object selected on the SimpleBake panel") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + #Have we got more selected than just the target object? + elif len(bake_objects) == 1 and bake_objects[0] == targetobj_cycles.name: + messages.append("ERROR: You are trying to bake selected to active with CyclesBake, but the only object you have selected is your active (target) object") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + #If the target object is in the bake objects list, remove it now + i = sbp.objects_list.find(targetobj_cycles.name) + if i>-1: sbp.objects_list.remove(i) + + #Are UVs OK? + elif not sbp.new_uv_option and len(targetobj_cycles.data.uv_layers) == 0: + messages.append(f"ERROR: Object {targetobj_cycles.name} has no UVs, and you aren't generating new ones") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + + return {'FINISHED'} + + def specials_checks(self, context): + sbp = context.scene.SimpleBake_Props + print_message(context, "Specials pre-bake checks") + bake_objects = self.bake_objects + targetobj = self.targetobj + targetobj_cycles = self.targetobj_cycles + messages = [] + + if sbp.selected_col_vertex: + + if not sbp.selected_s2a and not sbp.cycles_s2a: + for obj_name in bake_objects: + if (o:=bpy.data.objects.get(obj_name)): + if len(o.data.color_attributes) == 0: + messages.append(f"You are trying to bake the active vertex colours, but object {o.name} doesn't have vertex colours") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + if sbp.cycles_s2a or sbp.selected_s2a: + if sbp.selected_s2a: target_obj = sbp.targetobj + else: target_obj = sbp.targetobj_cycles + target_obj_name = target_obj.name + + obj_names = [o.obj_point.name for o in sbp.objects_list] + if target_obj_name in obj_names: + obj_names.remove(target_obj_name) + + for o_name in obj_names: + if(o:=context.scene.objects.get(o_name)): + if len(o.data.color_attributes) == 0: + messages.append(f"You are trying to bake the active vertex colours, but object {o.name} doesn't have vertex colours") + if len(messages)>0: + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + return {'FINISHED'} + + def image_sequence_checks(self,context): + sbp = context.scene.SimpleBake_Props + print_message(context, "Image sequence pre-bake checks") + messages = [] + if not sbp.image_sequence_start_frame < sbp.image_sequence_end_frame: + messages.append("When baking an image sequence, the starting frame must be before the end frame. Change this in the Other Settings section of SimpleBake") + show_message_box(context, messages, "Errors occured", "ERROR") + return {'CANCELLED'} + + return {'FINISHED'} + + + + def execute(self, context): + blender_refresh() + sbp = context.scene.SimpleBake_Props + refresh_bake_objects_list(context) + #disable_impossible(context) + + #sbp.bake_done = False + + #Get objects + self.bake_objects = [i.name for i in sbp.objects_list] + self.targetobj = sbp.targetobj + self.targetobj_cycles = sbp.targetobj_cycles + + print_message(context, "Starting checks operator") + + + + #Universal checks + r = self.universal_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + #PBR Bake Checks - No S2A + if sbp.global_mode == SBConstants.PBR and not sbp.selected_s2a: + r = self.pbr_no_s2a_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + #PBR Bake - S2A + if sbp.global_mode == SBConstants.PBR and sbp.selected_s2a: + r = self.pbr_s2a_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + #If decals, need to do a normal PBR check on the target object + if sbp.s2a_opmode == "decals": + self.bake_objects= [sbp.targetobj.name] + r = self.pbr_no_s2a_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + + #CyclesBake - no S2A + if sbp.global_mode == SBConstants.CYCLESBAKE and not sbp.cycles_s2a: + r = self.cyclesbake_no_s2a_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + #CyclesBake - S2A + if sbp.global_mode == SBConstants.CYCLESBAKE and sbp.cycles_s2a: + r = self.cyclesbake_s2a_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + #Specials + if len(specials_selection_to_list(context)) >0: + r = self.specials_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + #Image sequence + if sbp.image_sequence_enabled: + r = self.image_sequence_checks(context) + if 'CANCELLED' in r: return{'CANCELLED'} + + + #Fix that weird context incorrect error + #Selected object at start must be something and must be mesh + #Find a nominal object that is a mesh and in the current view layer + if context.active_object == None or context.active_object.type != "MESH": + nominal = None + for o in context.view_layer.objects: + if o.type == "MESH": + nominal = o + break + assert(nominal!=None) + + bpy.ops.simplebake.select_only_this(object_name=nominal.name) + + + #Guess everything was OK + return {'FINISHED'} + + +""" + #Specials Bake + #CAGE OBJECT BROKEN? CHECK IF NOT NONE AND, IF NOT, FLIP THE SWITdisable_impossibleCH TO USE CAGE + +""" + + +classes = ([ + SimpleBake_OT_Starting_Checks + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/__init__.py b/scripts/addons/SimpleBake/ui/__init__.py new file mode 100644 index 0000000..87cf05c --- /dev/null +++ b/scripts/addons/SimpleBake/ui/__init__.py @@ -0,0 +1,34 @@ +from . import panel +from . import panel_operators +from . import objects_list +from . import channel_packing_list +from . import preferences +from . import presets_list +from . import presets_list_local +from . import object_uvs_list +from . import panel_helpers +from . import node_bake_panel + +def register(): + objects_list.register() + panel.register() + panel_operators.register() + channel_packing_list.register() + preferences.register() + presets_list.register() + presets_list_local.register() + object_uvs_list.register() + panel_helpers.register() + node_bake_panel.register() + +def unregister(): + objects_list.unregister() + panel.unregister() + panel_operators.unregister() + channel_packing_list.unregister() + preferences.unregister() + presets_list.unregister() + presets_list_local.unregister() + object_uvs_list.unregister() + panel_helpers.unregister() + node_bake_panel.unregister() diff --git a/scripts/addons/SimpleBake/ui/channel_packing_list.py b/scripts/addons/SimpleBake/ui/channel_packing_list.py new file mode 100644 index 0000000..fa0883c --- /dev/null +++ b/scripts/addons/SimpleBake/ui/channel_packing_list.py @@ -0,0 +1,154 @@ +import bpy +from bpy.types import Operator, UIList +from bpy.utils import register_class, unregister_class + +from ..utils import SBConstants, clean_file_name + +class SIMPLEBAKE_UL_CPTexList(UIList): + """UIList.""" + + def draw_item(self, context, layout, data, item, icon, active_data, + active_propname, index): + + # We could write some code to decide which icon to use here... + custom_icon = 'NODE_COMPOSITING' + + # Make sure your code supports all 3 layout types + if self.layout_type in {'DEFAULT', 'COMPACT'}: + layout.label(text=item.name, icon = custom_icon) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text="", icon = custom_icon) + + +class SimpleBake_OT_cptex_add(Operator): + """Add a SimpleBake CP Texture item""" + bl_idname = "simplebake.cptex_add" + bl_label = "Add" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + return sbp.cp_name != "" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + cp_list = sbp.cp_list + name = clean_file_name(sbp.cp_name) + + if name in cp_list: + #Delete it + index = sbp.cp_list.find(name) + sbp.cp_list.remove(index) + + li = cp_list.add() + li.name = name + + li.R = sbp.cptex_R + li.G = sbp.cptex_G + li.B = sbp.cptex_B + li.A = sbp.cptex_A + li.file_format = sbp.channelpackfileformat + li.exr_codec = sbp.exr_codec_cpts + li.png_compression = sbp.png_compression + + sbp.cp_list_index = sbp.cp_list.find(name) + + self.report({"INFO"}, "CP texture saved") + return {'FINISHED'} + +class SimpleBake_OT_cptex_delete(Operator): + """Delete the selected channel pack texture""" + bl_idname = "simplebake.cptex_delete" + bl_label = "Delete" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + try: + sbp.cp_list[sbp.cp_list_index].name + return True + except: + return False + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + sbp.cp_list.remove(sbp.cp_list_index) + + self.report({"INFO"}, "CP texture deleted") + return {'FINISHED'} + +class SimpleBake_OT_cptex_set_defaults(Operator): + """Add some example channel pack textures""" + bl_idname = "simplebake.cptex_set_defaults" + bl_label = "Add examples" + + @classmethod + def poll(cls,context): + return True + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + cp_list = sbp.cp_list + + #Unity Lit shader. R=metalness, G=AO, B=N/A, A=Glossy. + li = cp_list.add() + li.name = "Unity Lit Shader" + li.file_format = "OPEN_EXR" + li.R = "Metalness" + li.G = SBConstants.AO + li.B = "none" + li.A = "Glossiness" + + #Unity Legacy Standard Diffuse. RGB=diffuse, A=alpha. + li = cp_list.add() + li.name = "Unity Legacy Shader" + li.file_format = "OPEN_EXR" + li.R = "Diffuse" + li.G = "Diffuse" + li.B = "Diffuse" + li.A = "Alpha" + + #ORM format. R=AO, G=Roughness, B=Metalness, A=N/A. + li = cp_list.add() + li.name = "ORM" + li.file_format = "OPEN_EXR" + li.R = SBConstants.AO + li.G = "Roughness" + li.B = "Metalness" + li.A = "none" + + #diffuse plus specular in the alpha channel. + li = cp_list.add() + li.name = "Diffuse and Spec in alpha" + li.file_format = "OPEN_EXR" + li.R = "Diffuse" + li.G = "Diffuse" + li.B = "Diffuse" + li.A = "Specular" + + + self.report({"INFO"}, "Default textures added") + return {'FINISHED'} + + + +classes = ([ + SIMPLEBAKE_UL_CPTexList, + SimpleBake_OT_cptex_add, + SimpleBake_OT_cptex_delete, + SimpleBake_OT_cptex_set_defaults + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/node_bake_panel.py b/scripts/addons/SimpleBake/ui/node_bake_panel.py new file mode 100644 index 0000000..8f5d9bb --- /dev/null +++ b/scripts/addons/SimpleBake/ui/node_bake_panel.py @@ -0,0 +1,410 @@ +import bpy +from bpy.types import Panel, Operator, PropertyGroup +from bpy.props import StringProperty, IntProperty, BoolProperty, EnumProperty, PointerProperty +from bpy.utils import register_class, unregister_class + +# Module-level caches prevent enum item lists being garbage-collected mid-draw, +# which would crash Blender when dynamic EnumProperty items are used. +_socket_items_cache = [('0', 'Select a node', '', 0)] +_uv_items_cache = [('__active__', '(Active UV)', '', 0)] + + +def _get_socket_items(self, context): + global _socket_items_cache + + node = getattr(context, 'active_node', None) if context else None + if node is None: + _socket_items_cache = [('0', 'Select a node', '', 0)] + return _socket_items_cache + + items = [] + for i, socket in enumerate(node.outputs): + if (socket.bl_idname not in ('NodeSocketShader', 'NodeSocketVirtual') + and not socket.hide + and socket.enabled): + items.append((str(i), socket.name, socket.name, len(items))) + + if not items: + _socket_items_cache = [('0', 'No bakeable outputs', '', 0)] + return _socket_items_cache + + _socket_items_cache = items + return _socket_items_cache + + +def _get_uv_items(self, context): + global _uv_items_cache + obj = context.active_object if context else None + items = [('__active__', '(Active UV)', 'Use whichever UV map is currently active on the object', 0)] + if obj and obj.type == 'MESH': + for i, layer in enumerate(obj.data.uv_layers): + items.append((layer.name, layer.name, layer.name, i + 1)) + _uv_items_cache = items + return _uv_items_cache + + +class SimpleBakeNodeBakeProps(PropertyGroup): + socket: EnumProperty( + name="Socket", + description="Output socket to bake", + items=_get_socket_items, + ) + image_name: StringProperty( + name="Image Name", + default="NodeBake", + description="Name for the baked image in the blend file", + ) + width: IntProperty(name="Width", default=1024, min=1, max=16384) + height: IntProperty(name="Height", default=1024, min=1, max=16384) + float_buffer: BoolProperty( + name="32-bit Float", + default=False, + description="Use a 32-bit float image buffer (higher precision, larger memory footprint)", + ) + uv_map: EnumProperty( + name="UV Map", + description="UV map to bake to. Defaults to whichever map is currently active on the object", + items=_get_uv_items, + ) + replace_with_image: BoolProperty( + name="Replace with Image Texture", + default=False, + description=( + "After baking, insert an Image Texture node and reconnect it " + "to wherever this socket was feeding" + ), + ) + + +def _find_active_mat_output(nodes): + """Return the active Material Output node, or any Material Output, or None.""" + active = next((n for n in nodes if n.bl_idname == 'ShaderNodeOutputMaterial' and n.is_active_output), None) + if active: + return active + return next((n for n in nodes if n.bl_idname == 'ShaderNodeOutputMaterial'), None) + + +class SIMPLEBAKE_OT_NodeBake(Operator): + bl_idname = "simplebake.node_bake" + bl_label = "Bake Node Output" + bl_description = ( + "Bake the selected output socket of the active node to an image texture. " + "The render engine is temporarily switched to Cycles for baking" + ) + + @classmethod + def poll(cls, context): + sd = getattr(context, 'space_data', None) + if sd is None or sd.type != 'NODE_EDITOR': + return False + if sd.tree_type != 'ShaderNodeTree': + return False + if context.active_object is None: + return False + node = context.active_node + if node is None: + return False + return any( + s.bl_idname not in ('NodeSocketShader', 'NodeSocketVirtual') + for s in node.outputs + ) + + # ------------------------------------------------------------------ + # Material helpers + # ------------------------------------------------------------------ + + def _silence_material(self, mat): + """ + Temporarily wire a zero-emission shader into mat's Material Output so + it contributes nothing to an EMIT bake. Returns a restore tuple. + """ + nt = mat.node_tree + mat_out = _find_active_mat_output(nt.nodes) + if mat_out is None: + return None + + orig = mat_out.inputs['Surface'].links[0].from_socket if mat_out.inputs['Surface'].is_linked else None + + emit = nt.nodes.new('ShaderNodeEmission') + emit.inputs['Color'].default_value = (0.0, 0.0, 0.0, 1.0) + emit.inputs['Strength'].default_value = 0.0 + nt.links.new(emit.outputs['Emission'], mat_out.inputs['Surface']) + + return (nt, mat_out, emit, orig) + + def _restore_material(self, restore_data): + if restore_data is None: + return + nt, mat_out, emit_node, orig_socket = restore_data + nt.nodes.remove(emit_node) + if orig_socket is not None: + nt.links.new(orig_socket, mat_out.inputs['Surface']) + + # ------------------------------------------------------------------ + # Operator execute + # ------------------------------------------------------------------ + + def execute(self, context): + props = context.scene.SimpleBakeNodeBake + space = context.space_data + node = context.active_node + node_location = (node.location[0], node.location[1]) + + # Must be at the root of the node tree, not inside a group + if space.edit_tree is not space.node_tree: + self.report({'ERROR'}, "Exit the node group before baking") + return {'CANCELLED'} + + mat = space.id + if not isinstance(mat, bpy.types.Material): + self.report({'ERROR'}, "Could not determine the active material") + return {'CANCELLED'} + + obj = context.active_object + mat_names = {s.material.name for s in obj.material_slots if s.material} + if mat.name not in mat_names: + self.report({'ERROR'}, f"'{mat.name}' is not assigned to the active object") + return {'CANCELLED'} + + if not obj.data.uv_layers: + self.report({'ERROR'}, "The active object has no UV map — add one before baking") + return {'CANCELLED'} + + # Activate the chosen UV map, remember original to restore later + chosen_uv = props.uv_map + orig_uv_index = obj.data.uv_layers.active_index + if chosen_uv != '__active__': + idx = next((i for i, l in enumerate(obj.data.uv_layers) if l.name == chosen_uv), None) + if idx is None: + self.report({'ERROR'}, f"UV map '{chosen_uv}' not found on object") + return {'CANCELLED'} + obj.data.uv_layers.active_index = idx + + # Resolve the target socket + socket_idx = int(props.socket) + if socket_idx >= len(node.outputs): + self.report({'ERROR'}, "Socket index out of range — refresh by reselecting the node") + return {'CANCELLED'} + target_socket = node.outputs[socket_idx] + if target_socket.bl_idname in ('NodeSocketShader', 'NodeSocketVirtual'): + self.report({'ERROR'}, "Cannot bake a Shader or Virtual socket") + return {'CANCELLED'} + + # Remember downstream links for the optional reconnect. + # Store names/identifiers rather than live Python wrapper references — + # those can become stale after node tree modifications during the bake. + downstream = [(lnk.to_node.name, lnk.to_socket.identifier) for lnk in target_socket.links] + + # Create the output image + image_name = props.image_name.strip() or f"{node.name}_{target_socket.name}" + existing = bpy.data.images.get(image_name) + if existing: + bpy.data.images.remove(existing) + image = bpy.data.images.new( + image_name, + width=props.width, + height=props.height, + alpha=False, + float_buffer=props.float_buffer, + ) + + # --- Set up the target material --- + nt = mat.node_tree + nodes = nt.nodes + links = nt.links + + mat_out = _find_active_mat_output(nodes) + created_mat_out = False + if mat_out is None: + mat_out = nodes.new('ShaderNodeOutputMaterial') + mat_out.location = (300.0, 300.0) + created_mat_out = True + + orig_surface = mat_out.inputs['Surface'].links[0].from_socket if mat_out.inputs['Surface'].is_linked else None + + # Temporary nodes + emit_node = nodes.new('ShaderNodeEmission') + emit_node.location = (mat_out.location[0] - 220, mat_out.location[1] - 80) + + img_node = nodes.new('ShaderNodeTexImage') + img_node.name = "SB_NodeBake_Image" + img_node.image = image + img_node.location = (mat_out.location[0] - 420, mat_out.location[1] - 160) + + # Make img_node the active image node (Cycles writes bake output here) + for n in nodes: + n.select = False + img_node.select = True + nodes.active = img_node + + links.new(target_socket, emit_node.inputs['Color']) + links.new(emit_node.outputs['Emission'], mat_out.inputs['Surface']) + + # --- Silence all other materials so they don't pollute the EMIT bake --- + silence_restores = [] + for slot in obj.material_slots: + if slot.material and slot.material.name != mat.name: + rd = self._silence_material(slot.material) + if rd: + silence_restores.append(rd) + + # --- Save scene state --- + orig_engine = context.scene.render.engine + orig_active_obj = context.view_layer.objects.active + orig_selected = list(context.selected_objects) + orig_mode = context.mode + + # Configure for bake + context.scene.render.engine = 'CYCLES' + for o in list(context.selected_objects): + o.select_set(False) + obj.select_set(True) + context.view_layer.objects.active = obj + + if orig_mode != 'OBJECT': + bpy.ops.object.mode_set(mode='OBJECT') + + # --- Bake --- + success = False + try: + bpy.ops.object.bake(type='EMIT', use_clear=True) + success = True + except Exception as exc: + self.report({'ERROR'}, f"Bake failed: {exc}") + + # --- Restore UV map --- + obj.data.uv_layers.active_index = orig_uv_index + + # --- Restore scene state --- + context.scene.render.engine = orig_engine + context.view_layer.objects.active = orig_active_obj + for o in orig_selected: + try: + o.select_set(True) + except Exception: + pass + + # --- Restore silenced materials --- + for rd in silence_restores: + self._restore_material(rd) + + # --- Restore target material --- + nodes.remove(emit_node) + if created_mat_out: + nodes.remove(mat_out) + elif orig_surface is not None: + links.new(orig_surface, mat_out.inputs['Surface']) + + # --- Handle image node --- + # Always remove the bake-helper image node — it was only needed for Cycles + # to know where to write the result. If replacing, a fresh node is created + # below at the correct position, avoiding any stale Python wrapper issues. + bake_helper = nodes.get("SB_NodeBake_Image") or img_node + nodes.remove(bake_helper) + + if not success: + bpy.data.images.remove(image) + return {'CANCELLED'} + + if props.replace_with_image: + final_node = nodes.new('ShaderNodeTexImage') + final_node.image = image + final_node.parent = node.parent + + image_node_height = max( + float(getattr(final_node, "height", 0.0) or 0.0), + float(final_node.dimensions[1] or 0.0), + ) + if image_node_height <= 0.0: + image_node_height = 260.0 + final_node.location = (node_location[0], node_location[1] + image_node_height + 80.0) + + if chosen_uv != '__active__': + uv_node = nodes.new('ShaderNodeUVMap') + uv_node.uv_map = chosen_uv + uv_node.parent = final_node.parent + uv_node.location = (final_node.location[0] - 220, final_node.location[1] - 100) + links.new(uv_node.outputs['UV'], final_node.inputs['Vector']) + + for node_name, sock_id in downstream: + to_node = nodes.get(node_name) + if to_node is None: + continue + to_socket = next((s for s in to_node.inputs if s.identifier == sock_id), None) + if to_socket is not None: + links.new(final_node.outputs['Color'], to_socket) + + self.report({'INFO'}, f"Baked '{target_socket.name}' → '{image_name}'") + return {'FINISHED'} + + +class SIMPLEBAKE_PT_NodeBake(Panel): + bl_label = "Node Bake" + bl_idname = "SIMPLEBAKE_PT_NodeBake" + bl_space_type = 'NODE_EDITOR' + bl_region_type = 'UI' + bl_category = "SimpleBake" + + @classmethod + def poll(cls, context): + sd = context.space_data + return ( + sd.type == 'NODE_EDITOR' + and sd.tree_type == 'ShaderNodeTree' + and context.active_object is not None + ) + + def draw(self, context): + layout = self.layout + props = context.scene.SimpleBakeNodeBake + node = context.active_node + + if node is None: + layout.label(text="Select a node to bake", icon='INFO') + return + + valid_outputs = [ + s for s in node.outputs + if s.bl_idname not in ('NodeSocketShader', 'NodeSocketVirtual') + ] + if not valid_outputs: + layout.label(text="No bakeable outputs on this node", icon='ERROR') + return + + layout.label(text=node.name, icon='NODE') + + layout.prop(props, "socket") + layout.prop(props, "uv_map") + layout.prop(props, "image_name") + + row = layout.row(align=True) + row.prop(props, "width", text="W") + row.prop(props, "height", text="H") + + layout.prop(props, "float_buffer") + layout.prop(props, "replace_with_image") + + layout.separator() + + row = layout.row() + row.scale_y = 1.4 + row.operator("simplebake.node_bake", text="Bake Node Output", icon='RENDER_STILL') + + +classes = [ + SimpleBakeNodeBakeProps, + SIMPLEBAKE_OT_NodeBake, + SIMPLEBAKE_PT_NodeBake, +] + + +def register(): + for cls in classes: + register_class(cls) + bpy.types.Scene.SimpleBakeNodeBake = PointerProperty(type=SimpleBakeNodeBakeProps) + + +def unregister(): + del bpy.types.Scene.SimpleBakeNodeBake + for cls in reversed(classes): + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/object_uvs_list.py b/scripts/addons/SimpleBake/ui/object_uvs_list.py new file mode 100644 index 0000000..efd970e --- /dev/null +++ b/scripts/addons/SimpleBake/ui/object_uvs_list.py @@ -0,0 +1,130 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, PropertyGroup, UIList +from bpy.props import EnumProperty, StringProperty, BoolProperty + + +class SIMPLEBAKE_UL_UVItems(UIList): + """Rows: object name + dropdown of its UV maps (edit-active selector)""" + bl_idname = "SIMPLEBAKE_UL_UVItems" + + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + sbp = context.scene.SimpleBake_Props + # data == SimpleBake_Props; item == SimpleBakeUVItem + #ob = bpy.data.objects.get(item.object_name) + ob = bpy.data.objects.get(item.name) + row = layout.row(align=True) + + sb_uvl = next((l for l in ob.data.uv_layers if l.name=="SimpleBake"), None) if ob and ob.type == 'MESH' else None + + # Object name + row.label( + #text=item.object_name or "", + text=item.name or "", + icon='UV_EDGESEL' if (ob and getattr(ob, "type", "") == 'MESH') else 'OBJECT_DATA' + ) + + # UV dropdown (prop_search over ob.data.uv_layers) + if sbp.prefer_existing_sbmap and sb_uvl: + row.label(text="SimpleBake (Locked)") + row.enabled = False + + + elif ob and ob.type == 'MESH' and getattr(ob.data, "uv_layers", None) and len(ob.data.uv_layers) > 0: + row.prop_search( + item, "uv_name", + ob.data, "uv_layers", + text="" + ) + else: + row.label(text="(no UV maps)", icon='ERROR') + +def sb_uvlist_sync_from_bake_list(context): + sc = context.scene + sbp = sc.SimpleBake_Props + + sbp.uv_items.clear() + + obj_names = [o.name for o in sbp.objects_list if bpy.data.objects.get(o.name)] + for name in obj_names: + ob = bpy.data.objects[name] + it = sbp.uv_items.add() + #it.object_name = name + it.name = name + + me = getattr(ob, "data", None) + if not me or not getattr(me, "uv_layers", None) or len(me.uv_layers) == 0: + it.uv_name = "" + continue + + # Current EDIT-active — use active_index (reliable in Blender 5.0); + # l.active getter is not reliably updated after setting active_index. + active_idx = getattr(me.uv_layers, "active_index", 0) + if not (0 <= active_idx < len(me.uv_layers)): + active_idx = 0 + it.uv_name = me.uv_layers[active_idx].name + + # keep index in range + sbp.uv_items_index = min(max(0, sbp.uv_items_index), max(0, len(sbp.uv_items)-1)) + +class SIMPLEBAKE_OT_SyncUVList(Operator): + bl_idname = "simplebake.sync_uv_list" + bl_label = "Synchronise Bake UV List" + bl_description = "Populate/refresh the list of bake objects and their UV maps" + + def execute(self, context): + sb_uvlist_sync_from_bake_list(context) + #self.report({'INFO'}, "Bake UV list synchronised") + return {'FINISHED'} + +# Helper (optional) +def _first_uv_name(ob: bpy.types.Object) -> str: + me = getattr(ob, "data", None) + if not me or not getattr(me, "uv_layers", None) or len(me.uv_layers) == 0: + return "" + return me.uv_layers[0].name + + + +class SIMPLEBAKE_OT_UVSetAllName(Operator): + """Attempt to set all edit active UVs of bake objects to the UV map name selected on the panel""" + bl_idname = "simplebake.uv_set_all_name" + bl_label = "Set all" + + + @classmethod + def poll(self, context): + sbp = context.scene.SimpleBake_Props + if sbp.available_uv_maps in ["","None"]: + return False + else: + return True + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + if not getattr(sbp, "uv_items", None): + return {'CANCELLED'} + + for i in sbp.uv_items: + i.uv_name = sbp.available_uv_maps + + return {'FINISHED'} + + + + +classes = ([ + SIMPLEBAKE_UL_UVItems, + SIMPLEBAKE_OT_SyncUVList, + SIMPLEBAKE_OT_UVSetAllName + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/objects_list.py b/scripts/addons/SimpleBake/ui/objects_list.py new file mode 100644 index 0000000..12ed41f --- /dev/null +++ b/scripts/addons/SimpleBake/ui/objects_list.py @@ -0,0 +1,582 @@ +import bpy +from ..utils import find_closest_obj, show_message_box, find_3d_viewport +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, PropertyGroup, UIList +from bpy.props import EnumProperty, StringProperty +from ..utils import invalidate_udim_cache + + + +def refresh_bake_objects_list(context): + + sbp = context.scene.SimpleBake_Props + + if sbp.global_mode == "PBR" and sbp.selected_s2a: + if sbp.s2a_opmode != "automatch": + if sbp.targetobj != None: + if sbp.targetobj.name not in bpy.context.scene.objects: + sbp.targetobj = None + + if sbp.global_mode == "CyclesBake" and sbp.cycles_s2a: + if sbp.s2a_opmode != "automatch": + if sbp.targetobj_cycles != None: + if sbp.targetobj_cycles.name not in bpy.context.scene.objects: + sbp.targetobj_cycles = None + + + objects_list = sbp.objects_list + + gone = [] + for li in objects_list: + #Is it empty? + if li.obj_point == None: + gone.append(li.name) + + #Is it no longer in the scene? + elif li.obj_point.name not in context.scene.objects: + gone.append(li.name) + + #Is it not in use anywhere else? + elif len(li.obj_point.users_scene) < 1: + gone.append(li.name) + + elif sbp.selected_s2a or sbp.cycles_s2a: + if sbp.s2a_opmode=="automatch" and sbp.auto_match_mode == "name": + for o in sbp.objects_list: + if o.obj_point != None and not o.obj_point.name.lower().endswith("_high"): + gone.append(o.name) + for g in gone: + objects_list.remove(objects_list.find(g)) + + for i in objects_list: + i.name = i.obj_point.name + + #Throw in a refresh of the UV list. WHy not? + bpy.ops.simplebake.sync_uv_list() + + +def _strip_sb_prefixes(name): + """Strip SimpleBake backup prefixes (SBW_, SBM_) to recover the original material name.""" + if name.startswith("SBW_"): + name = name[4:] + if name.startswith("SBM_"): + name = name[4:] + return name + +def refresh_mat_bake_list(context): + """Keep mat_bake_list in sync with objects_list and their materials.""" + sbp = context.scene.SimpleBake_Props + + # Build the set of (obj_name, mat_name) pairs that should exist. + # Strip SimpleBake backup prefixes so the list always stores original names. + wanted = set() + for item in sbp.objects_list: + if item.obj_point is None: + continue + obj = item.obj_point + for slot in obj.material_slots: + if slot.material is not None: + wanted.add((obj.name, _strip_sb_prefixes(slot.material.name))) + + # Remove stale entries + to_remove = [] + for i, entry in enumerate(sbp.mat_bake_list): + if (entry.obj_name, entry.mat_name) not in wanted: + to_remove.append(i) + for i in reversed(to_remove): + sbp.mat_bake_list.remove(i) + + # Add missing entries (default enabled=True) + existing = {(e.obj_name, e.mat_name) for e in sbp.mat_bake_list} + for obj_name, mat_name in sorted(wanted): + if (obj_name, mat_name) not in existing: + entry = sbp.mat_bake_list.add() + entry.obj_name = obj_name + entry.mat_name = mat_name + entry.enabled = True + + +class SIMPLEBAKE_UL_Objects_List(UIList): + """Bake objects list""" + + viable_high_low_bakes = [] + + def draw_item(self, context, layout, data, item, icon, active_data, + active_propname, index): + + sbp = context.scene.SimpleBake_Props + custom_icon = 'OBJECT_DATAMODE' + name = item.obj_point.name if item.obj_point != None else "_?_" + target_obj = "???" + cage_obj = "" + + #Set the icon if in name mode + if (sbp.selected_s2a or sbp.cycles_s2a) and item.obj_point != None: + if sbp.s2a_opmode=="automatch": + if sbp.auto_match_mode == "name": + custom_icon = "SEQUENCE_COLOR_01" if bpy.app.version < (4,4,0) else "STRIP_COLOR_01" + target_obj = "???" + + for o in context.scene.objects: + if name.lower().replace("_high", "_low") == o.name.lower(): + target_obj = o.name + custom_icon = "SEQUENCE_COLOR_04" if bpy.app.version < (4,4,0) else "STRIP_COLOR_04" + if name not in __class__.viable_high_low_bakes: + __class__.viable_high_low_bakes.append(name) + + #We didn't find a match + if target_obj == "???": + if name in __class__.viable_high_low_bakes: + __class__.viable_high_low_bakes.remove(name) + + # Look up cage object by naming convention + cage_obj = "" + if target_obj != "???": + parts = target_obj.split("_") + base_name = '_'.join(parts[:-1]).lower() + for o in context.scene.objects: + if o.name.lower() == f"{base_name}_cage": + cage_obj = o.name + break + + #Set the icon if in position mode + if (sbp.selected_s2a or sbp.cycles_s2a) and item.obj_point != None: + if sbp.s2a_opmode=="automatch": + if sbp.auto_match_mode == "position": + co = find_closest_obj(context, name) + if co != None: + custom_icon = "SEQUENCE_COLOR_04" if bpy.app.version < (4,4,0) else "STRIP_COLOR_04" + target_obj = co.name + if name not in __class__.viable_high_low_bakes: + __class__.viable_high_low_bakes.append(name) + else: + custom_icon = "SEQUENCE_COLOR_01" if bpy.app.version < (4,4,0) else "STRIP_COLOR_01" + target_obj = "???" + if name in __class__.viable_high_low_bakes: + __class__.viable_high_low_bakes.remove(name) + + # Draw + if self.layout_type in {'DEFAULT', 'COMPACT'}: + + col = layout.column() + col.label(text=name, icon=custom_icon) + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch": + col = layout.column() + col.alignment = 'CENTER' + col.label(text=" --> ") + col = layout.column() + icon = "QUESTION" if target_obj == "???" else "CHECKMARK" + col.label(text=target_obj, icon=icon) + if sbp.auto_match_mode == "name": + col = layout.column() + if cage_obj: + col.label(text=cage_obj, icon="MOD_MESHDEFORM") + else: + col.label(text="No cage") + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text="", icon = custom_icon) + + + +class SimpleBake_OT_Add_Bake_Object(Operator): + """Add selected object(s) to the bake list""" + + bl_idname = "simplebake.add_bake_object" + bl_label = "Adds a bake object to the list" + + @classmethod + def poll(cls, context): + return len(context.selected_objects) + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + #Lets get rid of the non-mesh objects from the selections + [obj.select_set(False) for obj in context.scene.objects if obj.type != "MESH"] + + #Do we still have an active object? + if context.active_object == None: + #If not, pick one + context.view_layer.objects.active = context.selected_objects[0] + + #Add to list if not already in the list + objs = context.selected_objects.copy() + + for obj in objs: + #If we are in matching high to low mode, only allow adding of _high objects + if (sbp.selected_s2a or sbp.cycles_s2a): + if sbp.s2a_opmode=="automatch" and sbp.auto_match_mode == "name": + if not obj.name.lower().endswith("_high"): + messages = ([ + f"ERROR: Can't add object {obj.name}", + "You have auto match high and low poly selected and", + "you are using name mode.", + "Only object names ending in \"_high\" can be added" + ]) + show_message_box(context, messages, "Errors occured", icon = 'ERROR') + continue + + #Only add if not already on the list + r = [o.name for o in sbp.objects_list if o.name == obj.name] + if len(r) == 0: + n = sbp.objects_list.add() + n.obj_point = obj + n.name = obj.name + + #Throw in a refresh + refresh_bake_objects_list(context) + refresh_mat_bake_list(context) + + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch": + if len(SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes)<2: + sbp.merged_bake = False + + #Invalidate UDIM cache + invalidate_udim_cache() + + return{'FINISHED'} + + +class SimpleBake_OT_Add_Bake_Object_By_Name(Operator): + """Add specified object(s) to the bake list""" + + bl_idname = "simplebake.add_bake_object_by_name" + bl_label = "Adds a bake object to the list" + + override_target_obj_name: StringProperty(default="") + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + n = sbp.objects_list.add() + obj = context.scene.objects[self.override_target_obj_name] + n.obj_point = obj + n.name = obj.name + + #Invalidate UDIM cache + invalidate_udim_cache() + + return{'FINISHED'} + + +class SimpleBake_OT_Remove_Bake_Object(Operator): + """Remove the selected object from the bake list.""" + + bl_idname = "simplebake.remove_bake_object" + bl_label = "Removes a bake object from the list" + + @classmethod + def poll(cls, context): + #TODO------- + return context.scene.SimpleBake_Props.objects_list + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + objects_list = sbp.objects_list + index = sbp.objects_list_index + #Record it's name + name = sbp.objects_list[index].name + + objects_list.remove(index) + sbp.objects_list_index = min(max(0, index - 1), len(objects_list) - 1) + + #Throw in a refresh + refresh_bake_objects_list(context) + refresh_mat_bake_list(context) + + #Also remove from high low list + if name in SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes: + SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes.remove(name) + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch": + if len(SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes)<2: + sbp.merged_bake = False + + #Invalidate UDIM cache + invalidate_udim_cache() + + return{'FINISHED'} + + +class SimpleBake_OT_Clear_Bake_Objects_List(Operator): + """Clear the object list""" + + bl_idname = "simplebake.clear_bake_objects_list" + bl_label = "Clears the bake object list" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + sbp.objects_list.clear() + + #Throw in a refresh + refresh_bake_objects_list(context) + refresh_mat_bake_list(context) + + #Clear the high low match list + SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes = [] + # if len(SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes)<2: + # sbp.merged_bake = False + + #Invalidate UDIM cache + invalidate_udim_cache() + + return{'FINISHED'} + +class SimpleBake_OT_Move_Bake_Object_List(Operator): + """Move an object in the list.""" + + bl_idname = "simplebake.move_bake_object_list" + bl_label = "Moves an item in the bake objects list" + + direction: bpy.props.EnumProperty(items=(('UP', 'Up', ""), + ('DOWN', 'Down', ""),)) + + @classmethod + def poll(cls, context): + return context.scene.SimpleBake_Props.objects_list + + def move_index(self, context): + """ Move index of an item render queue while clamping it. """ + sbp = context.scene.SimpleBake_Props + index = sbp.objects_list_index + list_length = len(sbp.objects_list) - 1 # (index starts at 0) + new_index = index + (-1 if self.direction == 'UP' else 1) + + sbp.objects_list_index = max(0, min(new_index, list_length)) + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + objects_list = sbp.objects_list + index = sbp.objects_list_index + + neighbor = index + (-1 if self.direction == 'UP' else 1) + objects_list.move(neighbor, index) + self.move_index(context) + + #Throw in a refresh + refresh_bake_objects_list(context) + + return{'FINISHED'} + + +class SimpleBake_OT_Refresh_Bake_Object_List(Operator): + """Refresh the list to remove objects""" + + bl_idname = "simplebake.refresh_bake_object_list" + bl_label = "Refresh the bake objects list" + + @classmethod + def poll(cls, context): + return True + + + def execute(self, context): + refresh_bake_objects_list(context) + refresh_mat_bake_list(context) + + #Invalidate UDIM cache + invalidate_udim_cache() + + return{'FINISHED'} + +#highlight_on = False + + +class SimpleBake_OT_Set_Highlight_Cols(Operator): + """Actually modify the object colours""" + + bl_idname = "simplebake.set_highlight_cols" + bl_label = "Set highlight cols to objects" + + @classmethod + def update_object_list_from_selectd(cls): + sbp = bpy.context.scene.SimpleBake_Props + if (o:=bpy.context.active_object): + if (i:=sbp.objects_list.find(o.name))!=-1: + if sbp.objects_list_index !=i: + sbp.objects_list_index =i + + def execute(self, context): + + sbp = bpy.context.scene.SimpleBake_Props + + #Do this anyway (EEVEE updates even if object selection changed) + __class__.update_object_list_from_selectd() + + if not sbp.highlight_on: + return{'CANCELLED'} #Highlight turned off - end timer + + #Do nothing more if we aren't in shading mode + any_shading = False + for space in find_3d_viewport(): + if space.shading.type == "SOLID": + any_shading = True + if not any_shading: + return{'CANCELLED'} + #return 0.2 #Do nothing. Check back later + + def set_col(obj_names, col): + for o_name in obj_names: + if (o:=bpy.data.objects.get(o_name)): + if o.color != col: + if "SB_orig_col" not in o: + o["SB_orig_col"] = o.color + o.color = col + + bake_objs = [o.name for o in sbp.objects_list] + all_objs = ([o.name for o in bpy.context.scene.objects if + o.name not in bake_objs and + o.type == "MESH" and + "SB_auto_cage" not in o]) + + set_col(all_objs, (1,1,1,1)) + c = sbp.highlight_col + set_col(bake_objs, (c.r, c.g, c.b, 1.0)) + + return{'FINISHED'} + + + +class SimpleBake_OT_Highlight_Bake_Objects(Operator): + """Highlight selected objects in the viewport""" + + bl_idname = "simplebake.highlight_bake_objects" + bl_label = "Highlights bake objects in the viewport on this screen" + + + @classmethod + def poll(cls, context): + sbp = context.scene.SimpleBake_Props + return not sbp.highlight_on + + @classmethod + def set_timer(cls): + bpy.app.timers.register(cls.col_bake_objects, first_interval=1.0) + + @classmethod + def col_bake_objects(cls): + sbp = bpy.context.scene.SimpleBake_Props + + bpy.ops.simplebake.set_highlight_cols() + + if not sbp.highlight_on: + return None + else: + return 0.2 + + @classmethod + def set_display(cls, context): + + for space in find_3d_viewport(): + space.shading.color_type = "OBJECT" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + sbp.highlight_on = True + __class__.set_timer() + + __class__.col_bake_objects() + __class__.set_display(context) + + return{'FINISHED'} + + + +class SimpleBake_OT_Remove_Highlight(Operator): + """Remove highlight of selected objects in the viewport""" + + bl_idname = "simplebake.remove_highlight" + bl_label = "Removes the highlights for bake objects in the viewport on this screen" + + @classmethod + def poll(cls, context): + sbp = context.scene.SimpleBake_Props + return sbp.highlight_on + + def uncol_bake_objects(self, context): + sbp = context.scene.SimpleBake_Props + bpy.ops.simplebake.refresh_bake_object_list() + obj_names = [o.name for o in sbp.objects_list] + + for o_name in obj_names: + if (o:=bpy.data.objects.get(o_name)): + if "SB_orig_col" in o: + o.color = o["SB_orig_col"] + del o["SB_orig_col"] + + def unset_display(self, context): + + #for screen in bpy.data.screens: + screen = bpy.context.window.screen + # Iterate through the areas in the current screen + for area in screen.areas: + # Check if the area is a 3D viewport + if area.type == 'VIEW_3D': + # Optionally, you can access the space data of the area + for space in area.spaces: + if space.type == 'VIEW_3D': + space.shading.color_type = "MATERIAL" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + sbp.highlight_on = False + + self.uncol_bake_objects(context) + self.unset_display(context) + + + return{'FINISHED'} + + +class SimpleBake_OT_Materials_Expand_All(Operator): + """Expand all objects in the Materials section""" + bl_idname = "simplebake.materials_expand_all" + bl_label = "Expand All" + + def execute(self, context): + for item in context.scene.SimpleBake_Props.objects_list: + item.expanded = True + return {'FINISHED'} + + +class SimpleBake_OT_Materials_Collapse_All(Operator): + """Collapse all objects in the Materials section""" + bl_idname = "simplebake.materials_collapse_all" + bl_label = "Collapse All" + + def execute(self, context): + for item in context.scene.SimpleBake_Props.objects_list: + item.expanded = False + return {'FINISHED'} + + +classes = ([ + SIMPLEBAKE_UL_Objects_List, + SimpleBake_OT_Add_Bake_Object, + SimpleBake_OT_Add_Bake_Object_By_Name, + SimpleBake_OT_Remove_Bake_Object, + SimpleBake_OT_Clear_Bake_Objects_List, + SimpleBake_OT_Move_Bake_Object_List, + SimpleBake_OT_Refresh_Bake_Object_List, + SimpleBake_OT_Highlight_Bake_Objects, + SimpleBake_OT_Remove_Highlight, + SimpleBake_OT_Set_Highlight_Cols, + SimpleBake_OT_Materials_Expand_All, + SimpleBake_OT_Materials_Collapse_All, + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/panel.py b/scripts/addons/SimpleBake/ui/panel.py new file mode 100644 index 0000000..9ab192b --- /dev/null +++ b/scripts/addons/SimpleBake/ui/panel.py @@ -0,0 +1,1822 @@ +import bpy +import os +from pathlib import Path +from bpy.utils import register_class, unregister_class +from bpy.types import Panel, Operator + +from ..utils import SBConstants, pbr_selections_to_list, specials_selection_to_list, is_blend_saved, get_cached_udim_tiles +from .objects_list import SIMPLEBAKE_UL_Objects_List +from .channel_packing_list import SIMPLEBAKE_UL_CPTexList +from ..background_and_progress import BackgroundBakeTasks, BakeInProgress +from .panel_helpers import check_for_render_inactive_modifiers, check_for_convertible_shaders, check_for_auto_cage, check_for_viewport_inactive_modifiers +try: + from ..auto_update import VersionControl +except: + VersionControl = None + +from ..messages import print_message +from .. import __package__ as base_package + +space = "" +region = "" +context = "" +cat = "" +TOGGLES = True +ALIGN = False +SCALE = 1.3 + +def read_settings(): + global space, region, context, cat, TOGGLES, ALIGN, SCALE + + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" / "settings" + + filename = "panel_location.txt" + content = "" + try: + with open(str(p / filename), 'r') as file: + content = file.read() + except Exception as e: + content = "renderpanel" + + if content == "renderpanel": + space = 'PROPERTIES' + region = 'WINDOW' + context = "render" + cat = "" + else: + space = 'VIEW_3D' + region = 'UI' + context = "" + cat = 'SimpleBake' + + filename = "toggles.txt" + try: + with open(str(p / filename), 'r') as file: + content = file.read() + except Exception as e: + content = "toggles" + + TOGGLES = True if content == "toggles" else False + +read_settings() + + +def monkey_tip_formatter(text, max_length=32): + words = text.split() + segments = [] + current_segment = "" + + for word in words: + if len(current_segment) + len(word) + 1 > max_length: + segments.append(current_segment) + current_segment = word + else: + if current_segment: + current_segment += " " + current_segment += word + + if current_segment: + segments.append(current_segment) + + return segments + + +def monkey_tip(context, message_lines, box): + sbp = context.scene.SimpleBake_Props + row = box.row(align=ALIGN) + row.alert = True + row.prop(sbp, "showtips", icon="TRIA_DOWN" if sbp.showtips else "TRIA_RIGHT", icon_only=True, emboss=False) + row.label(text=f'{"Tip" if sbp.showtips else "Tip available"}', icon="MONKEY") + row.alignment = 'CENTER' + + if sbp.showtips: + for line in message_lines: + row = box.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.5 + row.label(text=line) + + +def decals_tips(context, box): + message_lines = ["PBR DECALS MODE"] + message_lines.extend(monkey_tip_formatter( + "Add the decal objects to the list, and specify your target " + "object in the Target Object box. If using the 'Copy objects and " + "apply bakes' option, a suitable decals material will be created")) + monkey_tip(context, message_lines, box) + box.row(align=ALIGN).label(text="") + + +def standard_s2a_tips(context, box): + message_lines = ["STANDARD BAKE TO TARGET MODE"] + message_lines.extend(monkey_tip_formatter( + "Add source objects to the list and specify the " + "target object in the target box")) + monkey_tip(context, message_lines, box) + + +def auto_match_high_low_tips(context, box): + sbp = context.scene.SimpleBake_Props + if sbp.auto_match_mode == "name": + message_lines = ["AUTO MATCH HIGH/LOW", "NAME MODE"] + message_lines.extend(monkey_tip_formatter( + "Only objects with \"_high\" as a suffix to their name can be added to the list. " + "Each object's icon indicates if a corresponding \"_low\" object for baking " + "can be found in the scene. Cage objects are also auto detected with the " + "suffix \"_cage\"")) + else: + message_lines = ["AUTO MATCH HIGH/LOW", "POSITION MODE"] + message_lines.extend(monkey_tip_formatter( + "Add your high poly objects to the list " + "Low poly detected by position (<0.5 BU) " + "Each object's icon indicates if a " + "corresponding low poly object for baking " + "can be found in the scene")) + monkey_tip(context, message_lines, box) + box.row(align=ALIGN).label(text="") + + +def denoise_options(box): + C = bpy.context + sbp = C.scene.SimpleBake_Props + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "rundenoise", text="Denoise (Compositor)", toggle=TOGGLES) + if not sbp.save_bakes_external: + row.enabled = False + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(C.scene.cycles, "use_denoising", text="Denoise (Cycles)", toggle=TOGGLES) + + if C.scene.cycles.use_denoising: + box.row(align=ALIGN).prop(C.scene.cycles, "denoiser") + box.row(align=ALIGN).prop(C.scene.cycles, "denoising_input_passes") + box.row(align=ALIGN).prop(C.scene.cycles, "denoising_prefilter") + + +def disable_row_if_image_sequence(context, row, box): + # Image sequence baking is driven by a modal operator + # (SimpleBake_OT_Image_Sequence) which needs Blender's event loop. + # Background baking launches a headless subprocess and exits, so the + # two modes are architecturally incompatible — disable the row here. + sbp = context.scene.SimpleBake_Props + + if sbp.image_sequence_enabled: + row.enabled = False + for t in ("Image sequence selected", "Unfortunately, this can only be", "baked in the foreground"): + r = box.row(align=ALIGN) + r.alert = True + r.alignment = 'CENTER' + r.scale_y = 0.5 + r.label(text=t) + return True + + +# --------------------------------------------------------------------------- +# Layout helper functions +# --------------------------------------------------------------------------- + +def prop_row(box, data, prop, enabled=True, small_row=False, **kwargs): + """Single standard-scale prop row. Returns the row so callers can set .enabled.""" + + row = box.row(align=ALIGN) + + element = None + if small_row: + row.scale_y = 1 + row.use_property_split = True + row.use_property_decorate = False + element = row + else: + row.scale_y = SCALE + element = row + + element.enabled = enabled + element.prop(data, prop, toggle=TOGGLES, **kwargs) + return row + + +def two_prop_row(box, data, prop_left, prop_right, label_left=None, label_right=None): + """Two props side-by-side in columns. Returns (row, col_left, col_right).""" + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(data, prop_left, toggle=TOGGLES, + **({"text": label_left} if label_left is not None else {})) + col_r = row.column() + col_r.prop(data, prop_right, toggle=TOGGLES, + **({"text": label_right} if label_right is not None else {})) + return row, col_l, col_r + + +def preview_eye(layout, enabled, bake_type): + """Eye icon button for bake type preview. Greyed out when enabled=False.""" + col = layout.column() + col.enabled = enabled + col.operator("simplebake.preview_bake_type", text="", icon="HIDE_OFF").bake_type = bake_type + + +def two_prop_row_preview(box, sbp, prop_left, prop_right, type_left, type_right): + """Two props side-by-side with a preview eye button after each. Returns (row, col_left, col_right).""" + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(sbp, prop_left, toggle=TOGGLES) + preview_eye(row, getattr(sbp, prop_left), type_left) + col_r = row.column() + col_r.prop(sbp, prop_right, toggle=TOGGLES) + preview_eye(row, getattr(sbp, prop_right), type_right) + return row, col_l, col_r + + +def section_header(box, data, show_prop, label, icon_only=False, section_icon='NONE'): + """Collapsible section header. Returns the row.""" + row = box.row(align=ALIGN) + tria = "TRIA_DOWN" if getattr(data, show_prop) else "TRIA_RIGHT" + row.prop(data, show_prop, text="", icon=tria, icon_only=True, emboss=False) + row.prop(data, show_prop, text=label, icon=section_icon, emboss=False) + return row + + +# --------------------------------------------------------------------------- +# Main panel class +class SIMPLEBAKE_PT_main_panel(Panel): + bl_label = "SimpleBake" + bl_space_type = f"{space}" + bl_region_type = f"{region}" + bl_context = f"{context}" + bl_category = f"{cat}" + + # ----------------------------------------------------------------------- + def draw_version_info(self, context, layout): + if VersionControl is None: + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.label(text="DEMO MODE") + return + + prefs = context.preferences.addons[base_package].preferences + + def print_installed_ver(): + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.label(text=f"Installed version: {VersionControl.installed_version_str}") + + if prefs.no_update_check: + print_installed_ver() + row = layout.row(align=ALIGN) + row.alert = True + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.label(text="(Update checking disabled)") + return + + if VersionControl.was_error: + for text, icon in (("Simplebake wasn't able to check", "ERROR"), ("for updates", 'NONE')): + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + if icon != 'NONE': + row.label(text=text, icon=icon) + else: + row.label(text=text) + print_installed_ver() + return + + if not VersionControl.at_current: + for text, alert in ( + ("", True), + ("Newer version of SimpleBake available", True), + ("Update automatically in addon preferences", True), + ): + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.alert = alert + row.label(text=text, icon="MOD_WAVE" if text == "" else 'NONE') + print_installed_ver() + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.label(text=f"Available Version: {VersionControl.current_version_str}") + else: + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.label(text="", icon="CHECKMARK") + row = layout.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.label(text="SimpleBake is up-to-date") + print_installed_ver() + + # ----------------------------------------------------------------------- + def draw_global_mode_buttons(self, context, box): + sbp = context.scene.SimpleBake_Props + row = box.row(align=ALIGN) + row.scale_y = 1.5 + row.prop(sbp, "global_mode", icon="SETTINGS", expand=True) + row = box.row(align=ALIGN) + row.operator("simplebake.panel_hide_all", icon='PROP_OFF', text="Hide all") + row.operator("simplebake.panel_show_all", icon='PROP_ON', text="Show all") + + # ----------------------------------------------------------------------- + def draw_presets(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "presets_show", "Settings presets", section_icon='PRESET') + + if not sbp.presets_show: + return + + row = box.row(align=ALIGN) + row.alignment = "CENTER" + row.label(text="Global Presets", icon="WORLD_DATA") + + row = box.row(align=ALIGN) + col = row.column() + col.template_list("SIMPLEBAKE_UL_Presets_List", "Presets List", sbp, + "presets_list", sbp, "presets_list_index") + col = row.column() + col.operator("simplebake.preset_refresh", text="", icon="FILE_REFRESH") + col.operator("simplebake.preset_load", text="", icon="CHECKMARK") + col.operator("simplebake.preset_delete", text="", icon="CANCEL") + + row = box.row(align=ALIGN) + row.prop(sbp, "preset_name") + row.operator("simplebake.preset_save", text="", icon="FUND") + + prop_row(box, sbp, "preset_load_clear_obj") + box.row(align=ALIGN).label(text="") + + row = box.row(align=ALIGN) + row.alignment = "CENTER" + row.label(text="Blend File Presets", icon="FILE_BLEND") + + row = box.row(align=ALIGN) + col = row.column() + col.template_list("SIMPLEBAKE_UL_Local_Presets_List", "Local Presets List", sbp, + "local_presets_list", sbp, "local_presets_list_index") + col = row.column() + col.operator("simplebake.local_preset_refresh", text="", icon="FILE_REFRESH") + col.operator("simplebake.local_preset_load", text="", icon="CHECKMARK") + col.operator("simplebake.local_preset_delete", text="", icon="CANCEL") + + row = box.row(align=ALIGN) + row.prop(sbp, "local_preset_name") + row.operator("simplebake.local_preset_save", text="", icon="FUND") + + # ----------------------------------------------------------------------- + def draw_objects_list(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "bake_objects_show", "Bake objects", section_icon='OUTLINER_OB_MESH') + + if not sbp.bake_objects_show: + return + + row = box.row(align=ALIGN) + col = row.column() + col.template_list("SIMPLEBAKE_UL_Objects_List", "Bake Objects List", sbp, + "objects_list", sbp, "objects_list_index") + col = row.column() + col.scale_x = 0.32 + col.operator("simplebake.highlight_bake_objects", text="", icon="LIGHT_SPOT") + col.operator("simplebake.remove_highlight", text="", icon="SHADING_BBOX") + col.prop(sbp, "highlight_col", text="") + + row = box.row(align=ALIGN) + row.operator('simplebake.add_bake_object', text='Add', icon="PRESET_NEW") + row.operator('simplebake.remove_bake_object', text='Remove', icon="CANCEL") + row.operator('simplebake.clear_bake_objects_list', text='Clear', icon="MATPLANE") + + row = box.row(align=ALIGN) + row.operator('simplebake.move_bake_object_list', text='Up', icon="TRIA_UP").direction = "UP" + row.operator('simplebake.move_bake_object_list', text='Down', icon="TRIA_DOWN").direction = "DOWN" + row.operator('simplebake.refresh_bake_object_list', text='Refresh', icon="FILE_REFRESH") + + if sbp.highlight_on: + monkey_tip(context, monkey_tip_formatter( + "Objects are highlighted when viewport set to \"Solid\" shading. " + "Must be re-enabled after Blender restart"), box) + + if sbp.global_mode == SBConstants.PBR: + row, col_l, col_r = two_prop_row(box, sbp, "selected_s2a", "isolate_objects", + "Bake to target", "Isolate objects") + if sbp.tex_per_mat: + col_l.enabled = False + if sbp.join_objs_to_proxy: + col_r.enabled = False + if sbp.selected_s2a: + self._draw_s2a_pbr(context, box, sbp) + + if sbp.global_mode == SBConstants.CYCLESBAKE: + row, col_l, col_r = two_prop_row(box, sbp, "cycles_s2a", "isolate_objects", + "Bake to target", "Isolate objects") + if sbp.tex_per_mat: + col_l.enabled = False + if sbp.join_objs_to_proxy: + col_r.enabled = False + if sbp.cycles_s2a: + self._draw_s2a_cycles(context, box, sbp) + + if check_for_render_inactive_modifiers(context): + monkey_tip(context, [ + "One or more selected objects", + "has a modifier enabled for", + "render (and so baking), but disabled in", + "viewport. May cause unexpected results" + ], box) + + if check_for_viewport_inactive_modifiers(context): + monkey_tip(context, [ + "One or more selected objects", + "has a modifier enabled in the", + "viewport, but disabled for", + "render (and so baking).", + "May cause unexpected results" + ], box) + + def _draw_s2a_pbr(self, context, box, sbp): + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + row.prop(sbp, "s2a_opmode") + + if sbp.s2a_opmode in ["single", "decals"]: + row = box.row(align=ALIGN) + split = row.split(factor=0.25) + split.alignment = "LEFT" + split.label(text="Target") + split.prop(sbp, "targetobj", text="") + + row = box.row(align=ALIGN) + split = row.split(factor=0.25) + split.alignment = "LEFT" + split.label(text="Cage (optional)") + split.prop(context.scene.render.bake, "cage_object", text="") + ##TODO - Move--------------------------------------------------------------------------------- + row.enabled = False if check_for_auto_cage(context) else True + + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.auto_cage", icon='ADD', text="Auto-generate cage") + row.operator("simplebake.remove_auto_cage", icon='REMOVE', text="Remove auto-generated cage") + + if context.scene.render.bake.cage_object is not None: + if 'SB_AUTO_CAGE' in context.scene.render.bake.cage_object.modifiers: + prop_row(box, sbp, "auto_cage_extrusion", text="Auto generated cage extrusion") + + if sbp.s2a_opmode == "decals": + decals_tips(context, box) + if sbp.s2a_opmode == "single": + standard_s2a_tips(context, box) + + if sbp.s2a_opmode == "automatch": + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + row.prop(sbp, "auto_match_mode") + auto_match_high_low_tips(context, box) + + self._draw_cage_settings(context, box, sbp) + + def _draw_s2a_cycles(self, context, box, sbp): + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + row.prop(sbp, "s2a_opmode") + + if sbp.s2a_opmode in ["single"]: + row = box.row(align=ALIGN) + split = row.split(factor=0.25) + split.alignment = "LEFT" + split.label(text="Target") + split.prop(sbp, "targetobj_cycles", text="") + + row = box.row(align=ALIGN) + split = row.split(factor=0.25) + split.alignment = "LEFT" + split.label(text="Cage (optional)") + split.prop(context.scene.render.bake, "cage_object", text="") + row.enabled = False if check_for_auto_cage(context) else True + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.auto_cage", icon='ADD', text="Auto-generate cage") + row.operator("simplebake.remove_auto_cage", icon='REMOVE', text="Remove auto-generated cage") + + if context.scene.render.bake.cage_object is not None: + if 'SB_AUTO_CAGE' in context.scene.render.bake.cage_object.modifiers: + prop_row(box, sbp, "auto_cage_extrusion", text="Auto generated cage extrusion") + + standard_s2a_tips(context, box) + + if sbp.s2a_opmode in ["automatch"]: + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + row.prop(sbp, "auto_match_mode") + auto_match_high_low_tips(context, box) + + self._draw_cage_settings(context, box, sbp) + + def _draw_cage_settings(self, context, box, sbp): + cage_obj = context.scene.render.bake.cage_object + + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + row.prop(sbp, "cage_smooth_hard") + if cage_obj is not None: + row.enabled = False + + row = box.row(align=ALIGN) + row.use_property_split = True + row.prop(sbp, "cage_extrusion") + if cage_obj is not None: + row.enabled = False + + row = box.row(align=ALIGN) + row.use_property_split = True + row.prop(sbp, "ray_distance") + + row = box.row(align=ALIGN) + row.use_property_split = True + row.prop(sbp, "cage_and_ray_multiplier") + + # ----------------------------------------------------------------------- + def draw_materials_section(self, context, box): + sbp = context.scene.SimpleBake_Props + + section_header(box, sbp, "materials_show", "Materials", section_icon='MATERIAL') + + + if not sbp.materials_show: + return + + if not sbp.objects_list: + box.label(text="No objects in the bake objects list", icon="INFO") + return + + monkey_tip(context, monkey_tip_formatter( + "Each object's materials are listed below. Use the checkboxes to " + "include or exclude individual materials from the bake. Excluded " + "materials will be skipped — no texture will be created for them."), box) + + row = box.row() + row.scale_y = SCALE + row.operator("simplebake.refresh_bake_object_list", text="Refresh Materials", icon="FILE_REFRESH") + + # tex_per_mat and expand_mat_uvs toggles + prop_row(box, sbp, "tex_per_mat", enabled=not sbp.merged_bake and not sbp.selected_s2a and not sbp.cycles_s2a, text="Texture per material") + + + box.separator(factor=0.5) + + row = box.row(align=True) + row.scale_y = SCALE + row.operator("simplebake.materials_expand_all", text="Expand All", icon="TRIA_DOWN") + row.operator("simplebake.materials_collapse_all", text="Collapse All", icon="TRIA_RIGHT") + + # Per-object material lists + for item in sbp.objects_list: + if item.obj_point is None: + continue + obj = item.obj_point + + # Arrow + plain label — label is always left-aligned and unaffected by toggle mode + row = box.row(align=True) + row.scale_y = SCALE + icon = "TRIA_DOWN" if item.expanded else "TRIA_RIGHT" + row.prop(item, "expanded", text="", icon=icon, emboss=False) + row.label(text=obj.name, icon="OBJECT_DATA") + + if item.expanded: + mat_entries = [e for e in sbp.mat_bake_list if e.obj_name == obj.name] + if not mat_entries: + box.label(text="No materials", icon="INFO") + else: + col = box.column(align=True) + col.scale_y = 0.9 + for entry in mat_entries: + row2 = col.row(align=True) + # Checkbox style — clearer as an include/exclude control than a toggle + row2.prop(entry, "enabled", text=entry.mat_name, icon="MATERIAL") + + # ----------------------------------------------------------------------- + def draw_pbr_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "pbr_settings_show", "PBR Bakes", section_icon='NODE_MATERIAL') + + if not sbp.pbr_settings_show: + return + + if sbp.preview_active: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.alert = True + row.operator("simplebake.restore_preview", icon="LOOP_BACK") + + two_prop_row_preview(box, sbp, "selected_col", "selected_metal", + SBConstants.PBR_DIFFUSE, SBConstants.PBR_METAL) + + # Roughness / Normal — Normal has no preview + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(sbp, "selected_rough", toggle=TOGGLES) + preview_eye(row, sbp.selected_rough, sbp.rough_glossy_switch) + col_r = row.column() + col_r.prop(sbp, "selected_normal", toggle=TOGGLES) + # Placeholder to match the preview eye column width on other rows + col_placeholder = row.column() + col_placeholder.label(text="", icon="BLANK1") + + # Transmission row — right col disabled on Blender 4+ + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(sbp, "selected_trans", toggle=TOGGLES) + preview_eye(row, sbp.selected_trans, SBConstants.PBR_TRANSMISSION) + col_r = row.column() + t = " " if bpy.app.version >= (4, 0, 0) else "Transmission Roughness" + col_r.prop(sbp, "selected_transrough", toggle=TOGGLES, text=t) + if bpy.app.version >= (4, 0, 0): + col_r.enabled = False + preview_eye(row, sbp.selected_transrough and bpy.app.version < (4, 0, 0), SBConstants.PBR_TRANSMISSION_ROUGH) + + two_prop_row_preview(box, sbp, "selected_clearcoat", "selected_clearcoat_rough", + SBConstants.PBR_CLEARCOAT, sbp.ccrough_glossy_switch) + two_prop_row_preview(box, sbp, "selected_emission", "selected_emission_strength", + SBConstants.PBR_EMISSION, SBConstants.PBR_EMISSION_STRENGTH) + + # Specular / Alpha — alpha disabled for decals + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(sbp, "selected_specular", toggle=TOGGLES) + preview_eye(row, sbp.selected_specular, SBConstants.PBR_SPECULAR) + col_r = row.column() + col_r.prop(sbp, "selected_alpha", toggle=TOGGLES) + if sbp.selected_s2a and sbp.s2a_opmode == "decals": + col_r.enabled = False + preview_eye(row, sbp.selected_alpha and not (sbp.selected_s2a and sbp.s2a_opmode == "decals"), SBConstants.PBR_ALPHA) + + two_prop_row_preview(box, sbp, "selected_sss", "selected_sss_scale", + SBConstants.PBR_SSS, SBConstants.PBR_SSS_SCALE) + two_prop_row_preview(box, sbp, "selected_bump", "selected_displacement", + SBConstants.PBR_BUMP, SBConstants.PBR_DISPLACEMENT) + + row = box.row(align=ALIGN) + row.scale_y = 0.2 + row.label(text="") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.selectall_pbr", icon='ADD') + row.operator("simplebake.selectnone_pbr", icon='REMOVE') + row.operator("simplebake.autodetect_pbr_channels", icon='LIGHT', text="Attempt to auto-detect") + + # Extra options + #All extra options need us to be saving externally + + enabled = sbp.save_bakes_external + if sbp.selected_col or sbp.selected_rough or sbp.selected_normal: + row = box.row(align=ALIGN) + row.scale_y = 0.5 + row.label(text="Extra Options:") + if not sbp.save_bakes_external: + monkey_tip(context, [ + "These options are greyed out", + "because you are not exporting", + "your bakes externally" + ], box) + + if sbp.selected_col and sbp.s2a_opmode != "decals": + prop_row(box, sbp, "multiply_diffuse_ao", enabled=enabled, small_row=True, text="Diffuse") + if sbp.multiply_diffuse_ao == "diffusexao": + prop_row(box, sbp, "multiply_diffuse_ao_percent", small_row=True) + + if sbp.selected_rough: + prop_row(box, sbp, "rough_glossy_switch", enabled=enabled, small_row=True, text="Rough/Gloss") + + if sbp.selected_clearcoat_rough: + prop_row(box, sbp, "ccrough_glossy_switch", enabled=enabled, small_row=True, text="CC Rough/Gloss") + + if sbp.selected_normal: + prop_row(box, sbp, "normal_format_switch", enabled=enabled, small_row=True, text="Normal Format") + prop_row(box, context.scene.render.bake, "normal_space", enabled=enabled, text="Normal Space", small_row=True) + prop_row(box, context.scene.render.bake, "normal_r", enabled=enabled, text="Swizzle R", small_row=True) + prop_row(box, context.scene.render.bake, "normal_g", enabled=enabled, text="G", small_row=True) + prop_row(box, context.scene.render.bake, "normal_b", enabled=enabled, text="B", small_row=True) + if context.scene.render.bake.normal_space == 'OBJECT': + prop_row(box, context.scene.render.bake, "margin_type", enabled=enabled, text="Normal Margin", small_row=True) + + + + if check_for_convertible_shaders(context) and not sbp.preview_active: + monkey_tip(context, monkey_tip_formatter( + "WARNING: Some materials on your bake objects use non-PBR shader nodes " + "(e.g., Diffuse, Glossy). SimpleBake will TRY to match them for PBR, but " + "results may vary. It's recommended to use the 'Attempt to auto-detect' button, " + "as you may not expect the PBR maps needed after conversion. You will always get " + "the best results from reworking your materials to be based around the Principled BSDF" + ), box) + + # ----------------------------------------------------------------------- + def draw_aov_bakes(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "aov_settings_show", "AOV Bakes", section_icon='RENDERLAYERS') + + if not sbp.aov_settings_show: + return + + row = box.row() + row.scale_y = SCALE + row.operator("simplebake.refresh_aov_list", text="Refresh AOVs", icon="FILE_REFRESH") + + if len(sbp.aov_items) == 0: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.label(text="No AOV Output nodes found in your bake object(s)' materials'") + else: + for item in sbp.aov_items: + row = box.row(align=ALIGN) + row.scale_y = SCALE + name = item.name if item.name != "" else "Untitled" + row.prop(item, "enabled", text=name, toggle=TOGGLES) + row.prop(item, "cs") + row = box.row(align=ALIGN) + row.scale_y = 0.1 + row.label(text=f"(Object: \"{item.object_name}\", Material: \"{item.mat_name}\")") + + monkey_tip(context, monkey_tip_formatter( + "You can use AOV Output Nodes in your materials to capture specific outputs and " + "effectively create custom bake maps. " + "Whatever you connect to an AOV Output Node's input will be baked as a separate map." + ), box) + + # ----------------------------------------------------------------------- + def draw_cyclesbake_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "cyclesbake_settings_show", "CyclesBake", section_icon='BLENDER') + + if not sbp.cyclesbake_settings_show: + return + + cscene = context.scene.cycles + cbk = context.scene.render.bake + + box.row(align=ALIGN).prop(cscene, "bake_type") + box.row(align=ALIGN).prop(context.scene.render.bake, "view_from") + + if cscene.bake_type == 'NORMAL': + row = box.row(align=ALIGN) + row.scale_y = SCALE + col = row.column() + col.prop(cbk, "normal_space", text="Space") + sub = col.column() + sub.prop(cbk, "normal_r", text="Swizzle R") + sub.prop(cbk, "normal_g", text="Swizzle G") + sub.prop(cbk, "normal_b", text="Swizzle B") + + elif cscene.bake_type == 'COMBINED': + two_prop_row(box, cbk, "use_pass_direct", "use_pass_indirect") + row = box.row(align=ALIGN) + row.scale_y = SCALE + col = row.column() + col.active = cbk.use_pass_direct or cbk.use_pass_indirect + two_prop_row(box, cbk, "use_pass_diffuse", "use_pass_glossy") + two_prop_row(box, cbk, "use_pass_transmission", "use_pass_emit") + + elif cscene.bake_type in {'DIFFUSE', 'GLOSSY', 'TRANSMISSION'}: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.column().prop(cbk, "use_pass_direct", toggle=TOGGLES) + row.column().prop(cbk, "use_pass_indirect", toggle=TOGGLES) + row.column().prop(cbk, "use_pass_color", toggle=TOGGLES) + + row = box.row(align=ALIGN) + row.column().prop(context.scene.cycles, "samples") + + if sbp.global_mode == SBConstants.CYCLESBAKE and cscene.bake_type != "NORMAL": + box.row(align=ALIGN).prop(sbp, "cyclesbake_cs") + + denoise_options(box) + + # ----------------------------------------------------------------------- + def draw_specials_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "specials_show", "Special bakes", section_icon='EXPERIMENTAL') + need_denoise_options = False + + if not sbp.specials_show: + return + + if sbp.preview_active: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.alert = True + row.operator("simplebake.restore_preview", icon="LOOP_BACK") + + # Colour ID / Vertex Colour + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(sbp, "selected_col_mats", toggle=TOGGLES) + if sbp.selected_s2a or sbp.cycles_s2a: + col_l.enabled = False + preview_eye(row, sbp.selected_col_mats and not (sbp.selected_s2a or sbp.cycles_s2a), SBConstants.COLOURID) + col_r = row.column() + col_r.prop(sbp, "selected_col_vertex", toggle=TOGGLES) + preview_eye(row, sbp.selected_col_vertex, SBConstants.VERTEXCOL) + + two_prop_row_preview(box, sbp, "selected_curvature", "selected_thickness", + SBConstants.CURVATURE, SBConstants.THICKNESS) + + # AO / Lightmap + row = box.row(align=ALIGN) + row.scale_y = SCALE + col_l = row.column() + col_l.prop(sbp, "selected_ao", toggle=TOGGLES) + if sbp.global_mode == SBConstants.PBR and sbp.multiply_diffuse_ao == "diffusexao": + col_l.enabled = False + preview_eye(row, sbp.selected_ao and not (sbp.global_mode == SBConstants.PBR and sbp.multiply_diffuse_ao == "diffusexao"), SBConstants.AO) + col_r = row.column() + col_r.prop(sbp, "selected_lightmap", toggle=TOGGLES) + if sbp.selected_s2a or sbp.cycles_s2a: + col_r.enabled = False + preview_eye(row, sbp.selected_lightmap and not (sbp.selected_s2a or sbp.cycles_s2a), SBConstants.LIGHTMAP) + + if sbp.selected_ao or sbp.selected_thickness or sbp.selected_lightmap: + row = box.row(align=ALIGN) + row.scale_y = 0.5 + row.label(text="Extra options:") + + if sbp.selected_ao or sbp.selected_thickness: + box.row(align=ALIGN).prop(sbp, "ao_sample_count") + if sbp.global_mode == SBConstants.PBR: + need_denoise_options = True + + if sbp.selected_lightmap and sbp.global_mode == SBConstants.PBR: + prop_row(box, context.scene.cycles, "samples", text="Lightmap Sample Count") + need_denoise_options = True + + if sbp.selected_lightmap: + row = prop_row(box, sbp, "lightmap_apply_colman", text="Lightmap apply colour management") + if not sbp.save_bakes_external: + row.enabled = False + + if need_denoise_options: + box.row(align=ALIGN) + denoise_options(box) + + # Tips + if (sbp.selected_lightmap or sbp.selected_ao or sbp.selected_thickness) and sbp.global_mode == SBConstants.PBR: + monkey_tip(context, monkey_tip_formatter( + f"Sample count and denoise are not normally relevant for PBR Bake, but they are for " + f"{SBConstants.LIGHTMAP}, {SBConstants.AO} and {SBConstants.THICKNESS}" + ), box) + + if sbp.selected_lightmap and sbp.global_mode == SBConstants.CYCLESBAKE: + monkey_tip(context, monkey_tip_formatter( + "Lightmap will have sample count and denoise settings that you have set for CyclesBake above" + ), box) + + if (sbp.selected_ao or sbp.selected_thickness) and sbp.global_mode == SBConstants.CYCLESBAKE: + monkey_tip(context, [ + "AO and thickness will have", + "denoise settings that", + "you have set for CyclesBake above" + ], box) + + if sbp.selected_s2a or sbp.cycles_s2a: + monkey_tip(context, ["Lightmap is unavailable when", "baking to target object for now"], box) + + monkey_tip(context, monkey_tip_formatter( + "Use the eye icon next to a specials bake type to preview it. " + "You can then edit the material directly (e.g. adjust curvature strength). " + "Your changes will be used for all bakes of that type in this file." + ), box) + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.reset_specials_materials", icon="TRASH") + + # ----------------------------------------------------------------------- + def draw_texture_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "textures_show", "Texture settings", section_icon='TEXTURE') + + if not sbp.textures_show: + return + + row = box.row(align=ALIGN) + row.scale_y = 0.5 + row.label(text="Bake at:") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "imgwidth") + row.prop(sbp, "imgheight") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.decrease_texture_res", icon="TRIA_DOWN") + row.operator("simplebake.increase_texture_res", icon="TRIA_UP") + + box.row(align=ALIGN) + + row = box.row(align=ALIGN) + row.scale_y = 0.5 + row.label(text="Output at:") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "outputwidth") + row.prop(sbp, "outputheight") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.decrease_output_res", icon="TRIA_DOWN") + row.operator("simplebake.increase_output_res", icon="TRIA_UP") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.alignment = "RIGHT" + row.prop(context.scene.render.bake, "margin", text="Bake Margin") + + try: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.alignment = "RIGHT" + row.prop(context.scene.render.bake, "margin_type", text="Margin Type") + except: + pass + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "texture_bg_col", text="Texture BG Colour") + + if (sbp.texture_bg_col[3] < 1.0) and sbp.save_bakes_external: + monkey_tip(context, monkey_tip_formatter( + "NOTE: Normally, for 'non-color' textures (e.g. metalness, roughness etc), the custom background " + "colour will be lost when exporting, as these are saved as single-channel greyscale. " + "However, as you have set an alpha value below 1.0, ALL textures will be exported as RGBA and the " + "background colour + alpha will be preserved." + ), box) + + row, col_l, col_r = two_prop_row(box, sbp, "everything32bitfloat", "clear_image", + label_right="Clear image before bake") + if sbp.export_file_format == "JPEG" or not sbp.clear_image: + col_l.enabled = False + + row = prop_row(box, sbp, "merged_bake") + if sbp.tex_per_mat: + row.enabled = False + + if sbp.merged_bake: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.column().prop(sbp, "merged_bake_name", text="Texture set name") + row.column().prop(sbp, "join_objs_to_proxy", text="Join bake objects", toggle=TOGGLES) + + if sbp.join_objs_to_proxy: + monkey_tip(context, monkey_tip_formatter( + "WARNING: When using the option to join objects before baking, any materials " + "that rely on 'Generated' (or 'Object') texture coordinates may appear " + "differently after the join. This can cause baked textures to look incorrect. " + "Consider disabling this option if your materials use these coordinates. " + "Also note that the 'Isolate Objects' option will not function when objects are " + "joined, as individual objects cannot be hidden from each other once combined." + ), box) + + if len(sbp.objects_list) < 2 and sbp.merged_bake or \ + ((sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode != "automatch"): + monkey_tip(context, [ + "You are baking multiple objects to one", + "texture set, but have fewer then 2", + "in the bake list. This is OK, but", + "might not be what you wanted" + ], box) + + row = box.row(align=ALIGN) + col = row.column() + col.scale_y = SCALE + col.prop(sbp, "do_aa", text="Anti-aliasing", toggle=TOGGLES) + if not sbp.save_bakes_external: + col.enabled = False + row.column().scale_y = SCALE # spacer column + + if sbp.do_aa: + box.row(align=ALIGN).prop(sbp, "aa_threshold", text="AA Threshold") + box.row(align=ALIGN).prop(sbp, "aa_contrast_limit", text="AA Contrast limit") + box.row(align=ALIGN).prop(sbp, "aa_corner_radius", text="AA Corner radius") + + # ----------------------------------------------------------------------- + def draw_export_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "export_show", "Export settings", section_icon='EXPORT') + + if not sbp.export_show: + return + + if not is_blend_saved(): + box.row(align=ALIGN).label(text="Unavailable - Blend file not saved") + return + + _, _, col_obj = two_prop_row(box, sbp, "save_bakes_external", "save_obj_external") + col_obj.enabled = sbp.save_bakes_external + + if sbp.save_bakes_external or sbp.save_obj_external: + row = box.row(align=ALIGN) + row.scale_y = SCALE + col = row.column() + col.prop(sbp, "export_path", text="Export Path") + row.column().operator("simplebake.export_path_to_blend_location", text="", icon="UV_SYNC_SELECT") + prop_row(box, sbp, "export_folder_per_object") + + if sbp.save_bakes_external: + if sbp.global_mode == SBConstants.PBR: + row = prop_row(box, sbp, "apply_col_man_to_col") + if not sbp.selected_col: + row.enabled = False + + row = box.row(align=ALIGN) + row.scale_y = SCALE + if sbp.export_file_format not in ("OPEN_EXR", "JPEG", "TARGA"): + row.prop(sbp, "everything_16bit", toggle=TOGGLES) + + if sbp.global_mode == SBConstants.CYCLESBAKE: + row = prop_row(box, sbp, "export_cycles_col_space") + if context.scene.cycles.bake_type == "NORMAL": + row.enabled = False + + row = box.row(align=ALIGN) + row.scale_y = SCALE + col = row.column() + col.prop(sbp, "export_file_format", text="Format") + if sbp.export_file_format == "OPEN_EXR": + row.column().prop(sbp, "exr_codec_export") + if sbp.export_file_format == "JPEG": + row.column().prop(sbp, "jpeg_quality", slider=True) + + prop_row(box, sbp, "keep_internal_after_export") + + if sbp.save_obj_external: + prop_row(box, sbp, "export_mesh_individual_or_combined", text="Mesh objects") + if sbp.export_mesh_individual_or_combined == "combined": + prop_row(box, sbp, "merge_export_obj", text="Combine objects within export file") + prop_row(box, sbp, "export_format") + prop_row(box, sbp, "apply_mods_on_mesh_export") + if sbp.export_format == "fbx": + prop_row(box, sbp, "apply_transformation") + if sbp.export_mesh_individual_or_combined == "combined": + prop_row(box, sbp, "mesh_export_name", text="Mesh name") + prop_row(box, sbp, "export_mesh_preset_name") + + if sbp.everything32bitfloat and not sbp.save_bakes_external: + monkey_tip(context, [ + "You are baking in 32bit float", + "but not exporting externally.", + "You may want to export to EXR", + "to preserve your 32bit image(s)" + ], box) + + if sbp.export_file_format == "OPEN_EXR" and sbp.save_bakes_external: + monkey_tip(context, [ + "Note: EXR files cannot be exported", + "with colour management settings.", + "EXR doesn't support them. Even", + "Blender defaults will be ignored" + ], box) + + # ----------------------------------------------------------------------- + def draw_uv_settings(self, context, box): + + sbp = context.scene.SimpleBake_Props + + + section_header(box, sbp, "uv_show", "UV settings", section_icon='UV_DATA') + + if sbp.uv_show: + + #Tex per mat is a special case with just one option + if sbp.tex_per_mat: + prop_row(box, sbp, "expand_mat_uvs") + + + # row = box.row(align=ALIGN) + # row.scale_y = SCALE + # if sbp.new_uv_option: + # row.label(text="Going to create new UVs") + # else: + # row.label(text="Will use existing UVs") + + if not sbp.tex_per_mat: + prop_row(box, sbp, "new_uv_option") + + if not sbp.new_uv_option: + prop_row(box, sbp, "auto_detect_udims") + + if sbp.auto_detect_udims: + message_lines = monkey_tip_formatter("UDIM tiles are detected when UVs extend beyond standard UV space. Objects with and without UDIM tiles can be baked together. \ + When using 'Multiple objects to one texture set,' if any object has UDIM tiles, all objects will be baked to that UDIM set") + monkey_tip(context, message_lines, box) + + if sbp.selected_s2a and sbp.targetobj is not None: + udim_objs = [sbp.targetobj.name] + elif sbp.selected_s2a and sbp.targetobj_cycles is not None: + udim_objs = [sbp.targetobj_cycles.name] + else: + udim_objs = [i.name for i in sbp.objects_list] + + udim_n = 0 + for obj_name in udim_objs: + try: + r = get_cached_udim_tiles(context, obj_name, threshold=0.001) + if r["bbox_tiles"] > udim_n: + udim_n = r["bbox_tiles"] + except: + pass + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.label(text=f"UDIM tiles to bake: {udim_n}") + + #----------------------------------- + def multi_object_options(box): + row = box.row(align=ALIGN) + row.scale_y = SCALE + #row.alignment = "RIGHT" + row.prop(sbp, "new_uv_method") + if sbp.new_uv_method in ["SmartUVProject_Atlas", "SmartUVProject_Individual"]: + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + row.scale_y=SCALE + row.prop(sbp, "unwrapmargin") + prop_row(box, sbp, "uvcorrectaspect") + prop_row(box, sbp, "angle_limit") + two_prop_row(box, sbp, "area_weight", "scale_to_bounds") + else: #Combine + row = box.row(align=ALIGN) + row.alignment = "RIGHT" + + #Advanced UV packing options + n = int(''.join(c for c in bpy.app.version_string if c.isdigit())) + if sbp.new_uv_method in ["CombineExisting"] and n >= 360: + + row=box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "average_uv_size", text="Average UV island size") + + two_prop_row(box, sbp, "uvp_rotate", "uvp_scale") + + two_prop_row(box, sbp, "uvp_lock_pinned", "uvp_merge_overlapping") + + row=box.row(align=ALIGN) + row.scale_y = SCALE + col=row.column() + col.prop(sbp, "uvpackmargin", toggle=TOGGLES) + + row=box.row(align=ALIGN) + row.scale_y = SCALE + col=row.column() + col.prop(sbp, "uvp_shape_method", toggle=TOGGLES) + + row=box.row(align=ALIGN) + row.scale_y = SCALE + col=row.column() + col.prop(sbp, "uvp_rotation_method", toggle=TOGGLES) + + row=box.row(align=ALIGN) + row.scale_y = SCALE + col=row.column() + col.prop(sbp, "uvp_margin_method", toggle=TOGGLES) + + row=box.row(align=ALIGN) + row.scale_y = SCALE + col=row.column() + col.prop(sbp, "uvp_lock_method", toggle=TOGGLES) + + row=box.row(align=ALIGN) + row.scale_y = SCALE + col=row.column() + col.prop(sbp, "uvp_pack_to", toggle=TOGGLES) + + + def single_object_options(box): + #One object selected + row = box.row(align=ALIGN) + row.scale_y=SCALE + row.alignment = "RIGHT" + row.label(text="Smart UV Project: ") + row.prop(sbp, "unwrapmargin", toggle=TOGGLES) + row = box.row(align=ALIGN) + row.scale_y=SCALE + row.alignment = "RIGHT" + row.prop(sbp, "uvcorrectaspect") + row = box.row(align=ALIGN) + row.scale_y=SCALE + row.alignment = "RIGHT" + row.prop(sbp, "angle_limit") + two_prop_row(box, sbp, "area_weight", "scale_to_bounds") + #----------------------------------- + + #Print the options if requesting new UVs + if sbp.new_uv_option: + objects = [obj.name for obj in sbp.objects_list] + viable_high_low = SIMPLEBAKE_UL_Objects_List.viable_high_low_bakes + if sbp.expand_mat_uvs: + #No options + pass + elif (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch" and len(viable_high_low) >1: + multi_object_options(box) + elif (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch" and len(viable_high_low) ==1: + single_object_options(box) + elif (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="decals": + single_object_options(box) + + elif sbp.selected_s2a and sbp.targetobj!=None: + single_object_options(box) + elif sbp.cycles_s2a and sbp.targetobj_cycles!=None: + single_object_options(box) + + elif len(objects) >1 and not (sbp.selected_s2a or sbp.cycles_s2a): + multi_object_options(box) + elif len(objects) ==1: + single_object_options(box) + + else: + row = box.row(align=ALIGN) + row.label(text="No objects selected for bake") + + + if not sbp.new_uv_option: + two_prop_row(box, sbp, "prefer_existing_sbmap", "restore_orig_uv_map", + label_left="Prefer existing UVs called SimpleBake", label_right="Restore original UVs") + + if sbp.new_uv_option: + two_prop_row(box, sbp, "move_new_uvs_to_top", "restore_orig_uv_map", + label_right="Restore original UVs") + + #List for when we are using existing UVs + if not sbp.new_uv_option or (sbp.new_uv_option and sbp.new_uv_method == 'CombineExisting') or sbp.expand_mat_uvs: + + row=box.row(align=ALIGN) + row.scale_y = SCALE + if (sbp.new_uv_option and sbp.new_uv_method == 'CombineExisting'): + row.label(text="We are combining existing UVs:", icon="MOD_BOOLEAN") + else: + row.label(text="We are baking from existing UVs:", icon="UV_VERTEXSEL") + + row=box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.sync_uv_list", text="Refresh UVs list", icon='FILE_REFRESH') + + row = box.row(align=ALIGN) + row.template_list( + "SIMPLEBAKE_UL_UVItems", "", # UIList type and list_id + sbp, "uv_items", # data ptr + collection prop + sbp, "uv_items_index", # active data ptr + index prop + rows=6 + ) + + row=box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "available_uv_maps", text="Available UV Maps") + row.operator("simplebake.uv_set_all_name", icon='OUTLINER_DATA_MESH') + + #------------------------------------Tips--------------------------------------------------------- + + if sbp.new_uv_option and sbp.restore_orig_uv_map and not sbp.copy_and_apply: + #Tip alert + message_lines = [ + "Generating new UVs, but restoring originals", + "after bake. Baked textures won't align with the", + "original UVs. Manually change active UV map ", + "after bake" + ] + monkey_tip(context, message_lines, box) + + + if sbp.new_uv_option and sbp.new_uv_method == "SmartUVProject_Individual" and sbp.merged_bake: + #Tip alert + message_lines = [ + "Current settings will unwrap objects", + "individually but bake to one texture set", + "Bakes will be on top of each other!" + ] + monkey_tip(context, message_lines, box) + + + if not sbp.new_uv_option and sbp.merged_bake: + #Tip alert + message_lines = monkey_tip_formatter( + "ALERT: You are baking multiple objects to one texture \ + set with existing UVs. You will need to manually \ + make sure those UVs don't overlap!" + ) + monkey_tip(context, message_lines, box) + + + if sbp.new_uv_option and not sbp.save_obj_external and not sbp.copy_and_apply and sbp.bgbake == "bg": + #Tip alert + message_lines = [ + "You are baking in background with new UVs, but", + "not exporting FBX or using 'Copy Objects and Apply Bakes'", + "You will recieve the baked textures on import, but you will", + "have no access to an object with the new UV map!" + ] + monkey_tip(context, message_lines, box) + + # ----------------------------------------------------------------------- + def draw_other_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "other_show", "Other settings", section_icon='SETTINGS') + + if not sbp.other_show: + return + + prop_row(box, sbp, "batch_name") + prop_row(box, sbp, "replace_previous_bakes") + prop_row(box, sbp, "image_sequence_enabled") + + if sbp.image_sequence_enabled: + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "image_sequence_start_frame") + row.prop(sbp, "image_sequence_end_frame") + monkey_tip(context, monkey_tip_formatter( + "NOTE: If you haven't added %FRAME% to your image format " + "string in the SimpleBake addon preferences, it will " + "be added automatically to the end of the names of your baked images" + ), box) + + dt = False + s2a = sbp.selected_s2a or sbp.cycles_s2a + t = "Copy target object and apply bakes" if s2a else "Copy objects and apply bakes" + t = f"{t} (after import)" if sbp.bgbake == "bg" else t + row = prop_row(box, sbp, "copy_and_apply", text=t) + if not sbp.keep_internal_after_export: + dt = True + row.enabled = False + + if sbp.copy_and_apply: + row = box.row(align=ALIGN) + row.scale_y = SCALE + col = row.column() + t = "Hide source objects after bake" + t = f"{t} (after import)" if sbp.bgbake == "bg" else t + col.prop(sbp, "hide_source_objects", text=t, toggle=TOGGLES) + if sbp.selected_s2a or sbp.cycles_s2a: + t2 = "Hide cage object after bake" + t2 = f"{t2} (after import)" if sbp.bgbake == "bg" else t2 + row.column().prop(sbp, "hide_cage_object", text=t2, toggle=TOGGLES) + + row = box.row(align=ALIGN) + row.scale_y = SCALE + col = row.column() + col.prop(sbp, "create_glTF_node", toggle=TOGGLES) + if sbp.create_glTF_node: + row.column().prop(sbp, "glTF_selection", text="", toggle=TOGGLES) + + if sbp.global_mode == SBConstants.CYCLESBAKE: + prop_row(box, sbp, "cyclesbake_copy_and_apply_mat_format", text="Material") + + t = "Apply bakes to target object" if s2a else "Apply bakes to original objects" + row = prop_row(box, sbp, "apply_bakes_to_original", text=t) + if sbp.bgbake == "bg" or not sbp.keep_internal_after_export or sbp.tex_per_mat: + dt = True + row.enabled = False + + if dt: + if sbp.tex_per_mat: + t = "'Apply bakes to target object' is not available when Texture Per Material is enabled" if s2a else "'Apply bakes to original objects' is not available when Texture Per Material is enabled" + monkey_tip(context, monkey_tip_formatter( + t + ), box) + elif not sbp.keep_internal_after_export: + copy_apply_label = "'Copy target object and apply bakes'" if s2a else "'Copy objects and apply bakes'" + apply_label = "'Apply bakes to target object'" if s2a else "'Apply bakes to original objects'" + monkey_tip(context, monkey_tip_formatter( + f"{copy_apply_label} and {apply_label} aren't " + "available as you have chosen not to keep bakes internally after export. " + "Turn that back on under 'Export Settings' to use these options" + ), box) + + if sbp.apply_bakes_to_original: + if s2a: + monkey_tip(context, [ + "Be careful when applying bakes to", + "the target object. Original materials won't", + "be deleted, BUT they will have no users", + "and may be purged on next save" + ], box) + else: + monkey_tip(context, [ + "Be careful when applying bakes to", + "original objects. Original materials won't", + "be deleted, BUT they will have no users", + "and may be purged on next save" + ], box) + + if sbp.apply_bakes_to_original and sbp.restore_orig_uv_map: + monkey_tip(context, [ + "You are restoring your original UVs", + "after bake, but also applying the baked", + "textures to original objects. The textures", + "may not look right with original UVs" + ], box) + + row, col_l, col_r = two_prop_row(box, sbp, "no_force_32bit_normals", "boosted_sample_count") + if sbp.global_mode != SBConstants.PBR: + col_r.enabled = False + + prop_row(box, sbp, "bw_to_rgb") + + if context.preferences.addons["cycles"].preferences.has_active_device(): + box.row(align=ALIGN).prop(context.scene.cycles, "device") + else: + box.row(align=ALIGN).label(text="No valid GPU device in Blender Preferences. Using CPU.") + + if (context.preferences.addons["cycles"].preferences.compute_device_type == "OPTIX" and + context.preferences.addons["cycles"].preferences.has_active_device()): + monkey_tip(context, [ + "Other users have reported problems baking", + "with GPU and OptiX. This is a Blender issue", + "If you encounter problems bake with CPU" + ], box) + + if (sbp.global_mode == SBConstants.PBR and sbp.copy_and_apply and + len(pbr_selections_to_list(context)) == 0 and + len(specials_selection_to_list(context)) > 0): + monkey_tip(context, [ + "You are baking only special maps (no primary)", + "while using 'Copy objects and apply bakes'", + "Special maps will be in the new object(s)", + "material(s), but disconnected" + ], box) + + # ----------------------------------------------------------------------- + def draw_channel_packing(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "channelpacking_show", "Channel packing", section_icon='NODE_COMPOSITING') + + if not sbp.channelpacking_show: + return + + if not is_blend_saved(): + box.row(align=ALIGN).label(text="Unavailable - Blend file not saved") + return + + if not sbp.save_bakes_external: + box.row(align=ALIGN).label(text="Unavailable - You must be exporting your bakes") + return + + row = box.row(align=ALIGN) + col = row.column() + col.template_list("SIMPLEBAKE_UL_CPTexList", "CP Textures List", sbp, + "cp_list", sbp, "cp_list_index") + col = row.column() + col.operator("simplebake.cptex_delete", text="", icon="CANCEL") + col.operator("simplebake.cptex_set_defaults", text="", icon="FILE_REFRESH") + + # Name field and RGBA channel selectors always shown (needed to create or edit entries) + prop_row(box, sbp, "cp_name") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + cp_file_format = sbp.channelpackfileformat + row.prop(sbp, "channelpackfileformat", text="Format") + if cp_file_format == "OPEN_EXR": + row.prop(sbp, "exr_codec_cpts") + if cp_file_format == "PNG": + row.prop(sbp, "png_compression", text="Compression") + + for channel, prop in (("R", "cptex_R"), ("G", "cptex_G"), + ("B", "cptex_B"), ("A", "cptex_A")): + row = box.row(align=ALIGN) + row.scale_y = 0.7 + row.prop(sbp, prop, text=channel) + + # Save/update button logic: check if cp_name already exists in the list + cp_list = sbp.cp_list + current_name = sbp.cp_name + if current_name in cp_list: + # Editing an existing saved entry — show update button only if something changed + index = cp_list.find(current_name) + cpt = cp_list[index] + if (cpt.R != sbp.cptex_R or cpt.G != sbp.cptex_G or + cpt.B != sbp.cptex_B or cpt.A != sbp.cptex_A or + cpt.file_format != sbp.channelpackfileformat or + cpt.exr_codec != sbp.exr_codec_cpts or + cpt.png_compression != sbp.png_compression): + row = box.row(align=ALIGN) + row.alert = True + row.operator("simplebake.cptex_add", text=f"Update {current_name} (!!not saved!!)", icon="ADD") + else: + row = box.row(align=ALIGN) + row.label(text=f"Editing {current_name}") + row.alignment = 'CENTER' + else: + # New entry + row = box.row(align=ALIGN) + row.alert = True + row.operator("simplebake.cptex_add", text="Add new (!!not saved!!)", icon="ADD") + + if sbp.cptex_R == "" or sbp.cptex_G == "" or sbp.cptex_B == "" or sbp.cptex_A == "": + row.enabled = False + + row = prop_row(box, sbp, "del_cptex_components") + if sbp.copy_and_apply or sbp.apply_bakes_to_original: + row.enabled = False + + # ----------------------------------------------------------------------- + def draw_admin_settings(self, context, box): + sbp = context.scene.SimpleBake_Props + section_header(box, sbp, "admin_settings_show", "Utilities", section_icon='TOOL_SETTINGS') + + if not sbp.admin_settings_show: + return + + for op_id, label in ( + ("simplebake.purge_settings", "x-- SETTINGS --x"), + ("simplebake.restorematerials", "x-- MATERIALS --x"), + ("simplebake.purge_images", "X-- IMAGES --X"), + ("simplebake.purge_objects", "X-- OBJECTS --X"), + ): + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.alert = True + row.operator(op_id, text=label, icon="ERROR") + + prop_row(box, sbp, "tex_override") + if sbp.tex_override: + prop_row(box, sbp, "tex_override_tex") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.label(text="Find and replace") + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.prop(sbp, "findreplace_find", toggle=TOGGLES) + row.prop(sbp, "findreplace_replace", toggle=TOGGLES) + prop_row(box, sbp, "findreplace_type") + prop_row(box, sbp, "limit_findandreplace_to_sb", text="Limit to SB data") + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.findandreplace", text="Find and replace", icon="VIEWZOOM") + + row = box.row(align=ALIGN) + row.scale_y = SCALE + row.operator("simplebake.copy_settings_clipboard", icon='COPYDOWN') + row.operator("simplebake.paste_settings_clipboard", icon='PASTEDOWN') + + # ----------------------------------------------------------------------- + def draw_bake_buttons(self, context, box): + + sbp = context.scene.SimpleBake_Props + n = 0 + if sbp.selected_s2a and sbp.targetobj!=None: objs = [sbp.targetobj.name] + elif sbp.selected_s2a and sbp.targetobj_cycles!=None: objs = [sbp.targetobj_cycles.name] + else: objs = [i.name for i in sbp.objects_list] + + for obj_name in objs: + try: + result = get_cached_udim_tiles(context, obj_name, threshold=0.001) + if result["bbox_tiles"] > n: + n = result["bbox_tiles"] + except: + pass + + if n>20 and sbp.auto_detect_udims: + def alert_row(text, icon=None): + row = box.row(align=ALIGN) + row.alignment = 'CENTER' + row.scale_y = 0.6 + row.alert = True + row.label(text=text, **({"icon": icon} if icon else {})) + + alert_row(f"WARNING: You are about to bake at least {n} UDIM tiles!!!", icon="ERROR") + alert_row("This is high. If intentional, that's fine.") + alert_row("However, it often means UVs are not suitable for baking.") + alert_row("In the worst case, Blender may run out of memory or crash.") + alert_row("PLEASE CHECK YOUR UV MAPS!") + + + # Determine operator, icon, text and flags + bg = sbp.bgbake == "bg" + s2a = sbp.selected_s2a or sbp.cycles_s2a + disable_if_is = False + bg_name = False + + if s2a and sbp.s2a_opmode == "decals": + if bg: + op, icon, text = "simplebake.bake_operation_decals_background", 'RENDER_RESULT', "Bake! (Decals) (Background)" + bg_name = disable_if_is = True + else: + op, icon, text = "simplebake.bake_operation_decals", 'RENDER_RESULT', "Bake! (Decals)" + + elif s2a and sbp.s2a_opmode == "automatch": + if bg: + op, icon, text = "simplebake.automatch_operation_background", 'RENDER_RESULT', "Bake! (Auto Match) (Background)" + bg_name = disable_if_is = True + else: + op, icon, text = "simplebake.automatch_operation", 'RENDER_RESULT', "Bake! (Auto Match)" + + elif sbp.global_mode == SBConstants.PBR and not sbp.selected_s2a: + if bg: + op, icon, text = "simplebake.bake_operation_pbr_background", 'RENDER_RESULT', "Bake! (in background)" + bg_name = disable_if_is = True + else: + op, icon, text = "simplebake.bake_operation_pbr", 'RENDER_RESULT', "Bake!" + + elif sbp.global_mode == SBConstants.PBR and sbp.selected_s2a: + if bg: + op, icon, text = "simplebake.bake_operation_pbrs2a_background", 'RENDER_RESULT', "Bake! (in background)" + bg_name = disable_if_is = True + else: + op, icon, text = "simplebake.bake_operation_pbrs2a", 'RENDER_RESULT', "Bake! (to target)" + + elif sbp.global_mode == SBConstants.CYCLESBAKE and not sbp.cycles_s2a: + if bg: + op, icon, text = "simplebake.bake_operation_cyclesbake_background", 'RENDER_RESULT', "Bake! (in background)" + bg_name = True + else: + op, icon, text = "simplebake.bake_operation_cyclesbake", 'RENDER_RESULT', "Bake!" + + elif sbp.global_mode == SBConstants.CYCLESBAKE and sbp.cycles_s2a: + if bg: + op, icon, text = "simplebake.bake_operation_cyclesbake_s2a_background", 'RENDER_RESULT', "Bake! (in background)" + bg_name = disable_if_is = True + else: + op, icon, text = "simplebake.bake_operation_cyclesbake_s2a", 'RENDER_RESULT', "Bake! (to target)" + + else: + op, icon, text = "simplebake.bake_operation_pbr", 'RENDER_RESULT', "Bake!" + + # FG/BG switch — always shown at the bottom of the bake box + row = box.row(align=ALIGN) + row.scale_y = 1.5 + row.prop(sbp, "bgbake", expand=True) + + if bg_name: + prop_row(box, sbp, "bgbake_name") + + row = box.row(align=ALIGN) + row.scale_y = 2 + # Sequence bakes require the image_sequence modal operator (see note + # in disable_row_if_image_sequence). Background mode is mutually + # exclusive and is already blocked by disable_row_if_image_sequence. + if sbp.image_sequence_enabled and not bg: + row.operator("simplebake.image_sequence", icon='RENDER_RESULT', text="Bake, image sequence").cmd = op + else: + row.operator(op, icon=icon, text=text) + + if BakeInProgress.is_baking: + row.enabled = False + if disable_if_is: disable_row_if_image_sequence(context, row, box) + + if space == 'VIEW_3D': + monkey_tip(context, monkey_tip_formatter( + "WARNING: Based on my testing, Blender crashes WAY more when SimpleBake " + "is displayed in the N-Panel. I haven't been able to find out why. " + "Use with extreme caution!" + ), box) + + # ----------------------------------------------------------------------- + def draw_fg_bake_status(self, context, box): + sbp = context.scene.SimpleBake_Props + for text, alert in (("FOREGROUND BAKE", True), ("IN PROGRESS", True), ("Please wait", False)): + row = box.row(align=ALIGN) + row.scale_y = 0.5 + row.alignment = 'CENTER' + row.alert = alert + row.label(text=text) + row = box.row(align=ALIGN) + row.alignment = 'CENTER' + row.label(text=f"{sbp.percent_complete}% complete") + + # ----------------------------------------------------------------------- + def draw_background_bakes(self, context, box): + sbp = context.scene.SimpleBake_Props + active = BackgroundBakeTasks.active_tasks + queued = BackgroundBakeTasks.queued_tasks + completed = BackgroundBakeTasks.completed_tasks + + section_header(box, sbp, "bg_status_show", "Background bakes", section_icon='RENDER_ANIMATION') + + if not sbp.bg_status_show: + return + + box.row(align=ALIGN).label(text="Completed:") + for bgt in completed: + row = box.row(align=ALIGN) + row.scale_y = 0.7 + row.label(text=f"{bgt.name} - finished", icon="GHOST_ENABLED") + row.operator("simplebake.import_bgbake", icon='IMPORT', text="").pid = str(bgt.pid) + row.operator("simplebake.discard_bgbake", icon="CANCEL", text="").pid = str(bgt.pid) + + box.row(align=ALIGN).label(text="Active:") + for bgt in active: + row = box.row(align=ALIGN) + row.scale_y = 0.7 + row.label(text=f"{bgt.name} - baking in progress {BackgroundBakeTasks.get_bgbake_status(bgt)}%", + icon="GHOST_DISABLED") + row.operator("simplebake.kill_active_bgbake", icon="CANCEL", text="").pid = str(bgt.pid) + + box.row(align=ALIGN).label(text="Queued:") + for bgt in queued: + row = box.row(align=ALIGN) + row.scale_y = 0.7 + row.label(text=f"{bgt.name} - queued", icon="GHOST_DISABLED") + row.operator("simplebake.delete_queued_bgbake", icon='CANCEL', text="").id = bgt.id + + # ----------------------------------------------------------------------- + def draw_sketchfab_upload(self, context, box): + box.row(align=ALIGN).operator("simplebake.sketchfab_upload", icon='IMPORT', text="Sketchfab Upload") + + # ----------------------------------------------------------------------- + def draw(self, context): + sbp = context.scene.SimpleBake_Props + layout = self.layout + + self.draw_version_info(context, layout) + + if (not BakeInProgress.is_baking) or space == 'VIEW_3D': + box = layout.box() + self.draw_global_mode_buttons(context, box) + + box = layout.box() + self.draw_presets(context, box) + + box = layout.box() + self.draw_objects_list(context, box) + + box = layout.box() + self.draw_materials_section(context, box) + + if sbp.global_mode == SBConstants.PBR: + box = layout.box() + self.draw_pbr_settings(context, box) + + box = layout.box() + self.draw_aov_bakes(context, box) + + if sbp.global_mode == SBConstants.CYCLESBAKE: + box = layout.box() + self.draw_cyclesbake_settings(context, box) + + box = layout.box() + self.draw_specials_settings(context, box) + + box = layout.box() + self.draw_texture_settings(context, box) + + box = layout.box() + self.draw_export_settings(context, box) + + box = layout.box() + self.draw_uv_settings(context, box) + + box = layout.box() + self.draw_other_settings(context, box) + + if sbp.global_mode == SBConstants.PBR: + box = layout.box() + self.draw_channel_packing(context, box) + + box = layout.box() + self.draw_admin_settings(context, box) + + box = layout.box() + self.draw_bake_buttons(context, box) + + else: + box = layout.box() + self.draw_fg_bake_status(context, box) + + box = layout.box() + self.draw_background_bakes(context, box) + + prefs = context.preferences.addons[base_package].preferences + if prefs.apikey != "": + box = layout.box() + self.draw_sketchfab_upload(context, box) + + +classes = ([SIMPLEBAKE_PT_main_panel]) + + +def register(): + global classes + for cls in classes: + register_class(cls) + + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/panel_helpers.py b/scripts/addons/SimpleBake/ui/panel_helpers.py new file mode 100644 index 0000000..0d7281d --- /dev/null +++ b/scripts/addons/SimpleBake/ui/panel_helpers.py @@ -0,0 +1,144 @@ +import bpy +from ..bake_operators.pbr_bake_support_operators import has_convertible_shaders + +is_dirty1 = True +is_dirty2 = True +is_dirty3 = True +is_dirty4 = True + +@bpy.app.handlers.persistent +def _on_depsgraph_update(scene, depsgraph): + global is_dirty1, is_dirty2, is_dirty3, is_dirty4 + is_dirty1 = True + is_dirty2 = True + is_dirty3 = True + is_dirty4 = True + +check_for_render_inactive_modifiers_cached = False +def check_for_render_inactive_modifiers(context): + def update_cache(result): + global is_dirty1, check_for_render_inactive_modifiers_cached + check_for_render_inactive_modifiers_cached = result + is_dirty1 = False + + if not is_dirty1: + return check_for_render_inactive_modifiers_cached + + sbp = context.scene.SimpleBake_Props + objects = [i.obj_point for i in sbp.objects_list if i.obj_point is not None] + for obj in objects: + for mod in obj.modifiers: + if mod.show_render and not mod.show_viewport: + update_cache(True) + return True + if sbp.selected_s2a and sbp.targetobj is not None: + for mod in sbp.targetobj.modifiers: + if mod.show_render and not mod.show_viewport: + update_cache(True) + return True + if sbp.cycles_s2a and sbp.targetobj_cycles is not None: + for mod in sbp.targetobj_cycles.modifiers: + if mod.show_render and not mod.show_viewport: + update_cache(True) + return True + update_cache(False) + return False + +check_for_convertible_shaders_cached = False +def check_for_convertible_shaders(context): + def update_cache(result): + global is_dirty2, check_for_convertible_shaders_cached + check_for_convertible_shaders_cached = result + is_dirty2 = False + + if not is_dirty2: + return check_for_convertible_shaders_cached + + sbp = context.scene.SimpleBake_Props + bake_objects = [i.obj_point.name for i in sbp.objects_list] + if sbp.selected_s2a and sbp.s2a_opmode == "decals" and sbp.targetobj is not None: + bake_objects.append(sbp.targetobj.name) + mats = set() + for obj_name in bake_objects: + if not (o := context.scene.objects.get(obj_name)): + continue + for slot in o.material_slots: + if slot.material is not None: + mats.add(slot.material.name) + result = any(has_convertible_shaders(m) for m in mats) + update_cache(result) + return result + +check_for_auto_cage_cached = False +def check_for_auto_cage(context): + + def update_cache(result): + global is_dirty3, check_for_auto_cage_cached + check_for_auto_cage_cached = result + is_dirty3 = False + + if not is_dirty3: + return check_for_auto_cage_cached + + sbp = context.scene.SimpleBake_Props + + if sbp.global_mode == 'PBR': + if sbp.targetobj == None: + update_cache(False) + return False + else: + tobj_name = sbp.targetobj.name + else: #CyclesBake + if sbp.targetobj_cycles == None: + update_cache(False) + return False + else: + tobj_name = sbp.targetobj_cycles.name + + t = [o.name for o in context.scene.objects + if "SB_auto_cage" in o and o["SB_auto_cage"] == tobj_name] + + if len(t) > 0: + update_cache(True) + return True + else: + update_cache(False) + return False + +check_for_viewport_inactive_modifiers_cached = False +def check_for_viewport_inactive_modifiers(context): + def update_cache(result): + global is_dirty4, check_for_viewport_inactive_modifiers_cached + check_for_viewport_inactive_modifiers_cached = result + is_dirty4 = False + + if not is_dirty4: + return check_for_viewport_inactive_modifiers_cached + sbp = context.scene.SimpleBake_Props + objects = [i.obj_point for i in sbp.objects_list if i.obj_point is not None] + for obj in objects: + for mod in obj.modifiers: + if mod.show_viewport and not mod.show_render: + update_cache(True) + return True + update_cache(False) + return False + + +def _dirty_timer(): + global is_dirty1, is_dirty2, is_dirty3, is_dirty4 + is_dirty1 = True + is_dirty2 = True + is_dirty3 = True + is_dirty4 = True + return 3.0 + +def register(): + bpy.app.handlers.depsgraph_update_post.append(_on_depsgraph_update) + bpy.app.timers.register(_dirty_timer, first_interval=3.0, persistent=True) + +def unregister(): + if _on_depsgraph_update in bpy.app.handlers.depsgraph_update_post: + bpy.app.handlers.depsgraph_update_post.remove(_on_depsgraph_update) + if bpy.app.timers.is_registered(_dirty_timer): + bpy.app.timers.unregister(_dirty_timer) diff --git a/scripts/addons/SimpleBake/ui/panel_operators.py b/scripts/addons/SimpleBake/ui/panel_operators.py new file mode 100644 index 0000000..15b0ac3 --- /dev/null +++ b/scripts/addons/SimpleBake/ui/panel_operators.py @@ -0,0 +1,326 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import StringProperty + +import os + +from ..utils import SBConstants, specials_selection_to_list, get_base_folder_patho +from ..messages import print_message +from ..presets_local import sb_prop_group_to_dict, deep_getattr +from ..presets import scene_props +import json +def auto_set_bake_margin(): + + context = bpy.context + + multiplier = 4 + + current_width = context.scene.SimpleBake_Props.imgwidth + margin = (current_width / 1024) * multiplier + margin = round(margin, 0) + + context.scene.render.bake.margin = int(margin) + + return True + + + +class SimpleBake_OT_selectall_pbr(Operator): + """Select all PBR bake types""" + bl_idname = "simplebake.selectall_pbr" + bl_label = "Select All" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + sbp.selected_col = True + sbp.selected_metal = True + sbp.selected_rough = True + sbp.selected_normal = True + sbp.selected_trans = True + sbp.selected_transrough = True + sbp.selected_emission = True + sbp.selected_emission_strength = True + sbp.selected_clearcoat = True + sbp.selected_clearcoat_rough = True + sbp.selected_specular = True + sbp.selected_alpha = True + sbp.selected_sss = True + sbp.selected_sss_scale = True + sbp.selected_ssscol = True + sbp.selected_bump = True + sbp.selected_displacement = True + return {'FINISHED'} + +class SimpleBake_OT_selectnone_pbr(Operator): + """Select none PBR bake types""" + bl_idname = "simplebake.selectnone_pbr" + bl_label = "Select None" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + sbp.selected_col = False + sbp.selected_metal = False + sbp.selected_rough = False + sbp.selected_normal = False + sbp.selected_trans = False + sbp.selected_transrough = False + sbp.selected_emission = False + sbp.selected_emission_strength = False + sbp.selected_clearcoat = False + sbp.selected_clearcoat_rough = False + sbp.selected_specular = False + sbp.selected_sss = False + sbp.selected_sss_scale = False + sbp.selected_ssscol = False + sbp.selected_bump = False + sbp.selected_displacement = False + if not (sbp.selected_s2a == True and sbp.s2a_opmode == "decals"): + sbp.selected_alpha = False + return {'FINISHED'} + +class SimpleBake_OT_increase_texture_res(Operator): + """Increase texture resolution by 1k""" + bl_idname = "simplebake.increase_texture_res" + bl_label = "+1k" + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + x = sbp.imgwidth + sbp.imgwidth = x + 1024 + y = sbp.imgheight + sbp.imgheight = y + 1024 + + while sbp.imgheight % 1024 != 0: + sbp.imgheight -= 1 + + while sbp.imgwidth % 1024 != 0: + sbp.imgwidth -= 1 + + result = min(sbp.imgwidth, sbp.imgheight) + sbp.imgwidth = result + sbp.imgheight = result + + auto_set_bake_margin() + + return {'FINISHED'} + +class SimpleBake_OT_decrease_texture_res(Operator): + """Decrease texture resolution by 1k""" + bl_idname = "simplebake.decrease_texture_res" + bl_label = "-1k" + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + x = sbp.imgwidth + sbp.imgwidth = x - 1024 + y = sbp.imgheight + sbp.imgheight = y - 1024 + + if sbp.imgheight < 1: + sbp.imgheight = 1024 + + if sbp.imgwidth < 1: + sbp.imgwidth = 1024 + + while sbp.imgheight % 1024 != 0: + sbp.imgheight += 1 + + while sbp.imgwidth % 1024 != 0: + sbp.imgwidth += 1 + + result = max(sbp.imgwidth, sbp.imgheight) + sbp.imgwidth = result + sbp.imgheight = result + + auto_set_bake_margin() + + return {'FINISHED'} + +class SimpleBake_OT_increase_output_res(Operator): + """Increase output resolution by 1k""" + bl_idname = "simplebake.increase_output_res" + bl_label = "+1k" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + x = sbp.outputwidth + sbp.outputwidth = x + 1024 + y = sbp.outputheight + sbp.outputheight = y + 1024 + + while sbp.outputheight % 1024 != 0: + sbp.outputheight -= 1 + + while sbp.outputwidth % 1024 != 0: + sbp.outputwidth -= 1 + + result = min(sbp.outputwidth, sbp.outputheight) + sbp.outputwidth = result + sbp.outputheight = result + + auto_set_bake_margin() + + return {'FINISHED'} + +class SimpleBake_OT_decrease_output_res(Operator): + """Decrease output resolution by 1k""" + bl_idname = "simplebake.decrease_output_res" + bl_label = "-1k" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + x = sbp.outputwidth + sbp.outputwidth = x - 1024 + y = sbp.outputheight + sbp.outputheight = y - 1024 + + if sbp.outputheight < 1: + sbp.outputheight = 1024 + + if sbp.outputwidth < 1: + sbp.outputwidth = 1024 + + + while sbp.outputheight % 1024 != 0: + sbp.outputheight += 1 + + while sbp.outputwidth % 1024 != 0: + sbp.outputwidth += 1 + + result = max(sbp.outputwidth, sbp.outputheight) + sbp.outputwidth = result + sbp.outputheight = result + + auto_set_bake_margin() + + return {'FINISHED'} + +class SimpleBake_OT_panel_show_all(Operator): + """Show all SimpleBake panel items""" + bl_idname = "simplebake.panel_show_all" + bl_label = "Show all" + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + sbp.showtips = True + sbp.presets_show = True + sbp.bake_objects_show = True + sbp.materials_show = True + sbp.pbr_settings_show = True + sbp.aov_settings_show = True + sbp.cyclesbake_settings_show = True + sbp.specials_show = True + sbp.textures_show = True + sbp.export_show = True + sbp.uv_show = True + sbp.other_show = True + sbp.channelpacking_show = True + sbp.admin_settings_show = True + + return {'FINISHED'} + +class SimpleBake_OT_panel_hide_all(Operator): + """Hide all SimpleBake panel items""" + bl_idname = "simplebake.panel_hide_all" + bl_label = "Hide all" + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + sbp.showtips = False + sbp.presets_show = False + sbp.bake_objects_show = False + sbp.materials_show = False + sbp.pbr_settings_show = False + sbp.aov_settings_show = False + sbp.cyclesbake_settings_show = False + sbp.specials_show = False + sbp.textures_show = False + sbp.export_show = False + sbp.uv_show = False + sbp.other_show = False + sbp.channelpacking_show = False + sbp.admin_settings_show = False + + return {'FINISHED'} + + +class SimpleBake_OT_Protect_Clear(Operator): + """If you are online, you likely need to complete the 'I am not a robot' check on the web server. Click here to do that. All will be explained...""" + bl_idname = "simplebake.protect_clear" + bl_label = "Launch web browser" + + def execute(self, context): + import webbrowser + webbrowser.open('http://www.toohey.co.uk/SimpleBake/protect_clear.html', new=2) + + return {'FINISHED'} + + +class SimpleBake_OT_Copy_Settings_Clipboard(Operator): + """Copy all current SimpleBake settings to the clipboard as JSON""" + bl_idname = "simplebake.copy_settings_clipboard" + bl_label = "Copy Settings to Clipboard" + + def execute(self, context): + d = sb_prop_group_to_dict(context) + for p in scene_props: + d[p] = deep_getattr(context.scene, p) + context.window_manager.clipboard = json.dumps(d, indent=2) + self.report({"INFO"}, "SimpleBake settings copied to clipboard") + return {'FINISHED'} + + +class SimpleBake_OT_Export_Path_To_Blend_Location(Operator): + """Set export path to the location of current blend file""" + bl_idname = "simplebake.export_path_to_blend_location" + bl_label = "Set" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + sbp.export_path = get_base_folder_patho(context).as_posix() + "/SimpleBake_Bakes" + sbp.export_path = bpy.path.relpath(sbp.export_path) + return {'FINISHED'} + + #def invoke(self, context, event):b + #context.window_manager.fileselect_add(self) + #return {'RUNNING_MODAL'} + + +classes = ([ + SimpleBake_OT_selectall_pbr, + SimpleBake_OT_selectnone_pbr, + SimpleBake_OT_increase_texture_res, + SimpleBake_OT_decrease_texture_res, + SimpleBake_OT_increase_output_res, + SimpleBake_OT_decrease_output_res, + SimpleBake_OT_panel_show_all, + SimpleBake_OT_panel_hide_all, + SimpleBake_OT_Protect_Clear, + SimpleBake_OT_Export_Path_To_Blend_Location, + SimpleBake_OT_Copy_Settings_Clipboard, + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/preferences.py b/scripts/addons/SimpleBake/ui/preferences.py new file mode 100644 index 0000000..2241de7 --- /dev/null +++ b/scripts/addons/SimpleBake/ui/preferences.py @@ -0,0 +1,768 @@ +import bpy +import os +from pathlib import Path +from bpy.utils import register_class, unregister_class +from bpy.types import Panel, AddonPreferences, Operator +from bpy.props import StringProperty, BoolProperty, EnumProperty, IntProperty +from .. import __package__ as base_package +from .panel import SIMPLEBAKE_PT_main_panel +from .panel import read_settings + +import webbrowser + +try: + from ..auto_update import VersionControl +except: + VersionControl = None +from ..utils import SBConstants, clean_file_name, get_cs_list, blender_default_colorspace + +panel_loc_just_changed = False + +class SimpleBake_Preferences(AddonPreferences): + # this must match the add-on name, use '__package__' + # when defining this in a submodule of a python package. + bl_idname = base_package + + + apikey: StringProperty(name="Sketchfab API Key: ") + img_name_format: StringProperty(name="Image format string", + default="%OBJ%_%BATCH%_%BAKEMODE%_%BAKETYPE%") + des = "Abbreviate the resolution in the image name where appropriate (e.g. \"2K\" instead of \"2048x2048\")" + abbr_res: BoolProperty(description = des, default = True) + + + #Aliases + col_default_index = blender_default_colorspace(float_buffer=False, col=True)[0] + non_col_default_index = blender_default_colorspace(float_buffer=False, col=False)[0] + + + diffuse_alias: StringProperty(name=SBConstants.PBR_DIFFUSE, default=SBConstants.PBR_DIFFUSE) + diffuse_cs: EnumProperty(name="", items=get_cs_list, default=col_default_index) + metal_alias: StringProperty(name=SBConstants.PBR_METAL, default=SBConstants.PBR_METAL) + metal_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + roughness_alias: StringProperty(name=SBConstants.PBR_ROUGHNESS, default=SBConstants.PBR_ROUGHNESS) + roughness_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + glossy_alias: StringProperty(name=SBConstants.PBR_GLOSSY, default=SBConstants.PBR_GLOSSY) + glossy_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + normal_alias: StringProperty(name=SBConstants.PBR_NORMAL, default=SBConstants.PBR_NORMAL) + normal_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + transmission_alias: StringProperty(name=SBConstants.PBR_TRANSMISSION, default=SBConstants.PBR_TRANSMISSION) + transmission_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + #transmissionrough_alias: StringProperty(name=SBConstants.PBR_TRANSMISSION_ROUGH, default=SBConstants.PBR_TRANSMISSION_ROUGH) + #transmissionrough_cs: EnumProperty(name="", items=get_cs_list, default=16) + clearcoat_alias: StringProperty(name=SBConstants.PBR_CLEARCOAT, default=SBConstants.PBR_CLEARCOAT) + clearcoat_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + clearcoatrough_alias: StringProperty(name=SBConstants.PBR_CLEARCOAT_ROUGH, default=SBConstants.PBR_CLEARCOAT_ROUGH) + clearcoatrough_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + clearcoatgloss_alias: StringProperty(name=SBConstants.PBR_CLEARCOAT_GLOSS, default=SBConstants.PBR_CLEARCOAT_GLOSS) + clearcoatgloss_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + emission_alias: StringProperty(name=SBConstants.PBR_EMISSION, default=SBConstants.PBR_EMISSION) + emission_cs: EnumProperty(name="", items=get_cs_list, default=col_default_index) + emission_strength_alias: StringProperty(name=SBConstants.PBR_EMISSION_STRENGTH, default=SBConstants.PBR_EMISSION_STRENGTH) + emission_strength_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + specular_alias: StringProperty(name=SBConstants.PBR_SPECULAR, default=SBConstants.PBR_SPECULAR) + specular_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + alpha_alias: StringProperty(name=SBConstants.PBR_ALPHA, default=SBConstants.PBR_ALPHA) + alpha_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + sss_alias: StringProperty(name=SBConstants.PBR_SSS, default=SBConstants.PBR_SSS) + sss_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + sss_scale_alias: StringProperty(name=SBConstants.PBR_SSS_SCALE, default=SBConstants.PBR_SSS_SCALE) + sss_scale_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + #ssscol_alias: StringProperty(name=SBConstants.PBR_SSSCOL, default=SBConstants.PBR_SSSCOL) + #ssscol_cs: EnumProperty(name="", items=get_cs_list, default=16) + bump_alias: StringProperty(name=SBConstants.PBR_BUMP, default=SBConstants.PBR_BUMP) + bump_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + displacement_alias: StringProperty(name=SBConstants.PBR_DISPLACEMENT, default=SBConstants.PBR_DISPLACEMENT) + displacement_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + + ao_alias: StringProperty(name=SBConstants.AO, default=SBConstants.AO) + ao_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + curvature_alias: StringProperty(name=SBConstants.CURVATURE, default=SBConstants.CURVATURE) + curvature_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + thickness_alias: StringProperty(name=SBConstants.THICKNESS, default=SBConstants.THICKNESS) + thickness_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + vertexcol_alias: StringProperty(name=SBConstants.VERTEXCOL, default=SBConstants.VERTEXCOL) + vertexcol_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + colid_alias: StringProperty(name=SBConstants.COLOURID, default=SBConstants.COLOURID) + colid_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + lightmap_alias: StringProperty(name=SBConstants.LIGHTMAP, default=SBConstants.LIGHTMAP) + lightmap_cs: EnumProperty(name="", items=get_cs_list, default=non_col_default_index) + + #Misc tweaks and options + no_update_check: BoolProperty( + default=False, + description="Don't automatically check for updates to SimpleBake. Keep at current installed version" + ) + ungroup_all_node_groups: BoolProperty( + default=False, + description="Unpack all node groups. Used if you have very unusual node setups in your materials. (e.g. Material Output nodes hidden inside node groups). This will hurt performance, but can avoid crashes with some materials that have lots and lots of nested node groups" + ) + skip_pbr_nodes_check: BoolProperty( + default=False, + description="Skip the check for invalid PBR nodes when baking PBR (Diffuse BSDF, Glossy BSDF etc.) NOT RECOMMENDED." + ) + dont_replace_nonpbr_shaders: BoolProperty( + default=False, + description="Don't automatically replace non-PBR shaders with PBR equivalents where possible NOT RECOMMENDED." + ) + disable_auto_smooth_for_split_normals: BoolProperty( + default=True, + description="The auto-smooth option causes issues when baking normal maps for objects with custom split normals. This option will cause SimpleBake to disable auto-smooth for the bake to stop weird artifacts in the normal map" + ) + pbr_sample_count2: IntProperty( + default=16, + description="Override the sample count used for PBR bakes. The default is 2, and this is usually fine for all PBR bakes as they are baked as emission (i.e. no noise is possible)" + ) + panel_location: EnumProperty(name="Panel location", default=0, items=[\ + ("renderpanel", "Render Panel", "Display SimpleBake on the Render Properties Panel (the camera icon)"),\ + ("npanel", "N-Panel", "Display SimpleBake on the N-Panel (also called the properties panel) in the 3D viewport")\ + ]) + + batch_name_max_length: IntProperty( + default=50, + description="Change the maximum length of the batch name property. WARNING: setting this value too high can lead to max path length errors on Windows" + ) + + togglesorboxes: EnumProperty(name="Toggles or tickboxes", default=0, items=[\ + ("toggles", "Use toggles", "Changes the appearance of the options on the SimpleBake panel (toggles)"),\ + ("tickboxes", "Use tickboxes", "Changes the appearance of the options on the SimpleBake panel (tickboxes)")\ + ]) + + solidshadingonbake: BoolProperty( + default=True, + description="It is recommended to only use solid shaing during baking to\ + increase performance and reduce the chance of crashes" + ) + saveonbake: BoolProperty( + default=True, + description="Save blend file prior to any baking operation" + ) + disable_other_addons2: BoolProperty( + default=False, + description="Disable other addons when baking to prevent conflicts" + ) + check_for_conflicting_addons: BoolProperty( + default=True, + description="Check for addons known to conflict with SimpleBake and prevent bake" + ) + purge_after_bake: BoolProperty( + default=False, + description="Purge unused data blocks (materials etc.) from the blend file after bake. Use with caution as this won't only apply to SimpleBake created data" + ) + override_optix_block: BoolProperty( + default=False, + description="Baking with Optix enabled has been buggy for years. It is blocked in SimpleBake by default, but can be overriden with this option. Not recommended." + ) + capitalise_file_extensions: BoolProperty( + default=False, + description="Capitalise the file extension of exported images (e.g. .PNG instead of .png)" + ) + + @classmethod + def reset_img_string(cls, context): + prefs = context.preferences.addons[base_package].preferences + prefs.property_unset("img_name_format") + bpy.ops.wm.save_userpref() + + @classmethod + def reset_aliases(cls, context): + prefs = context.preferences.addons[base_package].preferences + + prefs.property_unset("diffuse_alias") + prefs.property_unset("metal_alias") + prefs.property_unset("roughness_alias") + prefs.property_unset("normal_alias") + prefs.property_unset("transmission_alias") + #prefs.property_unset("transmissionrough_alias") + prefs.property_unset("clearcoat_alias") + prefs.property_unset("clearcoatrough_alias") + prefs.property_unset("clearcoatgloss_alias") + prefs.property_unset("emission_alias") + prefs.property_unset("emission_strength_alias") + prefs.property_unset("specular_alias") + prefs.property_unset("alpha_alias") + prefs.property_unset("bump_alias") + prefs.property_unset("displacement_alias") + prefs.property_unset("sss_alias") + prefs.property_unset("sss_scale_alias") + #prefs.property_unset("ssscol_alias") + prefs.property_unset("ao_alias") + prefs.property_unset("curvature_alias") + prefs.property_unset("thickness_alias") + prefs.property_unset("vertexcol_alias") + prefs.property_unset("colid_alias") + prefs.property_unset("lightmap_alias") + + prefs.property_unset("diffuse_cs") + prefs.property_unset("metal_cs") + prefs.property_unset("roughness_cs") + prefs.property_unset("normal_cs") + prefs.property_unset("transmission_cs") + #prefs.property_unset("transmissionrough_cs") + prefs.property_unset("clearcoat_cs") + prefs.property_unset("clearcoatrough_cs") + prefs.property_unset("clearcoatgloss_cs") + prefs.property_unset("emission_cs") + prefs.property_unset("emission_strength_cs") + prefs.property_unset("specular_cs") + prefs.property_unset("alpha_cs") + prefs.property_unset("bump_cs") + prefs.property_unset("displacement_cs") + prefs.property_unset("sss_cs") + prefs.property_unset("sss_scale_cs") + #prefs.property_unset("ssscol_cs") + prefs.property_unset("ao_cs") + prefs.property_unset("curvature_cs") + prefs.property_unset("thickness_cs") + prefs.property_unset("vertexcol_cs") + prefs.property_unset("colid_cs") + prefs.property_unset("lightmap_cs") + + bpy.ops.wm.save_userpref() + + def get_alias_dict(self): + alias_dict = {} + alias_dict[SBConstants.PBR_DIFFUSE] = clean_file_name(self.diffuse_alias) + alias_dict[SBConstants.PBR_METAL] = clean_file_name(self.metal_alias) + alias_dict[SBConstants.PBR_ROUGHNESS] = clean_file_name(self.roughness_alias) + alias_dict[SBConstants.PBR_GLOSSY] = clean_file_name(self.glossy_alias) + alias_dict[SBConstants.PBR_NORMAL] = clean_file_name(self.normal_alias) + alias_dict[SBConstants.PBR_TRANSMISSION] = clean_file_name(self.transmission_alias) + #alias_dict[SBConstants.PBR_TRANSMISSION_ROUGH] = clean_file_name(self.transmissionrough_alias) + alias_dict[SBConstants.PBR_CLEARCOAT] = clean_file_name(self.clearcoat_alias) + alias_dict[SBConstants.PBR_CLEARCOAT_ROUGH] = clean_file_name(self.clearcoatrough_alias) + alias_dict[SBConstants.PBR_CLEARCOAT_GLOSS] = clean_file_name(self.clearcoatgloss_alias) + alias_dict[SBConstants.PBR_EMISSION] = clean_file_name(self.emission_alias) + alias_dict[SBConstants.PBR_EMISSION_STRENGTH] = clean_file_name(self.emission_strength_alias) + alias_dict[SBConstants.PBR_SPECULAR] = clean_file_name(self.specular_alias) + alias_dict[SBConstants.PBR_ALPHA] = clean_file_name(self.alpha_alias) + alias_dict[SBConstants.PBR_SSS] = clean_file_name(self.sss_alias) + alias_dict[SBConstants.PBR_SSS_SCALE] = clean_file_name(self.sss_scale_alias) + #alias_dict[SBConstants.PBR_SSSCOL] = clean_file_name(self.ssscol_alias) + alias_dict[SBConstants.PBR_BUMP] = clean_file_name(self.bump_alias) + alias_dict[SBConstants.PBR_DISPLACEMENT] = clean_file_name(self.displacement_alias) + alias_dict[SBConstants.AO] = clean_file_name(self.ao_alias) + alias_dict[SBConstants.CURVATURE] = clean_file_name(self.curvature_alias) + alias_dict[SBConstants.THICKNESS] = clean_file_name(self.thickness_alias) + alias_dict[SBConstants.VERTEXCOL] = clean_file_name(self.vertexcol_alias) + alias_dict[SBConstants.COLOURID] = clean_file_name(self.colid_alias) + alias_dict[SBConstants.LIGHTMAP] = clean_file_name(self.lightmap_alias) + + return alias_dict + + def get_cs_dict(self): + cs_dict = {} + cs_dict[SBConstants.PBR_DIFFUSE] = self.diffuse_cs + cs_dict[SBConstants.PBR_METAL] = self.metal_cs + cs_dict[SBConstants.PBR_ROUGHNESS] = self.roughness_cs + cs_dict[SBConstants.PBR_GLOSSY] = self.glossy_cs + cs_dict[SBConstants.PBR_NORMAL] = self.normal_cs + cs_dict[SBConstants.PBR_TRANSMISSION] = self.transmission_cs + #cs_dict[SBConstants.PBR_TRANSMISSION_ROUGH] = self.transmissionrough_cs + cs_dict[SBConstants.PBR_CLEARCOAT] = self.clearcoat_cs + cs_dict[SBConstants.PBR_CLEARCOAT_ROUGH] = self.clearcoatrough_cs + cs_dict[SBConstants.PBR_CLEARCOAT_GLOSS] = self.clearcoatgloss_cs + cs_dict[SBConstants.PBR_EMISSION] = self.emission_cs + cs_dict[SBConstants.PBR_EMISSION_STRENGTH] = self.emission_strength_cs + cs_dict[SBConstants.PBR_SPECULAR] = self.specular_cs + cs_dict[SBConstants.PBR_ALPHA] = self.alpha_cs + cs_dict[SBConstants.PBR_SSS] = self.sss_cs + cs_dict[SBConstants.PBR_SSS_SCALE] = self.sss_scale_cs + #cs_dict[SBConstants.PBR_SSSCOL] = self.ssscol_cs + cs_dict[SBConstants.PBR_BUMP] = self.bump_cs + cs_dict[SBConstants.PBR_DISPLACEMENT] = self.displacement_cs + cs_dict[SBConstants.AO] = self.ao_cs + cs_dict[SBConstants.CURVATURE] = self.curvature_cs + cs_dict[SBConstants.THICKNESS] = self.thickness_cs + cs_dict[SBConstants.VERTEXCOL] = self.vertexcol_cs + cs_dict[SBConstants.COLOURID] = self.colid_cs + cs_dict[SBConstants.LIGHTMAP] = self.lightmap_cs + + return cs_dict + + def draw(self, context): + sbp = context.scene.SimpleBake_Props + layout = self.layout + box = layout.box() + row = box.row() + row.scale_y = 2 + row.operator("simplebake.release_notes", icon="MOD_WAVE") + if VersionControl != None: + if not VersionControl.at_current: + row = box.row() + row.scale_y = 2 + row.alert = True + if VersionControl.just_updated: + row.label(text=f"Please restart Blender") + else: + row.label(text=f"Version {VersionControl.current_version_str} of SimpleBake is available!") + row.operator("simplebake.auto_update", icon="MOD_WAVE") + + #Always allow rollback + row = box.row() + row.scale_y = 2 + row.operator("simplebake.rollback_update", icon="FILE_REFRESH", text="Rollback to previous version of SimpleBake") + + #Support + box = layout.box() + row = box.row() + row.scale_y = 2 + row.operator("simplebake.support", icon="HELP") + + #Discord + box = layout.box() + row = box.row() + row.scale_y = 2 + row.operator("simplebake.discord", icon="OUTLINER_OB_LIGHT") + + #Patreon + box = layout.box() + row = box.row() + row.scale_y = 2 + row.operator("simplebake.patreon", icon="FUND") + + + #Sketchfab + box = layout.box() + row = box.row() + row.label(text="Enter your Sketchfab API key below. Don't forget to click \"Save Preferences\" after.") + row = box.row() + row.prop(self, "apikey") + + box = layout.box() + row = box.row() + row.label(text="Format for baked image names. Valid variables are:") + + row = box.row() + row.label(text="%OBJ% (object name or 'MergedBake')") + row.scale_y = 0.5 + row = box.row() + row.label(text="%BATCH% (batch name)") + row.scale_y = 0.5 + row = box.row() + row.label(text="%BAKEMODE% (pbr or cycles bake)") + row.scale_y = 0.5 + row = box.row() + row.label(text="%BAKETYPE% (diffuse, emission etc.)") + row.scale_y = 0.5 + row = box.row() + row.label(text="%RESOLUTION% (e.g. 1024x1024)") + row.scale_y = 0.5 + row = box.row() + row.label(text="%BLEND_FILE_NAME% (name of blend file if saved)") + row.scale_y = 0.5 + row = box.row() + row.label(text="%FRAME% (Current frame number e.g. 0002 when baking an Image Sequence)") + row.scale_y = 0.5 + row = box.row() + row.label(text="%MAT% (material name, when 'Texture Per Material' is enabled)") + row.scale_y = 0.5 + + + row = box.row() + row.prop(self, "img_name_format") + row = box.row() + row.prop(self, "abbr_res", text="Abbreviate resolution") + row = box.row() + row.operator("simplebake.default_imgname_string") + + #PBR Aliases + box = layout.box() + + row = box.row() + row.label(text="Aliases and colour space settings for PBR bake types") + + row = box.row() + row.label(text="WARNING: Sketchfab looks for certain values. Changing these may break SF Upload") + + row = box.row() + col = row.column() + col.prop(self, "diffuse_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "diffuse_cs") + + row = box.row() + col = row.column() + col.prop(self, "metal_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "metal_cs") + + row = box.row() + col = row.column() + col.prop(self, "sss_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "sss_cs") + + row = box.row() + col = row.column() + col.prop(self, "sss_scale_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "sss_scale_cs") + + row = box.row() + col = row.column() + col.prop(self, "roughness_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "roughness_cs") + + row = box.row() + col = row.column() + col.prop(self, "glossy_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "glossy_cs") + + row = box.row() + col = row.column() + col.prop(self, "transmission_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "transmission_cs") + + + row = box.row() + col = row.column() + col.prop(self, "clearcoat_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "clearcoat_cs") + + row = box.row() + col = row.column() + col.prop(self, "clearcoatrough_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "clearcoatrough_cs") + + row = box.row() + col = row.column() + col.prop(self, "clearcoatgloss_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "clearcoatgloss_cs") + + row = box.row() + col = row.column() + col.prop(self, "emission_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "emission_cs") + + row = box.row() + col = row.column() + col.prop(self, "emission_strength_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "emission_strength_cs") + + row = box.row() + col = row.column() + col.prop(self, "specular_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "specular_cs") + + row = box.row() + col = row.column() + col.prop(self, "alpha_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "alpha_cs") + + row = box.row() + col = row.column() + col.prop(self, "normal_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "normal_cs") + + row = box.row() + col = row.column() + col.prop(self, "bump_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "bump_cs") + + row = box.row() + col = row.column() + col.prop(self, "displacement_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "displacement_cs") + + #Specials Aliases + box = layout.box() + + row = box.row() + row.label(text="Aliases for special bake types") + + row = box.row() + col = row.column() + col.prop(self, "ao_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "ao_cs") + + row = box.row() + col = row.column() + col.prop(self, "curvature_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "curvature_cs") + + row = box.row() + col = row.column() + col.prop(self, "thickness_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "thickness_cs") + + row = box.row() + col = row.column() + col.prop(self, "vertexcol_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "vertexcol_cs") + + row = box.row() + col = row.column() + col.prop(self, "colid_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "colid_cs") + + row = box.row() + col = row.column() + col.prop(self, "lightmap_alias") + col = row.column() + col.alignment = 'RIGHT' + col.prop(self, "lightmap_cs") + + #Reset button + box = layout.box() + row = box.row() + row.operator("simplebake.restore_default_aliases") + + box = layout.box() + row = box.row() + row.label(text="Tweaks and Misc Options") + row = box.row() + row.prop(self, "solidshadingonbake", text="Solid shading on bake") + row = box.row() + row.prop(self, "saveonbake", text="Save blend file prior to bake") + row = box.row() + row.prop(self, "no_update_check", text="Don't check for SimpleBake updates on Blender start") + row = box.row() + row.prop(self, "ungroup_all_node_groups", text="Unpack ALL node groups in materials") + row = box.row() + row.prop(self, "skip_pbr_nodes_check", text="Skip check for invalid nodes for PBR bake (NOT RECOMMENDED)") + row = box.row() + row.prop(self, "dont_replace_nonpbr_shaders", text="Don't replace non-PBR shaders (NOT RECOMMENDED)") + row = box.row() + row.prop(self, "disable_auto_smooth_for_split_normals", text="Disable auto-smooth for custom split normals") + row = box.row() + + row = box.row(align=False) + row.scale_y = 1.4 + split = row.split(factor=0.6) # adjust factor to control spacing + split.label(text="Override PBR sample count") + split.prop(self, "pbr_sample_count2", text="") + row = box.row(align=False) + row.scale_y = 1.4 + split = row.split(factor=0.6) # adjust factor to control spacing + split.label(text="Batch name max length") + split.prop(self, "batch_name_max_length", text="") + + + row = box.row() + row.prop(self, "disable_other_addons2", text="DEBUG: Disable other addons on bake") + row = box.row() + row.prop(self, "check_for_conflicting_addons", text="Check for conflicting addons") + row = box.row() + row.prop(self, "purge_after_bake", text="Purge unused data from blend file after bake (CAUTION)") + row = box.row() + row.prop(self, "override_optix_block", text="Override block on baking with Optix (NOT RECOMMENDED)") + row = box.row() + row.prop(self, "capitalise_file_extensions", text="Capitalise file extensions on export") + + row = box.row() + row = box.row() + row.alert = True + row.scale_y = 0.5 + row.label(text="WARNING: Based on my testing, Blender crashes WAY more when SimpleBake") + + row = box.row() + row.alert = True + row.scale_y = 0.5 + row.label(text="is displayed in the N-Panel. I haven't been able to find out why") + + row = box.row() + row.alert = True + row.scale_y = 0.5 + row.label(text="Use with extreme caution!") + + row = box.row() + row.scale_y = 1.4 + split = row.split(factor=0.2) + col = split.column() + col.label(text="Panel location") + col = split.column() + col.prop(self, "panel_location", text="") + col = split.column() + col.operator("simplebake.change_panel_location") + global panel_loc_just_changed + if panel_loc_just_changed: + row = box.row() + row.alert = True + row.label(text="Restart Blender for changes to take effect") + + row = box.row() + row.scale_y = 1.4 + split = row.split(factor=0.2) + col = split.column() + col.label(text="Toggles or tickboxes") + col = split.column() + col.prop(self, "togglesorboxes", text="") + col = split.column() + col.operator("simplebake.change_panel_toggles") + + + + +class SimpleBake_OT_change_panel_location(Operator): + """Change the location of the SimpleBake panel""" + bl_idname = "simplebake.change_panel_location" + bl_label = "Change" + + def execute(self, context): + prefs = context.preferences.addons[base_package].preferences + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" / "settings" + savename = "panel_location.txt" + + if not os.path.isdir(str(p)): + os.makedirs(str(p)) + + content = prefs.panel_location + + with open(str(p / savename), 'w') as file: + file.write(content) + + global panel_loc_just_changed + panel_loc_just_changed = True + + + return {'FINISHED'} + +class SimpleBake_OT_change_panel_toggles(Operator): + """Change the location of the SimpleBake panel""" + bl_idname = "simplebake.change_panel_toggles" + bl_label = "Change" + + def execute(self, context): + prefs = context.preferences.addons[base_package].preferences + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" / "settings" + savename = "toggles.txt" + + if not os.path.isdir(str(p)): + os.makedirs(str(p)) + + content = prefs.togglesorboxes + + with open(str(p / savename), 'w') as file: + file.write(content) + + read_settings() + unregister_class(SIMPLEBAKE_PT_main_panel) + register_class(SIMPLEBAKE_PT_main_panel) + + self.report({'INFO'}, "Change made") + + return {'FINISHED'} + + + +class SimpleBake_OT_restore_default_aliases(Operator): + """Reset the image name aliases""" + bl_idname = "simplebake.restore_default_aliases" + bl_label = "Restore all aliases and colour space settings to default" + + def execute(self, context): + SimpleBake_Preferences.reset_aliases(context) + return {'FINISHED'} + +class SimpleBake_OT_default_imgname_string(Operator): + """Reset the image name string to default (Sketchfab compatible)""" + bl_idname = "simplebake.default_imgname_string" + bl_label = "Restore image string to default" + + def execute(self, context): + SimpleBake_Preferences.reset_img_string(context) + + return {'FINISHED'} + +class SimpleBake_OT_Release_Notes(Operator): + """View the SimpleBake Release Notes""" + bl_idname = "simplebake.release_notes" + bl_label = "View the SimpleBake Release Notes" + + def execute(self, context): + webbrowser.open('http://www.toohey.co.uk/SimpleBake/releasenotes4.html', new=2) + return {'FINISHED'} + +class SimpleBake_OT_Support(Operator): + """Open the SimpleBake Support Page""" + bl_idname = "simplebake.support" + bl_label = "Open the SimpleBake Support Page" + + def execute(self, context): + webbrowser.open('http://www.toohey.co.uk/SimpleBake/support', new=2) + return {'FINISHED'} + +class SimpleBake_OT_Discord(Operator): + """Open the SimpleBake Discord""" + bl_idname = "simplebake.discord" + bl_label = "Open the SimpleBake Discord" + + def execute(self, context): + webbrowser.open('https://discord.gg/ux9adAM2ZZ', new=2) + return {'FINISHED'} + +class SimpleBake_OT_Patreon(Operator): + """Support SimpleBake on Patreon""" + bl_idname = "simplebake.patreon" + bl_label = "Support SimpleBake on Patreon" + + def execute(self, context): + webbrowser.open('https://patreon.com/HaughtyGrayAlien?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink', new=2) + return {'FINISHED'} + +classes = ([ + SimpleBake_Preferences, + SimpleBake_OT_Release_Notes, + SimpleBake_OT_Support, + SimpleBake_OT_restore_default_aliases, + SimpleBake_OT_default_imgname_string, + SimpleBake_OT_Discord, + SimpleBake_OT_Patreon, + SimpleBake_OT_change_panel_location, + SimpleBake_OT_change_panel_toggles + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/presets_list.py b/scripts/addons/SimpleBake/ui/presets_list.py new file mode 100644 index 0000000..6883068 --- /dev/null +++ b/scripts/addons/SimpleBake/ui/presets_list.py @@ -0,0 +1,107 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, PropertyGroup, UIList +from bpy.props import EnumProperty + +import os +from pathlib import Path + +class SIMPLEBAKE_UL_Presets_List(UIList): + """UIList.""" + + def draw_item(self, context, layout, data, item, icon, active_data, + active_propname, index): + + # We could write some code to decide which icon to use here... + custom_icon = 'PACKAGE' + + # Make sure your code supports all 3 layout types + if self.layout_type in {'DEFAULT', 'COMPACT'}: + layout.label(text=item.name, icon = custom_icon) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text="", icon = custom_icon) + +class SimpleBake_OT_preset_refresh(Operator): + """Refresh list of SimpleBake presets""" + bl_idname = "simplebake.preset_refresh" + bl_label = "Refresh" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + sbp.presets_list.clear() + + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" + + try: + presets = sorted(os.listdir(str(p))) + presets = [pr for pr in presets if not os.path.isdir(str(p / pr))] + except Exception as e: + print(repr(e)) + self.report({"INFO"}, "No presets found") + return {'CANCELLED'} + + if len(presets) == 0: + self.report({"INFO"}, "No presets found") + return {'CANCELLED'} + + for preset in presets: + #List should be clear + i = sbp.presets_list.add() + i.name = preset + + return {'FINISHED'} + +class SimpleBake_OT_preset_delete(Operator): + """Delete selected SimpleBake preset""" + bl_idname = "simplebake.preset_delete" + bl_label = "Delete" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + try: + sbp.presets_list[sbp.presets_list_index].name + return True + except: + return False + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + p = Path(bpy.utils.script_path_user()) + p = p.parents[1] + p = p / "data" / "SimpleBake" + + index = sbp.presets_list_index + item = sbp.presets_list[index] + p = p / item.name + + os.remove(str(p)) + + #Refreh the list + + bpy.ops.simplebake.preset_refresh() + + return {'FINISHED'} + + +classes = ([ + SIMPLEBAKE_UL_Presets_List, + SimpleBake_OT_preset_refresh, + SimpleBake_OT_preset_delete + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/ui/presets_list_local.py b/scripts/addons/SimpleBake/ui/presets_list_local.py new file mode 100644 index 0000000..4badec7 --- /dev/null +++ b/scripts/addons/SimpleBake/ui/presets_list_local.py @@ -0,0 +1,115 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator, PropertyGroup, UIList +from bpy.props import EnumProperty + +def find_existing_local_presets(context): + """ + Returns a list of all existing SimpleBake local presets + """ + sbp = context.scene.SimpleBake_Props + + #Get existing presets + existing_presets = [] + for k in list(sbp.keys()): + if k.startswith("SB_local_preset_"): + existing_presets.append(k.replace("SB_local_preset_", "")) + + existing_presets = sorted(existing_presets) + + return existing_presets + +def del_preset(context, all=False, friendly_name=""): + """ + Deletes either a specified preset or all presets + """ + sbp = context.scene.SimpleBake_Props + + del_list = [] + name = "SB_local_preset_" if all else f"SB_local_preset_{friendly_name}" + + for k in list(sbp.keys()): + if k == name: + del_list.append(k) + for d in del_list: + del sbp[d] + + +class SIMPLEBAKE_UL_Local_Presets_List(UIList): + """UIList.""" + + def draw_item(self, context, layout, data, item, icon, active_data, + active_propname, index): + + # We could write some code to decide which icon to use here... + custom_icon = 'PACKAGE' + + # Make sure your code supports all 3 layout types + if self.layout_type in {'DEFAULT', 'COMPACT'}: + layout.label(text=item.name, icon = custom_icon) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text="", icon = custom_icon) + +class SimpleBake_OT_local_preset_refresh(Operator): + """Refresh list of local SimpleBake presets""" + bl_idname = "simplebake.local_preset_refresh" + bl_label = "Local Refresh" + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + sbp.local_presets_list.clear() + + for preset in find_existing_local_presets(context): + #List should be clear + i = sbp.local_presets_list.add() + i.name = preset + + return {'FINISHED'} + +class SimpleBake_OT_local_preset_delete(Operator): + """Delete selected SimpleBake preset""" + bl_idname = "simplebake.local_preset_delete" + bl_label = "Delete local preset" + + @classmethod + def poll(cls,context): + sbp = context.scene.SimpleBake_Props + try: + sbp.local_presets_list[sbp.local_presets_list_index].name + return True + except: + return False + + def execute(self, context): + sbp = context.scene.SimpleBake_Props + + index = sbp.local_presets_list_index + item = sbp.local_presets_list[index] + del_preset(context, friendly_name = item.name) + + #Refreh the list + + bpy.ops.simplebake.local_preset_refresh() + + + return {'FINISHED'} + + +classes = ([ + SIMPLEBAKE_UL_Local_Presets_List, + SimpleBake_OT_local_preset_refresh, + SimpleBake_OT_local_preset_delete + ]) + +def register(): + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) diff --git a/scripts/addons/SimpleBake/utils.py b/scripts/addons/SimpleBake/utils.py new file mode 100644 index 0000000..f33a0db --- /dev/null +++ b/scripts/addons/SimpleBake/utils.py @@ -0,0 +1,748 @@ +import bpy +from bpy.types import Operator, Macro +from bpy.props import StringProperty, BoolProperty +from bpy.utils import register_class, unregister_class +import sys +from pathlib import Path +import base64 +import mathutils +import tempfile +import os +import numpy as np + + +suppress_for_preset_load = False +_disable_impossible_running = False + +def blender_refresh(): + + return True + # print_message(context, "Blender refresh") + # bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True) + # for area in context.screen.areas: + # area.tag_redraw() + # context.view_layer.update() + # context.view_layer.depsgraph.update() + + +#Takes a path object +def can_write_to_location(dir_path): + #First check if the folder already exists or not + if not os.path.exists(str(dir_path)): + #Find the first parent that does exist, see if we can write there + last = "" + while not os.path.exists(str(dir_path)): + dir_path = dir_path.parent + + if str(dir_path) == last: + break + last = str(dir_path) + + test_file_path = dir_path / "test_file.tmp" + + try: + # Attempt to create a temporary file in the directory + with open(str(test_file_path), 'w') as temp_file: + temp_file.write("Test") + # If successful, remove the test file + os.remove(str(test_file_path)) + return True + except PermissionError: + # Permission denied + return False + except Exception as e: + # Other exceptions could be handled differently if needed + print(f"An error occurred: {e}") + return False + + + +def disable_impossible(context): + global suppress_for_preset_load, _disable_impossible_running + if _disable_impossible_running: + return + _disable_impossible_running = True + try: + sbp = context.scene.SimpleBake_Props + suppress_for_preset_load = True + + #Start with a refresh of the objects list + bpy.ops.simplebake.refresh_bake_object_list() + #And AOVs + bpy.ops.simplebake.refresh_aov_list() + #And UVs + bpy.ops.simplebake.sync_uv_list() + + if bpy.app.version >= (4,0,0): + sbp.selected_transrough = False + sbp.selected_ssscol = False + + if not sbp.save_bakes_external: + sbp.rundenoise = False + sbp.rough_glossy_switch = SBConstants.PBR_ROUGHNESS + sbp.ccrough_glossy_switch = SBConstants.PBR_CLEARCOAT_ROUGH + sbp.normal_format_switch = SBConstants.NORMAL_OPENGL + sbp.multiply_diffuse_ao = "purediffuse" + sbp.do_aa = False + sbp.save_obj_external = False + + for cpt in sbp.cp_list: + if "png_compression" not in cpt: + cpt.png_compression = 15 + + #if sbp.fbx_preset_name == "": + #sbp.fbx_preset_name = "None" + + if sbp.multiply_diffuse_ao == "diffusexao" and sbp.global_mode == SBConstants.PBR: + sbp.selected_ao = True + + if sbp.s2a_opmode == "decals": + sbp.multiply_diffuse_ao = "purediffuse" + + if not sbp.keep_internal_after_export: + sbp.copy_and_apply = False + + if sbp.tex_per_mat and (sbp.selected_s2a or sbp.cycles_s2a): + sbp.tex_per_mat = False + + if sbp.tex_per_mat and sbp.expand_mat_uvs: + sbp.new_uv_option = True + if sbp.tex_per_mat and not sbp.expand_mat_uvs: + sbp.new_uv_option = False + + if not sbp.merged_bake or not (sbp.export_mesh_individual_or_combined == "combined"): + sbp.merge_export_obj = False + + if not sbp.merged_bake: + sbp.join_objs_to_proxy = False + + finally: + suppress_for_preset_load = False + _disable_impossible_running = False + + +def get_bake_objects(context): + sbp = context.scene.SimpleBake_Props + #Work out our object selection + objects = [] + + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch": + from .bake_operators.auto_match_operators import SimpleBake_OT_AutoMatch_Operation as amo + #objects = [context.scene.objects[i] for i in list(amo.hl_matches.keys())] + objects = list(amo.hl_matches.keys()) + + elif sbp.selected_s2a: #Standard S2A bake or Decals + objects = [sbp.targetobj.name] if sbp.targetobj != None else [] + + elif sbp.cycles_s2a: #Standard S2A bake + objects = [sbp.targetobj_cycles.name] if sbp.targetobj_cycles != None else [] + + else: + objects = [i.obj_point.name for i in sbp.objects_list] + + return objects + + + +#active_tiles is sorted list of UDIM numbers (1001, 1002 etc.) +#total_tiles is highest tile index (e.g. 11 if the highest numbered active tile is 1011) +def get_udim_tiles(context, object_name, threshold=0.001): + import numpy as np + + obj = context.scene.objects.get(object_name) + if not obj or not hasattr(obj.data, 'uv_layers') or not obj.data.uv_layers: + return {"active_tiles": [], "total_tiles": 0, "bbox_tiles": 0} + + uv_layer = obj.data.uv_layers.active + if uv_layer is None: + return {"active_tiles": [], "total_tiles": 0, "bbox_tiles": 0} + + n = len(uv_layer.data) + if n == 0: + return {"active_tiles": [], "total_tiles": 0, "bbox_tiles": 0} + + buf = np.empty(n * 2, dtype=np.float64) + uv_layer.data.foreach_get("uv", buf) + uvs = buf.reshape(-1, 2) + + u = uvs[:, 0].copy() + v = uvs[:, 1].copy() + + # Snap UV coordinates that sit very close to the upper edge of a tile back + # into that tile, to avoid a vertex at e.g. v=0.9999 being counted as tile 1. + frac_u = u % 1.0 + frac_v = v % 1.0 + u[frac_u > 1.0 - threshold] -= threshold + v[frac_v > 1.0 - threshold] -= threshold + + # Subtract a tiny epsilon before flooring so that vertices sitting exactly + # on an integer boundary (e.g. v=1.0, where 1.0 % 1.0 == 0.0) snap to the + # tile below rather than the tile above. + tu = np.floor(u - 1e-9).astype(np.int32) + tv = np.floor(v - 1e-9).astype(np.int32) + + mask = (tu >= 0) & (tu <= 9) & (tv >= 0) & (tv <= 9) + tile_nums = 1001 + tu[mask] + 10 * tv[mask] + + import math + u_extent = math.ceil(float(np.max(u))) - math.floor(float(np.min(u))) + v_extent = math.ceil(float(np.max(v))) - math.floor(float(np.min(v))) + bbox_tiles = max(1, u_extent) * max(1, v_extent) + + if tile_nums.size == 0: + return {"active_tiles": [], "total_tiles": 0, "bbox_tiles": bbox_tiles} + + udim_tiles = set(np.unique(tile_nums).tolist()) + + return { + "active_tiles": sorted(udim_tiles), + "total_tiles": max(udim_tiles) - 1000, + "bbox_tiles": bbox_tiles + } + +# def get_max_udim_tiles_from_bake_objects(context): +# sbp = context.scene.SimpleBake_Props +# objs = [i.name for i in sbp.objects_list] +# +# max = 0 +# +# for obj_name in objs: +# try: +# d = get_udim_tiles(context, obj_name) +# if len(d["active_tiles"]) > max: +# max = len(d["active_tiles"]) +# except: +# pass +# +# return max + +# --- UDIM tile cache ----------------------------------------------------------- +# Keyed by object name. Dirty set contains names needing recompute. +_udim_tile_cache: dict = {} +_udim_dirty_objects: set = set() + + +def invalidate_udim_cache(object_names=None): + """Mark objects as needing recompute. Pass None to invalidate everything.""" + global _udim_dirty_objects, _udim_tile_cache + if object_names is None: + _udim_tile_cache.clear() + _udim_dirty_objects.clear() + else: + for name in object_names: + _udim_dirty_objects.add(name) + + +@bpy.app.handlers.persistent +def _sb_udim_depsgraph_handler(scene, depsgraph): + for update in depsgraph.updates: + if not update.is_updated_geometry: + continue + id_data = update.id + if isinstance(id_data, bpy.types.Object) and id_data.type == 'MESH': + # Topology change on the object itself + _udim_dirty_objects.add(id_data.name) + elif isinstance(id_data, bpy.types.Mesh): + # UV edits come through as mesh data-block updates — + # find all objects that use this mesh and dirty them + for obj in scene.objects: + if obj.type == 'MESH' and obj.data == id_data: + _udim_dirty_objects.add(obj.name) + + +def get_cached_udim_tiles(context, object_name, threshold=0.001): + global _udim_tile_cache, _udim_dirty_objects + if object_name in _udim_dirty_objects or object_name not in _udim_tile_cache: + #Cache result from the "real" method + _udim_tile_cache[object_name] = get_udim_tiles(context, object_name, threshold) + #Now clean + _udim_dirty_objects.discard(object_name) + return _udim_tile_cache[object_name] + + +# ------------------------------------------------------------------------------ + + + + +def find_closest_obj(context, object_name, max_distance=0.5): + + ref_obj = context.scene.objects.get(object_name) + if not ref_obj: + raise ValueError(f"No object found with the name '{object_name}'") + + closest_mesh = None + closest_distance = float('inf') + + for obj in context.scene.objects: + if obj.type == 'MESH' and obj != ref_obj and "SB_replaced_orig_name" not in obj: + distance = (ref_obj.location - obj.location).length + if distance < closest_distance: + closest_distance = distance + closest_mesh = obj + + return closest_mesh if closest_distance <= max_distance else None + + + + + +class SBConstants: + + #Constants + PBR = "PBR" + PBRS2A = "PBR StoA" + PBRS2A_AUTOMATCH = "PBR StoA AutoMatch" + PBRS2A_DECALS = "PBR StoA Decals" + CYCLESBAKE = "CyclesBake" + CYCLESBAKE_S2A = "CyclesBake S2A" + CYCLESBAKES2A_AUTOMATCH = "CyclesBake S2A Auto" + SPECIALS = "Specials" + SPECIALS_PBR_TARGET_ONLY = "specials_pbr_targetonly" + SPECIALS_CYCLES_TARGET_ONLY = "specials_cycles_targetonly" + PBRAOVS = "AOV" + + + #PBR Names + PBR_DIFFUSE = "Diffuse" + PBR_METAL = "Metalness" + PBR_SSS = "SSS" + PBR_SSS_SCALE = "SSS Scale" + PBR_SSSCOL = "SSS Colour" + PBR_ROUGHNESS = "Roughness" + PBR_GLOSSY = "Glossiness" + PBR_NORMAL = "Normal" + PBR_TRANSMISSION = "Transmission" + PBR_TRANSMISSION_ROUGH = "Transmission Roughness" + PBR_CLEARCOAT = "Clearcoat" + PBR_CLEARCOAT_ROUGH = "Clearcoat Roughness" + PBR_CLEARCOAT_GLOSS = "Clearcoat Glossiness" + PBR_EMISSION = "Emission" + PBR_EMISSION_STRENGTH = "Emission Strength" + PBR_SPECULAR = "Specular" + PBR_ALPHA = "Alpha" + PBR_BUMP = "Bump" + PBR_DISPLACEMENT = "Displacement" + + ALL_PBR_MODES = ([PBR_DIFFUSE, PBR_METAL, PBR_SSS,PBR_SSS_SCALE, PBR_SSSCOL, PBR_ROUGHNESS, PBR_GLOSSY, + PBR_NORMAL, PBR_TRANSMISSION, PBR_TRANSMISSION_ROUGH, PBR_CLEARCOAT, + PBR_CLEARCOAT_ROUGH, PBR_CLEARCOAT_GLOSS, PBR_EMISSION, PBR_EMISSION_STRENGTH, PBR_SPECULAR, PBR_ALPHA, PBR_BUMP, PBR_DISPLACEMENT]) + + #Specials names + THICKNESS = "Thickness" + AO = "Ambient Occlusion" + CURVATURE = "Curvature" + COLOURID = "Colour ID" + VERTEXCOL = "Vertex Colour" + LIGHTMAP = "Lightmap" + + ALL_SPECIALS = ([THICKNESS, AO, CURVATURE,COLOURID, VERTEXCOL, LIGHTMAP]) + COMP_DENOISE_SPECIALS = ([THICKNESS, AO, LIGHTMAP]) + COMP_NODENOISE_SPECIALS = ([CURVATURE, VERTEXCOL, COLOURID]) + + #UVs + NEWUV_SMART_INDIVIDUAL = "SmartUVProject_Individual" + NEWUV_SMART_ATLAS = "SmartUVProject_Atlas" + NEWUV_COMBINE_EXISTING = "CombineExisting" + + #Normals + NORMAL_OPENGL = "OpenGL" + NORMAL_DIRECTX = "DirectX" + + @classmethod + def get_socket_names(cls): + + v = bpy.app.version + + if v >= (4,0,0): + return { + cls.PBR_DIFFUSE: "Base Color", + cls.PBR_METAL: "Metallic", + cls.PBR_SSS: "Subsurface Weight", + cls.PBR_SSS_SCALE: "Subsurface Scale", + cls.PBR_SSSCOL: None, + cls.PBR_ROUGHNESS: "Roughness", + cls.PBR_GLOSSY: "Roughness", + cls.PBR_NORMAL: "Normal", + cls.PBR_TRANSMISSION: "Transmission Weight", + cls.PBR_TRANSMISSION_ROUGH: None, + cls.PBR_CLEARCOAT: "Coat Weight", + cls.PBR_CLEARCOAT_ROUGH: "Coat Roughness", + cls.PBR_CLEARCOAT_GLOSS: "Coat Roughness", + cls.PBR_EMISSION: "Emission Color", + cls.PBR_EMISSION_STRENGTH: "Emission Strength", + cls.PBR_SPECULAR: "Specular IOR Level", + cls.PBR_ALPHA: "Alpha" + } + + else: + + #Principled socket names + return { + cls.PBR_DIFFUSE: "Base Color", + cls.PBR_METAL: "Metallic", + cls.PBR_SSS: "Subsurface", + cls.PBR_SSS_SCALE: "Subsurface Scale", + cls.PBR_SSSCOL: "Subsurface Color", + cls.PBR_ROUGHNESS: "Roughness", + cls.PBR_GLOSSY: "Roughness", + cls.PBR_NORMAL: "Normal", + cls.PBR_TRANSMISSION: "Transmission", + cls.PBR_TRANSMISSION_ROUGH: "Transmission Roughness", + cls.PBR_CLEARCOAT: "Clearcoat", + cls.PBR_CLEARCOAT_ROUGH: "Clearcoat Roughness", + cls.PBR_CLEARCOAT_GLOSS: "Clearcoat Glossiness", + cls.PBR_EMISSION: "Emission", + cls.PBR_EMISSION_STRENGTH: "Emission Strength", + cls.PBR_SPECULAR: "Specular", + cls.PBR_ALPHA: "Alpha" + } + +def get_texture_channels(context, tex): + sbp = context.scene.SimpleBake_Props + + if sbp.global_mode in [SBConstants.CYCLESBAKE, SBConstants.CYCLESBAKE_S2A]: + return "RGB" + elif tex in [SBConstants.PBR_DIFFUSE, SBConstants.PBR_SSSCOL, SBConstants.PBR_EMISSION, SBConstants.PBR_NORMAL, SBConstants.COLOURID, SBConstants.VERTEXCOL, SBConstants.LIGHTMAP]: + return "RGB" + elif SBConstants.PBRAOVS in tex: + num = int(tex.replace(f"{SBConstants.PBRAOVS}_", "")) + aov = [i for i in sbp.aov_items if i.aov_number == num] + assert len(aov)>0, "Unable to find matching AOV" + aov = aov[0] + if aov.aov_type == "C": + return "RGB" + else: + return "RGB" if sbp.bw_to_rgb else "BW" + + else: + return "RGB" if sbp.bw_to_rgb else "BW" + +def object_list_to_names_list(context): + sbp = context.scene.SimpleBake_Props + names = sbp.objects_list.items() + names = [n[0] for n in names] + + return names + +def get_base_folder_patho(context): + sbp = context.scene.SimpleBake_Props + if "--background" in sys.argv or sbp.fake_background: + base_folder = Path(sbp.base_folder_override) + else: + base_folder = Path(bpy.data.filepath).parent + + return base_folder + + +def force_to_object_mode(context): + sbp = context.scene.SimpleBake_Props + + def object_in_view_layer(obj): + return obj is not None and any(view_obj == obj for view_obj in context.view_layer.objects) + + if not object_in_view_layer(context.active_object): + for item in sbp.objects_list: + obj = item.obj_point + if object_in_view_layer(obj): + context.view_layer.objects.active = obj + break + + if context.active_object is None: + for obj in context.view_layer.objects: + if obj.type == "MESH" and obj.visible_get(): + context.view_layer.objects.active = obj + break + + if context.active_object is None: + show_message_box(context, ["SimpleBake could not switch to Object Mode because Blender has no usable active mesh object in the current view layer."], "Errors occured", icon='ERROR') + return False + + if context.mode != "OBJECT": + bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + + return context.mode == "OBJECT" + + +# def check_for_safe_context_class(context): +# sbp = context.scene.SimpleBake_Props +# t = [] +# #t.append(base64.b64decode("bGV3aXM=").decode("utf-8")) +# if sbp.safe_context_check in t: +# print_message(context, "Warning - Safe context class check failed. This is not fatal. Continuing") +# return False +# else: +# return True +# +# return True + +# def select_selected_to_active(context, selected_objs, active_obj): +# bpy.ops.object.select_all(action="DESELECT") +# +# for obj in selected_objs: +# obj.select_set(state=True) +# active_obj.select_set(state=True) +# context.view_layer.objects.active = active_obj + +def select_only_these(context, objs): + #When running an image sequence, this sometimes gets called with an empty list and I don't know why + if len(objs) < 1: + return False + #bpy.ops.object.select_all(action="DESELECT") + [o.select_set(state=False) for o in context.scene.objects] + for obj in objs: + obj.select_set(state=True) + context.view_layer.objects.active = objs[0] #arbitary + +def select_only_this(context, obj): + #bpy.ops.object.select_all(action="DESELECT") + [o.select_set(state=False) for o in context.scene.objects] + obj.select_set(state=True) + context.view_layer.objects.active = obj + +def pbr_selections_to_list(context): + sbp = context.scene.SimpleBake_Props + + selectedbakes = [] + selectedbakes.append(SBConstants.PBR_DIFFUSE) if sbp.selected_col else False + selectedbakes.append(SBConstants.PBR_METAL) if sbp.selected_metal else False + selectedbakes.append(SBConstants.PBR_ROUGHNESS) if sbp.selected_rough and sbp.rough_glossy_switch==SBConstants.PBR_ROUGHNESS else False + selectedbakes.append(SBConstants.PBR_GLOSSY) if sbp.selected_rough and sbp.rough_glossy_switch==SBConstants.PBR_GLOSSY else False + selectedbakes.append(SBConstants.PBR_NORMAL) if sbp.selected_normal else False + selectedbakes.append(SBConstants.PBR_TRANSMISSION) if sbp.selected_trans else False + selectedbakes.append(SBConstants.PBR_TRANSMISSION_ROUGH) if sbp.selected_transrough else False + selectedbakes.append(SBConstants.PBR_CLEARCOAT) if sbp.selected_clearcoat else False + selectedbakes.append(SBConstants.PBR_CLEARCOAT_ROUGH) if sbp.selected_clearcoat_rough and sbp.ccrough_glossy_switch==SBConstants.PBR_CLEARCOAT_ROUGH else False + selectedbakes.append(SBConstants.PBR_CLEARCOAT_GLOSS) if sbp.selected_clearcoat_rough and sbp.ccrough_glossy_switch==SBConstants.PBR_CLEARCOAT_GLOSS else False + selectedbakes.append(SBConstants.PBR_EMISSION) if sbp.selected_emission else False + selectedbakes.append(SBConstants.PBR_EMISSION_STRENGTH) if sbp.selected_emission_strength else False + selectedbakes.append(SBConstants.PBR_SPECULAR) if sbp.selected_specular else False + selectedbakes.append(SBConstants.PBR_ALPHA) if sbp.selected_alpha else False + selectedbakes.append(SBConstants.PBR_SSS) if sbp.selected_sss else False + selectedbakes.append(SBConstants.PBR_SSS_SCALE) if sbp.selected_sss_scale else False + selectedbakes.append(SBConstants.PBR_SSSCOL) if sbp.selected_ssscol else False + selectedbakes.append(SBConstants.PBR_BUMP) if sbp.selected_bump else False + selectedbakes.append(SBConstants.PBR_DISPLACEMENT) if sbp.selected_displacement else False + + for aov in sbp.aov_items: + if aov.enabled: + selectedbakes.append(SBConstants.PBRAOVS + f"_{aov.aov_number}") + + return selectedbakes + +def specials_selection_to_list(context): + sbp = context.scene.SimpleBake_Props + selected_specials = [] + selected_specials.append(SBConstants.THICKNESS) if sbp.selected_thickness else False + selected_specials.append(SBConstants.COLOURID) if sbp.selected_col_mats else False + selected_specials.append(SBConstants.VERTEXCOL) if sbp.selected_col_vertex else False + selected_specials.append(SBConstants.CURVATURE) if sbp.selected_curvature else False + selected_specials.append(SBConstants.LIGHTMAP) if sbp.selected_lightmap else False + selected_specials.append(SBConstants.AO) if sbp.selected_ao else False + + return selected_specials + +def _find_colorspace_fallback(cs_names, fallback_names): + if not cs_names: + return (0, "") + + normalised_names = {name.casefold(): i for i, name in enumerate(cs_names)} + for fallback_name in fallback_names: + i = normalised_names.get(fallback_name.casefold()) + if i is not None: + return (i, cs_names[i]) + + for fallback_name in fallback_names: + fallback_name = fallback_name.casefold() + for i, cs_name in enumerate(cs_names): + if fallback_name in cs_name.casefold(): + return (i, cs_name) + + return (0, cs_names[0]) + + +def blender_default_colorspace(float_buffer: bool, col: bool): + + col_index = 0 + non_col_index = 0 + cs_names = [cs.identifier for cs in bpy.types.Image.bl_rna.properties['colorspace_settings'].fixed_type.bl_rna.properties['name'].enum_items] + + if bpy.app.version >= (5,0,0): + col_index = 23 + non_col_index = 18 + elif bpy.app.version >= (4,2,0): + col_index = 20 + non_col_index = 17 + elif bpy.app.version >= (4,0,0): + col_index = 19 + non_col_index = 16 + else: + assert False, "Blender version too old" + + if float_buffer or not col: + if non_col_index < len(cs_names): + return (non_col_index, cs_names[non_col_index]) + return _find_colorspace_fallback(cs_names, ["Non-Color", "Non-Colour", "Raw", "Data"]) + else: + if col_index < len(cs_names): + return (col_index, cs_names[col_index]) + return _find_colorspace_fallback(cs_names, ["sRGB", "AgX Base sRGB", "Linear Rec.709"]) + +def get_cs_list(self, context): + + cs_items = [(cs.identifier,cs.identifier,"") for cs in bpy.types.Image.bl_rna.properties['colorspace_settings'].fixed_type.bl_rna.properties['name'].enum_items] + return cs_items + +def clean_file_name(filename): + keepcharacters = (' ','.','_','~',"-", "[", "]") + return "".join(c for c in filename if c.isalnum() or c in keepcharacters)#.rstrip() + +def transfer_tags(old_img, new_img): + + tags= ([ + "SB_bake_object", + "SB_global_mode", + "SB_this_bake", + "SB_merged_bake", + "SB_merged_bake_name", + "SB_bake_operation_id", + "SB_float_buffer", + "SB_scaled", + "SB_exported_list" + ]) + + for tag in tags: + if tag in old_img: new_img[tag] = old_img[tag] + + return True + +class SimpleBake_OT_Halt(Operator): + bl_idname = "simplebake.halt" + bl_label = "" + + def execute(self, context): + + raise Exception + return {'FINISHED'} + +def show_message_box(context, messageitems_list, title, icon = 'INFO'): + + + message="" + for li in messageitems_list: + message+=f"{li}|" + + bpy.ops.simplebake.show_message_box('INVOKE_DEFAULT', message=message, centre=True, icon=icon) + + # def draw(self, context): + # for m in messageitems_list: + # self.layout.label(text=m) + # context.window_manager.popup_menu(draw, title = title, icon = icon) + + return True + +class SimpleBake_OT_Show_Message_Box(Operator): + bl_idname = "simplebake.show_message_box" + bl_label = "" + + message: StringProperty() + icon: StringProperty(default="INFO") + centre: BoolProperty(default=False) + + def execute(self, context): + return {'FINISHED'} + + def invoke(self, context, event): + self.restored = False + if self.centre: + self.orig_x = event.mouse_x + self.orig_y = event.mouse_y + + w = int(context.window.width/2) + h = int(context.window.height/2) + h = h + (20*len(self.message.split("|"))) + context.window.cursor_warp(w, h) + + longest = 0 + for li in self.message.split("|"): + longest = len(li) if (len(li)>longest) else longest + width = longest*6 if (longest*6)>=400 else 400 + + return context.window_manager.invoke_props_dialog(self, width = width) + + def draw(self, context): + self.layout.label(text="SIMPLEBAKE", icon=self.icon) + message_list = self.message.split("|") + for li in message_list: + row=self.layout.row() + row.scale_y = 0.8 + row.alignment = 'LEFT' + row.label(text=li) + if not self.restored and self.centre: + context.window.cursor_warp(self.orig_x, self.orig_y) + self.restored = True + +def find_3d_viewport(context=None, screen=None): + if context == None: + context = bpy.context + if screen == None: + screen = bpy.context.window.screen + + found = [] + # Iterate through the areas in the current screen + for area in screen.areas: + # Check if the area is a 3D viewport + if area.type == 'VIEW_3D': + # Optionally, you can access the space data of the area + for space in area.spaces: + if space.type == 'VIEW_3D': + found.append(space) + return found + + + +def is_blend_saved(): + path = bpy.data.filepath + if(path=="/" or path==""): + return False + else: + return True + +def is_all_black_or_transparent(img: bpy.types.Image, tol=1e-6): + if not img.has_data: + img.update() + + # Blender exposes pixels as RGBA floats in [0..1]; length = w*h*4 + px = np.asarray(img.pixels[:], dtype=np.float32).reshape(-1, 4) + rgb = px[:, :3] + a = px[:, 3] + + all_black = np.all(np.abs(rgb) <= tol) # R=G=B≈0 everywhere + all_transparent = np.all(a <= tol) # A≈0 everywhere + return all_black, all_transparent + + +conflicting_addons = []#"ZenUV"] + +classes = ([ + SimpleBake_OT_Show_Message_Box, + #SimpleBake_OT_Print_Message, + SimpleBake_OT_Halt + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + + if _sb_udim_depsgraph_handler not in bpy.app.handlers.depsgraph_update_post: + bpy.app.handlers.depsgraph_update_post.append(_sb_udim_depsgraph_handler) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls) + + if _sb_udim_depsgraph_handler in bpy.app.handlers.depsgraph_update_post: + bpy.app.handlers.depsgraph_update_post.remove(_sb_udim_depsgraph_handler) diff --git a/scripts/addons/SimpleBake/uv_management.py b/scripts/addons/SimpleBake/uv_management.py new file mode 100644 index 0000000..b51fdaf --- /dev/null +++ b/scripts/addons/SimpleBake/uv_management.py @@ -0,0 +1,285 @@ +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import Operator +from bpy.props import FloatProperty, EnumProperty, BoolProperty, StringProperty + +from .utils import SBConstants, select_only_this +from .messages import print_message +from .bake_operators.common_bake_support import match_high_low_objects + +def rearrange_uvs(obj, uv_name): + + uvs = obj.data.uv_layers + orig_active_name = uvs.active.name + orig_active_render_name = [uv.name for uv in uvs if uv.active_render][0] + + while uvs[0].name != uv_name: + + #Move to bottom + name = uvs[0].name + uvs.active = uvs[0] + uvs.new() + uvs.remove(uvs[0]) + uvs[-1].name = name + + uvs.active = uvs[orig_active_name] + uvs[orig_active_render_name].active_render = True + +def pack_uvs(self, context): + sbp = context.scene.SimpleBake_Props + + bpy.ops.uv.select_all(action="SELECT") + + #Always average - still relevant for pre-Blender 3.6 + if sbp.new_uv_method == "CombineExisting" and self.average_islands: + bpy.ops.uv.average_islands_scale() + + n = int(''.join(c for c in bpy.app.version_string if c.isdigit())) + if n >= 360: + bpy.ops.uv.pack_islands("EXEC_DEFAULT", udim_source=sbp.uvp_pack_to, rotate=sbp.uvp_rotate, rotate_method=sbp.uvp_rotation_method, scale=sbp.uvp_scale, merge_overlap=sbp.uvp_merge_overlapping, margin_method=sbp.uvp_margin_method, margin=sbp.uvpackmargin, pin=sbp.uvp_lock_pinned, pin_method=sbp.uvp_lock_method, shape_method=sbp.uvp_shape_method) + else: # Pre Blender 3.6 + bpy.ops.uv.pack_islands(rotate=True, margin=sbp.uvpackmargin) + + bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + + +class SimpleBake_OT_Process_UVs(Operator): + """Start the bake operation""" + bl_idname = "simplebake.process_uvs" + bl_description = "Prepare UV maps on the bake objects" + bl_label = "Prepare UVs" + + def smart_project_to_atlas(self, context): + + sbp = context.scene.SimpleBake_Props + + print_message(context, "Smart projecting all objects to atlas map") + + #Selection + bpy.ops.object.select_all(action="DESELECT") + for obj in self.bake_objects: + obj.select_set(state=True) + + #Make sure we have an active object + if context.active_object == None: + context.view_layer.objects.active = self.bake_objects[0] + + for obj in self.bake_objects: + if("SimpleBake" in obj.data.uv_layers): + obj.data.uv_layers.remove(obj.data.uv_layers["SimpleBake"]) + + obj.data.uv_layers.new(name="SimpleBake") + obj.data.uv_layers["SimpleBake"].active = True + + bpy.ops.object.mode_set(mode="EDIT", toggle=False) #Enter edit mode + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action="SELECT") + + #Unwrap + bpy.ops.uv.smart_project(angle_limit=self.angle_limit, island_margin=self.island_margin, area_weight=self.area_weight, correct_aspect=self.uvcorrectaspect, scale_to_bounds=self.scale_to_bounds) + + #Packing + #pack_uvs(self) + + bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + return + + def combine_existing_to_atlas(self, context): + + sbp = context.scene.SimpleBake_Props + + print_message(context, "Combining existing UVs into atlas map") + + #Selection + # bpy.ops.object.select_all(action="DESELECT") + + for obj in bpy.context.selected_objects: + obj.select_set(False) + + for obj in self.bake_objects: + obj.select_set(state=True) + + #Make sure we have an active object + if context.active_object == None: + context.view_layer.objects.active = self.bake_objects[0] + + for obj in self.bake_objects: + if("GENERATED_SimpleBake_Atlas" in obj.data.uv_layers): + obj.data.uv_layers.remove(obj.data.uv_layers["GENERATED_SimpleBake_Atlas"]) + + u = obj.data.uv_layers.new(name="GENERATED_SimpleBake_Atlas") + u.active = True + + #With everything selected, pack into one big map + bpy.ops.object.mode_set(mode="EDIT", toggle=False) + bpy.ops.mesh.reveal() + + bpy.ops.mesh.select_all(action="SELECT") + + pack_uvs(self, context) + + bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + return + + + def smart_project_individual_objects(self, context): + + print_message(context, "Smart projecting each object individually") + + for obj in self.bake_objects: + + select_only_this(context, obj) + + if("SimpleBake" in obj.data.uv_layers): + obj.data.uv_layers.remove(obj.data.uv_layers["SimpleBake"]) + obj.data.uv_layers.new(name="SimpleBake") + obj.data.uv_layers["SimpleBake"].active = True + + bpy.ops.object.mode_set(mode="EDIT", toggle=False) + + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action="SELECT") + + bpy.ops.uv.smart_project(angle_limit=self.angle_limit, island_margin=self.island_margin, area_weight=self.area_weight, correct_aspect=self.uvcorrectaspect, scale_to_bounds=self.scale_to_bounds) + + bpy.ops.object.mode_set(mode="OBJECT", toggle=False) + + return + + + def per_mat_pack_uvs_to_bounds(self, context): + + sbp = context.scene.SimpleBake_Props + print_message(context, "Packing UVs for each material into new UV map") + + bpy.ops.object.select_all(action="DESELECT") + + for obj in self.bake_objects: + + # Copy existing UV data into a fresh SimpleBake layer + source_layer = obj.data.uv_layers.active + if "SimpleBake" in obj.data.uv_layers: + obj.data.uv_layers.remove(obj.data.uv_layers["SimpleBake"]) + new_layer = obj.data.uv_layers.new(name="SimpleBake") + if source_layer: + for i, item in enumerate(source_layer.data): + new_layer.data[i].uv = item.uv.copy() + new_layer.active = True + + select_only_this(context, obj) + bpy.ops.object.mode_set(mode='EDIT', toggle=False) + bpy.ops.mesh.reveal() + + # Get enabled materials — strip SBM_/SBW_ prefix for comparison + enabled_mat_names = { + e.mat_name for e in sbp.mat_bake_list + if e.obj_name == obj.name and e.enabled + } + + i = 0 + for slot in obj.material_slots: + if slot.material is None: + i += 1 + continue + mat_name = slot.material.name + if mat_name.startswith("SBW_"): mat_name = mat_name[4:] + if mat_name.startswith("SBM_"): mat_name = mat_name[4:] + if enabled_mat_names and mat_name not in enabled_mat_names: + i += 1 + continue + obj.active_material_index = i + bpy.ops.mesh.select_all(action="DESELECT") + bpy.ops.object.material_slot_select() + bpy.ops.uv.pack_islands(scale=True, margin=self.island_margin) + i += 1 + + bpy.ops.object.mode_set(mode='OBJECT', toggle=False) + + return + + def check_prefer_sb_maps(self, context): + if self.prefer_sb_uv_maps: + print_message(context, "Preferring existing UV maps called SimpleBake. Setting them to active") + for obj in self.bake_objects: + if("SimpleBake" in obj.data.uv_layers): + obj.data.uv_layers["SimpleBake"].active = True + return + + + def execute(self, context): + + sbp = context.scene.SimpleBake_Props + + #Pull what we need from the panel + self.island_margin = sbp.unwrapmargin + self.uvcorrectaspect = sbp.uvcorrectaspect + self.angle_limit = sbp.angle_limit + self.area_weight = sbp.area_weight + self.scale_to_bounds = sbp.scale_to_bounds + self.average_islands = sbp.average_uv_size + self.prefer_sb_uv_maps = sbp.prefer_existing_sbmap + self.new_uv_option = sbp.new_uv_option + self.new_uv_method = sbp.new_uv_method + self.expand_mat_uvs = sbp.expand_mat_uvs + self.uvpackmargin = sbp.uvpackmargin + + + #Set the bake objects + if (sbp.selected_s2a or sbp.cycles_s2a) and sbp.s2a_opmode=="automatch": + from .bake_operators.auto_match_operators import SimpleBake_OT_AutoMatch_Operation as bo + hl_matches = bo.hl_matches + self.bake_objects = [context.scene.objects[name] for name in hl_matches.keys()] + + elif sbp.selected_s2a: #Covering decals or standard + self.bake_objects =[sbp.targetobj] + elif sbp.cycles_s2a: + self.bake_objects =[sbp.targetobj_cycles] + else: + self.bake_objects = [i.obj_point for i in sbp.objects_list] + + + #Decide what we are actually doing + if sbp.tex_per_mat and self.expand_mat_uvs: + self.per_mat_pack_uvs_to_bounds(context) + elif self.new_uv_option and len(self.bake_objects)==1: + self.smart_project_individual_objects(context) + elif self.new_uv_option and self.new_uv_method == SBConstants.NEWUV_SMART_INDIVIDUAL: + self.smart_project_individual_objects(context) + elif self.new_uv_option and self.new_uv_method == SBConstants.NEWUV_SMART_ATLAS: + self.smart_project_to_atlas(context) + elif self.new_uv_option and self.new_uv_method == SBConstants.NEWUV_COMBINE_EXISTING: + self.combine_existing_to_atlas(context) + elif not self.new_uv_option: + print_message(context, "We are working with existing UV maps") + self.check_prefer_sb_maps(context) + else: + print_message(context, "Something went wrong processing UVs") + + + for obj in self.bake_objects: + obj["SB_uv_used_for_bake"] = obj.data.uv_layers.active.name + + if self.new_uv_option and sbp.move_new_uvs_to_top: + rearrange_uvs(obj, obj["SB_uv_used_for_bake"]) + + + + + + return {'FINISHED'} + +classes = ([ + SimpleBake_OT_Process_UVs#, + #SimpleBake_OT_Pack_UVs + ]) + +def register(): + + global classes + for cls in classes: + register_class(cls) + +def unregister(): + global classes + for cls in classes: + unregister_class(cls)