117 Commits
Author SHA1 Message Date
heiume 828ece62f8 Update README.md 2023-10-05 11:18:20 +08:00
Edwin Wong 2f38c8467c Update README.md 2023-10-04 19:41:15 +08:00
Edwin Wong 3039963272 Update README.md 2023-10-04 19:32:58 +08:00
Edwin Wong 34fb26d6fb Merge branch 'readme' 2023-10-04 19:15:06 +08:00
Edwin Wong cb8b6679da Merge branch 'readme'
# Conflicts:
#	README.md
2023-10-04 19:03:13 +08:00
Edwin Wong 8422acfc89 Update README.md 2023-10-04 19:02:03 +08:00
Edwin Wong c066eea984 fix: readme 2023-10-04 18:59:42 +08:00
Edwin Wong ce1b4702e0 fix: image in cdn 2023-10-04 18:53:42 +08:00
Edwin Wong 0818a6f1c7 fix: readme 2023-10-04 18:53:30 +08:00
Edwin Wong 80493fa7bc fix: readme 2023-10-04 18:53:30 +08:00
Edwin Wong 4dd87437a4 replace all image to digital ocean 2023-10-04 18:53:22 +08:00
Radionic b1f562c8e8 update preview url 2023-10-04 18:46:41 +08:00
Edwin Wong c693166d98 Update README.md 2023-10-04 18:41:01 +08:00
AvatechGGG 976ddc8348 Update README.md 2023-10-04 18:30:44 +08:00
Edwin Wong 6cc075422b fix: image in cdn 2023-10-04 18:27:02 +08:00
Edwin Wong d2c2984555 fix: readme 2023-10-04 18:25:42 +08:00
Edwin Wong e9ff1e8b64 fix: readme 2023-10-04 18:21:23 +08:00
Edwin Wong b39bfc0693 replace all image to digital ocean 2023-10-04 17:57:34 +08:00
AvatechGGG 486000d2b5 Update README.md 2023-10-04 13:33:57 +08:00
jonaaathan 2907800373 update 2 videos 2023-10-03 17:43:20 +08:00
Radionic e928630a7a fix: sams folder path 2023-10-03 14:08:03 +08:00
San45600 71d066a8d6 Update README.md 2023-10-03 14:03:28 +08:00
Edwin Wong 3077a2dbae fix: viewer error 2023-10-03 13:43:25 +08:00
Edwin Wong 323967dc08 fix: viewer 2023-10-03 13:35:21 +08:00
Radionic e4cfb86114 feat: reset scene 2023-10-03 12:36:50 +08:00
Edwin Wong 788596525e Update README.md
update gif in readme
2023-10-02 22:30:15 +08:00
Edwin Wong 3ee3714664 feat: back and save 2023-09-30 01:43:19 +08:00
jonaaathan cada51a729 swap 2 videos 2023-09-29 18:08:33 +08:00
San45600 b7961e025b Update README.md 2023-09-29 17:36:11 +08:00
Edwin Wong abac0ed6aa fix: copy and paste 2023-09-29 17:05:07 +08:00
Radionic ff1ed96a74 feat: update template 2023-09-29 16:42:03 +08:00
Radionic fb81ea509f fix: image metadata not saved 2023-09-29 16:14:41 +08:00
Radionic 9c7721bb76 fix: dialog close 2023-09-29 15:28:58 +08:00
Radionic dfdc97b27b chore: remove unused nodes 2023-09-29 13:14:12 +08:00
BennyKok 07904311ff fix 2023-09-29 00:11:08 +08:00
heiume 71f6c679b9 Update README.md 2023-09-28 19:23:15 +08:00
Radionic c121ff37cf fix: occasional segmentation fault 2023-09-28 18:49:30 +08:00
BennyKok 3931d6c7ed feat: options to disable convex_hull 2023-09-28 16:44:24 +08:00
BennyKok 71211782aa fix 2023-09-28 12:59:27 +08:00
BennyKok 3979064eee add styles 2023-09-28 12:59:27 +08:00
heiume 6f973ecd93 Update README.md 2023-09-28 12:41:26 +08:00
Radionic acc52d905a feat: import bpy inside custom node 2023-09-27 18:36:59 +08:00
heiume 7803ac467b Update README.md 2023-09-27 18:16:13 +08:00
heiume 0c20b73d11 Update README.md 2023-09-27 18:12:58 +08:00
BennyKok b2eb735bf4 clean up 2023-09-27 18:10:52 +08:00
heiume 50929a29b8 Update README.md 2023-09-27 18:10:24 +08:00
heiume 5cb899d9e1 Merge branch 'main' of https://github.com/avatechgg/avatar-graph-comfyui 2023-09-27 18:09:58 +08:00
heiume ab2b239690 move folder 2023-09-27 18:09:49 +08:00
heiume 7bf1de543f Update README.md 2023-09-27 18:03:21 +08:00
heiume 850598abe8 TemplateGen01 2023-09-27 18:02:35 +08:00
BennyKok 85b2de6303 fix styling 2023-09-27 17:45:32 +08:00
BennyKok 6854f9b59b fix 2023-09-27 17:30:16 +08:00
heiume bb50059376 Update README.md 2023-09-27 17:02:09 +08:00
heiume a0f055f0cd Update README.md 2023-09-27 17:01:14 +08:00
heiume c5560a8084 Update README.md 2023-09-27 16:56:55 +08:00
Edwin Wong ab7f660f95 feat: auto save ava format 2023-09-27 16:56:17 +08:00
heiume 6af9e0c62f Update README.md 2023-09-27 16:50:56 +08:00
BennyKok 545ec8a3be refactor! renam ui components 2023-09-27 16:41:47 +08:00
heiume dc97bbc540 Update README.md 2023-09-27 16:31:35 +08:00
heiume 4432c680cc Update README.md 2023-09-27 16:02:28 +08:00
heiume aef869e6d1 Update README.md 2023-09-27 15:53:16 +08:00
heiume 6810145f0b Update README.md 2023-09-27 15:51:19 +08:00
heiume 1a39c236ff Update README.md 2023-09-27 15:47:32 +08:00
Radionic b843eb7c10 fix: switch to layer when created 2023-09-27 15:44:30 +08:00
heiume a48648025d Update README.md 2023-09-27 15:40:13 +08:00
heiume 8897d5c430 Update README.md 2023-09-27 13:48:19 +08:00
BennyKok 9f96f7bff1 fix 2023-09-27 13:45:55 +08:00
heiume 3510381894 Update README.md 2023-09-27 13:43:47 +08:00
BennyKok f21426106b fix: duplicated layer name 2023-09-27 13:42:00 +08:00
heiume acbb05572c Update README.md 2023-09-27 13:41:58 +08:00
Radionic 56000fbe45 feat: show alert when image not connected 2023-09-27 13:40:46 +08:00
heiume 4c3864ec4f Update README.md 2023-09-27 13:23:02 +08:00
heiume 99481e00c0 Update README.md 2023-09-27 13:22:22 +08:00
BennyKok 2f0a6f688f will auto check if there are any missing output slots, will auto create 2023-09-27 13:19:47 +08:00
BennyKok 6133c6c9fb auto clean up output slot for sam node 2023-09-27 13:19:47 +08:00
heiume c5c080d896 Update README.md 2023-09-27 12:56:49 +08:00
Radionic f13829a975 feat: hide loading when caught error 2023-09-27 12:37:55 +08:00
Radionic 535e77a0d9 feat: loading caption 2023-09-27 12:37:55 +08:00
BennyKok 035439e1fe Update README.md 2023-09-27 12:07:05 +08:00
BennyKok 83a7ce7899 Update README.md 2023-09-26 19:22:38 +08:00
BennyKok 0effef3fe2 Update README.md 2023-09-26 19:09:06 +08:00
BennyKok a436e3846d Update README.md 2023-09-26 19:07:52 +08:00
BennyKok 83d6a73cfd feat!: add scale x and y to create mesh layer 2023-09-26 19:05:32 +08:00
BennyKok 5516baa5c2 update workflow 2023-09-26 19:05:12 +08:00
BennyKok 744cb75552 fix default value 2023-09-26 19:05:04 +08:00
Radionic 722542e92a feat: infer model type from checkpoint name 2023-09-26 18:34:46 +08:00
Radionic 6e3820b502 chore: hide logging 2023-09-26 18:21:52 +08:00
Edwin Wong 6ce009d984 fix: filename 2023-09-26 18:11:19 +08:00
BennyKok 94874357cd Update README.md 2023-09-26 18:05:56 +08:00
Radionic d37f9a87f3 feat: auto download sam model 2023-09-26 17:45:32 +08:00
heiume 0729bf982e Merge pull request #2 from avatechai/readme-patch-1
Update README.md
2023-09-26 17:36:23 +08:00
heiume 9f1bd85c6b Update README.md 2023-09-26 17:36:14 +08:00
heiume 082f96262b Workflow json 2023-09-26 17:35:02 +08:00
BennyKok b3340d6085 docs: update readme 2023-09-26 17:30:32 +08:00
BennyKok c269a1e340 fix number display 2023-09-26 17:17:56 +08:00
heiume 02a6b37971 Merge pull request #1 from avatechai/readme-patch-1
Update README.md
2023-09-26 17:13:15 +08:00
heiume 18958a22b0 Update README.md 2023-09-26 17:13:03 +08:00
Radionic df96815448 feat: move import to __init__.py 2023-09-26 17:12:43 +08:00
BennyKok de211a79e4 Update README.md 2023-09-26 17:12:28 +08:00
BennyKok ae22626e6d Update README.md 2023-09-26 17:11:36 +08:00
heiume 5313370518 Update README.md 2023-09-26 17:11:04 +08:00
heiume b9fe7cce14 Update README.md 2023-09-26 17:07:30 +08:00
BennyKok ad6a2aea56 feat: add ava display 2023-09-26 16:49:12 +08:00
heiume fdc1268ea3 Update README.md 2023-09-26 16:45:59 +08:00
Radionic b27b6094e2 fix: variable name 2023-09-26 16:44:50 +08:00
BennyKok 3820d98942 Update README.md 2023-09-26 16:39:35 +08:00
Radionic 723dbe4a71 fix: output image type 2023-09-26 16:37:48 +08:00
heiume d20d6c1b10 Update README.md 2023-09-26 16:37:27 +08:00
heiume 2cbf3da2d0 Update README.md 2023-09-26 16:33:08 +08:00
heiume 3e49f992aa Merge branch 'main' of https://github.com/avatechgg/avatar-graph-comfyui 2023-09-26 16:31:35 +08:00
heiume f438146927 add inpaint mouth open template file and workflow json 2023-09-26 16:31:22 +08:00
BennyKok 3391bae9ff Update README.md 2023-09-26 16:24:22 +08:00
Edwin Wong c5b903b9d1 fix 2023-09-26 15:54:14 +08:00
BennyKok 834b7abfdf Update README.md 2023-09-26 15:51:17 +08:00
BennyKok a20b23488a Update README.md 2023-09-26 15:47:10 +08:00
Radionic be5f2c8d1b feat: save metadata in glb/gltf 2023-09-26 15:40:27 +08:00
BennyKok eb2fb63d24 Update README.md 2023-09-26 15:39:47 +08:00
61 changed files with 6110 additions and 1774 deletions
+205 -29
View File
@@ -1,44 +1,213 @@
# avatar-graph-comfyui
This introduce a custom workflow on top of comfyui built for avatar-graph.
![image](https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270574817-201a005b-7e00-4671-85a1-54937bf0704e.png)
A custom nodes module for **creating real-time interactive avatars** powered by blender bpy mesh api + Avatech Shape Flow runtime.
# Demo
| <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/12e2bfc6-438e-4d16-bead-9957ced3bae1" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=cce15b92-6d1c-4966-91b9-362d7833cb5d) | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/0c497025-7ed5-4e25-b4d1-5a257e1ba814" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=42a8182f-b140-48c0-a556-35cddf0f76f7) | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/a2bf71e3-0d9c-4ddd-957f-a6b0cb7e622a" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=7c23b8d6-d1a5-41c7-a084-250461dbef22) | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/ad808c42-5297-4e61-8be8-d5cb7729d2ff" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=268b32c4-f9b9-4db8-a27c-a7e974f0f0ac) |
|:---:|:---:|:---:|:---:|
| <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/1d1ad8f9-31a6-48ec-bad2-ce972ee3b12f" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=f97fc5bb-93b0-4b02-bbc0-327dd41d0fc5) | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/06958585-f780-4b38-8f5d-bddabd7da78a" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=4d50aa03-26e4-47e7-97b6-c3fe9d8fc96e) | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/3d0e6b54-d45f-45ac-90bd-d8b149880f98" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=791014cb-7836-4641-afdb-ac331064b682) | <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/1d1ad8f9-31a6-48ec-bad2-ce972ee3b12f" width="190"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=f97fc5bb-93b0-4b02-bbc0-327dd41d0fc5) |
# Contents
- [Workflow Template](workflow-template)
- [Template01 - Simple Shape Flow](#template01---simple-shape-flow)
- [Image Preprocess Guide](#image-preprocess-guide)
- [Character Gen Prompting Guide](#character-gen-prompting-guide)
- [Mouth Open Guide (Inpaint)](#mouth-open-guide-inpaint)
- [Custom Nodes](custom-nodes)
- [Image Segmentation Nodes](#image-segmentation-nodes)
- [Mesh Edit Nodes](#mesh-edit-nodes)
- [Shape Keys Nodes](#shape-keys-nodes)
- [Avatar Output Nodes](#avatar-output-nodes)
- [Shape Flow](#shape-flow)
- [Installation](#installation)
- [Development](#development)
# Workflow Template
## Template01 - Simple Shape Flow
To enable the character to blink eyes and talking.
> **🎯Notice**
>
> For optimal results, please input a character image with an open mouth and a minimum resolution of 768x768. This higher resolution will enable the tool to accurately recognize and work with facial features.
[💡Generate new image Guide](#character-gen-prompting-guide)
[💡Make your character mouth open Guide](#mouth-open-guide-inpaint)
![eye+mouth movement](https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270634138-8a237b9d-05fc-4e4a-b802-6465911f0d77.png)
### Download: 📂[Template01 - Simple Shape Flow](https://github.com/avatechai/avatar-graph-comfyui/blob/main/workflow_templates/SimpleEye+MouthMovement.json)
### Download: 📂[Template01 - ControlNet Gen](https://github.com/avatechai/avatar-graph-comfyui/tree/main/workflow_templates/TemplateGen01)
_If you don't want to modify any values in the custom nodes, you can download the ControlNet Gen Template to generate your own image._
<details>
<summary> Template01 - Nodes Value Setting Guide </summary>
## Template01 - Nodes Value Setting Guide
> ### Basic Eyeblink & Talking
> 1. Click **[Segmentation (SAM)]/ Edit prompt** button
>
> 2. Add new layer and rename
>
> 3. Drag layer to **[Create Mesh Layer]/image**
>
> 4. **[Create Mesh Layer]/ face_threshold, shape_threshold**, To control mesh threshold, recommend value: 0.6~0.7
>
> 5. **[Create Mesh Layer]/ scale_x, scale_y, extrude_x, extrude_y**, To control mesh threshold, recommend value: 1.2~1.4
>
> 6. **[Modify Shape Key]/ rotate** Setting Reference, If Head tilted to the left, set a positive number angle
>
> | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/271264869-abf2a843-8ca5-44a6-9611-c334d55928d1.png" width="300"> | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/271264902-37658a8e-6f46-4c5b-bfd6-adec270df60b.png" width="300"> | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/271264910-0fae0c27-428d-4a5d-8296-6634c9717b95.png" width="300"> | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/271264920-4fea7882-cc51-4a5a-af9a-e66589810f92.png" width="300"> |
> | --- | --- | --- | --- |
> | 0 | 5 | -5 | -15 |
</details>
<details>
<summary> Template01 - ControlNet Gen Guide </summary>
Place normal and openpose image with reference to images.
![image](https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270943267-c3cae113-2df4-45f2-a19c-885cbee75450.png)
</details>
# Image Preprocess Guide
### 💡If you want to generate a new character image
> you can download this Template and refer to the Guide!
> <details>
> <summary> Character Gen Prompting Guide </summary>
>
> # Character Gen Prompting Guide
>> **🎯Notice**
>>
>> We need a character image with an open mouth and enable the tool to easily recognize facial features, so please add to the prompt:
>>
>> ```looking at viewer, detailed face, open mouth, [smile], solo,eye-level angle```
>
>![image](https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270609114-acea9933-359b-4398-8d2a-582bf02bef99.png)
>
> ### Download: 📂[Character Gen Template](https://github.com/avatechai/avatar-graph-comfyui/blob/main/workflow_templates/SimpleCharacterGen.json)
> Feel free to change any checkpoint model that suits your needs.
>
> </details>
### 💡If you have a character image but it's not mouth open
> you can download this Template and refer to the Guide!
> <details>
> <summary> Mouth Open Guide (Inpaint) </summary>
>
> # Mouth Open Guide (Inpaint)
> To maintain consistency with the base image, it is recommended to utilize a checkpoint model that aligns with its style.
>
> ![inpaint_workflow](https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270589181-d11d840b-7ea6-4b47-bc26-a2af7c8c27a5.png)
>
> ### Download: 📂[MouthOpen Template](https://github.com/avatechai/avatar-graph-comfyui/blob/main/workflow_templates/MouthOpen_(inpaint).json)
>
> ### Inpaint Demonstration
>
> <video src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/e3b77295-a1bf-4d96-9551-7cc423a4af73"/>
>
> ### Recommend Checkpoint Model List
>
> ##### Anime Style SD1.5
>- https://civitai.com/models/35960/flat-2d-animerge
>- https://civitai.com/models/24149/mistoonanime
>- https://civitai.com/models/22364/kizuki-anime-hentai-checkpoint
>##### Realistic Style SD1.5
>- https://civitai.com/models/4201/realistic-vision-v51
>- https://civitai.com/models/49463/am-i-real
>- https://civitai.com/models/43331/majicmix-realistic
>
> </details>
# Custom Nodes
Expand to see all the available nodes description
Mesh Edit Nodes
Shape Keys Nodes
Avatar Output Nodes
<details>
<summary> Image Segmentation Nodes </summary>
## Image Segmentation Nodes
| Name | Description | Preview |
| ---------------------------- | ------------ | ------- |
| `Segmentation (SAM)` | Integrative SAM node allowing you to directly select and create multiple image segment output. | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270576351-8aabeba8-5450-4d39-8203-e91f9ab47190.png" width="300"> |
</details>
<details>
<summary> Mesh Edit Nodes </summary>
## Mesh Edit Nodes
| Name | Description | Preview |
| ---------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Create Mesh Layer` | Create a mesh object from the input images (usually a segmented part of the entire image) | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270576646-40740d25-9411-4cd3-a6c0-8b9008bca41c.png" width="300"> |
| `Join Meshes` | Combine multiple meshes into a single mesh object | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270577004-ba7afbc5-9cd5-4f97-9614-f71133f5783e.png" width="300"> |
| `Match Texture Aspect Ratio` | Since the mesh is created in 1:1 aspect ratio, a re-scale is needed at the end of the operation | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270602782-cb7155be-fb31-49f8-a24a-d001a1484ea7.png" width="300"> |
| `Plane Texture Unwrap` | Will perform mesh face fill and UV Cube project on the target plane mesh, scaled to bounds. | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270603006-4b9c0cf5-0497-47bf-8e06-5a3370084c11.png" width="300"> |
</details>
<details>
<summary> Shape Keys Nodes </summary>
## Shape Keys Nodes
| Name | Description | Preview |
| ---------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Mesh Modify Shape Key` | Given shape key name & target vertex_group, modify the vertex / all vertex’s transform | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270577944-ab4f259c-89a7-4f51-bc54-fd179e252073.png" width="300"> |
| `Create Shape Flow` | Create runtime shape flow graph, allowing interactive inputs affecting shape keys value in runtime | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270592752-abfdd801-0387-4c5d-9c11-6c23337ff1dd.png" width="300"> |
</details>
<details>
<summary> Avatar Output Nodes </summary>
## Avatar Output Nodes
| Name | Description | Preview |
| ---------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Avatar Main Output` | The primary output of the .ava file. The embeded Avatar View will auto update with this node's output | <img src="https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270592519-6a9a8bb4-05ec-4a2e-98bf-194b6af3a62a.png" width="300"> |
</details>
# Shape Flow
![image](https://avatech-avatar-dev1.nyc3.cdn.digitaloceanspaces.com/public-download/github-readme/270618471-a834e535-4f87-4b77-81a6-435e3a67ca4a.png)
# Installation
Clone the repository to custom_nodes in your [ComfyUI](https://github.com/comfyanonymous/ComfyUI) directory:
1. `cd custom_nodes`
2. `git clone https://github.com/avatechgg/avatar-graph-comfyui.git`
3. Install deps `cd avatar-graph-comfyui && python -m pip install -r requirements.txt`
4. Navigate to in your comfyui installation folder, open `comfyui/main.py` and add the following lines:
```py
def prompt_worker(q, server):
e = execution.PromptExecutor(server)
4. Restart comfyui
# This is a workaround since using blender as a python module, the bpy module has to be imported after in the custom thread, otherwise it will cause a segfault if imported in the custom nodes.
# Add next line
import global_bpy
while True:
item, item_id = q.get()
# Add next line
global_bpy.reset_bpy()
if __name__ == "__main__":
# Add next two lines
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "custom_nodes", "avatar-graph-comfyui"))
```
5. Restart comfyui
6. Run comfyui with enable-cors-header `python main.py --enable-cors-header` or (mac)`python main.py --force-fp16 --enable-cors-header`
5. Run comfyui with enable-cors-header `python main.py --enable-cors-header` or (mac)`python main.py --force-fp16 --enable-cors-header`
# Development
<details>
<summary> If you are interested in contributing expand to see development details </summary>
For comfyui frontend extension, frontend js located at `avatar-graph-comfyui/js`
Web stack used: [vanjs](https://github.com/vanjs-org/van) [tailwindcss](https://github.com/tailwindlabs/tailwindcss)
@@ -57,12 +226,19 @@ pnpm dev
For each changes, simply refresh the comfyui page to see the changes.
p.s. For tailwind autocomplete, add the following to your vscode settings.json.
<details>
<summary>p.s. For tailwind autocomplete, add the following to your vscode settings.json.</summary>
```json
{
"tailwindCSS.experimental.classRegex": [
["class\\s?:\\s?([\\s\\S]*)", "(?:\"|')([^\"']*)(?:\"|')"]
]
}
```
```
</details>
</details>
+44 -18
View File
@@ -4,14 +4,20 @@
@nickname: Avatar Graph
@description: Include nodes for sam + bpy operation, that allows workflow creations for generative 2d character rig.
"""
import routes
import inspect
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__)))
import routes
import inspect
import sys
import importlib
import subprocess
from folder_paths import add_model_folder_path
import requests
import folder_paths
from folder_paths import add_model_folder_path, get_filename_list, get_folder_paths
from tqdm import tqdm
ag_path = os.path.join(os.path.dirname(__file__))
@@ -30,24 +36,45 @@ ag_path = os.path.join(os.path.dirname(__file__))
def get_python_files(path):
return [f[:-3] for f in os.listdir(path) if f.endswith('.py')]
return [f[:-3] for f in os.listdir(path) if f.endswith(".py")]
def append_to_sys_path(path):
if path not in sys.path:
sys.path.append(path)
folder_paths.folder_names_and_paths["sams"] = ([os.path.join(folder_paths.models_dir, "sams")], folder_paths.supported_pt_extensions)
def create_sam_model_dir():
model_dir = os.path.join(ag_path, "../../models/sam")
def download_sam_model():
model_dir = get_folder_paths("sams")[0]
if not os.path.isdir(model_dir):
os.makedirs(model_dir)
add_model_folder_path('sam', model_dir)
add_model_folder_path("sams", model_dir)
files = get_filename_list("sams")
if len(files) == 0:
print("Downloading sam model...")
url = "https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth"
response = requests.get(url, stream=True)
response.raise_for_status()
file_size = int(response.headers.get("Content-Length", 0))
chunk_size = 1024
num_bars = int(file_size / chunk_size)
with open(f"{model_dir}/sam_vit_h_4b8939.pth", "wb") as f:
for chunk in tqdm(
response.iter_content(chunk_size=chunk_size),
total=num_bars,
unit="KB",
desc=url.split("/")[-1],
):
f.write(chunk)
create_sam_model_dir()
download_sam_model()
paths = ['blender', 'sam', 'common']
paths = ["blender", "sam"]
files = []
for path in paths:
@@ -59,6 +86,7 @@ NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
import blender_node
base_class = blender_node.ObjectOps
# Import all the modules and append their mappings
@@ -69,22 +97,20 @@ for file in files:
if inspect.isclass(obj):
if issubclass(obj, base_class) and obj != base_class:
NODE_CLASS_MAPPINGS.update(obj.NODE_CLASS_MAPPINGS())
NODE_DISPLAY_NAME_MAPPINGS.update(
obj.NODE_DISPLAY_NAME_MAPPINGS())
NODE_DISPLAY_NAME_MAPPINGS.update(obj.NODE_DISPLAY_NAME_MAPPINGS())
if (hasattr(module, 'BLENDER_NODES')):
if hasattr(module, "BLENDER_NODES"):
for node in module.BLENDER_NODES:
# print(node)
# NODE_CLASS_MAPPINGS.update({node: module.BLENDER_NODES[node]})
# NODE_DISPLAY_NAME_MAPPINGS.update({node: node})
NODE_CLASS_MAPPINGS.update(node.NODE_CLASS_MAPPINGS())
NODE_DISPLAY_NAME_MAPPINGS.update(
node.NODE_DISPLAY_NAME_MAPPINGS())
NODE_DISPLAY_NAME_MAPPINGS.update(node.NODE_DISPLAY_NAME_MAPPINGS())
if hasattr(module, 'NODE_CLASS_MAPPINGS'):
if hasattr(module, "NODE_CLASS_MAPPINGS"):
NODE_CLASS_MAPPINGS.update(module.NODE_CLASS_MAPPINGS)
if hasattr(module, 'NODE_DISPLAY_NAME_MAPPINGS'):
if hasattr(module, "NODE_DISPLAY_NAME_MAPPINGS"):
NODE_DISPLAY_NAME_MAPPINGS.update(module.NODE_DISPLAY_NAME_MAPPINGS)
WEB_DIRECTORY = "js"
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
View File
+11 -5
View File
@@ -33,6 +33,9 @@ class AvatarMainOutput(blender_node.ObjectOps):
"open_in_blender": ("BOOLEAN", {
"default": False
}),
"auto_save": ("BOOLEAN", {
"default": False
}),
"blender_path_override": ("STRING", {
"multiline": False,
"default": ''
@@ -42,16 +45,16 @@ class AvatarMainOutput(blender_node.ObjectOps):
"multiline": False,
"default": "out"
}),
"model_type": (["GLB", "GLTF_EMBEDDED"],),
"model_type": (["AVA","GLB", "GLTF_EMBEDDED"],),
"write_mode": (["Overwrite", "Increment"],),
"blendshapes": ("blendshapes",),
"SHAPE_FLOW": ("SHAPE_FLOW",),
}
OUTPUT_NODE = True
RETURN_TYPES = ()
def blender_process(self, bpy, BPY_OBJ, BPY_OBJS=None, open_in_blender=False, blender_path_override='', filename='', model_type='', write_mode='', blendshapes=''):
def blender_process(self, bpy, BPY_OBJ=None, BPY_OBJS=None, open_in_blender=False, auto_save=False, blender_path_override='', filename='', model_type='', write_mode='', SHAPE_FLOW=''):
if open_in_blender:
p = blender_path_override if blender_path_override else global_blender_path
output_file = self.output_dir + '/tmp.blend'
@@ -63,7 +66,10 @@ class AvatarMainOutput(blender_node.ObjectOps):
objs = BPY_OBJS if BPY_OBJS else [BPY_OBJ]
filepath = export_gltf(
self.output_dir, objs, filename, model_type, write_mode
self.output_dir, objs, filename, model_type, write_mode, SHAPE_FLOW
)
return {"ui": {"gltfFilename": {filepath.replace(f"{self.output_dir}/", "")}, "blendshapes": {blendshapes}}}
import global_bpy
global_bpy.set_should_reset_scene(True)
return {"ui": {"gltfFilename": {filepath.replace(f"{self.output_dir}/", "")}, "SHAPE_FLOW": {SHAPE_FLOW}, "auto_save": {'true' if auto_save else 'false'},}}
+29 -14
View File
@@ -1,5 +1,7 @@
import inspect
import re
import json
BPY_OBJS = "BPY_OBJS"
BPY_OBJ = "BPY_OBJ"
@@ -7,6 +9,13 @@ BPY_OBJS_TYPE = {
BPY_OBJS: (BPY_OBJS,),
}
node_input_types = {}
with open("custom_nodes/avatar-graph-comfyui/blender/input_types.txt") as f:
input_types = f.readlines()
for input_type in input_types:
node_cls, node_types = input_type.split("|")
node_input_types[node_cls] = json.loads(node_types)
class ObjectOps:
@classmethod
@@ -38,16 +47,22 @@ class ObjectOps:
@classmethod
def INPUT_TYPES(cls):
import global_bpy
bpy = global_bpy.get_bpy()
result = {
"required": {},
"optional": {
**cls.get_base_input_types(bpy),
**cls.get_extra_input_types(bpy)
}
}
return result
return node_input_types[cls.__name__]
# import global_bpy
# bpy = global_bpy.get_bpy()
# result = {
# "required": {},
# "optional": {
# **cls.get_base_input_types(bpy),
# **cls.get_extra_input_types(bpy)
# }
# }
# with open("input_types.txt", "a") as f:
# f.write(cls.__name__ + "|" + json.dumps(result) + "\n")
# return result
@classmethod
def NODE_CLASS_MAPPINGS(cls):
@@ -82,7 +97,7 @@ class ObjectOps:
results = self.blender_process(bpy, **props)
if results is None:
print(results)
# print(results)
if props.get("BPY_OBJ") != None:
return (props["BPY_OBJ"], )
else:
@@ -190,12 +205,12 @@ def print_blender_functions(path):
if ag_path not in sys.path:
sys.path.append(ag_path)
import global_bpy
bpy = global_bpy.get_bpy()
# import global_bpy
# bpy = global_bpy.get_bpy()
# add a an empty object
print(dir(get_nested_attr(bpy, path)), type(get_nested_attr(bpy, path)))
# print(dir(get_nested_attr(bpy, path)), type(get_nested_attr(bpy, path)))
def create_ops_class(cls, path, name=None, name_prefix=''):
-35
View File
@@ -1,35 +0,0 @@
class CombineMesh:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"obj_1": ("BPY_OBJS",),
"obj_2": ("BPY_OBJS",),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, obj_1, obj_2):
import global_bpy
bpy = global_bpy.get_bpy()
override = bpy.context.copy()
override["active_object"] = obj_1[0]
override["selected_editable_objects"] = list([*obj_1, *obj_2])
bpy.ops.object.join(override)
joined_object = override["active_object"]
return ([joined_object], )
NODE_CLASS_MAPPINGS = {
"CombineMesh": CombineMesh
}
NODE_DISPLAY_NAME_MAPPINGS = {
"CombineMesh": "Combine Mesh"
}
+5 -6
View File
@@ -4,21 +4,20 @@ class CreateShapeFlow():
def INPUT_TYPES(s):
return {
"required": {
"blendshapes": ("STRING", {
"shape_flow": ("STRING", {
"multiline": False,
"default": "{node: ''}"
"default": '{"nodes": []}'
}),
},
}
RETURN_TYPES = ("blendshapes",)
RETURN_NAMES = ("blendshapes",)
RETURN_TYPES = ("SHAPE_FLOW",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, blendshapes):
return (blendshapes,)
def process(self, shape_flow):
return (shape_flow,)
# A dictionary that contains all nodes you want to export with their names
# NOTE: names should be globally unique
-63
View File
@@ -1,63 +0,0 @@
class CreateVertexBounds():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
"name": ("STRING", {
"multiline": False,
"default": "Group"
}),
"extrude": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, name, extrude):
import global_bpy
bpy = global_bpy.get_bpy()
if len(bpy_objs_target) == 0:
# throw error
return
target_object = bpy_objs_target[0]
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# select only the target object
bpy.context.view_layer.objects.active = target_object
# enter enter edit mode and select all faces of the object to fill
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.extrude_region_move(MESH_OT_extrude_region={
"use_normal_flip": False, "use_dissolve_ortho_edges": False, "mirror": False})
bpy.ops.transform.resize(
value=(extrude, extrude, 1), constraint_axis=(False, False, False))
# remove the extruded vertex from the vertex group "name"
bpy.ops.object.vertex_group_remove_from()
# bpy.ops.mesh.delete(type='FACE')
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"CreateVertexBounds": CreateVertexBounds
}
NODE_DISPLAY_NAME_MAPPINGS = {
"CreateVertexBounds": "Vertex Bounds"
}
-56
View File
@@ -1,56 +0,0 @@
class CreateVertexGroup():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
"name": ("STRING", {
"multiline": False,
"default": "Group"
}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, name):
import global_bpy
bpy = global_bpy.get_bpy()
if len(bpy_objs_target) == 0:
# throw error
return
target_object = bpy_objs_target[0]
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# select only the target object
bpy.context.view_layer.objects.active = target_object
# enter enter edit mode and select all faces of the object to fill
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
# create vertex group and assign all selected faces to it (the name of the vertex group is the same as the name of the object)
bpy.context.object.vertex_groups.new(name=name)
bpy.ops.object.vertex_group_assign()
# bpy.ops.mesh.delete(type='FACE')
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"CreateVertexGroup": CreateVertexGroup
}
NODE_DISPLAY_NAME_MAPPINGS = {
"CreateVertexGroup": "Vertex Group (Old)"
}
-61
View File
@@ -1,61 +0,0 @@
class DissolveFaces():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
"target_vertex_group": ("STRING", {
"multiline": False,
"default": ""
}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, target_vertex_group):
import global_bpy
bpy = global_bpy.get_bpy()
target_object = bpy_objs_target[0]
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# select only the target object
bpy.context.view_layer.objects.active = target_object
# enter enter edit mode and select all faces of the object to fill
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='DESELECT')
# if we have vertex group, select that instead
if target_vertex_group and target_vertex_group.strip() != "":
group = target_object.vertex_groups.get(target_vertex_group)
if group:
bpy.ops.object.vertex_group_set_active(group=group.name)
bpy.ops.object.vertex_group_select()
else:
bpy.ops.mesh.select_all(action='SELECT')
# dissolve the faces
# bpy.ops.mesh.dissolve_faces()
bpy.ops.mesh.delete(type='ONLY_FACE')
# bpy.ops.mesh.delete(type='FACE')
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"DissolveFaces": DissolveFaces
}
NODE_DISPLAY_NAME_MAPPINGS = {
"DissolveFaces": "Dissolve Faces (Old)"
}
-46
View File
@@ -1,46 +0,0 @@
class FillFace:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target):
import global_bpy
bpy = global_bpy.get_bpy()
target_object = bpy_objs_target[0]
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# select only the target object
bpy.context.view_layer.objects.active = target_object
# enter enter edit mode and select all faces of the object to fill
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
# fill the faces
bpy.ops.mesh.fill()
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"FillFace": FillFace
}
NODE_DISPLAY_NAME_MAPPINGS = {
"FillFace": "Fill Face (Old)"
}
-30
View File
@@ -1,30 +0,0 @@
class GroupObject():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
"bpy_objs_target_2": ("BPY_OBJS",),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, bpy_objs_target_2):
combined_list = bpy_objs_target + bpy_objs_target_2
return (combined_list,)
NODE_CLASS_MAPPINGS = {
"GroupObject": GroupObject
}
NODE_DISPLAY_NAME_MAPPINGS = {
"GroupObject": "Group Object"
}
-108
View File
@@ -1,108 +0,0 @@
class GroupVertexInside():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy": ("BPY",),
"bpy_objs_target": ("BPY_OBJS",),
"name": ("STRING", {
"multiline": False,
"default": "Group"
}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, name):
import global_bpy
bpy = global_bpy.get_bpy()
target_object = bpy_objs_target[0]
bpy.ops.object.mode_set(mode='OBJECT')
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# select only the target object
bpy.context.view_layer.objects.active = target_object
# enter enter edit mode and select all faces of the object to fill
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='DESELECT')
# select the vetex group's vertices
bpy.ops.object.vertex_group_select()
# get vertex group
vertex_group = target_object.vertex_groups[name]
verts = target_object.data.vertices
# all_vertices = [(v.co.x, v.co.y, i) for i, v in target_object.data.vertices]
# get the verts in the group
verts_in_group = [v for v in verts if vertex_group.index in [vg.group for vg in v.groups]]
# get all selected vertices's xy
# get the vertices of the vertex group
vertex_group_vertices = [(v.co.x, v.co.y) for v in verts_in_group]
# get all vertices
# all_vertices = [(v.co.x, v.co.y) for v in target_object.data.vertices]
all_vertices_without_vertex_group = [(v.co.x, v.co.y, i) for i, v in enumerate(target_object.data.vertices) if v not in verts_in_group]
from scipy.spatial import ConvexHull, Delaunay
# create a convex hull of the vertex group's vertices
hull = ConvexHull(vertex_group_vertices)
# create a Delaunay triangulation of the convex hull
tri = Delaunay(hull.points[hull.vertices])
# get the indices of the vertices that are inside the convex hull
inside_vertices_indices = [i for (x,y,i) in all_vertices_without_vertex_group if tri.find_simplex((x,y))>=0]
print(inside_vertices_indices)
print(len(vertex_group_vertices))
bpy.ops.mesh.select_all(action='DESELECT')
# select the vertices that are inside the convex hull
# for i in inside_vertices_indices:
# target_object.data.vertices[i].select = True
# # select vertex from 1 to 10
# for i in range(1, 100):
# target_object.data.vertices[i].select = True
# create a new vertex group
# bpy.context.object.vertex_groups.new(name="fuck")
# bpy.ops.object.vertex_group_assign()
bpy.ops.object.mode_set(mode='OBJECT')
# create a new vertex group
# new_group = bpy.context.object.vertex_groups.new(name="new_group")
vertex_group.add(inside_vertices_indices, weight=1.0, type='REPLACE')
# assign the selected vertices to the new vertex group
# new_group.add([v.index for v in target_object.data.vertices if v.select], weight=1.0, type='REPLACE')
# new_group.add([20, 100], weight=1.0, type='REPLACE')
# assign the selected vertices to the active vertex group
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"GroupVertexInside": GroupVertexInside
}
NODE_DISPLAY_NAME_MAPPINGS = {
"GroupVertexInside": "Group Vertex Inside"
}
+614
View File
@@ -0,0 +1,614 @@
Object_VertexGroupNewWithName|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"multiline": false, "default": "Group"}], "assign_selected": ["BOOLEAN", {"default": true}]}}
EditOps|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ContextSet_TransformPivotPoint|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "pivot": [["BOUNDING_BOX_CENTER", "CURSOR", "INDIVIDUAL_ORIGINS", "MEDIAN_POINT", "ACTIVE_ELEMENT"]]}}
Object_AddShapeKeys|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shape_keys": ["STRING", {"default": "key1,key2", "multiline": true}], "from_mix": ["BOOLEAN", {"default": false}]}}
Object_MeshFromTexture|{"required": {}, "optional": {"image": ["IMAGE"], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}}
Object_MatchTextureAspectRatio|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "image": ["IMAGE"], "scale": ["FLOAT", {"default": 0.001, "display": "number", "step": 0.001}]}}
AssignVertexGroupOps|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"multiline": false, "default": "Group"}]}}
Object_VertexGroupNewWithName|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"multiline": false, "default": "Group"}], "assign_selected": ["BOOLEAN", {"default": true}]}}
Object_CreateMeshLayer|{"required": {}, "optional": {"image": ["IMAGE"], "convex_hull": ["BOOLEAN", {"default": true}], "shape_threshold": ["FLOAT", {"display": "number", "default": 0.7}], "mesh_layer_name": ["STRING", {"default": "mesh_layer"}], "scale_x": ["FLOAT", {"display": "number", "default": 1}], "scale_y": ["FLOAT", {"display": "number", "default": 1}], "extrude_x": ["FLOAT", {"display": "number", "default": 0}], "extrude_y": ["FLOAT", {"display": "number", "default": 0}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}}
GetImageWidthHeight|{"required": {}, "optional": {"image": ["IMAGE"], "scale": ["FLOAT", {"default": 1.0}]}}
GetFirstObjOps|{"required": {}, "optional": {"BPY_OBJS": ["BPY_OBJS"]}}
Object_AssignTexture|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "texture": ["IMAGE"], "texture_name": ["STRING", {"multiline": false, "default": "my_image"}]}}
Mesh_JoinMesh|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "BPY_OBJ2": ["BPY_OBJ"]}}
Mesh_ModifyShapeKey|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shape_key_name": ["STRING", {"multiline": false, "default": "EyeBlinkLeft"}], "target_vertex_group": ["STRING", {"multiline": false, "default": ""}], "scale_x": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}], "scale_y": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}], "offset_x": ["FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}], "offset_y": ["FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}], "rotate": ["FLOAT", {"default": 0, "min": -360, "max": 360.0, "step": 0.01, "display": "number"}], "origin_offset_x": ["FLOAT", {"default": 0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}], "origin_offset_y": ["FLOAT", {"default": 0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}], "transform_radius": ["FLOAT", {"default": 1.0, "min": 0, "max": 1, "step": 0.01, "display": "number"}], "falloff": ["FLOAT", {"default": 0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}]}}
Mesh_AttributeSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value_float": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "value_float_vector_2d": ["B_VECTOR2", {}], "value_float_vector_3d": ["B_VECTOR3", {}], "value_int": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "value_int_vector_2d": ["B_VECTOR2", {}], "value_color": ["B_VECTOR4", {}], "value_bool": ["BOOLEAN", {"default": false}]}}
Mesh_AverageNormals|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "average_type": [["CUSTOM_NORMAL", "FACE_AREA", "CORNER_ANGLE"]], "weight": ["INT", {"min": 1, "max": 100, "default": 50}], "threshold": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 0.009999999776482582}]}}
Mesh_BeautifyFill|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "angle_limit": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 3.1415927410125732}]}}
Mesh_Bevel|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "offset_type": [["OFFSET", "WIDTH", "DEPTH", "PERCENT", "ABSOLUTE"]], "offset": ["FLOAT", {"min": 0.0, "max": 1000000.0, "default": 0.0}], "profile_type": [["SUPERELLIPSE", "CUSTOM"]], "offset_pct": ["FLOAT", {"min": 0.0, "max": 100.0, "default": 0.0}], "segments": ["INT", {"min": 1, "max": 1000, "default": 1}], "profile": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "affect": [["VERTICES", "EDGES"]], "clamp_overlap": ["BOOLEAN", {"default": false}], "loop_slide": ["BOOLEAN", {"default": true}], "mark_seam": ["BOOLEAN", {"default": false}], "mark_sharp": ["BOOLEAN", {"default": false}], "material": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "harden_normals": ["BOOLEAN", {"default": false}], "face_strength_mode": [["NONE", "NEW", "AFFECTED", "ALL"]], "miter_outer": [["SHARP", "PATCH", "ARC"]], "miter_inner": [["SHARP", "ARC"]], "spread": ["FLOAT", {"min": 0.0, "max": 1000000.0, "default": 0.10000000149011612}], "vmesh_method": [["ADJ", "CUTOFF"]], "release_confirm": ["BOOLEAN", {"default": false}]}}
Mesh_Bisect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "plane_co": ["B_VECTOR3", {}], "plane_no": ["B_VECTOR3", {}], "use_fill": ["BOOLEAN", {"default": false}], "clear_inner": ["BOOLEAN", {"default": false}], "clear_outer": ["BOOLEAN", {"default": false}], "threshold": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 9.999999747378752e-05}], "xstart": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "xend": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "ystart": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "yend": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "flip": ["BOOLEAN", {"default": false}], "cursor": ["INT", {"min": 0, "max": 2147483647, "default": 5}]}}
Mesh_BlendFromShape|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shape": ["B_ENUM", {}], "blend": ["FLOAT", {"min": -1000.0, "max": 1000.0, "default": 1.0}], "add": ["BOOLEAN", {"default": true}]}}
Mesh_BridgeEdgeLoops|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["SINGLE", "CLOSED", "PAIRS"]], "use_merge": ["BOOLEAN", {"default": false}], "merge_factor": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "twist_offset": ["INT", {"min": -1000, "max": 1000, "default": 0}], "number_cuts": ["INT", {"min": 0, "max": 1000, "default": 0}], "interpolation": [["LINEAR", "PATH", "SURFACE"]], "smoothness": ["FLOAT", {"min": 0.0, "max": 1000.0, "default": 1.0}], "profile_shape_factor": ["FLOAT", {"min": -1000.0, "max": 1000.0, "default": 0.0}], "profile_shape": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR"]]}}
Mesh_ColorsReverse|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ColorsRotate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_ccw": ["BOOLEAN", {"default": false}]}}
Mesh_ConvexHull|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "delete_unused": ["BOOLEAN", {"default": true}], "use_existing_faces": ["BOOLEAN", {"default": true}], "make_holes": ["BOOLEAN", {"default": false}], "join_triangles": ["BOOLEAN", {"default": true}], "face_threshold": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.6981316804885864}], "shape_threshold": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.6981316804885864}], "uvs": ["BOOLEAN", {"default": false}], "vcols": ["BOOLEAN", {"default": false}], "seam": ["BOOLEAN", {"default": false}], "sharp": ["BOOLEAN", {"default": false}], "materials": ["BOOLEAN", {"default": false}]}}
Mesh_CustomdataBevelWeightEdgeAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataBevelWeightEdgeClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataBevelWeightVertexAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataBevelWeightVertexClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataCreaseEdgeAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataCreaseEdgeClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataCreaseVertexAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataCreaseVertexClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataCustomSplitnormalsAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataCustomSplitnormalsClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataMaskClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataSkinAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_CustomdataSkinClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_Decimate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "ratio": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 1.0}], "use_vertex_group": ["BOOLEAN", {"default": false}], "vertex_group_factor": ["FLOAT", {"min": 0.0, "max": 1000.0, "default": 1.0}], "invert_vertex_group": ["BOOLEAN", {"default": false}], "use_symmetry": ["BOOLEAN", {"default": false}], "symmetry_axis": [["X", "Y", "Z"]]}}
Mesh_Delete|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["VERT", "EDGE", "FACE", "EDGE_FACE", "ONLY_FACE"]]}}
Mesh_DeleteEdgeloop|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_face_split": ["BOOLEAN", {"default": true}]}}
Mesh_DeleteLoose|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_verts": ["BOOLEAN", {"default": true}], "use_edges": ["BOOLEAN", {"default": true}], "use_faces": ["BOOLEAN", {"default": false}]}}
Mesh_DissolveDegenerate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "threshold": ["FLOAT", {"min": 9.999999974752427e-07, "max": 50.0, "default": 9.999999747378752e-05}]}}
Mesh_DissolveEdges|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_verts": ["BOOLEAN", {"default": true}], "use_face_split": ["BOOLEAN", {"default": false}]}}
Mesh_DissolveFaces|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_verts": ["BOOLEAN", {"default": false}]}}
Mesh_DissolveLimited|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "angle_limit": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.0872664600610733}], "use_dissolve_boundaries": ["BOOLEAN", {"default": false}], "delimit": ["B_ENUM_SET", {}]}}
Mesh_DissolveMode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_verts": ["BOOLEAN", {"default": false}], "use_face_split": ["BOOLEAN", {"default": false}], "use_boundary_tear": ["BOOLEAN", {"default": false}]}}
Mesh_DissolveVerts|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_face_split": ["BOOLEAN", {"default": false}], "use_boundary_tear": ["BOOLEAN", {"default": false}]}}
Mesh_DupliExtrudeCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "rotate_source": ["BOOLEAN", {"default": true}]}}
Mesh_Duplicate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": ["INT", {"min": 0, "max": 2147483647, "default": 1}]}}
Mesh_DuplicateMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_EdgeCollapse|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_EdgeFaceAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_EdgeRotate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_ccw": ["BOOLEAN", {"default": false}]}}
Mesh_EdgeSplit|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["EDGE", "VERT"]]}}
Mesh_EdgeringSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "deselect": ["BOOLEAN", {"default": false}], "toggle": ["BOOLEAN", {"default": false}], "ring": ["BOOLEAN", {"default": true}]}}
Mesh_EdgesSelectSharp|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "sharpness": ["FLOAT", {"min": 0.00017453292093705386, "max": 3.1415927410125732, "default": 0.5235987901687622}]}}
Mesh_ExtrudeContext|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_normal_flip": ["BOOLEAN", {"default": false}], "use_dissolve_ortho_edges": ["BOOLEAN", {"default": false}], "mirror": ["BOOLEAN", {"default": false}]}}
Mesh_ExtrudeContextMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeEdgesIndiv|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_normal_flip": ["BOOLEAN", {"default": false}], "mirror": ["BOOLEAN", {"default": false}]}}
Mesh_ExtrudeEdgesMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeFacesIndiv|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}]}}
Mesh_ExtrudeFacesMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeManifold|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeRegion|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_normal_flip": ["BOOLEAN", {"default": false}], "use_dissolve_ortho_edges": ["BOOLEAN", {"default": false}], "mirror": ["BOOLEAN", {"default": false}]}}
Mesh_ExtrudeRegionMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeRegionShrinkFatten|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeRepeat|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "steps": ["INT", {"min": 0, "max": 1000000, "default": 10}], "offset": ["B_VECTOR3", {}], "scale_offset": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}]}}
Mesh_ExtrudeVerticesMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ExtrudeVertsIndiv|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}]}}
Mesh_FaceMakePlanar|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "factor": ["FLOAT", {"min": -10.0, "max": 10.0, "default": 1.0}], "repeat": ["INT", {"min": 1, "max": 10000, "default": 1}]}}
Mesh_FaceSetExtract|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "add_boundary_loop": ["BOOLEAN", {"default": true}], "smooth_iterations": ["INT", {"min": 0, "max": 2147483647, "default": 4}], "apply_shrinkwrap": ["BOOLEAN", {"default": true}], "add_solidify": ["BOOLEAN", {"default": true}]}}
Mesh_FaceSplitByEdges|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_FacesMirrorUv|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["POSITIVE", "NEGATIVE"]], "precision": ["INT", {"min": 1, "max": 16, "default": 3}]}}
Mesh_FacesSelectLinkedFlat|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "sharpness": ["FLOAT", {"min": 0.00017453292093705386, "max": 3.1415927410125732, "default": 0.01745329238474369}]}}
Mesh_FacesShadeFlat|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_FacesShadeSmooth|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_Fill|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_beauty": ["BOOLEAN", {"default": true}]}}
Mesh_FillGrid|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "span": ["INT", {"min": 1, "max": 1000, "default": 1}], "offset": ["INT", {"min": -1000, "max": 1000, "default": 0}], "use_interp_simple": ["BOOLEAN", {"default": false}]}}
Mesh_FillHoles|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "sides": ["INT", {"min": 0, "max": 1000, "default": 4}]}}
Mesh_FlipNormals|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "only_clnors": ["BOOLEAN", {"default": false}]}}
Mesh_FlipQuadTessellation|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_Hide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "unselected": ["BOOLEAN", {"default": false}]}}
Mesh_Inset|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_boundary": ["BOOLEAN", {"default": true}], "use_even_offset": ["BOOLEAN", {"default": true}], "use_relative_offset": ["BOOLEAN", {"default": false}], "use_edge_rail": ["BOOLEAN", {"default": false}], "thickness": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 0.0}], "depth": ["FLOAT", {"min": -999999995904.0, "max": 999999995904.0, "default": 0.0}], "use_outset": ["BOOLEAN", {"default": false}], "use_select_inset": ["BOOLEAN", {"default": false}], "use_individual": ["BOOLEAN", {"default": false}], "use_interpolate": ["BOOLEAN", {"default": true}], "release_confirm": ["BOOLEAN", {"default": false}]}}
Mesh_Intersect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["SELECT", "SELECT_UNSELECT"]], "separate_mode": [["ALL", "CUT", "NONE"]], "threshold": ["FLOAT", {"min": 0.0, "max": 0.009999999776482582, "default": 9.999999974752427e-07}], "solver": [["FAST", "EXACT"]]}}
Mesh_IntersectBoolean|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "operation": [["INTERSECT", "UNION", "DIFFERENCE"]], "use_swap": ["BOOLEAN", {"default": false}], "use_self": ["BOOLEAN", {"default": false}], "threshold": ["FLOAT", {"min": 0.0, "max": 0.009999999776482582, "default": 9.999999974752427e-07}], "solver": [["FAST", "EXACT"]]}}
Mesh_KnifeProject|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "cut_through": ["BOOLEAN", {"default": false}]}}
Mesh_KnifeTool|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_occlude_geometry": ["BOOLEAN", {"default": true}], "only_selected": ["BOOLEAN", {"default": false}], "xray": ["BOOLEAN", {"default": true}], "visible_measurements": [["NONE", "BOTH", "DISTANCE", "ANGLE"]], "angle_snapping": [["NONE", "SCREEN", "RELATIVE"]], "angle_snapping_increment": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.5235987901687622}], "wait_for_input": ["BOOLEAN", {"default": true}]}}
Mesh_LoopMultiSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "ring": ["BOOLEAN", {"default": false}]}}
Mesh_LoopSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "deselect": ["BOOLEAN", {"default": false}], "toggle": ["BOOLEAN", {"default": false}], "ring": ["BOOLEAN", {"default": false}]}}
Mesh_LoopToRegion|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "select_bigger": ["BOOLEAN", {"default": false}]}}
Mesh_Loopcut|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "number_cuts": ["INT", {"min": 1, "max": 1000000, "default": 1}], "smoothness": ["FLOAT", {"min": -1000.0, "max": 1000.0, "default": 0.0}], "falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR"]], "object_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "edge_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "mesh_select_mode_init": ["B_BOOLEAN3", {}]}}
Mesh_LoopcutSlide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_MarkFreestyleEdge|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear": ["BOOLEAN", {"default": false}]}}
Mesh_MarkFreestyleFace|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear": ["BOOLEAN", {"default": false}]}}
Mesh_MarkSeam|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear": ["BOOLEAN", {"default": false}]}}
Mesh_MarkSharp|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear": ["BOOLEAN", {"default": false}], "use_verts": ["BOOLEAN", {"default": false}]}}
Mesh_Merge|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["CENTER", "CURSOR", "COLLAPSE", "FIRST", "LAST"]], "uvs": ["BOOLEAN", {"default": false}]}}
Mesh_MergeNormals|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ModWeightedStrength|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "set": ["BOOLEAN", {"default": false}], "face_strength": [["WEAK", "MEDIUM", "STRONG"]]}}
Mesh_NormalsMakeConsistent|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "inside": ["BOOLEAN", {"default": false}]}}
Mesh_NormalsTools|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["COPY", "PASTE", "ADD", "MULTIPLY", "RESET"]], "absolute": ["BOOLEAN", {"default": false}]}}
Mesh_OffsetEdgeLoops|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_cap_endpoint": ["BOOLEAN", {"default": false}]}}
Mesh_OffsetEdgeLoopsSlide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_PaintMaskExtract|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mask_threshold": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "add_boundary_loop": ["BOOLEAN", {"default": true}], "smooth_iterations": ["INT", {"min": 0, "max": 2147483647, "default": 4}], "apply_shrinkwrap": ["BOOLEAN", {"default": true}], "add_solidify": ["BOOLEAN", {"default": true}]}}
Mesh_PaintMaskSlice|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mask_threshold": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "fill_holes": ["BOOLEAN", {"default": true}], "new_object": ["BOOLEAN", {"default": true}]}}
Mesh_PointNormals|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["COORDINATES", "MOUSE"]], "invert": ["BOOLEAN", {"default": false}], "align": ["BOOLEAN", {"default": false}], "target_location": ["B_VECTOR3", {}], "spherize": ["BOOLEAN", {"default": false}], "spherize_strength": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.10000000149011612}]}}
Mesh_Poke|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "offset": ["FLOAT", {"min": -1000.0, "max": 1000.0, "default": 0.0}], "use_relative_offset": ["BOOLEAN", {"default": false}], "center_mode": [["MEDIAN_WEIGHTED", "MEDIAN", "BOUNDS"]]}}
Mesh_PolybuildDeleteAtCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Mesh_PolybuildDissolveAtCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_PolybuildExtrudeAtCursorMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_PolybuildFaceAtCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "create_quads": ["BOOLEAN", {"default": true}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Mesh_PolybuildFaceAtCursorMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_PolybuildSplitAtCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Mesh_PolybuildSplitAtCursorMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_PolybuildTransformAtCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Mesh_PolybuildTransformAtCursorMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_QuadsConvertToTris|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "quad_method": [["BEAUTY", "FIXED", "FIXED_ALTERNATE", "SHORTEST_DIAGONAL", "LONGEST_DIAGONAL"]], "ngon_method": [["BEAUTY", "CLIP"]]}}
Mesh_RegionToLoop|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_RemoveDoubles|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "threshold": ["FLOAT", {"min": 9.999999974752427e-07, "max": 50.0, "default": 9.999999747378752e-05}], "use_unselected": ["BOOLEAN", {"default": false}], "use_sharp_edge_from_normals": ["BOOLEAN", {"default": false}]}}
Mesh_Reveal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "select": ["BOOLEAN", {"default": true}]}}
Mesh_Rip|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}], "use_fill": ["BOOLEAN", {"default": false}]}}
Mesh_RipEdge|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Mesh_RipEdgeMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_RipMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_Screw|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "steps": ["INT", {"min": 1, "max": 100000, "default": 9}], "turns": ["INT", {"min": 1, "max": 100000, "default": 1}], "center": ["B_VECTOR3", {}], "axis": ["B_VECTOR3", {}]}}
Mesh_SelectAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "action": [["TOGGLE", "SELECT", "DESELECT", "INVERT"]]}}
Mesh_SelectAxis|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "orientation": [["GLOBAL", "LOCAL", "NORMAL", "GIMBAL", "VIEW", "CURSOR", "PARENT"]], "sign": [["POS", "NEG", "ALIGN"]], "axis": [["X", "Y", "Z"]], "threshold": ["FLOAT", {"min": 9.999999974752427e-07, "max": 50.0, "default": 9.999999747378752e-05}]}}
Mesh_SelectFaceBySides|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "number": ["INT", {"min": 3, "max": 2147483647, "default": 4}], "type": [["LESS", "EQUAL", "GREATER", "NOTEQUAL"]], "extend": ["BOOLEAN", {"default": true}]}}
Mesh_SelectInteriorFaces|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_SelectLess|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_face_step": ["BOOLEAN", {"default": true}]}}
Mesh_SelectLinked|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "delimit": ["B_ENUM_SET", {}]}}
Mesh_SelectLinkedPick|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "deselect": ["BOOLEAN", {"default": false}], "delimit": ["B_ENUM_SET", {}], "object_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "index": ["INT", {"min": -1, "max": 2147483647, "default": -1}]}}
Mesh_SelectLoose|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}]}}
Mesh_SelectMirror|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "axis": ["B_ENUM_SET", {}], "extend": ["BOOLEAN", {"default": false}]}}
Mesh_SelectMode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_extend": ["BOOLEAN", {"default": false}], "use_expand": ["BOOLEAN", {"default": false}], "type": [["VERT", "EDGE", "FACE"]], "action": [["DISABLE", "ENABLE", "TOGGLE"]]}}
Mesh_SelectMore|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_face_step": ["BOOLEAN", {"default": true}]}}
Mesh_SelectNextItem|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_SelectNonManifold|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": true}], "use_wire": ["BOOLEAN", {"default": true}], "use_boundary": ["BOOLEAN", {"default": true}], "use_multi_face": ["BOOLEAN", {"default": true}], "use_non_contiguous": ["BOOLEAN", {"default": true}], "use_verts": ["BOOLEAN", {"default": true}]}}
Mesh_SelectNth|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "skip": ["INT", {"min": 1, "max": 2147483647, "default": 1}], "nth": ["INT", {"min": 1, "max": 2147483647, "default": 1}], "offset": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Mesh_SelectPrevItem|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_SelectRandom|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "ratio": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "seed": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "action": [["SELECT", "DESELECT"]]}}
Mesh_SelectSimilar|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["NORMAL", "FACE", "VGROUP", "EDGE", "VCREASE", "LENGTH", "DIR", "FACE", "FACE_ANGLE", "CREASE", "BEVEL", "SEAM", "SHARP", "FREESTYLE_EDGE", "MATERIAL", "AREA", "SIDES", "PERIMETER", "NORMAL", "COPLANAR", "SMOOTH", "FACE_MAP", "FREESTYLE_FACE"]], "compare": [["EQUAL", "GREATER", "LESS"]], "threshold": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}]}}
Mesh_SelectSimilarRegion|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_SelectUngrouped|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}]}}
Mesh_Separate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["SELECTED", "MATERIAL", "LOOSE"]]}}
Mesh_SetNormalsFromFaces|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "keep_sharp": ["BOOLEAN", {"default": false}]}}
Mesh_ShapePropagateToAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_ShortestPathPick|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "edge_mode": [["SELECT", "SEAM", "SHARP", "CREASE", "BEVEL", "FREESTYLE"]], "use_face_step": ["BOOLEAN", {"default": false}], "use_topology_distance": ["BOOLEAN", {"default": false}], "use_fill": ["BOOLEAN", {"default": false}], "skip": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "nth": ["INT", {"min": 1, "max": 2147483647, "default": 1}], "offset": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "index": ["INT", {"min": -1, "max": 2147483647, "default": -1}]}}
Mesh_ShortestPathSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "edge_mode": [["SELECT", "SEAM", "SHARP", "CREASE", "BEVEL", "FREESTYLE"]], "use_face_step": ["BOOLEAN", {"default": false}], "use_topology_distance": ["BOOLEAN", {"default": false}], "use_fill": ["BOOLEAN", {"default": false}], "skip": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "nth": ["INT", {"min": 1, "max": 2147483647, "default": 1}], "offset": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Mesh_SmoothNormals|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "factor": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}]}}
Mesh_Solidify|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "thickness": ["FLOAT", {"min": -10000.0, "max": 10000.0, "default": 0.009999999776482582}]}}
Mesh_SortElements|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["VIEW_ZAXIS", "VIEW_XAXIS", "CURSOR_DISTANCE", "MATERIAL", "SELECTED", "RANDOMIZE", "REVERSE"]], "elements": ["B_ENUM_SET", {}], "reverse": ["BOOLEAN", {"default": false}], "seed": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
Mesh_Spin|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "steps": ["INT", {"min": 0, "max": 1000000, "default": 12}], "dupli": ["BOOLEAN", {"default": false}], "angle": ["FLOAT", {"min": -999999995904.0, "max": 999999995904.0, "default": 1.5707963705062866}], "use_auto_merge": ["BOOLEAN", {"default": true}], "use_normal_flip": ["BOOLEAN", {"default": false}], "center": ["B_VECTOR3", {}], "axis": ["B_VECTOR3", {}]}}
Mesh_Split|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_SplitNormals|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_Subdivide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "number_cuts": ["INT", {"min": 1, "max": 100, "default": 1}], "smoothness": ["FLOAT", {"min": 0.0, "max": 1000.0, "default": 0.0}], "ngon": ["BOOLEAN", {"default": true}], "quadcorner": [["INNERVERT", "PATH", "STRAIGHT_CUT", "FAN"]], "fractal": ["FLOAT", {"min": 0.0, "max": 1000000.0, "default": 0.0}], "fractal_along_normal": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "seed": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
Mesh_SubdivideEdgering|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "number_cuts": ["INT", {"min": 0, "max": 1000, "default": 10}], "interpolation": [["LINEAR", "PATH", "SURFACE"]], "smoothness": ["FLOAT", {"min": 0.0, "max": 1000.0, "default": 1.0}], "profile_shape_factor": ["FLOAT", {"min": -1000.0, "max": 1000.0, "default": 0.0}], "profile_shape": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR"]]}}
Mesh_Symmetrize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["NEGATIVE_X", "POSITIVE_X", "NEGATIVE_Y", "POSITIVE_Y", "NEGATIVE_Z", "POSITIVE_Z"]], "threshold": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 9.999999747378752e-05}]}}
Mesh_SymmetrySnap|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["NEGATIVE_X", "POSITIVE_X", "NEGATIVE_Y", "POSITIVE_Y", "NEGATIVE_Z", "POSITIVE_Z"]], "threshold": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 0.05000000074505806}], "factor": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "use_center": ["BOOLEAN", {"default": true}]}}
Mesh_TrisConvertToQuads|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "face_threshold": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.6981316804885864}], "shape_threshold": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.6981316804885864}], "uvs": ["BOOLEAN", {"default": false}], "vcols": ["BOOLEAN", {"default": false}], "seam": ["BOOLEAN", {"default": false}], "sharp": ["BOOLEAN", {"default": false}], "materials": ["BOOLEAN", {"default": false}]}}
Mesh_Unsubdivide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "iterations": ["INT", {"min": 1, "max": 1000, "default": 2}]}}
Mesh_UvTextureAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_UvTextureRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_UvsReverse|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_UvsRotate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_ccw": ["BOOLEAN", {"default": false}]}}
Mesh_VertConnect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_VertConnectConcave|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_VertConnectNonplanar|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "angle_limit": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.0872664600610733}]}}
Mesh_VertConnectPath|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Mesh_VerticesSmooth|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "factor": ["FLOAT", {"min": -10.0, "max": 10.0, "default": 0.0}], "repeat": ["INT", {"min": 1, "max": 1000, "default": 1}], "xaxis": ["BOOLEAN", {"default": true}], "yaxis": ["BOOLEAN", {"default": true}], "zaxis": ["BOOLEAN", {"default": true}], "wait_for_input": ["BOOLEAN", {"default": true}]}}
Mesh_VerticesSmoothLaplacian|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "repeat": ["INT", {"min": 1, "max": 1000, "default": 1}], "lambda_factor": ["FLOAT", {"min": 1.0000000116860974e-07, "max": 1000.0, "default": 1.0}], "lambda_border": ["FLOAT", {"min": 1.0000000116860974e-07, "max": 1000.0, "default": 4.999999873689376e-05}], "use_x": ["BOOLEAN", {"default": true}], "use_y": ["BOOLEAN", {"default": true}], "use_z": ["BOOLEAN", {"default": true}], "preserve_volume": ["BOOLEAN", {"default": true}]}}
Mesh_Wireframe|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_boundary": ["BOOLEAN", {"default": true}], "use_even_offset": ["BOOLEAN", {"default": true}], "use_relative_offset": ["BOOLEAN", {"default": false}], "use_replace": ["BOOLEAN", {"default": true}], "thickness": ["FLOAT", {"min": 0.0, "max": 10000.0, "default": 0.009999999776482582}], "offset": ["FLOAT", {"min": 0.0, "max": 10000.0, "default": 0.009999999776482582}], "use_crease": ["BOOLEAN", {"default": false}], "crease_weight": ["FLOAT", {"min": 0.0, "max": 1000.0, "default": 0.009999999776482582}]}}
Object_Add|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "type": [["MESH", "CURVE", "SURFACE", "META", "FONT", "CURVES", "POINTCLOUD", "VOLUME", "GPENCIL", "ARMATURE", "LATTICE", "EMPTY", "LIGHT", "LIGHT_PROBE", "CAMERA", "SPEAKER"]], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_AddNamed|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "linked": ["BOOLEAN", {"default": false}], "name": ["STRING", {"default": "", "multiline": false}], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "matrix": ["B_VECTOR16", {}], "drop_x": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "drop_y": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_Align|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "bb_quality": ["BOOLEAN", {"default": true}], "align_mode": [["OPT_1", "OPT_2", "OPT_3"]], "relative_to": [["OPT_1", "OPT_2", "OPT_3", "OPT_4"]], "align_axis": [["X", "Y", "Z"]]}}
Object_AnimTransformsToDeltas|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ArmatureAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_AssignPropertyDefaults|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "process_data": ["BOOLEAN", {"default": true}], "process_bones": ["BOOLEAN", {"default": true}]}}
Object_Bake|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["COMBINED", "AO", "SHADOW", "POSITION", "NORMAL", "UV", "ROUGHNESS", "EMIT", "ENVIRONMENT", "DIFFUSE", "GLOSSY", "TRANSMISSION"]], "pass_filter": [["NONE", "EMIT", "DIRECT", "INDIRECT", "COLOR", "DIFFUSE", "GLOSSY", "TRANSMISSION"]], "filepath": ["STRING", {"default": "", "multiline": false}], "width": ["INT", {"min": 1, "max": 2147483647, "default": 512}], "height": ["INT", {"min": 1, "max": 2147483647, "default": 512}], "margin": ["INT", {"min": 0, "max": 2147483647, "default": 16}], "margin_type": [["ADJACENT_FACES", "EXTEND"]], "use_selected_to_active": ["BOOLEAN", {"default": false}], "max_ray_distance": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 0.0}], "cage_extrusion": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 0.0}], "cage_object": ["STRING", {"default": "", "multiline": false}], "normal_space": [["OBJECT", "TANGENT"]], "normal_r": [["POS_X", "POS_Y", "POS_Z", "NEG_X", "NEG_Y", "NEG_Z"]], "normal_g": [["POS_X", "POS_Y", "POS_Z", "NEG_X", "NEG_Y", "NEG_Z"]], "normal_b": [["POS_X", "POS_Y", "POS_Z", "NEG_X", "NEG_Y", "NEG_Z"]], "target": [["IMAGE_TEXTURES", "VERTEX_COLORS"]], "save_mode": [["INTERNAL", "EXTERNAL"]], "use_clear": ["BOOLEAN", {"default": false}], "use_cage": ["BOOLEAN", {"default": false}], "use_split_materials": ["BOOLEAN", {"default": false}], "use_automatic_name": ["BOOLEAN", {"default": false}], "uv_layer": ["STRING", {"default": "", "multiline": false}]}}
Object_BakeImage|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_CameraAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_ClearOverrideLibrary|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_CollectionAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_CollectionExternalAssetDrop|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}], "use_instance": ["BOOLEAN", {"default": true}], "drop_x": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "drop_y": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "collection": ["B_ENUM", {}]}}
Object_CollectionInstanceAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"default": "Collection", "multiline": false}], "collection": ["B_ENUM", {}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "drop_x": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "drop_y": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_CollectionLink|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "collection": ["B_ENUM", {}]}}
Object_CollectionObjectsSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_CollectionRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_CollectionUnlink|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ConstraintAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": ["B_ENUM", {}]}}
Object_ConstraintAddWithTargets|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": ["B_ENUM", {}]}}
Object_ConstraintsClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ConstraintsCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_Convert|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "target": [["CURVE", "MESH", "GPENCIL", "CURVES"]], "keep_original": ["BOOLEAN", {"default": false}], "merge_customdata": ["BOOLEAN", {"default": true}], "angle": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 1.2217304706573486}], "thickness": ["INT", {"min": 1, "max": 100, "default": 5}], "seams": ["BOOLEAN", {"default": false}], "faces": ["BOOLEAN", {"default": true}], "offset": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 0.009999999776482582}]}}
Object_CorrectivesmoothBind|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_CurvesEmptyHairAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_CurvesRandomAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_DataInstanceAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"default": "", "multiline": false}], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "type": [["ACTION", "ARMATURE", "BRUSH", "CACHEFILE", "CAMERA", "COLLECTION", "CURVE", "CURVES", "FONT", "GREASEPENCIL", "IMAGE", "KEY", "LATTICE", "LIBRARY", "LIGHT", "LIGHT_PROBE", "LINESTYLE", "MASK", "MATERIAL", "MESH", "META", "MOVIECLIP", "NODETREE", "OBJECT", "PAINTCURVE", "PALETTE", "PARTICLE", "POINTCLOUD", "SCENE", "SIMULATION", "SOUND", "SPEAKER", "TEXT", "TEXTURE", "VOLUME", "WINDOWMANAGER", "WORKSPACE", "WORLD"]], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}], "drop_x": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "drop_y": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_DataTransfer|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_reverse_transfer": ["BOOLEAN", {"default": false}], "use_freeze": ["BOOLEAN", {"default": false}], "data_type": [["VGROUP_WEIGHTS", "BEVEL_WEIGHT_VERT", "COLOR_VERTEX", "SHARP_EDGE", "SEAM", "CREASE", "BEVEL_WEIGHT_EDGE", "FREESTYLE_EDGE", "CUSTOM_NORMAL", "COLOR_CORNER", "UV", "SMOOTH", "FREESTYLE_FACE"]], "use_create": ["BOOLEAN", {"default": true}], "vert_mapping": [["TOPOLOGY", "NEAREST", "EDGE_NEAREST", "EDGEINTERP_NEAREST", "POLY_NEAREST", "POLYINTERP_NEAREST", "POLYINTERP_VNORPROJ"]], "edge_mapping": [["TOPOLOGY", "VERT_NEAREST", "NEAREST", "POLY_NEAREST", "EDGEINTERP_VNORPROJ"]], "loop_mapping": [["TOPOLOGY", "NEAREST_NORMAL", "NEAREST_POLYNOR", "NEAREST_POLY", "POLYINTERP_NEAREST", "POLYINTERP_LNORPROJ"]], "poly_mapping": [["TOPOLOGY", "NEAREST", "NORMAL", "POLYINTERP_PNORPROJ"]], "use_auto_transform": ["BOOLEAN", {"default": false}], "use_object_transform": ["BOOLEAN", {"default": true}], "use_max_distance": ["BOOLEAN", {"default": false}], "max_distance": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 1.0}], "ray_radius": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 0.0}], "islands_precision": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 0.10000000149011612}], "layers_select_src": [["ACTIVE", "ALL", "BONE_SELECT", "BONE_DEFORM"]], "layers_select_dst": [["ACTIVE", "NAME", "INDEX"]], "mix_mode": [["REPLACE", "ABOVE_THRESHOLD", "BELOW_THRESHOLD", "MIX", "ADD", "SUB", "MUL"]], "mix_factor": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 1.0}]}}
Object_DatalayoutTransfer|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "data_type": [["VGROUP_WEIGHTS", "BEVEL_WEIGHT_VERT", "COLOR_VERTEX", "SHARP_EDGE", "SEAM", "CREASE", "BEVEL_WEIGHT_EDGE", "FREESTYLE_EDGE", "CUSTOM_NORMAL", "COLOR_CORNER", "UV", "SMOOTH", "FREESTYLE_FACE"]], "use_delete": ["BOOLEAN", {"default": false}], "layers_select_src": [["ACTIVE", "ALL", "BONE_SELECT", "BONE_DEFORM"]], "layers_select_dst": [["ACTIVE", "NAME", "INDEX"]]}}
Object_Delete|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_global": ["BOOLEAN", {"default": false}], "confirm": ["BOOLEAN", {"default": true}]}}
Object_DropGeometryNodes|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_DropNamedImage|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "filepath": ["STRING", {"default": "", "multiline": false}], "relative_path": ["BOOLEAN", {"default": true}], "name": ["STRING", {"default": "", "multiline": false}], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_DropNamedMaterial|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"default": "", "multiline": false}], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_Duplicate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "linked": ["BOOLEAN", {"default": false}], "mode": [["INIT", "DUMMY", "TRANSLATION", "ROTATION", "RESIZE", "SKIN_RESIZE", "TOSPHERE", "SHEAR", "BEND", "SHRINKFATTEN", "TILT", "TRACKBALL", "PUSHPULL", "CREASE", "VERTEX_CREASE", "MIRROR", "BONE_SIZE", "BONE_ENVELOPE", "BONE_ENVELOPE_DIST", "CURVE_SHRINKFATTEN", "MASK_SHRINKFATTEN", "GPENCIL_SHRINKFATTEN", "BONE_ROLL", "TIME_TRANSLATE", "TIME_SLIDE", "TIME_SCALE", "TIME_EXTEND", "BAKE_TIME", "BWEIGHT", "ALIGN", "EDGESLIDE", "SEQSLIDE", "GPENCIL_OPACITY"]]}}
Object_DuplicateMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_DuplicateMoveLinked|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_DuplicatesMakeReal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_base_parent": ["BOOLEAN", {"default": false}], "use_hierarchy": ["BOOLEAN", {"default": false}]}}
Object_EditmodeToggle|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_EffectorAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["FORCE", "WIND", "VORTEX", "MAGNET", "HARMONIC", "CHARGE", "LENNARDJ", "TEXTURE", "GUIDE", "BOID", "TURBULENCE", "DRAG", "FLUID"]], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_EmptyAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["PLAIN_AXES", "ARROWS", "SINGLE_ARROW", "CIRCLE", "CUBE", "SPHERE", "CONE", "IMAGE"]], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_ExplodeRefresh|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_FaceMapAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_FaceMapAssign|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_FaceMapDeselect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_FaceMapMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["UP", "DOWN"]]}}
Object_FaceMapRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_FaceMapRemoveFrom|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_FaceMapSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ForcefieldToggle|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_GeometryNodeTreeCopyAssign|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_GeometryNodesInputAttributeToggle|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "prop_path": ["STRING", {"default": "", "multiline": false}], "modifier_name": ["STRING", {"default": "", "multiline": false}]}}
Object_GeometryNodesMoveToNodes|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_GpencilAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}], "type": [["EMPTY", "STROKE", "MONKEY", "LRT_SCENE", "LRT_COLLECTION", "LRT_OBJECT"]], "use_in_front": ["BOOLEAN", {"default": true}], "stroke_depth_offset": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 0.05000000074505806}], "use_lights": ["BOOLEAN", {"default": false}], "stroke_depth_order": [["2D", "3D"]]}}
Object_GpencilModifierAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["GP_TEXTURE", "GP_TIME", "GP_WEIGHT_ANGLE", "GP_WEIGHT_PROXIMITY", "GP_ARRAY", "GP_BUILD", "GP_DASH", "GP_ENVELOPE", "GP_LENGTH", "GP_LINEART", "GP_MIRROR", "GP_MULTIPLY", "GP_OUTLINE", "GP_SIMPLIFY", "GP_SUBDIV", "GP_ARMATURE", "GP_HOOK", "GP_LATTICE", "GP_NOISE", "GP_OFFSET", "SHRINKWRAP", "GP_SMOOTH", "GP_THICK", "GP_COLOR", "GP_OPACITY", "GP_TINT"]]}}
Object_GpencilModifierApply|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "apply_as": [["DATA", "SHAPE"]], "modifier": ["STRING", {"default": "", "multiline": false}], "report": ["BOOLEAN", {"default": false}]}}
Object_GpencilModifierCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_GpencilModifierCopyToSelected|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_GpencilModifierMoveDown|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_GpencilModifierMoveToIndex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "index": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
Object_GpencilModifierMoveUp|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_GpencilModifierRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "report": ["BOOLEAN", {"default": false}]}}
Object_HideCollection|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "collection_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "toggle": ["BOOLEAN", {"default": false}], "extend": ["BOOLEAN", {"default": false}]}}
Object_HideRenderClearAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_HideViewClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "select": ["BOOLEAN", {"default": true}]}}
Object_HideViewSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "unselected": ["BOOLEAN", {"default": false}]}}
Object_HookAddNewob|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_HookAddSelob|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_bone": ["BOOLEAN", {"default": false}]}}
Object_HookAssign|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["B_ENUM", {}]}}
Object_HookRecenter|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["B_ENUM", {}]}}
Object_HookRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["B_ENUM", {}]}}
Object_HookReset|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["B_ENUM", {}]}}
Object_HookSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["B_ENUM", {}]}}
Object_InstanceOffsetFromCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_InstanceOffsetFromObject|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_InstanceOffsetToCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_IsolateTypeRender|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_Join|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_JoinShapes|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_JoinUvs|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_LaplaciandeformBind|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_LightAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["POINT", "SUN", "SPOT", "AREA"]], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_LightprobeAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["CUBEMAP", "PLANAR", "GRID"]], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_LightprobeCacheBake|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "delay": ["INT", {"min": 0, "max": 2000, "default": 0}], "subset": [["ALL", "DIRTY", "SELECTED", "ACTIVE"]]}}
Object_LightprobeCacheFree|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_LineartBakeStrokes|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_LineartBakeStrokesAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_LineartClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_LineartClearAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_LinkToCollection|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "collection_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "is_new": ["BOOLEAN", {"default": false}], "new_collection_name": ["STRING", {"default": "", "multiline": false}]}}
Object_LoadBackgroundImage|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "filepath": ["STRING", {"default": "", "multiline": false}], "filter_image": ["BOOLEAN", {"default": true}], "filter_folder": ["BOOLEAN", {"default": true}], "view_align": ["BOOLEAN", {"default": true}]}}
Object_LoadReferenceImage|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "filepath": ["STRING", {"default": "", "multiline": false}], "filter_image": ["BOOLEAN", {"default": true}], "filter_folder": ["BOOLEAN", {"default": true}], "view_align": ["BOOLEAN", {"default": true}]}}
Object_LocationClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear_delta": ["BOOLEAN", {"default": false}]}}
Object_MakeDupliFace|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MakeLinksData|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["OBDATA", "MATERIAL", "ANIMATION", "GROUPS", "DUPLICOLLECTION", "FONTS", "MODIFIERS", "EFFECTS"]]}}
Object_MakeLinksScene|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "scene": ["B_ENUM", {}]}}
Object_MakeLocal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["SELECT_OBJECT", "SELECT_OBDATA", "SELECT_OBDATA_MATERIAL", "ALL"]]}}
Object_MakeOverrideLibrary|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "collection": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_MakeSingleUser|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["SELECTED_OBJECTS", "ALL"]], "object": ["BOOLEAN", {"default": false}], "obdata": ["BOOLEAN", {"default": false}], "material": ["BOOLEAN", {"default": false}], "animation": ["BOOLEAN", {"default": false}], "obdata_animation": ["BOOLEAN", {"default": false}]}}
Object_MaterialSlotAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MaterialSlotAssign|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MaterialSlotCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MaterialSlotDeselect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MaterialSlotMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["UP", "DOWN"]]}}
Object_MaterialSlotRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MaterialSlotRemoveUnused|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MaterialSlotSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MeshdeformBind|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MetaballAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["BALL", "CAPSULE", "PLANE", "ELLIPSOID", "CUBE"]], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_ModeSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["OBJECT", "EDIT", "POSE", "SCULPT", "VERTEX_PAINT", "WEIGHT_PAINT", "TEXTURE_PAINT", "PARTICLE_EDIT", "EDIT_GPENCIL", "SCULPT_GPENCIL", "PAINT_GPENCIL", "WEIGHT_GPENCIL", "VERTEX_GPENCIL", "SCULPT_CURVES"]], "toggle": ["BOOLEAN", {"default": false}]}}
Object_ModeSetWithSubmode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["OBJECT", "EDIT", "POSE", "SCULPT", "VERTEX_PAINT", "WEIGHT_PAINT", "TEXTURE_PAINT", "PARTICLE_EDIT", "EDIT_GPENCIL", "SCULPT_GPENCIL", "PAINT_GPENCIL", "WEIGHT_GPENCIL", "VERTEX_GPENCIL", "SCULPT_CURVES"]], "toggle": ["BOOLEAN", {"default": false}], "mesh_select_mode": [["VERT", "EDGE", "FACE"]]}}
Object_ModifierAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["DATA_TRANSFER", "MESH_CACHE", "MESH_SEQUENCE_CACHE", "NORMAL_EDIT", "WEIGHTED_NORMAL", "UV_PROJECT", "UV_WARP", "VERTEX_WEIGHT_EDIT", "VERTEX_WEIGHT_MIX", "VERTEX_WEIGHT_PROXIMITY", "ARRAY", "BEVEL", "BOOLEAN", "BUILD", "DECIMATE", "EDGE_SPLIT", "NODES", "MASK", "MIRROR", "MESH_TO_VOLUME", "MULTIRES", "REMESH", "SCREW", "SKIN", "SOLIDIFY", "SUBSURF", "TRIANGULATE", "VOLUME_TO_MESH", "WELD", "WIREFRAME", "ARMATURE", "CAST", "CURVE", "DISPLACE", "HOOK", "LAPLACIANDEFORM", "LATTICE", "MESH_DEFORM", "SHRINKWRAP", "SIMPLE_DEFORM", "SMOOTH", "CORRECTIVE_SMOOTH", "LAPLACIANSMOOTH", "SURFACE_DEFORM", "WARP", "WAVE", "VOLUME_DISPLACE", "CLOTH", "COLLISION", "DYNAMIC_PAINT", "EXPLODE", "FLUID", "OCEAN", "PARTICLE_INSTANCE", "PARTICLE_SYSTEM", "SOFT_BODY", "SURFACE"]]}}
Object_ModifierApply|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "report": ["BOOLEAN", {"default": false}], "merge_customdata": ["BOOLEAN", {"default": true}], "single_user": ["BOOLEAN", {"default": false}]}}
Object_ModifierApplyAsShapekey|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "keep_modifier": ["BOOLEAN", {"default": false}], "modifier": ["STRING", {"default": "", "multiline": false}], "report": ["BOOLEAN", {"default": false}]}}
Object_ModifierConvert|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_ModifierCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_ModifierCopyToSelected|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_ModifierMoveDown|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_ModifierMoveToIndex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "index": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
Object_ModifierMoveUp|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_ModifierRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "report": ["BOOLEAN", {"default": false}]}}
Object_ModifierSetActive|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MoveToCollection|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "collection_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "is_new": ["BOOLEAN", {"default": false}], "new_collection_name": ["STRING", {"default": "", "multiline": false}]}}
Object_MultiresBaseApply|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MultiresExternalPack|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_MultiresExternalSave|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "filepath": ["STRING", {"default": "", "multiline": false}], "hide_props_region": ["BOOLEAN", {"default": true}], "check_existing": ["BOOLEAN", {"default": true}], "filter_blender": ["BOOLEAN", {"default": false}], "filter_backup": ["BOOLEAN", {"default": false}], "filter_image": ["BOOLEAN", {"default": false}], "filter_movie": ["BOOLEAN", {"default": false}], "filter_python": ["BOOLEAN", {"default": false}], "filter_font": ["BOOLEAN", {"default": false}], "filter_sound": ["BOOLEAN", {"default": false}], "filter_text": ["BOOLEAN", {"default": false}], "filter_archive": ["BOOLEAN", {"default": false}], "filter_btx": ["BOOLEAN", {"default": true}], "filter_collada": ["BOOLEAN", {"default": false}], "filter_alembic": ["BOOLEAN", {"default": false}], "filter_usd": ["BOOLEAN", {"default": false}], "filter_obj": ["BOOLEAN", {"default": false}], "filter_volume": ["BOOLEAN", {"default": false}], "filter_folder": ["BOOLEAN", {"default": true}], "filter_blenlib": ["BOOLEAN", {"default": false}], "filemode": ["INT", {"min": 1, "max": 9, "default": 9}], "relative_path": ["BOOLEAN", {"default": true}], "display_type": [["DEFAULT", "LIST_VERTICAL", "LIST_HORIZONTAL", "THUMBNAIL"]], "sort_method": ["B_ENUM", {}], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MultiresHigherLevelsDelete|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MultiresRebuildSubdiv|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MultiresReshape|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_MultiresSubdivide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "mode": [["CATMULL_CLARK", "SIMPLE", "LINEAR"]]}}
Object_MultiresUnsubdivide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_OceanBake|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}], "free": ["BOOLEAN", {"default": false}]}}
Object_OriginClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_OriginSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["GEOMETRY_ORIGIN", "ORIGIN_GEOMETRY", "ORIGIN_CURSOR", "ORIGIN_CENTER_OF_MASS", "ORIGIN_CENTER_OF_VOLUME"]], "center": [["MEDIAN", "BOUNDS"]]}}
Object_ParentClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["CLEAR", "CLEAR_KEEP_TRANSFORM", "CLEAR_INVERSE"]]}}
Object_ParentInverseApply|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ParentNoInverseSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "confirm": ["BOOLEAN", {"default": true}], "keep_transform": ["BOOLEAN", {"default": false}]}}
Object_ParentSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["OBJECT", "ARMATURE", "ARMATURE_NAME", "ARMATURE_AUTO", "ARMATURE_ENVELOPE", "BONE", "BONE_RELATIVE", "CURVE", "FOLLOW", "PATH_CONST", "LATTICE", "VERTEX", "VERTEX_TRI"]], "xmirror": ["BOOLEAN", {"default": false}], "keep_transform": ["BOOLEAN", {"default": false}]}}
Object_ParticleSystemAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ParticleSystemRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_PathsCalculate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "display_type": [["CURRENT_FRAME", "RANGE"]], "range": [["KEYS_ALL", "KEYS_SELECTED", "SCENE", "MANUAL"]]}}
Object_PathsClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "only_selected": ["BOOLEAN", {"default": false}]}}
Object_PathsUpdate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_PathsUpdateVisible|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_PointcloudAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_PosemodeToggle|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_QuadriflowRemesh|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_mesh_symmetry": ["BOOLEAN", {"default": true}], "use_preserve_sharp": ["BOOLEAN", {"default": false}], "use_preserve_boundary": ["BOOLEAN", {"default": false}], "preserve_paint_mask": ["BOOLEAN", {"default": false}], "smooth_normals": ["BOOLEAN", {"default": false}], "mode": [["RATIO", "EDGE", "FACES"]], "target_ratio": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 1.0}], "target_edge_length": ["FLOAT", {"min": 1.0000000116860974e-07, "max": 3.4028234663852886e+38, "default": 0.10000000149011612}], "target_faces": ["INT", {"min": 1, "max": 2147483647, "default": 4000}], "mesh_area": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": -1.0}], "seed": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
Object_QuickExplode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "style": [["EXPLODE", "BLEND"]], "amount": ["INT", {"min": 2, "max": 10000, "default": 100}], "frame_duration": ["INT", {"min": 1, "max": 300000, "default": 50}], "frame_start": ["INT", {"min": 1, "max": 300000, "default": 1}], "frame_end": ["INT", {"min": 1, "max": 300000, "default": 10}], "velocity": ["FLOAT", {"min": 0.0, "max": 300000.0, "default": 1.0}], "fade": ["BOOLEAN", {"default": true}]}}
Object_QuickFur|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "density": [["LOW", "MEDIUM", "HIGH"]], "length": ["FLOAT", {"min": 0.0010000000474974513, "max": 100.0, "default": 0.10000000149011612}], "radius": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 0.0010000000474974513}], "view_percentage": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 1.0}], "apply_hair_guides": ["BOOLEAN", {"default": true}], "use_noise": ["BOOLEAN", {"default": true}], "use_frizz": ["BOOLEAN", {"default": true}]}}
Object_QuickLiquid|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "show_flows": ["BOOLEAN", {"default": false}]}}
Object_QuickSmoke|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "style": [["SMOKE", "FIRE", "BOTH"]], "show_flows": ["BOOLEAN", {"default": false}]}}
Object_RandomizeTransform|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "random_seed": ["INT", {"min": 0, "max": 10000, "default": 0}], "use_delta": ["BOOLEAN", {"default": false}], "use_loc": ["BOOLEAN", {"default": true}], "loc": ["B_VECTOR3", {}], "use_rot": ["BOOLEAN", {"default": true}], "rot": ["B_VECTOR3", {}], "use_scale": ["BOOLEAN", {"default": true}], "scale_even": ["BOOLEAN", {"default": false}], "scale": ["B_VECTOR3", {}]}}
Object_ResetOverrideLibrary|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_RotationClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear_delta": ["BOOLEAN", {"default": false}]}}
Object_ScaleClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear_delta": ["BOOLEAN", {"default": false}]}}
Object_SelectAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "action": [["TOGGLE", "SELECT", "DESELECT", "INVERT"]]}}
Object_SelectByType|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "type": [["MESH", "CURVE", "SURFACE", "META", "FONT", "CURVES", "POINTCLOUD", "VOLUME", "GPENCIL", "ARMATURE", "LATTICE", "EMPTY", "LIGHT", "LIGHT_PROBE", "CAMERA", "SPEAKER"]]}}
Object_SelectCamera|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}]}}
Object_SelectGrouped|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "type": [["CHILDREN_RECURSIVE", "CHILDREN", "PARENT", "SIBLINGS", "TYPE", "COLLECTION", "HOOK", "PASS", "COLOR", "KEYINGSET", "LIGHT_TYPE"]]}}
Object_SelectHierarchy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["PARENT", "CHILD"]], "extend": ["BOOLEAN", {"default": false}]}}
Object_SelectLess|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_SelectLinked|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "type": [["OBDATA", "MATERIAL", "DUPGROUP", "PARTICLE", "LIBRARY", "LIBRARY_OBDATA"]]}}
Object_SelectMirror|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}]}}
Object_SelectMore|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_SelectPattern|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "pattern": ["STRING", {"default": "*", "multiline": false}], "case_sensitive": ["BOOLEAN", {"default": false}], "extend": ["BOOLEAN", {"default": true}]}}
Object_SelectRandom|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "ratio": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "seed": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "action": [["SELECT", "DESELECT"]]}}
Object_SelectSameCollection|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "collection": ["STRING", {"default": "", "multiline": false}]}}
Object_ShadeFlat|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ShadeSmooth|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_auto_smooth": ["BOOLEAN", {"default": false}], "auto_smooth_angle": ["FLOAT", {"min": 0.0, "max": 3.1415927410125732, "default": 0.5235987901687622}]}}
Object_ShaderfxAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["FX_BLUR", "FX_COLORIZE", "FX_FLIP", "FX_GLOW", "FX_PIXEL", "FX_RIM", "FX_SHADOW", "FX_SWIRL", "FX_WAVE"]]}}
Object_ShaderfxCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shaderfx": ["STRING", {"default": "", "multiline": false}]}}
Object_ShaderfxMoveDown|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shaderfx": ["STRING", {"default": "", "multiline": false}]}}
Object_ShaderfxMoveToIndex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shaderfx": ["STRING", {"default": "", "multiline": false}], "index": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
Object_ShaderfxMoveUp|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shaderfx": ["STRING", {"default": "", "multiline": false}]}}
Object_ShaderfxRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "shaderfx": ["STRING", {"default": "", "multiline": false}], "report": ["BOOLEAN", {"default": false}]}}
Object_ShapeKeyAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "from_mix": ["BOOLEAN", {"default": true}]}}
Object_ShapeKeyClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ShapeKeyMirror|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_topology": ["BOOLEAN", {"default": false}]}}
Object_ShapeKeyMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["TOP", "UP", "DOWN", "BOTTOM"]]}}
Object_ShapeKeyRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "all": ["BOOLEAN", {"default": false}], "apply_mix": ["BOOLEAN", {"default": false}]}}
Object_ShapeKeyRetime|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_ShapeKeyTransfer|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["OFFSET", "RELATIVE_FACE", "RELATIVE_EDGE"]], "use_clamp": ["BOOLEAN", {"default": false}]}}
Object_SimulationNodesCacheBake|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "selected": ["BOOLEAN", {"default": false}]}}
Object_SimulationNodesCacheCalculateToFrame|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "selected": ["BOOLEAN", {"default": false}]}}
Object_SimulationNodesCacheDelete|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "selected": ["BOOLEAN", {"default": false}]}}
Object_SkinArmatureCreate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_SkinLooseMarkClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "action": [["MARK", "CLEAR"]]}}
Object_SkinRadiiEqualize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_SkinRootMark|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_SpeakerAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_SubdivisionSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "level": ["INT", {"min": -100, "max": 100, "default": 1}], "relative": ["BOOLEAN", {"default": false}]}}
Object_SurfacedeformBind|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "modifier": ["STRING", {"default": "", "multiline": false}]}}
Object_TextAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_TrackClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["CLEAR", "CLEAR_KEEP_TRANSFORM"]]}}
Object_TrackSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["DAMPTRACK", "TRACKTO", "LOCKTRACK"]]}}
Object_TransferMode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_flash_on_transfer": ["BOOLEAN", {"default": true}]}}
Object_TransformApply|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "location": ["BOOLEAN", {"default": true}], "rotation": ["BOOLEAN", {"default": true}], "scale": ["BOOLEAN", {"default": true}], "properties": ["BOOLEAN", {"default": true}], "isolate_users": ["BOOLEAN", {"default": false}]}}
Object_TransformAxisTarget|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_TransformToMouse|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"default": "", "multiline": false}], "session_uuid": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "matrix": ["B_VECTOR16", {}], "drop_x": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "drop_y": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
Object_TransformsToDeltas|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["ALL", "LOC", "ROT", "SCALE"]], "reset_values": ["BOOLEAN", {"default": true}]}}
Object_UnlinkData|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VisualTransformApply|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VolumeAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_VolumeImport|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "filepath": ["STRING", {"default": "", "multiline": false}], "directory": ["STRING", {"default": "", "multiline": false}], "hide_props_region": ["BOOLEAN", {"default": true}], "check_existing": ["BOOLEAN", {"default": false}], "filter_blender": ["BOOLEAN", {"default": false}], "filter_backup": ["BOOLEAN", {"default": false}], "filter_image": ["BOOLEAN", {"default": false}], "filter_movie": ["BOOLEAN", {"default": false}], "filter_python": ["BOOLEAN", {"default": false}], "filter_font": ["BOOLEAN", {"default": false}], "filter_sound": ["BOOLEAN", {"default": false}], "filter_text": ["BOOLEAN", {"default": false}], "filter_archive": ["BOOLEAN", {"default": false}], "filter_btx": ["BOOLEAN", {"default": false}], "filter_collada": ["BOOLEAN", {"default": false}], "filter_alembic": ["BOOLEAN", {"default": false}], "filter_usd": ["BOOLEAN", {"default": false}], "filter_obj": ["BOOLEAN", {"default": false}], "filter_volume": ["BOOLEAN", {"default": true}], "filter_folder": ["BOOLEAN", {"default": true}], "filter_blenlib": ["BOOLEAN", {"default": false}], "filemode": ["INT", {"min": 1, "max": 9, "default": 9}], "relative_path": ["BOOLEAN", {"default": true}], "display_type": [["DEFAULT", "LIST_VERTICAL", "LIST_HORIZONTAL", "THUMBNAIL"]], "sort_method": ["B_ENUM", {}], "use_sequence_detection": ["BOOLEAN", {"default": true}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Object_VoxelRemesh|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VoxelSizeEdit|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupAssign|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupAssignNew|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupClean|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "limit": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "keep_single": ["BOOLEAN", {"default": false}]}}
Object_VertexGroupCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupCopyToSelected|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupDeselect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupInvert|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "auto_assign": ["BOOLEAN", {"default": true}], "auto_remove": ["BOOLEAN", {"default": true}]}}
Object_VertexGroupLevels|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "offset": ["FLOAT", {"min": -1.0, "max": 1.0, "default": 0.0}], "gain": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 1.0}]}}
Object_VertexGroupLimitTotal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "limit": ["INT", {"min": 1, "max": 32, "default": 4}]}}
Object_VertexGroupLock|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "action": [["TOGGLE", "LOCK", "UNLOCK", "INVERT"]], "mask": [["ALL", "SELECTED", "UNSELECTED", "INVERT_UNSELECTED"]]}}
Object_VertexGroupMirror|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror_weights": ["BOOLEAN", {"default": true}], "flip_group_names": ["BOOLEAN", {"default": true}], "all_groups": ["BOOLEAN", {"default": false}], "use_topology": ["BOOLEAN", {"default": false}]}}
Object_VertexGroupMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["UP", "DOWN"]]}}
Object_VertexGroupNormalize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupNormalizeAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "lock_active": ["BOOLEAN", {"default": true}]}}
Object_VertexGroupQuantize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "steps": ["INT", {"min": 1, "max": 1000, "default": 4}]}}
Object_VertexGroupRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "all": ["BOOLEAN", {"default": false}], "all_unlocked": ["BOOLEAN", {"default": false}]}}
Object_VertexGroupRemoveFrom|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_all_groups": ["BOOLEAN", {"default": false}], "use_all_verts": ["BOOLEAN", {"default": false}]}}
Object_VertexGroupSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexGroupSetActive|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group": ["B_ENUM", {}]}}
Object_VertexGroupSmooth|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "group_select_mode": ["B_ENUM", {}], "factor": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.5}], "repeat": ["INT", {"min": 1, "max": 10000, "default": 1}], "expand": ["FLOAT", {"min": -1.0, "max": 1.0, "default": 0.0}]}}
Object_VertexGroupSort|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "sort_type": [["NAME", "BONE_HIERARCHY"]]}}
Object_VertexParentSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "confirm": ["BOOLEAN", {"default": true}]}}
Object_VertexWeightCopy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexWeightDelete|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "weight_group": ["INT", {"min": -1, "max": 2147483647, "default": -1}]}}
Object_VertexWeightNormalizeActiveVertex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Object_VertexWeightPaste|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "weight_group": ["INT", {"min": -1, "max": 2147483647, "default": -1}]}}
Object_VertexWeightSetActive|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "weight_group": ["INT", {"min": -1, "max": 2147483647, "default": -1}]}}
Mesh_PrimitiveCircleAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "vertices": ["INT", {"min": 3, "max": 10000000, "default": 32}], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "fill_type": [["NOTHING", "NGON", "TRIFAN"]], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveConeAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "vertices": ["INT", {"min": 3, "max": 10000000, "default": 32}], "radius1": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "radius2": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 0.0}], "depth": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "end_fill_type": [["NOTHING", "NGON", "TRIFAN"]], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveCubeAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "size": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveCubeAddGizmo|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}], "matrix": ["B_VECTOR16", {}]}}
Mesh_PrimitiveCylinderAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "vertices": ["INT", {"min": 3, "max": 10000000, "default": 32}], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "depth": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "end_fill_type": [["NOTHING", "NGON", "TRIFAN"]], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveGridAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "x_subdivisions": ["INT", {"min": 1, "max": 10000000, "default": 10}], "y_subdivisions": ["INT", {"min": 1, "max": 10000000, "default": 10}], "size": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveIcoSphereAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "subdivisions": ["INT", {"min": 1, "max": 10, "default": 2}], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveMonkeyAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "size": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitivePlaneAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "size": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 2.0}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Mesh_PrimitiveTorusAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "major_segments": ["INT", {"min": 3, "max": 256, "default": 48}], "minor_segments": ["INT", {"min": 3, "max": 256, "default": 12}], "mode": [["MAJOR_MINOR", "EXT_INT"]], "major_radius": ["FLOAT", {"min": 0.0, "max": 10000.0, "default": 1.0}], "minor_radius": ["FLOAT", {"min": 0.0, "max": 10000.0, "default": 0.25}], "abso_major_rad": ["FLOAT", {"min": 0.0, "max": 10000.0, "default": 1.25}], "abso_minor_rad": ["FLOAT", {"min": 0.0, "max": 10000.0, "default": 0.75}], "generate_uvs": ["BOOLEAN", {"default": true}]}}
Mesh_PrimitiveUvSphereAdd|{"required": {}, "optional": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "segments": ["INT", {"min": 3, "max": 100000, "default": 32}], "ring_count": ["INT", {"min": 3, "max": 100000, "default": 16}], "radius": ["FLOAT", {"min": 0.0, "max": 999999995904.0, "default": 1.0}], "calc_uvs": ["BOOLEAN", {"default": true}], "enter_editmode": ["BOOLEAN", {"default": false}], "align": [["WORLD", "VIEW", "CURSOR"]], "location": ["B_VECTOR3", {}], "rotation": ["B_VECTOR3", {}], "scale": ["B_VECTOR3", {}]}}
Transform_BboneResize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR3", {}], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Bend|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR1", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_CreateOrientation|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"default": "", "multiline": false}], "use_view": ["BOOLEAN", {"default": false}], "use": ["BOOLEAN", {"default": false}], "overwrite": ["BOOLEAN", {"default": false}]}}
Transform_DeleteOrientation|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Transform_EdgeBevelweight|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -1.0, "max": 1.0, "default": 0.0}], "snap": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_EdgeCrease|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -1.0, "max": 1.0, "default": 0.0}], "snap": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_EdgeSlide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -10.0, "max": 10.0, "default": 0.0}], "single_side": ["BOOLEAN", {"default": false}], "use_even": ["BOOLEAN", {"default": false}], "flipped": ["BOOLEAN", {"default": false}], "use_clamp": ["BOOLEAN", {"default": true}], "mirror": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "correct_uv": ["BOOLEAN", {"default": true}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_FromGizmo|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
Transform_Mirror|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "constraint_axis": ["B_BOOLEAN3", {}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_PushPull|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Resize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR3", {}], "mouse_dir_constraint": ["B_VECTOR3", {}], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "texture_space": ["BOOLEAN", {"default": false}], "remove_on_cancel": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Rotate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "orient_axis": [["X", "Y", "Z"]], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_RotateNormal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "orient_axis": [["X", "Y", "Z"]], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_SelectOrientation|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "orientation": ["B_ENUM", {}]}}
Transform_SeqSlide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR2", {}], "snap": ["BOOLEAN", {"default": false}], "view2d_edge_pan": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Shear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "orient_axis": [["X", "Y", "Z"]], "orient_axis_ortho": [["X", "Y", "Z"]], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_ShrinkFatten|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "use_even_offset": ["BOOLEAN", {"default": false}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_SkinResize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR3", {}], "orient_type": ["B_ENUM", {}], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": ["B_ENUM", {}], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Tilt|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Tosphere|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Trackball|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR2", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Transform|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["INIT", "DUMMY", "TRANSLATION", "ROTATION", "RESIZE", "SKIN_RESIZE", "TOSPHERE", "SHEAR", "BEND", "SHRINKFATTEN", "TILT", "TRACKBALL", "PUSHPULL", "CREASE", "VERTEX_CREASE", "MIRROR", "BONE_SIZE", "BONE_ENVELOPE", "BONE_ENVELOPE_DIST", "CURVE_SHRINKFATTEN", "MASK_SHRINKFATTEN", "GPENCIL_SHRINKFATTEN", "BONE_ROLL", "TIME_TRANSLATE", "TIME_SLIDE", "TIME_SCALE", "TIME_EXTEND", "BAKE_TIME", "BWEIGHT", "ALIGN", "EDGESLIDE", "SEQSLIDE", "GPENCIL_OPACITY"]], "value": ["B_VECTOR4", {}], "orient_axis": [["X", "Y", "Z"]], "orient_type": [["GLOBAL", "LOCAL", "NORMAL", "GIMBAL", "VIEW", "CURSOR", "PARENT"]], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": [["GLOBAL", "LOCAL", "NORMAL", "GIMBAL", "VIEW", "CURSOR", "PARENT"]], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "snap_align": ["BOOLEAN", {"default": false}], "snap_normal": ["B_VECTOR3", {}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "center_override": ["B_VECTOR3", {}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_Translate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["B_VECTOR3", {}], "orient_type": [["GLOBAL", "LOCAL", "NORMAL", "GIMBAL", "VIEW", "CURSOR", "PARENT"]], "orient_matrix": ["B_VECTOR9", {}], "orient_matrix_type": [["GLOBAL", "LOCAL", "NORMAL", "GIMBAL", "VIEW", "CURSOR", "PARENT"]], "constraint_axis": ["B_BOOLEAN3", {}], "mirror": ["BOOLEAN", {"default": false}], "use_proportional_edit": ["BOOLEAN", {"default": false}], "proportional_edit_falloff": [["SMOOTH", "SPHERE", "ROOT", "INVERSE_SQUARE", "SHARP", "LINEAR", "CONSTANT", "RANDOM"]], "proportional_size": ["FLOAT", {"min": 9.999999974752427e-07, "max": 999999995904.0, "default": 1.0}], "use_proportional_connected": ["BOOLEAN", {"default": false}], "use_proportional_projected": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "snap_align": ["BOOLEAN", {"default": false}], "snap_normal": ["B_VECTOR3", {}], "gpencil_strokes": ["BOOLEAN", {"default": false}], "cursor_transform": ["BOOLEAN", {"default": false}], "texture_space": ["BOOLEAN", {"default": false}], "remove_on_cancel": ["BOOLEAN", {"default": false}], "view2d_edge_pan": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}], "use_automerge_and_split": ["BOOLEAN", {"default": false}]}}
Transform_VertCrease|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -1.0, "max": 1.0, "default": 0.0}], "snap": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_VertSlide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"min": -10.0, "max": 10.0, "default": 0.0}], "use_even": ["BOOLEAN", {"default": false}], "flipped": ["BOOLEAN", {"default": false}], "use_clamp": ["BOOLEAN", {"default": true}], "mirror": ["BOOLEAN", {"default": false}], "snap": ["BOOLEAN", {"default": false}], "snap_elements": ["B_ENUM_SET", {}], "use_snap_project": ["BOOLEAN", {"default": false}], "snap_target": [["CLOSEST", "CENTER", "MEDIAN", "ACTIVE"]], "use_snap_self": ["BOOLEAN", {"default": true}], "use_snap_edit": ["BOOLEAN", {"default": true}], "use_snap_nonedit": ["BOOLEAN", {"default": true}], "use_snap_selectable": ["BOOLEAN", {"default": false}], "snap_point": ["B_VECTOR3", {}], "correct_uv": ["BOOLEAN", {"default": true}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}]}}
Transform_VertexRandom|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "offset": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "uniform": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "normal": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "seed": ["INT", {"min": 0, "max": 10000, "default": 0}], "wait_for_input": ["BOOLEAN", {"default": true}]}}
Transform_VertexWarp|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "warp_angle": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 6.2831854820251465}], "offset_angle": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 0.0}], "min": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": -1.0}], "max": ["FLOAT", {"min": -3.4028234663852886e+38, "max": 3.4028234663852886e+38, "default": 1.0}], "viewmat": ["B_VECTOR16", {}], "center": ["B_VECTOR3", {}]}}
ObjectSet_ActiveMaterialIndex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["INT", {"default": 0}]}}
ObjectSet_ActiveShapeKeyIndex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["INT", {"default": 2}]}}
ObjectSet_AddRestPositionAttribute|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_DisplayBoundsType|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "BOX"}]}}
ObjectSet_DisplayType|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "TEXTURED"}]}}
ObjectSet_EmptyDisplaySize|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"default": 1.0}]}}
ObjectSet_EmptyDisplayType|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "ARROWS"}]}}
ObjectSet_EmptyImageDepth|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "DEFAULT"}]}}
ObjectSet_EmptyImageSide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "DOUBLE_SIDED"}]}}
ObjectSet_HideRender|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_HideSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_HideViewport|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_InstanceFacesScale|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["FLOAT", {"default": 1.0}]}}
ObjectSet_InstanceType|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "NONE"}]}}
ObjectSet_IsEmbeddedData|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsEvaluated|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsFromInstancer|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsFromSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsHoldout|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsInstancer|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsLibraryIndirect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsMissing|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsRuntimeData|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_IsShadowCatcher|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_Lightgroup|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": ""}]}}
ObjectSet_LockRotationW|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_LockRotations4D|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_Mode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "OBJECT"}]}}
ObjectSet_Name|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "Cube"}]}}
ObjectSet_NameFull|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "Cube"}]}}
ObjectSet_ParentBone|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": ""}]}}
ObjectSet_ParentType|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "OBJECT"}]}}
ObjectSet_PassIndex|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["INT", {"default": 0}]}}
ObjectSet_RotationMode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "XYZ"}]}}
ObjectSet_ShowAllEdges|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowAxis|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowBounds|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowEmptyImageOnlyAxisAligned|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowEmptyImageOrthographic|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_ShowEmptyImagePerspective|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_ShowInFront|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowInstancerForRender|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_ShowInstancerForViewport|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_ShowName|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowOnlyShapeKey|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowTextureSpace|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowTransparent|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_ShowWire|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_Tag|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_TrackAxis|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "POS_Y"}]}}
ObjectSet_Type|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "MESH"}]}}
ObjectSet_UpAxis|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["STRING", {"default": "Z"}]}}
ObjectSet_UseCameraLockParent|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseDynamicTopologySculpting|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseEmptyImageAlpha|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseExtraUser|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseFakeUser|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseGreasePencilLights|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseInstanceFacesScale|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseInstanceVerticesRotation|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseMeshMirrorX|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseMeshMirrorY|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseMeshMirrorZ|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseShapeKeyEditMode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": false}]}}
ObjectSet_UseSimulationCache|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_Users|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["INT", {"default": 1}]}}
ObjectSet_VisibleCamera|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_VisibleDiffuse|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_VisibleGlossy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_VisibleShadow|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_VisibleTransmission|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectSet_VisibleVolumeScatter|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "value": ["BOOLEAN", {"default": true}]}}
ObjectCall_AnimationDataClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_AnimationDataCreate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_AssetClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_AssetGeneratePreview|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_AssetMark|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_CacheRelease|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_CalcMatrixCamera|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "depsgraph": ["depsgraph", {"default": null}], "x": ["INT", {"default": 1}], "y": ["INT", {"default": 1}], "scale_x": ["INT", {"default": 1}], "scale_y": ["INT", {"default": 1}]}}
ObjectCall_CameraFitCoords|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "depsgraph": ["depsgraph", {"default": null}], " coordinates": [" coordinates", {"default": null}]}}
ObjectCall_ClosestPointOnMesh|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "origin": ["origin", {"default": null}], "distance": ["FLOAT", {"default": 1.84467e+19}]}}
ObjectCall_ConvertSpace|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], " 0": [" 0", {"default": null}]}}
ObjectCall_Copy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_CrazyspaceDisplacementToDeformed|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "vertex_index": ["INT", {"default": 0}], " 0": [" 0", {"default": null}]}}
ObjectCall_CrazyspaceDisplacementToOriginal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "vertex_index": ["INT", {"default": 0}], " 0": [" 0", {"default": null}]}}
ObjectCall_CrazyspaceEval|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "depsgraph": ["depsgraph", {"default": null}], " scene": [" scene", {"default": null}]}}
ObjectCall_CrazyspaceEvalClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_EvaluatedGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "depsgraph": ["depsgraph", {"default": null}]}}
ObjectCall_FindArmature|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_GenerateGpencilStrokes|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "grease_pencil_object": ["grease_pencil_object", {"default": null}], "use_collections": ["BOOLEAN", {"default": true}], "scale_thickness": ["INT", {"default": 1}], "sample": ["INT", {"default": 0}]}}
ObjectCall_HideGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_HideSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "state": ["state", {"default": null}]}}
ObjectCall_HoldoutGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_IndirectOnlyGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_IsDeformModified|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "scene": ["scene", {"default": null}], " settings": [" settings", {"default": null}]}}
ObjectCall_IsModified|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "scene": ["scene", {"default": null}], " settings": [" settings", {"default": null}]}}
ObjectCall_LocalViewGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "viewport": ["viewport", {"default": null}]}}
ObjectCall_LocalViewSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "viewport": ["viewport", {"default": null}], " state": [" state", {"default": null}]}}
ObjectCall_MakeLocal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear_proxy": ["BOOLEAN", {"default": true}]}}
ObjectCall_OverrideCreate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "remap_local_usages": ["BOOLEAN", {"default": false}]}}
ObjectCall_OverrideHierarchyCreate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "scene": ["scene", {"default": null}], " view_layer": [" view_layer", {"default": null}], "do_fully_editable": ["BOOLEAN", {"default": false}]}}
ObjectCall_OverrideTemplateCreate|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_PreviewEnsure|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_RayCast|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "origin": ["origin", {"default": null}], " direction": [" direction", {"default": null}], "distance": ["FLOAT", {"default": 1.70141e+38}]}}
ObjectCall_SelectGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_SelectSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "state": ["state", {"default": null}]}}
ObjectCall_ShapeKeyAdd|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "name": ["STRING", {"default": "Key"}], "from_mix": ["BOOLEAN", {"default": true}]}}
ObjectCall_ShapeKeyClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_ShapeKeyRemove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "key": ["key", {"default": null}]}}
ObjectCall_ToCurve|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "depsgraph": ["depsgraph", {"default": null}], "apply_modifiers": ["BOOLEAN", {"default": false}]}}
ObjectCall_ToCurveClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_ToMesh|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "preserve_all_data_layers": ["BOOLEAN", {"default": false}]}}
ObjectCall_ToMeshClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_UpdateFromEditmode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_UpdateTag|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_UserClear|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_UserOfId|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "id": ["id", {"default": null}]}}
ObjectCall_UserRemap|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "new_id": ["new_id", {"default": null}]}}
ObjectCall_VisibleGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ObjectCall_VisibleInViewportGet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "viewport": ["viewport", {"default": null}]}}
UV_Align|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "axis": [["ALIGN_S", "ALIGN_T", "ALIGN_U", "ALIGN_AUTO", "ALIGN_X", "ALIGN_Y"]]}}
UV_AlignRotation|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "method": [["AUTO", "EDGE", "GEOMETRY"]], "axis": [["X", "Y", "Z"]]}}
UV_AverageIslandsScale|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "scale_uv": ["BOOLEAN", {"default": false}], "shear": ["BOOLEAN", {"default": false}]}}
UV_Copy|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_CubeProject|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "cube_size": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 1.0}], "correct_aspect": ["BOOLEAN", {"default": true}], "clip_to_bounds": ["BOOLEAN", {"default": false}], "scale_to_bounds": ["BOOLEAN", {"default": false}]}}
UV_CursorSet|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "location": ["B_VECTOR2", {}]}}
UV_CylinderProject|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["VIEW_ON_EQUATOR", "VIEW_ON_POLES", "ALIGN_TO_OBJECT"]], "align": [["POLAR_ZX", "POLAR_ZY"]], "pole": [["PINCH", "FAN"]], "seam": ["BOOLEAN", {"default": false}], "radius": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 1.0}], "correct_aspect": ["BOOLEAN", {"default": true}], "clip_to_bounds": ["BOOLEAN", {"default": false}], "scale_to_bounds": ["BOOLEAN", {"default": false}]}}
UV_ExportLayout|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "filepath": ["STRING", {"default": "", "multiline": false}], "export_all": ["BOOLEAN", {"default": false}], "modified": ["BOOLEAN", {"default": false}], "mode": [["SVG", "EPS", "PNG"]], "size": ["B_VECTOR2", {}], "opacity": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.25}], "check_existing": ["BOOLEAN", {"default": true}]}}
UV_FollowActiveQuads|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["EVEN", "LENGTH", "LENGTH_AVERAGE"]]}}
UV_Hide|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "unselected": ["BOOLEAN", {"default": false}]}}
UV_LightmapPack|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "PREF_CONTEXT": [["SEL_FACES", "ALL_FACES"]], "PREF_PACK_IN_ONE": ["BOOLEAN", {"default": true}], "PREF_NEW_UVLAYER": ["BOOLEAN", {"default": false}], "PREF_BOX_DIV": ["INT", {"min": 1, "max": 48, "default": 12}], "PREF_MARGIN_DIV": ["FLOAT", {"min": 0.0010000000474974513, "max": 1.0, "default": 0.10000000149011612}]}}
UV_MarkSeam|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear": ["BOOLEAN", {"default": false}]}}
UV_MinimizeStretch|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "fill_holes": ["BOOLEAN", {"default": true}], "blend": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "iterations": ["INT", {"min": 0, "max": 2147483647, "default": 0}]}}
UV_PackIslands|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "udim_source": [["CLOSEST_UDIM", "ACTIVE_UDIM", "ORIGINAL_AABB"]], "rotate": ["BOOLEAN", {"default": true}], "rotate_method": [["AXIS_ALIGNED", "CARDINAL", "ANY"]], "scale": ["BOOLEAN", {"default": true}], "merge_overlap": ["BOOLEAN", {"default": false}], "margin_method": [["SCALED", "ADD", "FRACTION"]], "margin": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0010000000474974513}], "pin": ["BOOLEAN", {"default": false}], "pin_method": [["SCALE", "ROTATION", "ROTATION_SCALE", "LOCKED"]], "shape_method": [["CONCAVE", "CONVEX", "AABB"]]}}
UV_Paste|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_Pin|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "clear": ["BOOLEAN", {"default": false}]}}
UV_ProjectFromView|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "orthographic": ["BOOLEAN", {"default": false}], "camera_bounds": ["BOOLEAN", {"default": true}], "correct_aspect": ["BOOLEAN", {"default": true}], "clip_to_bounds": ["BOOLEAN", {"default": false}], "scale_to_bounds": ["BOOLEAN", {"default": false}]}}
UV_RandomizeUvTransform|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "random_seed": ["INT", {"min": 0, "max": 10000, "default": 0}], "use_loc": ["BOOLEAN", {"default": true}], "loc": ["B_VECTOR2", {}], "use_rot": ["BOOLEAN", {"default": true}], "rot": ["FLOAT", {"min": -6.2831854820251465, "max": 6.2831854820251465, "default": 0.0}], "use_scale": ["BOOLEAN", {"default": true}], "scale_even": ["BOOLEAN", {"default": false}], "scale": ["B_VECTOR2", {}]}}
UV_RemoveDoubles|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "threshold": ["FLOAT", {"min": 0.0, "max": 10.0, "default": 0.019999999552965164}], "use_unselected": ["BOOLEAN", {"default": false}]}}
UV_Reset|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_Reveal|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "select": ["BOOLEAN", {"default": true}]}}
UV_Rip|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mirror": ["BOOLEAN", {"default": false}], "release_confirm": ["BOOLEAN", {"default": false}], "use_accurate": ["BOOLEAN", {"default": false}], "location": ["B_VECTOR2", {}]}}
UV_RipMove|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_SeamsFromIslands|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mark_seams": ["BOOLEAN", {"default": true}], "mark_sharp": ["BOOLEAN", {"default": false}]}}
UV_Select|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "deselect": ["BOOLEAN", {"default": false}], "toggle": ["BOOLEAN", {"default": false}], "deselect_all": ["BOOLEAN", {"default": false}], "select_passthrough": ["BOOLEAN", {"default": false}], "location": ["B_VECTOR2", {}]}}
UV_SelectAll|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "action": [["TOGGLE", "SELECT", "DESELECT", "INVERT"]]}}
UV_SelectBox|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "pinned": ["BOOLEAN", {"default": false}], "xmin": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "xmax": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "ymin": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "ymax": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "wait_for_input": ["BOOLEAN", {"default": true}], "mode": [["SET", "ADD", "SUB"]]}}
UV_SelectCircle|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "x": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "y": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "radius": ["INT", {"min": 1, "max": 2147483647, "default": 25}], "wait_for_input": ["BOOLEAN", {"default": true}], "mode": [["SET", "ADD", "SUB"]]}}
UV_SelectEdgeRing|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "location": ["B_VECTOR2", {}]}}
UV_SelectLasso|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "mode": [["SET", "ADD", "SUB"]]}}
UV_SelectLess|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_SelectLinked|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_SelectLinkedPick|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "deselect": ["BOOLEAN", {"default": false}], "location": ["B_VECTOR2", {}]}}
UV_SelectLoop|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}], "location": ["B_VECTOR2", {}]}}
UV_SelectMode|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["VERTEX", "EDGE", "FACE", "ISLAND"]]}}
UV_SelectMore|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_SelectOverlap|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "extend": ["BOOLEAN", {"default": false}]}}
UV_SelectPinned|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_SelectSimilar|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "type": [["PIN", "LENGTH", "LENGTH_3D", "AREA", "AREA_3D", "MATERIAL", "OBJECT", "SIDES", "WINDING", "FACE"]], "compare": [["EQUAL", "GREATER", "LESS"]], "threshold": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}]}}
UV_SelectSplit|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
UV_ShortestPathPick|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_face_step": ["BOOLEAN", {"default": false}], "use_topology_distance": ["BOOLEAN", {"default": false}], "use_fill": ["BOOLEAN", {"default": false}], "skip": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "nth": ["INT", {"min": 1, "max": 2147483647, "default": 1}], "offset": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}], "object_index": ["INT", {"min": -1, "max": 2147483647, "default": -1}], "index": ["INT", {"min": -1, "max": 2147483647, "default": -1}]}}
UV_ShortestPathSelect|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_face_step": ["BOOLEAN", {"default": false}], "use_topology_distance": ["BOOLEAN", {"default": false}], "use_fill": ["BOOLEAN", {"default": false}], "skip": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "nth": ["INT", {"min": 1, "max": 2147483647, "default": 1}], "offset": ["INT", {"min": -2147483648, "max": 2147483647, "default": 0}]}}
UV_SmartProject|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "angle_limit": ["FLOAT", {"min": 0.0, "max": 1.5707963705062866, "default": 1.1519173383712769}], "margin_method": [["SCALED", "ADD", "FRACTION"]], "island_margin": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "area_weight": ["FLOAT", {"min": 0.0, "max": 1.0, "default": 0.0}], "correct_aspect": ["BOOLEAN", {"default": true}], "scale_to_bounds": ["BOOLEAN", {"default": false}]}}
UV_SnapCursor|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "target": [["PIXELS", "SELECTED", "ORIGIN"]]}}
UV_SnapSelected|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "target": [["PIXELS", "CURSOR", "CURSOR_OFFSET", "ADJACENT_UNSELECTED"]]}}
UV_SphereProject|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "direction": [["VIEW_ON_EQUATOR", "VIEW_ON_POLES", "ALIGN_TO_OBJECT"]], "align": [["POLAR_ZX", "POLAR_ZY"]], "pole": [["PINCH", "FAN"]], "seam": ["BOOLEAN", {"default": false}], "correct_aspect": ["BOOLEAN", {"default": true}], "clip_to_bounds": ["BOOLEAN", {"default": false}], "scale_to_bounds": ["BOOLEAN", {"default": false}]}}
UV_Stitch|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "use_limit": ["BOOLEAN", {"default": false}], "snap_islands": ["BOOLEAN", {"default": true}], "limit": ["FLOAT", {"min": 0.0, "max": 3.4028234663852886e+38, "default": 0.009999999776482582}], "static_island": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "active_object_index": ["INT", {"min": 0, "max": 2147483647, "default": 0}], "midpoint_snap": ["BOOLEAN", {"default": false}], "clear_seams": ["BOOLEAN", {"default": true}], "mode": [["VERTEX", "EDGE"]], "stored_mode": [["VERTEX", "EDGE"]], "objects_selection_count": ["B_VECTOR6", {}]}}
UV_Weld|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
ToGroupOps|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"]}}
AvatarMainOutput|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "BPY_OBJS": ["BPY_OBJS"], "open_in_blender": ["BOOLEAN", {"default": false}], "auto_save": ["BOOLEAN", {"default": false}], "blender_path_override": ["STRING", {"multiline": false, "default": ""}], "filename": ["STRING", {"multiline": false, "default": "out"}], "model_type": [["AVA", "GLB", "GLTF_EMBEDDED"]], "write_mode": [["Overwrite", "Increment"]], "SHAPE_FLOW": ["SHAPE_FLOW"]}}
GroupOps|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "BPY_OBJ2": ["BPY_OBJ"]}}
Object_PlaneTextureUnwrap|{"required": {}, "optional": {"BPY_OBJ": ["BPY_OBJ"], "image": ["IMAGE"], "scale": ["FLOAT", {"default": 1, "display": "number", "step": 0.01}], "texture_name": ["STRING", {"default": "Texture"}]}}
-121
View File
@@ -1,121 +0,0 @@
class KnifeProjection:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_knife": ("BPY_OBJS",),
"bpy_objs_target": ("BPY_OBJS",),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_knife, bpy_objs_target):
import mathutils
import math
import global_bpy
bpy = global_bpy.get_bpy()
knife_object = bpy_objs_knife[0]
target_object = bpy_objs_target[0]
bpy.ops.object.select_all(action='DESELECT')
bpy.context.view_layer.objects.active = target_object
# knife_object.select_set(True)
# target_object.select_set(True)
# bpy.ops.object.mode_set(mode='EDIT')
area = next(
area for area in bpy.context.screen.areas if area.type == 'VIEW_3D')
space = next(space for space in area.spaces if space.type == 'VIEW_3D')
region = next(
region for region in area.regions if region.type == 'WINDOW')
# space.region_3d.view_perspective = 'ORTHO'
# space.region_3d.view_rotation = mathutils.Euler(
# (0, 0, 0)).to_quaternion()
# set blender to orthographic view without using numpad
# bpy.ops.view3d.view_axis(type='TOP')
override = bpy.context.copy()
# override["active_object"] = target_object
# override["edit_object"] = target_object
# override["selected_objects"] = [knife_object, target_object]
# override["selected_editable_objects"] = [knife_object, target_object]
override["region"] = region
override["area"] = area
override["space"] = space
override["active_object"] = target_object
override["edit_object"] = target_object
override["selected_objects"] = [knife_object, target_object]
override["selected_editable_objects"] = [knife_object, target_object]
knife_object.select_set(False)
target_object.select_set(True)
# move the kinfe object up a bit
bpy.ops.transform.translate(value=(0, 0, -0.1))
bpy.ops.object.mode_set(mode='EDIT')
knife_object.select_set(False)
# Get the viewport rotation
viewport_rotation = space.region_3d.view_rotation
with bpy.context.temp_override(**override):
# # Create a rotation matrix representing a top-down view
# rotation_matrix = mathutils.Matrix.Rotation(math.radians(90.0), 4, 'X')
# # Create a rotation matrix to make the object face the user
# rotation_matrix_face_user = mathutils.Matrix.Rotation(math.radians(180.0), 4, 'Z')
# # Create a rotation matrix for the viewport rotation
# rotation_matrix_viewport = viewport_rotation.to_matrix().to_4x4()
# # Remember the original locations
# original_location_knife = knife_object.location.copy()
# original_location_target = target_object.location.copy()
# # Move the objects to the origin
# knife_object.location = mathutils.Vector((0, 0, 0))
# target_object.location = mathutils.Vector((0, 0, 0))
# # Rotate the objects
# knife_object.matrix_world = rotation_matrix @ rotation_matrix_face_user @ rotation_matrix_viewport @ knife_object.matrix_world
# target_object.matrix_world = rotation_matrix @ rotation_matrix_face_user @ rotation_matrix_viewport @ target_object.matrix_world
bpy.ops.view3d.view_axis(type='TOP', align_active=False)
bpy.ops.view3d.view_persportho()
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
bpy.ops.mesh.knife_project()
# # Rotate the objects back
# knife_object.matrix_world = rotation_matrix.inverted() @ knife_object.matrix_world
# target_object.matrix_world = rotation_matrix.inverted() @ target_object.matrix_world
# # Move the objects back to their original locations
# knife_object.location = original_location_knife
# target_object.location = original_location_target
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"KnifeProjection": KnifeProjection
}
NODE_DISPLAY_NAME_MAPPINGS = {
"KnifeProjection": "Knife Projection"
}
-104
View File
@@ -1,104 +0,0 @@
class MeshFromTexture:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE",),
# For disabling cache
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
},
}
RETURN_TYPES = ("IMAGE", "BPY_OBJS")
RETURN_NAMES = ("image", "bpy_objs")
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, image, seed):
import torch
import cv2
import numpy as np
import global_bpy
bpy = global_bpy.get_bpy()
image = np.copy(image[0].numpy())
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
gray = (gray * 255).astype(np.uint8)
# Find contours
contours, _ = cv2.findContours(
gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Get the largest contour
areas = [cv2.contourArea(contour) for contour in contours]
max_area_index = areas.index(max(areas))
largest_contour = contours[max_area_index]
contours = [largest_contour]
def normalize_vertices(vertices, max_value):
return vertices / float(max_value) * 2 - 1
# Get the image width and height
height, width = image.shape[:2]
# Normalize the vertices
normalized_contours = []
for contour in contours:
normalized_contour = []
for vertex in contour:
normalized_vertex = [normalize_vertices(
vertex[0][0], width), normalize_vertices(vertex[0][1], height) * -1]
normalized_contour.append(normalized_vertex)
normalized_contours.append(
np.array(normalized_contour, dtype=np.float32))
meshes = []
# print(len(normalized_contours))
for i, contour in enumerate(normalized_contours):
# Create a new mesh for each contour
mesh = bpy.data.meshes.new(name=f"NewMesh{i}")
# Create a new object for each mesh
obj = bpy.data.objects.new(f"NewObject{i}", mesh)
# Link the object to the current collection
bpy.context.collection.objects.link(obj)
# Add a z coordinate to each vertex
ordered_vertices = [(*vertex, 0) for vertex in contour]
# Create a face from the vertices
face = list(range(len(ordered_vertices)))
# Create the mesh from the vertices and face
mesh.from_pydata(ordered_vertices, [], [face])
# Create a default shape key for the mesh
sk_basis = obj.shape_key_add(name='Basis')
meshes.append(obj) # Add the object to the list of meshes
# Draw contours on the original image
if not image.flags['C_CONTIGUOUS']:
image = np.ascontiguousarray(image)
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
# Convert image back to tensor
image = [torch.from_numpy(image)]
return (image, meshes)
# A dictionary that contains all nodes you want to export with their names
# NOTE: names should be globally unique
NODE_CLASS_MAPPINGS = {
"MeshFromTexture": MeshFromTexture
}
# A dictionary that contains the friendly/humanly readable titles for the nodes
NODE_DISPLAY_NAME_MAPPINGS = {
"MeshFromTexture": "Mesh from texture"
}
+22 -6
View File
@@ -67,7 +67,7 @@ def genreate_mesh_from_texture(bpy, image):
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
# Convert image back to tensor
image = [torch.from_numpy(image)]
image = torch.from_numpy(np.expand_dims(image, axis=0))
return (image, meshes[0])
@@ -196,7 +196,7 @@ def kill_blender_process():
process.kill()
def export_gltf(output_dir, bpy_objects, filename, model_type, write_mode):
def export_gltf(output_dir, bpy_objects, filename, model_type, write_mode, metadata):
import global_bpy
bpy = global_bpy.get_bpy()
# print(bpy, bpy_objects)
@@ -206,21 +206,37 @@ def export_gltf(output_dir, bpy_objects, filename, model_type, write_mode):
override["selected_objects"] = list(bpy_objects)
override["active_object"] = list(bpy_objects)[0]
bpy_objects[0]["metadata"] = metadata
for obj in bpy_objects:
obj.select_set(True)
filepath = output_dir + "/" + filename + '.' + ("glb" if model_type == "GLB" else "gltf")
def get_file_extension(model_type):
if model_type == "GLB":
return ".glb"
elif model_type == "GLTF_EMBEDDED":
return ".gltf"
elif model_type == "GLTF_SEPARATE":
return ".gltf"
elif model_type == "AVA":
return ".ava"
ext = get_file_extension(model_type)
filepath = output_dir + "/" + filename + ext + (".glb" if model_type == "AVA" else "")
if write_mode == "Increment":
count = 0
# while file exists, increment count
while os.path.exists(output_dir + "/" + filename + '_' + str(count) + '.' + ("glb" if model_type == "GLB" else "gltf")):
while os.path.exists(output_dir + "/" + filename + '_' + str(count) + ext):
count += 1
filepath = output_dir + "/" + filename + '_' + str(count) + '.' + ("glb" if model_type == "GLB" else "gltf")
filepath = output_dir + "/" + filename + '_' + str(count) + ext + (".glb" if model_type == "AVA" else "")
with bpy.context.temp_override(**override):
bpy.ops.export_scene.gltf(filepath=filepath, export_format=model_type, use_selection=True)
bpy.ops.export_scene.gltf(filepath=filepath, export_format="GLB" if model_type == "AVA" else model_type, use_selection=True, export_extras=True)
# print(filepath)
if filepath.endswith('.ava.glb'):
new_filepath = filepath.replace('.ava.glb', '.ava')
os.rename(filepath, new_filepath)
filepath = new_filepath
return filepath
-48
View File
@@ -1,48 +0,0 @@
import subprocess
import folder_paths
import os
from mesh_utils import open_in_blender
class OpenInBlender:
def __init__(self):
self.my_blender_process = None
self.output_dir = folder_paths.get_output_directory()
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs": ("BPY_OBJS",),
"blender_path": ("STRING", {
"multiline": False,
"default": "blender"
}),
"shading": (["Material", "Solid", "Rendered", "Wireframe"],),
"camera_location": ("VECTOR3D",),
"camera_rotation": ("VECTOR3D",),
},
}
RETURN_TYPES = ()
FUNCTION = "process"
OUTPUT_NODE = True
CATEGORY = "mesh"
def process(self, bpy_objs, blender_path, shading, camera_location, camera_rotation):
output_file = self.output_dir + '/tmp.blend'
p = open_in_blender(self.my_blender_process, blender_path=blender_path, output_file=output_file, camera_location=camera_location,
camera_rotation=camera_rotation, shading=shading)
self.my_blender_process = p
return {"ui": {}}
NODE_CLASS_MAPPINGS = {
"OpenInBlender": OpenInBlender
}
NODE_DISPLAY_NAME_MAPPINGS = {
"OpenInBlender": "Open in Blender"
}
+15 -7
View File
@@ -9,9 +9,12 @@ class Object_CreateMeshLayer(blender_node.ObjectOps):
EXTRA_INPUT_TYPES = {
"image": ("IMAGE",),
"face_threshold": ("FLOAT", {"display": "number", "default": 0.7}),
"convex_hull": ("BOOLEAN", {"default": True}),
# "face_threshold": ("FLOAT", {"display": "number", "default": 0.7}),
"shape_threshold": ("FLOAT", {"display": "number", "default": 0.7}),
"mesh_layer_name": ("STRING", {"default": "mesh_layer"}),
"scale_x": ("FLOAT", {"display": "number", "default": 1}),
"scale_y": ("FLOAT", {"display": "number", "default": 1}),
"extrude_x": ("FLOAT", {"display": "number", "default": 0}),
"extrude_y": ("FLOAT", {"display": "number", "default": 0}),
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
@@ -19,22 +22,27 @@ class Object_CreateMeshLayer(blender_node.ObjectOps):
RETURN_TYPES = ("BPY_OBJ", "IMAGE")
def blender_process(self, bpy, image, face_threshold, shape_threshold, mesh_layer_name, extrude_x, extrude_y, seed):
def blender_process(self, bpy, image, convex_hull, shape_threshold, mesh_layer_name, scale_x,scale_y , extrude_x, extrude_y, seed):
image, BPY_OBJ = genreate_mesh_from_texture(bpy, image)
bpy.context.view_layer.objects.active = BPY_OBJ
self.edit_mode(bpy)
bpy.ops.mesh.convex_hull(
delete_unused=True, use_existing_faces=True,
face_threshold=face_threshold,
shape_threshold=shape_threshold,
)
if convex_hull:
bpy.ops.mesh.convex_hull(
delete_unused=True, use_existing_faces=True,
shape_threshold=shape_threshold,
# face_threshold=face_threshold
face_threshold=0.7
)
bpy.ops.mesh.delete(type='EDGE_FACE')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.edge_face_add()
bpy.ops.transform.resize(value=(scale_x, scale_y, 1))
bpy.context.object.vertex_groups.new(name=mesh_layer_name)
bpy.ops.object.vertex_group_assign()
+5 -7
View File
@@ -9,13 +9,11 @@ class Mesh_JoinMesh(blender_node.ObjectOps):
CUSTOM_NAME = "Join Meshes"
def blender_process(self, bpy, BPY_OBJ, **props):
prop_values = props.values()
override = bpy.context.copy()
override["active_object"] = BPY_OBJ
override["selected_editable_objects"] = list(prop_values) + [BPY_OBJ]
bpy.ops.object.join(override)
prop_values = props.values()
for obj in list(prop_values) + [BPY_OBJ]:
obj.select_set(True)
bpy.context.view_layer.objects.active = BPY_OBJ
bpy.ops.object.join()
return (BPY_OBJ,)
+1 -1
View File
@@ -6,7 +6,7 @@ class Object_MatchTextureAspectRatio(blender_node.EditOps):
EXTRA_INPUT_TYPES = {
"image": ("IMAGE",),
"scale": ('FLOAT', {'default': 0.001, })
"scale": ('FLOAT', {'default': 0.001, "display": "number" , "step": 0.001})
}
CUSTOM_NAME = "Match Texture Aspect Ratio"
+3 -3
View File
@@ -51,8 +51,8 @@ class Mesh_ModifyShapeKey(blender_node.ObjectOps):
# Create a new array of verts with sk as co and verts' groups
new_verts = []
for i, vert in enumerate(verts):
print(i)
print(sk.data[i].co)
# print(i)
# print(sk.data[i].co)
new_vert = {
'co': sk.data[i].co,
'groups': vert.groups
@@ -129,6 +129,6 @@ class Mesh_ModifyShapeKey(blender_node.ObjectOps):
new_pos = center + vec
# Apply new position
print(i, vert['co'], new_pos, weight)
# print(i, vert['co'], new_pos, weight)
sk.data[i].co = new_pos
+1 -1
View File
@@ -5,7 +5,7 @@ class Object_PlaneTextureUnwrap(blender_node.EditOps):
EXTRA_INPUT_TYPES = {
"image": ("IMAGE",),
"scale": ('FLOAT', {'default': 1, }),
"scale": ('FLOAT', {'default': 1, "display": "number", "step": 0.01}),
"texture_name": ('STRING', {'default': 'Texture', })
}
-74
View File
@@ -1,74 +0,0 @@
class Plane:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"division": ("INT", {
"default": 0,
"min": 0,
"max": 256,
"step": 1,
"display": "number"
}),
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), # For disabling cache
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, division, seed):
import global_bpy
bpy = global_bpy.get_bpy()
# Define coordinates for the plane to object mode
if bpy.context.active_object is not None:
bpy.ops.object.mode_set(mode='OBJECT')
coords = [(-1, -1, 0), (1, -1, 0), (-1, 1, 0), (1, 1, 0)]
# Create a mesh object
mesh = bpy.data.meshes.new(name="PlaneMesh")
mesh.from_pydata(coords,[],[(0,1,3,2)])
# Create a new object with the mesh
object_a = bpy.data.objects.new(name="PlaneObject", object_data=mesh)
bpy.ops.object.select_all(action='DESELECT')
bpy.context.collection.objects.link(object_a)
bpy.context.view_layer.objects.active = object_a
object_a.select_set(True)
# Invert the Y axis of the UV to fix the vertical inversion
bpy.ops.transform.resize(value=(-1, -1, 1))
# Create a new UV map
uv_map = mesh.uv_layers.new(name="newUV")
mesh.uv_layers.active = uv_map
# Unwrap the mesh
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.uv.unwrap()
bpy.ops.object.mode_set(mode='OBJECT')
# Subdivide the plane
if division > 0:
original_mode = bpy.context.object.mode
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.subdivide(number_cuts=division)
bpy.ops.object.mode_set(mode=original_mode)
sk_basis = object_a.shape_key_add(name='Basis')
return ([object_a],)
NODE_CLASS_MAPPINGS = {
"Plane": Plane
}
NODE_DISPLAY_NAME_MAPPINGS = {
"Plane": "Plane (Old)"
}
-55
View File
@@ -1,55 +0,0 @@
class ScaleVertex():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
"extrude": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, extrude):
import global_bpy
bpy = global_bpy.get_bpy()
if len(bpy_objs_target) == 0:
# throw error
return
target_object = bpy_objs_target[0]
# deselect all objects
bpy.ops.object.select_all(action='DESELECT')
# select only the target object
bpy.context.view_layer.objects.active = target_object
# enter enter edit mode and select all faces of the object to fill
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.transform.resize(
value=(extrude, extrude, 1), constraint_axis=(False, False, False))
# remove the extruded vertex from the vertex group "name"
# bpy.ops.object.vertex_group_remove_from()
# bpy.ops.mesh.delete(type='FACE')
bpy.ops.object.mode_set(mode='OBJECT')
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"ScaleVertex": ScaleVertex
}
NODE_DISPLAY_NAME_MAPPINGS = {
"ScaleVertex": "Scale Vertex"
}
-92
View File
@@ -1,92 +0,0 @@
class Texture:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs": ("BPY_OBJS",),
"texture": ("IMAGE",),
"texture_name": ("STRING", {
"multiline": False,
"default": "my_image"
}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
# OUTPUT_NODE = False
CATEGORY = "mesh"
def process(self, bpy_objs, texture, texture_name):
import numpy as np
import global_bpy
bpy = global_bpy.get_bpy()
# Convert image to numpy
texture = texture[0].numpy()
# Flip the image vertically
texture = np.flipud(texture)
# Create an image with the required dimensions
img = bpy.data.images.new(texture_name, width=texture.shape[1], height=texture.shape[0])
# If there is no alpha channel, append one full of 1's
if texture.shape[2] == 3:
alpha_channel = np.ones((*texture.shape[:2], 1))
texture = np.concatenate((texture, alpha_channel), axis=2)
# Flatten image data and rearrange color channels for blender
img.pixels = texture.ravel()
# Pack image to store it within .blend file
img.pack()
# Save image to a file
# img.filepath_raw = 'test.png'
# img.file_format = 'PNG'
# img.save()
# Get the active object
obj = bpy_objs[0]
# Create a material
mat = bpy.data.materials.new("MaterialName")
mat.use_nodes = True
nodes = mat.node_tree.nodes
for node in nodes:
nodes.remove(node)
# Add a new texture node
texture_node = nodes.new(type='ShaderNodeTexImage')
texture_node.image = img
# Add a new BSDF node
bsdf_node = nodes.new(type='ShaderNodeBsdfPrincipled')
# Add a new output node
output_node = nodes.new(type='ShaderNodeOutputMaterial')
# Link nodes together
links = mat.node_tree.links
links.new(bsdf_node.inputs['Base Color'], texture_node.outputs['Color'])
links.new(output_node.inputs['Surface'], bsdf_node.outputs['BSDF'])
# Assign the material to the active object
if obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
return (bpy_objs,)
NODE_CLASS_MAPPINGS = {
"Texture": Texture
}
NODE_DISPLAY_NAME_MAPPINGS = {
"Texture": "Texture"
}
-45
View File
@@ -1,45 +0,0 @@
class TransfromObject():
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"bpy_objs_target": ("BPY_OBJS",),
"x": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}),
"y": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}),
"z": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.01, "display": "number"}),
},
}
RETURN_TYPES = ("BPY_OBJS",)
RETURN_NAMES = ("bpy_objs",)
FUNCTION = "process"
CATEGORY = "mesh"
def process(self, bpy_objs_target, x, y, z):
import global_bpy
bpy = global_bpy.get_bpy()
target_object = bpy_objs_target[0]
bpy.ops.object.select_all(action='DESELECT')
bpy.context.view_layer.objects.active = target_object
# move the object in level transformation
target_object.location.x += x
target_object.location.y += y
target_object.location.z += z
return ([target_object],)
NODE_CLASS_MAPPINGS = {
"TransfromObject": TransfromObject
}
NODE_DISPLAY_NAME_MAPPINGS = {
"TransfromObject": "Transfrom Object"
}
-52
View File
@@ -1,52 +0,0 @@
import torch
from einops import rearrange
from nodes import PreviewImage
class PointVisualizer(PreviewImage):
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"images": ("IMAGE",),
"point": ("VECTOR3D",),
"point_size": ("INT", {
"default": 1,
"min": 10,
"max": 20,
"step": 1,
"display": "number"
}),
},
}
FUNCTION = "process"
CATEGORY = "image"
def process(self, images, point, point_size):
x, y, z = point
h, w, c = images[0].shape
point_image = torch.zeros(images[0].shape)
center_x, center_y, _ = point
top_left_x = center_x - point_size // 2
top_left_y = center_y - point_size // 2
# Make sure the square is within the image boundaries
top_left_x = max(0, min(w - point_size, top_left_x))
top_left_y = max(0, min(h - point_size, top_left_y))
point_image[top_left_y:top_left_y+point_size, top_left_x:top_left_x+point_size] = 1
point_image = rearrange(point_image, 'h w c -> 1 h w c')
# Blending
images = images * 0.2 + point_image * 0.8
return self.save_images(images)
NODE_CLASS_MAPPINGS = {
"PointVisualizer": PointVisualizer
}
NODE_DISPLAY_NAME_MAPPINGS = {
"PointVisualizer": "Point Visualizer"
}
-45
View File
@@ -1,45 +0,0 @@
class VECTOR3D:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"x": ("INT", {
"default": 0,
"min": -1024,
"max": 1024,
"step": 1,
"display": "number"
}),
"y": ("INT", {
"default": 0,
"min": -1024,
"max": 1024,
"step": 1,
"display": "number"
}),
"z": ("INT", {
"default": 0,
"min": -1024,
"max": 1024,
"step": 1,
"display": "number"
}),
},
}
RETURN_TYPES = ("VECTOR3D",)
FUNCTION = "run"
CATEGORY = "utils"
def run(self, x, y, z):
return ([x, y, z],)
NODE_CLASS_MAPPINGS = {
"VECTOR3D": VECTOR3D
}
NODE_DISPLAY_NAME_MAPPINGS = {
"VECTOR3D": "Vector 3D"
}
+35 -23
View File
@@ -1,37 +1,49 @@
import bpy
global_bpy = bpy
def get_bpy():
global global_bpy
global_bpy = bpy
should_reset_scene = True
def set_should_reset_scene(value):
global should_reset_scene
should_reset_scene = value
def get_bpy():
global global_bpy, should_reset_scene
if should_reset_scene:
reset_bpy()
should_reset_scene = False
return global_bpy
def reset_bpy():
global global_bpy
bpy = global_bpy
# not using this cause this cause seg fault frequently
# global_bpy.ops.wm.read_factory_settings(use_empty=True)
bpy.ops.wm.read_factory_settings(use_empty=True)
# check if there's no object, return
if len(bpy.data.objects) == 0:
return
# # check if there's no object, return
# if len(bpy.data.objects) == 0:
# return
# enter object mode
if bpy.context.mode != 'OBJECT':
bpy.ops.object.mode_set(mode='OBJECT')
# # enter object mode
# if bpy.context.mode != 'OBJECT':
# bpy.ops.object.mode_set(mode='OBJECT')
# Delete all objects
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
# # Delete all objects
# bpy.ops.object.select_all(action='DESELECT')
# bpy.ops.object.select_all(action='SELECT')
# bpy.ops.object.delete()
# Delete all meshes
for mesh in bpy.data.meshes:
bpy.data.meshes.remove(mesh)
# # Delete all meshes
# for mesh in bpy.data.meshes:
# bpy.data.meshes.remove(mesh)
# Delete all materials
for material in bpy.data.materials:
bpy.data.materials.remove(material)
# # Delete all materials
# for material in bpy.data.materials:
# bpy.data.materials.remove(material)
# Delete all textures
for texture in bpy.data.textures:
bpy.data.textures.remove(texture)
# # Delete all textures
# for texture in bpy.data.textures:
# bpy.data.textures.remove(texture)
+28
View File
@@ -0,0 +1,28 @@
import { alertDialog } from "./state.js";
import { van } from "./van.js";
const { div, span } = van.tags;
export function Alert() {
van.derive(() => {
if (alertDialog.val.time > 0) {
setTimeout(() => {
alertDialog.val = { text: "", time: 0 };
}, alertDialog.val.time);
}
});
return div(
{
class: () =>
"absolute bottom-8 flex justify-center w-full " +
(alertDialog.val.text ? "" : "hidden"),
},
div(
{
class:
"bg-orange-100 border-t-4 border-orange-500 rounded-sm text-orange-700 p-2",
},
() => span(alertDialog.val.text)
)
);
}
-32
View File
@@ -1,32 +0,0 @@
import { iframeSrc, showEditor } from './state.js';
import { van } from './van.js';
const { button, iframe, div, img } = van.tags;
export function AvatarEditor() {
return div(
{
class: 'w-full h-full',
},
button(
{
class: () =>
'px-4 py-2 rounded-md absolute left-0 top-0 z-[100] bg-gray-800 pointer-events-auto ' +
(showEditor.val ? '' : 'hidden'),
onclick: () => {
console.log('close');
showEditor.val = false;
},
},
'back',
),
iframe({
id: 'avatech-editor-iframe',
title: 'avatech-editor-iframe',
name: 'avatech-editor-iframe',
allow: "cross-origin-isolated",
class: () =>
'w-full h-full pointer-events-auto ' + (showEditor.val ? '' : 'hidden'),
src: iframeSrc,
}),
);
}
+6 -5
View File
@@ -1,8 +1,8 @@
import { van } from "./van.js";
import { showEditor } from "./state.js";
const { button, iframe, div, img } = van.tags;
import { showEditor, previewUrl } from "./state.js";
export function AvatarViewer() {
export function AvatarPreview() {
return div(
{
class: () =>
@@ -17,8 +17,9 @@ export function AvatarViewer() {
class: () =>
"w-full h-full flex pointer-events-auto rounded-2xl border-none " +
(!showEditor.val ? "" : "hidden"),
src: "https://labs.avatech.ai/viewer/default",
// src: 'http://localhost:3000/viewer/default',
})
// src: "https://labs.avatech.ai/viewer/default",
// src: "http://localhost:3000/viewer/default",
src: previewUrl,
}),
);
}
+10 -8
View File
@@ -1,19 +1,21 @@
import { ImageEditor } from './ImageEditor.js';
import { AvatarEditor } from './AvatarEditor.js';
import { LayerEditor } from './LayerEditor.js';
import { ShapeFlowEditor } from './ShapeFlowEditor.js';
import { van } from './van.js';
import { AvatarViewer } from './AvatarViewer.js';
import { AvatarPreview } from './AvatarPreview.js';
import { Loading } from './Loading.js';
import { Alert } from './Alert.js';
const { button, iframe, div, img } = van.tags;
export function Container() {
return div(
{
class: 'fixed left-0 top-0 w-full h-full z-[200] pointer-events-none',
class: 'fixed left-0 top-0 w-full h-full z-[1000] pointer-events-none',
id: 'avatech-editor',
},
AvatarEditor(),
ImageEditor(),
AvatarViewer(),
Loading()
ShapeFlowEditor(),
LayerEditor(),
AvatarPreview(),
Loading(),
Alert(),
);
}
+1 -1
View File
@@ -101,7 +101,7 @@ export function drawSegment(clicks) {
initModel();
export function ImageEditor() {
export function LayerEditor() {
let realTimeSegment = true;
document.addEventListener("keydown", (e) => {
if (showImageEditor.val && e.code === "Tab") {
+5 -5
View File
@@ -1,17 +1,17 @@
import { showLoading } from "./state.js";
import { loadingCaption, showLoading } from "./state.js";
import { van } from "./van.js";
const { div, span } = van.tags;
export function Loading() {
console.log("???", showLoading.val);
return div(
{
class: () =>
"absolute flex justify-center items-center top-0 left-0 bg-gray-900 bg-opacity-50 pointer-events-auto w-full h-full " +
"absolute flex flex-col justify-center items-center top-0 left-0 bg-gray-900 bg-opacity-50 pointer-events-auto w-full h-full " +
(showLoading.val ? "" : "hidden"),
},
span({
class: "loading loading-spinner loading-lg",
})
class: "loading loading-spinner loading-lg mb-2",
}),
() => span(loadingCaption.val)
);
}
+82
View File
@@ -0,0 +1,82 @@
import { iframeSrc, showEditor } from "./state.js";
import { van } from "./van.js";
const { button, iframe, div, img, span, dialog, form } = van.tags;
export function ShapeFlowEditor() {
return div(
{
class: "w-full h-full relative",
},
button(
{
class: () =>
"ml-2 mt-2 btn btn-circle flex flex-row btn-ghost normal-case absolute px-4 rounded-md left-0 top-0 z-[200] w-fit pointer-events-auto bg-black " +
(showEditor.val ? "" : "hidden"),
onclick: () => {
console.log("close");
document.getElementById("alert-dialog").showModal();
},
},
span({
class: "iconify text-lg",
"data-icon": "ic:baseline-arrow-back",
"data-inline": "false",
}),
div("Back & Save")
),
iframe({
id: "avatech-editor-iframe",
title: "avatech-editor-iframe",
name: "avatech-editor-iframe",
allow: "cross-origin-isolated; clipboard-read; clipboard-write",
class: () =>
"w-full h-full pointer-events-auto " + (showEditor.val ? "" : "hidden"),
src: iframeSrc,
}),
dialog(
{
id: "alert-dialog",
class: "modal modal-bottom sm:modal-middle",
},
div(
{
class: "modal-box",
},
div({ class: "text-black" }, "This is a dialog"),
div(
{ class: "modal-action" },
form(
{ method: "dialog", class: "flex flex-row gap-4" },
button(
{
class: "btn",
onclick: () => {
showEditor.val = false;
},
},
"Discard"
),
button(
{
class: "btn",
onclick: () => {
const editor = document.getElementById(
"avatech-editor-iframe"
);
editor.contentWindow.postMessage(
{
method: "back",
},
"*"
);
showEditor.val = false;
},
},
"Save & Close"
)
)
)
)
)
);
}
+39 -17
View File
@@ -1,9 +1,10 @@
import { drawSegment, getClicks, updateImagePrompts } from "./ImageEditor.js";
import { drawSegment, getClicks, updateImagePrompts } from "./LayerEditor.js";
import {
imagePrompts,
selectedLayer,
imagePromptsMulti,
targetNode,
showImageEditor,
} from "./state.js";
import { van } from "./van.js";
const {
@@ -22,6 +23,39 @@ const {
span,
} = van.tags;
van.derive(() => {
if (
showImageEditor.val &&
targetNode.val != undefined &&
targetNode.val.outputs && targetNode.val.type === 'SAM'
) {
const outputNames = targetNode.val.outputs.map((x) => x.name).slice(1);
const record = Object.keys(imagePromptsMulti.val);
const diff = outputNames.filter((x) => !record.includes(x));
const missingDiff = record.filter((x) => !outputNames.includes(x));
if (diff.length > 0) {
console.log("Cleaning up missing output slots", diff);
diff.forEach((x) => {
targetNode.val.removeOutput(targetNode.val.findOutputSlot(x));
});
targetNode.val.graph.change();
}
if (missingDiff.length > 0) {
console.log("Adding missing output slots", diff);
missingDiff.forEach((x) => {
targetNode.val.addOutput(
x,
targetNode.val.type === "SAM" ? "IMAGE" : "SAM_PROMPT"
);
});
targetNode.val.graph.change();
}
}
});
export function SideBar() {
const layer_to_delete = van.state("");
@@ -140,10 +174,6 @@ export function SideBar() {
imagePrompts.val = [];
}
}
const outputIndex = targetNode.val.findOutputSlot(
layer_to_delete.val
);
targetNode.val.removeOutput(outputIndex);
targetNode.val.graph.change();
updateImagePrompts();
delete_layer_dialog.close();
@@ -171,18 +201,10 @@ export function SideBar() {
console.log(inputText, imagePromptsMulti.val);
my_modal_3.close();
e.target.elements[1].value = "";
targetNode.val.addOutput(
inputText,
targetNode.val.type === "SAM" ? "IMAGE" : "SAM_PROMPT"
);
targetNode.val.graph.change();
if (
selectedLayer.val === null ||
selectedLayer.val === undefined ||
selectedLayer.val === ""
) {
selectedLayer.val = inputText;
}
selectedLayer.val = inputText;
imagePrompts.val = imagePromptsMulti.val[inputText];
drawSegment(getClicks());
updateImagePrompts();
},
},
+75 -23
View File
@@ -10,6 +10,8 @@ import {
imagePromptsMulti,
selectedLayer,
showLoading,
loadingCaption,
alertDialog,
} from "./state.js";
import { van } from "./van.js";
import { app } from "./app.js";
@@ -17,7 +19,13 @@ import { api } from "./api.js";
import { Container } from "./Container.js";
import { loadNpyTensor } from "./onnx.js";
import "https://code.iconify.design/3/3.1.0/iconify.min.js";
import { drawSegment, getClicks } from "./ImageEditor.js";
import { drawSegment, getClicks } from "./LayerEditor.js";
const stylesheet = document.createElement('link')
stylesheet.setAttribute('type', "text/css")
stylesheet.setAttribute('rel', "stylesheet")
stylesheet.setAttribute('href', './avatar-graph-comfyui/tw-styles.css')
document.head.appendChild(stylesheet)
/** @type {import( '../../../web/types/litegraph.js').LGraphGroup} */
const recomputeInsideNodesOps = LGraphGroup.prototype.recomputeInsideNodes;
@@ -199,7 +207,7 @@ function openInAvatechEditor(url, fileName) {
key: "key",
value: fileName,
method: "store",
blendshapes: targetNode.val.widgets.find((x) => x.name === "blendshapes")
blendshapes: targetNode.val.widgets.find((x) => x.name === "shape_flow")
.value,
},
"*"
@@ -207,7 +215,7 @@ function openInAvatechEditor(url, fileName) {
}
function updateBlendshapesPrompts(value) {
targetNode.val.widgets.find((x) => x.name === "blendshapes").value = value;
targetNode.val.widgets.find((x) => x.name === "shape_flow").value = value;
targetNode.val.graph.change();
}
@@ -287,9 +295,17 @@ const ext = {
return {
SAM_PROMPTS(node, inputName, inputData, app) {
const btn = node.addWidget("button", "Edit prompt", "", () => {
showLoading.val = true;
let connectedImageFileName = getInputWidgetValue(node, 0, "image");
if (!connectedImageFileName) {
alertDialog.val = {
text: "Please connect an image first",
time: 3000,
};
return;
}
loadingCaption.val = "Computing image embedding...";
showLoading.val = true;
const split = connectedImageFileName.split("/");
let id = connectedImageFileName;
@@ -298,9 +314,6 @@ const ext = {
node.widgets.find((x) => x.name === "embedding_id").value = id;
const ckpt = node.widgets.find((x) => x.name === "ckpt").value;
const model_type = node.widgets.find(
(x) => x.name === "model_type"
).value;
api
.fetchApi("/sam_model", {
@@ -309,12 +322,15 @@ const ext = {
image: connectedImageFileName,
embedding_id: id,
ckpt,
model_type,
}),
})
.then(() => {
showLoading.val = false;
showMyImageEditor(node);
})
.catch((err) => {
console.log(err);
showLoading.val = false;
});
});
btn.serialize = false;
@@ -324,7 +340,7 @@ const ext = {
};
},
BLENDSHAPES_CONFIG(node, inputName, inputData, app) {
const btn = node.addWidget("button", "Edit blendshapes", "", () => {
const btn = node.addWidget("button", "Edit Shape Flow", "", () => {
targetNode.val = node;
openInAvatechEditor(
"https://editor.avatech.ai?comfyui=true",
@@ -401,11 +417,23 @@ const ext = {
api.api_base +
`/view?filename=${evt.detail?.output.gltfFilename[0]}`;
if (
gltfFilename.endsWith(".ava") &&
evt.detail?.output.auto_save[0] == "true"
) {
const link = document.createElement("a");
link.href = gltfFilename;
link.download = gltfFilename.split("/").pop();
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
fileName.val = gltfFilename;
viewer.postMessage(
JSON.stringify({
avatarURL: gltfFilename,
blendshapes: evt.detail?.output.blendshapes[0],
blendshapes: evt.detail?.output.SHAPE_FLOW[0],
}),
"*"
);
@@ -417,7 +445,12 @@ const ext = {
(event) => {
if (event.key === "Escape") {
event.preventDefault();
showImageEditor.val = false;
if (my_modal_3.open) {
my_modal_3.close();
} else {
showImageEditor.val = false;
showEditor.val = false;
}
}
},
{
@@ -477,6 +510,36 @@ const ext = {
async beforeRegisterNodeDef(nodeType, nodeData, app) {
switch (nodeData.name) {
case "AvatarMainOutput":
addMenuHandler(nodeType, function (_, options) {
const output = app.nodeOutputs[this.id + ""];
if (!output || !output.gltfFilename) return;
const gltfFilename =
window.location.protocol +
"//" +
api.api_host +
api.api_base +
`/view?filename=${output.gltfFilename[0]}`;
options.unshift({
content: "Save file",
callback: () => {
const a = document.createElement("a");
let url = new URL(gltfFilename);
url.searchParams.delete("preview");
a.href = url;
a.setAttribute(
"download",
new URLSearchParams(url.search).get("filename")
);
document.body.append(a);
a.click();
requestAnimationFrame(() => a.remove());
},
});
});
break;
case "ExportGLTF":
addMenuHandler(nodeType, function (_, options) {
const output = app.nodeOutputs[this.id + ""];
@@ -555,17 +618,6 @@ const ext = {
break;
case "CreateShapeFlow":
nodeData.input.required.blendshape = ["BLENDSHAPES_CONFIG"];
addMenuHandler(nodeType, function (_, options) {
options.unshift({
content: "Open In Blendshapes Editor",
callback: () => {
openInAvatechEditor(
"https://editor.avatech.ai?comfyui=true",
gltfFilename
);
},
});
});
break;
case "Mesh_JoinMesh":
nodeData.input.required.obj = ["MESH_GROUP_CONFIG"];
+12 -3
View File
@@ -12,14 +12,23 @@
* @property {number} label - The label
*/
import { van } from './van.js';
import { van } from "./van.js";
export const iframeSrc = van.state('https://editor.avatech.ai?comfyui=true');
export const iframeSrc = van.state("https://editor.avatech.ai?comfyui=true");
export const showEditor = van.state(false);
export const previewUrl = van.state("https://editor.avatech.ai/viewer?avatarId=default&hideUI=true&debug=true&width=300&height=300&showAudioControl=true");
// export const previewUrl = van.state("http://localhost:3006/viewer?avatarId=default&hideUI=true&debug=true&width=300&height=300&showAudioControl=true");
export const isDirty = van.state(false);
export const fileName = van.state('');
export const showImageEditor = van.state(false);
export const showLoading = van.state(false);
export const imageUrl = van.state('');
export const alertDialog = van.state({
text: "",
time: 0,
});
export const loadingCaption = van.state("");
export const imageUrl = van.state("");
export const point_label = van.state(1);
export const imageContainerSize = van.state({
width: 0,
File diff suppressed because one or more lines are too long
View File
+2030
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -4,14 +4,13 @@
"description": "",
"main": "index.js",
"scripts": {
"dev": "concurrently \"tailwindcss -i ./js/style.css -o ./js/output.css --watch -m\" \"node ./style-watcher.js\""
"dev": "tailwindcss -i ./js/styles.css -o ./js/tw-styles.css --watch"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"chokidar": "^3.5.3",
"concurrently": "^8.2.1",
"daisyui": "^3.7.5",
"tailwindcss": "^3.3.3"
}
+1
View File
@@ -5,4 +5,5 @@ opencv-contrib-python
einops
bpy
segment-anything
tqdm
# -e git+https://github.com/facebookresearch/segment-anything.git#egg=segment_anything
+7 -2
View File
@@ -7,6 +7,7 @@ import folder_paths
import json
import numpy as np
import server
import re
# For speeding up ONNX model, see https://github.com/facebookresearch/segment-anything/tree/main/demo#onnx-multithreading-with-sharedarraybuffer
def inject_headers(original_handler):
@@ -31,6 +32,10 @@ for item in server.PromptServer.instance.routes._items:
routes.append(item)
server.PromptServer.instance.routes._items = routes
@server.PromptServer.instance.routes.get("/avatar-graph-comfyui/tw-styles.css")
async def get_web_styles(request):
filename = os.path.join(os.path.dirname(__file__), "js/tw-styles.css")
return web.FileResponse(filename)
@server.PromptServer.instance.routes.get("/sam_model")
async def get_sam_model(request):
@@ -65,8 +70,8 @@ async def post_sam_model(request):
if not os.path.exists(emb_filename):
image = load_image(post.get("image"))
ckpt = post.get("ckpt")
model_type = post.get("model_type")
ckpt = folder_paths.get_full_path("sam", ckpt)
model_type = re.findall(r'vit_[lbh]', ckpt)[0]
ckpt = folder_paths.get_full_path("sams", ckpt)
sam = sam_model_registry[model_type](checkpoint=ckpt)
predictor = SamPredictor(sam)
-67
View File
@@ -1,67 +0,0 @@
import torch
from einops import rearrange, repeat
from torchvision import transforms
from PIL import Image
import numpy as np
import cv2
import base64
import requests
import json
import io
class AvatarSegmentation:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE",),
}
}
RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "IMAGE", "IMAGE")
RETURN_NAMES = ("back_hair", "front_hair","eyes", "eyelashes", "mouth")
FUNCTION = "segment"
CATEGORY = "image"
def segment(self, image):
# Convert tensor to PIL image
image = image[0]
image = rearrange(image, 'h w c -> c h w')
image = transforms.ToPILImage()(image)
# Save image to in-memory file
image_buff = io.BytesIO()
image.save(image_buff, format="PNG")
image_string = base64.b64encode(image_buff.getvalue()).decode("utf-8")
# Send request to API
url = 'https://q41iq6s6t8.execute-api.ap-southeast-1.amazonaws.com/seg-cpu'
headers = {
'content-type': 'application/json'
}
data = {
'img_str': image_string
}
response = requests.post(url, headers=headers, data=json.dumps(data))
# Convert response to tensors
outs = []
masks = response.json()
for segment_name, img_str in masks.items():
mask = base64.b64decode(img_str.encode('utf-8'))
mask = Image.open(io.BytesIO(mask))
mask = np.array(mask)
mask = torch.from_numpy(mask) # shape: H, W, 3
mask = rearrange(mask, 'h w c -> 1 h w c')
outs.append(mask)
return outs
NODE_CLASS_MAPPINGS = {
"AvatarSegmentation": AvatarSegmentation
}
NODE_DISPLAY_NAME_MAPPINGS = {
"AvatarSegmentation": "Avatar Segmentation"
}
+12 -4
View File
@@ -2,6 +2,7 @@ import folder_paths
import os
import numpy as np
import torch
import re
from segment_anything import sam_model_registry, SamPredictor
from einops import rearrange, repeat
@@ -24,8 +25,7 @@ class SAM:
return {
"required": {
"image": ("IMAGE",),
"model_type": (["vit_h", "vit_l", "vit_b"],),
"ckpt": (folder_paths.get_filename_list("sam"),),
"ckpt": (folder_paths.get_filename_list("sams"),),
"embedding_id": (
"STRING",
{"multiline": False, "default": "embedding"},
@@ -40,13 +40,14 @@ class SAM:
RETURN_TYPES = ("SAM_PROMPT",)
FUNCTION = "load_image"
def load_image(self, image, model_type, ckpt, embedding_id, image_prompts_json):
def load_image(self, image, ckpt, embedding_id, image_prompts_json):
import json
global global_predictor
if global_predictor is None:
ckpt = folder_paths.get_full_path("sam", ckpt)
ckpt = folder_paths.get_full_path("sams", ckpt)
model_type = re.findall(r'vit_[lbh]', ckpt)[0]
sam = sam_model_registry[model_type](checkpoint=ckpt)
predictor = SamPredictor(sam)
global_predictor = predictor
@@ -59,6 +60,13 @@ class SAM:
predictor.set_image(image_np)
emb = predictor.get_image_embedding().cpu().numpy()
np.save(emb_filename, emb)
with open(f"{self.output_dir}/{embedding_id}.json", "w") as f:
data = {
"input_size": predictor.input_size,
"original_size": predictor.original_size,
}
json.dump(data, f)
else:
emb = np.load(emb_filename)
-52
View File
@@ -1,52 +0,0 @@
import folder_paths
import torch
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
from einops import rearrange, repeat
class SAM_Load_Embedding:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"filename": ("STRING", {
"multiline": False,
"default": "embeddings"
}),
"embedding_id": ("STRING", {
"multiline": False,
"default": "embedding"
}),
}
}
RETURN_TYPES = ("EMBEDDINGS",)
RETURN_NAMES = ("EMBEDDINGS",)
OUTPUT_NODE = True
FUNCTION = "process"
CATEGORY = "image"
def process(self, filename, embedding_id):
import json
import numpy as np
data = {}
with open(filename, 'r') as f:
data = json.load(f)
# Convert list to numpy ndarray
data['image_embedding'] = np.array(data['image_embedding'])
return (data, )
NODE_CLASS_MAPPINGS = {
"SAM_Load_Embedding": SAM_Load_Embedding
}
NODE_DISPLAY_NAME_MAPPINGS = {
"SAM_Load_Embedding": "SAM_Load_Embedding "
}
-42
View File
@@ -1,42 +0,0 @@
import folder_paths
import torch
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
from einops import rearrange, repeat
import requests
from PIL import Image
import io
import numpy as np
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry, SamPredictor
from einops import rearrange, repeat
class SAM_Remote_Emb:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"model_type": (["vit_h", "vit_l", "vit_b"],),
"ckpt": (folder_paths.get_filename_list("sam"),),
},
}
RETURN_TYPES = ("SAM", "SAMPREDICTOR")
RETURN_NAMES = ("sam", "predictor")
FUNCTION = "segment"
CATEGORY = "image"
def segment(self, model_type, ckpt):
ckpt = folder_paths.get_full_path("sam", ckpt)
sam = sam_model_registry[model_type](checkpoint=ckpt)
predictor = SamPredictor(sam)
return (sam, predictor)
NODE_CLASS_MAPPINGS = {
"SAM_Loader": SAM_Remote_Emb
}
NODE_DISPLAY_NAME_MAPPINGS = {
"SAM_Loader": "SAM Loader"
}
-110
View File
@@ -1,110 +0,0 @@
import torch
from einops import rearrange, repeat
import numpy as np
import cv2
class SAM_Predict:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE",),
"embeddings": ("EMBEDDINGS",),
"predictor": ("SAMPREDICTOR",),
},
"optional": {
"prompt": ("SAM_PROMPT", ),
"mask": ("IMAGE",),
}
}
RETURN_TYPES = ("IMAGE","IMAGE", "IMAGE")
RETURN_NAMES = ("image","out_image", "mask")
FUNCTION = "segment"
CATEGORY = "image"
def segment(self, image, embeddings, predictor, prompt, mask=None):
image_embedding_list = embeddings['image_embedding']
shape = tuple(embeddings['shape'])
input_size = tuple(embeddings['input_size'])
# Convert the list back to a numpy array with the original shape
image_embedding_np = np.array(image_embedding_list, dtype=np.single).reshape(shape)
# Convert the numpy array to a PyTorch tensor
image_embedding_tensor = torch.from_numpy(image_embedding_np)
# Set the image embeddings for the model
# predictor.set_torch_image(image_embedding_tensor, image.shape[:2])
# print(image[0].shape[:2])
predictor.input_size = input_size
predictor.features = image_embedding_tensor
predictor.is_image_set = True
predictor.original_size = image[0].shape[:2]
# prompt = [{"x":364,"y":153,"label":1},{"x":296,"y":189,"label":1},{"x":277,"y":246,"label":1}]
# if point_1 != None:
# x, y, z = point_1
# point_coords = np.array([[x, y]])
# point_labels = np.array([1])
if prompt == None or len(prompt) == 0:
return (image, image, None)
point_coords = np.array([[p['x'], p['y']] for p in prompt])
point_labels = np.array([p['label'] for p in prompt])
masks, iou_predictions, low_res_masks = predictor.predict(
point_coords=point_coords,
point_labels=point_labels,
)
if mask != None:
# scale the mask to 256x256
cv2_mask = cv2.resize(np.array(mask[0]), (256, 256))
cv2_mask = cv2_mask[np.newaxis, :, :]
cv2_mask = (cv2_mask * 255).astype(int)
true_locations = np.array(np.where(cv2_mask[0] == 255))
if true_locations.shape[1] > 0:
# Randomly select a point in the mask
rand_index = np.random.randint(true_locations.shape[1])
y, x = true_locations[:, rand_index]
point_coords = np.array([[x, y]])
point_labels = np.array([1])
masks, iou_predictions, low_res_masks = predictor.predict(
point_coords=point_coords,
point_labels=point_labels,
mask_input=cv2_mask
)
else:
# No detected mask
h, w, c = image[0].shape
masks = np.zeros((1, h, w))
masks = torch.from_numpy(masks)
masks = rearrange(masks[0], 'h w -> 1 h w')
# masks = rearrange(masks, 'c h w -> 1 c h w')
out_image = repeat(masks, '1 h w -> 1 h w c', c=3) * image
print(masks.shape, torch.max(masks), torch.min(masks))
print(image.shape, torch.max(image), torch.min(image))
# print(emb)
# print(masks, out_image)
return (image, out_image, masks)
NODE_CLASS_MAPPINGS = {
"SAM_Predict": SAM_Predict
}
NODE_DISPLAY_NAME_MAPPINGS = {
"SAM_Predict": "SAM Predict"
}
-88
View File
@@ -1,88 +0,0 @@
import requests
from PIL import Image
import io
import numpy as np
import folder_paths
class SAM_Embedding:
def __init__(self):
self.output_dir = folder_paths.get_output_directory()
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE",),
"embedding_id": ("STRING", {
"multiline": False,
"default": "embedding"
}),
},
"optional": {
"predictor": ("SAMPREDICTOR",)
}
}
RETURN_TYPES = ("EMBEDDINGS", )
RETURN_NAMES = ("embeddings", )
FUNCTION = "segment"
CATEGORY = "image"
def segment(self, image, embedding_id, predictor=None):
# Convert PyTorch tensor to numpy array
image_np = (image[0].numpy() * 255).astype(np.uint8)
if predictor != None:
predictor.set_image(image_np)
emb = predictor.get_image_embedding().cpu().numpy()
output = {
"image_embedding": emb,
"shape": emb.shape,
"input_size": predictor.input_size
}
else:
# Convert numpy array to PIL Image
img = Image.fromarray(image_np)
# Create an in-memory bytes buffer
img_byte_arr = io.BytesIO()
# Save the PIL Image to the bytes buffer in PNG format
img.save(img_byte_arr, format='PNG')
# Get the bytes value of the buffer
img_byte_arr = img_byte_arr.getvalue()
# Create a dictionary with the image bytes
files = {'image': ('image.png', img_byte_arr)}
# Send the POST request
response = requests.post('https://avatechgg--segment-anything-entrypoint.modal.run', files=files)
# Check if the request was successful
if response.status_code == 200:
# Parse the JSON response
output = response.json()
else:
print(f"Request failed with status code {response.status_code}")
output = None
# sam = sam_model_registry[model_type](checkpoint=ckpt)
# predictor = SamPredictor(sam)
# masks = predictor.set_torch_image
# masks = predictor.predict
# print(output)
np.save(f"{self.output_dir}/{embedding_id}.npy", output["image_embedding"])
return (output, )
NODE_CLASS_MAPPINGS = {
"SAM_Embedding": SAM_Embedding
}
NODE_DISPLAY_NAME_MAPPINGS = {
"SAM_Embedding": "SAM Embedding"
}
-67
View File
@@ -1,67 +0,0 @@
import folder_paths
import os
import numpy as np
from segment_anything import sam_model_registry, SamPredictor
class SAM_Prompt_Image:
def __init__(self):
self.output_dir = folder_paths.get_output_directory()
@classmethod
def INPUT_TYPES(s):
input_dir = folder_paths.get_input_directory()
files = [
f
for f in os.listdir(input_dir)
if os.path.isfile(os.path.join(input_dir, f))
]
return {
"required": {
"image": ("IMAGE",),
"model_type": (["vit_h", "vit_l", "vit_b"],),
"ckpt": (folder_paths.get_filename_list("sam"),),
"embedding_id": (
"STRING",
{"multiline": False, "default": "embedding"},
),
# "image": (sorted(files), ),
"image_prompts_json": ("STRING", {"multiline": False, "default": "[]"}),
},
}
CATEGORY = "image"
RETURN_TYPES = ("SAM_PROMPT",)
FUNCTION = "load_image"
def load_image(self, image, model_type, ckpt, embedding_id, image_prompts_json):
import json
emb_filename = f"{self.output_dir}/{embedding_id}.npy"
if not os.path.exists(emb_filename):
ckpt = folder_paths.get_full_path("sam", ckpt)
sam = sam_model_registry[model_type](checkpoint=ckpt)
predictor = SamPredictor(sam)
image_np = (image[0].numpy() * 255).astype(np.uint8)
predictor.set_image(image_np)
emb = predictor.get_image_embedding().cpu().numpy()
np.save(emb_filename, emb)
image_prompts = json.loads(image_prompts_json)
result = (image_prompts,)
if isinstance(image_prompts, list):
pass
elif all(isinstance(item, list) for item in image_prompts.values()):
for item in image_prompts.values():
result += (item,)
return result
NODE_CLASS_MAPPINGS = {"SAM_Prompt_Image": SAM_Prompt_Image}
NODE_DISPLAY_NAME_MAPPINGS = {"SAM_Prompt_Image": "SAM_Prompt_Image "}
-64
View File
@@ -1,64 +0,0 @@
import folder_paths
import torch
import os
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
from einops import rearrange, repeat
class SAM_Save_Embedding:
def __init__(self):
self.output_dir = folder_paths.get_output_directory()
self.type = "output"
self.prefix_append = ""
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"embeddings": ("EMBEDDINGS",),
"filename": ("STRING", {
"multiline": False,
"default": "embeddings"
}),
"write_mode": (["Overwrite", "Increment"],),
}
}
RETURN_TYPES = ()
RETURN_NAMES = ()
OUTPUT_NODE = True
FUNCTION = "process"
CATEGORY = "image"
def process(self, embeddings, filename, write_mode):
import json
import numpy as np
filepath = self.output_dir + "/" + filename + '.json'
if write_mode == "Increment":
count = 0
# while file exists, increment count
while os.path.exists(self.output_dir + "/" + filename + '_' + str(count) + '.json'):
count += 1
filepath = self.output_dir + "/" + filename + '_' + str(count) + '.json'
# print(embeddings)
if isinstance(embeddings['image_embedding'], np.ndarray):
embeddings['image_embedding'] = embeddings['image_embedding'].tolist()
with open(filepath, 'w') as f:
json.dump(embeddings, f)
return { "ui" : { "file": { filepath.replace(f"{self.output_dir}/", "") } } }
NODE_CLASS_MAPPINGS = {
"SAM_Save_Embedding": SAM_Save_Embedding
}
NODE_DISPLAY_NAME_MAPPINGS = {
"SAM_Save_Embedding": "SAM_Save_Embedding "
}
-24
View File
@@ -1,24 +0,0 @@
const fs = require('fs');
const chokidar = require('chokidar');
const path = require('path');
// Initialize watcher.
const watcher = chokidar.watch(path.resolve(__dirname, './js/output.css'), {
persistent: true
});
// Add event listeners.
watcher
.on('change', filePath => {
console.log(`File ${filePath} has been changed`);
let cssContent = fs.readFileSync(filePath, 'utf8');
let jsContent = `let style = document.createElement('style');
style.innerHTML = \`${cssContent.replace(/\\/g, '\\\\')}\`;
document.head.appendChild(style);`;
fs.writeFileSync(path.resolve(__dirname, './js/style-inject.js'), jsContent);
});
// On script exit, close the watcher
process.on('exit', (code) => {
watcher.close();
});
+467
View File
@@ -0,0 +1,467 @@
{
"last_node_id": 316,
"last_link_id": 561,
"nodes": [
{
"id": 181,
"type": "CheckpointLoaderSimple",
"pos": [
40,
200
],
"size": {
"0": 340.6639709472656,
"1": 98
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
552
],
"shape": 3,
"slot_index": 0
},
{
"name": "CLIP",
"type": "CLIP",
"links": [
527,
558
],
"shape": 3,
"slot_index": 1
},
{
"name": "VAE",
"type": "VAE",
"links": [
249,
547
],
"shape": 3,
"slot_index": 2
}
],
"properties": {
"Node name for S&R": "CheckpointLoaderSimple"
},
"widgets_values": [
"meinamix_meinaV10.safetensors"
]
},
{
"id": 176,
"type": "KSampler",
"pos": [
900,
230
],
"size": {
"0": 326.9862060546875,
"1": 262.3746643066406
},
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 552
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 557,
"slot_index": 1
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 554
},
{
"name": "latent_image",
"type": "LATENT",
"link": 540,
"slot_index": 3
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
248
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
509878269555324,
"randomize",
25,
7,
"dpmpp_2m",
"karras",
1
]
},
{
"id": 175,
"type": "CLIPTextEncode",
"pos": [
540,
300
],
"size": {
"0": 304.70074462890625,
"1": 109.89002990722656
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 527
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
554
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"worst quality,low quality, normal quality, monochrome, grayscale, closed mouth, extended tongue,sad"
],
"color": "#322",
"bgcolor": "#533"
},
{
"id": 174,
"type": "CLIPTextEncode",
"pos": [
540,
130
],
"size": {
"0": 299.78692626953125,
"1": 101.67720031738281
},
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 558,
"slot_index": 0
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
557
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"open mouth,detailed mouth,lips,smile"
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 301,
"type": "VAEEncodeForInpaint",
"pos": [
538,
470
],
"size": {
"0": 315,
"1": 98
},
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "pixels",
"type": "IMAGE",
"link": 559,
"slot_index": 0
},
{
"name": "vae",
"type": "VAE",
"link": 547,
"slot_index": 1
},
{
"name": "mask",
"type": "MASK",
"link": 560,
"slot_index": 2
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
540
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "VAEEncodeForInpaint"
},
"widgets_values": [
6
]
},
{
"id": 315,
"type": "LoadImage",
"pos": [
61,
455
],
"size": {
"0": 315,
"1": 314.0001525878906
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
559
],
"shape": 3
},
{
"name": "MASK",
"type": "MASK",
"links": [
560
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"clipspace/clipspace-mask-186477.83499991894.png [input]",
"image"
]
},
{
"id": 184,
"type": "VAEDecode",
"pos": [
1300,
230
],
"size": {
"0": 210,
"1": 46
},
"flags": {
"collapsed": false
},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 248
},
{
"name": "vae",
"type": "VAE",
"link": 249,
"slot_index": 1
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
561
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "VAEDecode"
}
},
{
"id": 316,
"type": "PreviewImage",
"pos": [
1571.9339136962892,
243.9844624023438
],
"size": {
"0": 210,
"1": 26
},
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 561
}
],
"properties": {
"Node name for S&R": "PreviewImage"
}
}
],
"links": [
[
248,
176,
0,
184,
0,
"LATENT"
],
[
249,
181,
2,
184,
1,
"VAE"
],
[
527,
181,
1,
175,
0,
"CLIP"
],
[
540,
301,
0,
176,
3,
"LATENT"
],
[
547,
181,
2,
301,
1,
"VAE"
],
[
552,
181,
0,
176,
0,
"MODEL"
],
[
554,
175,
0,
176,
2,
"CONDITIONING"
],
[
557,
174,
0,
176,
1,
"CONDITIONING"
],
[
558,
181,
1,
174,
0,
"CLIP"
],
[
559,
315,
0,
301,
0,
"IMAGE"
],
[
560,
315,
1,
301,
2,
"MASK"
],
[
561,
184,
0,
316,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}
+383
View File
@@ -0,0 +1,383 @@
{
"last_node_id": 318,
"last_link_id": 563,
"nodes": [
{
"id": 184,
"type": "VAEDecode",
"pos": [
1290,
410
],
"size": {
"0": 210,
"1": 46
},
"flags": {
"collapsed": false
},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 248
},
{
"name": "vae",
"type": "VAE",
"link": 249,
"slot_index": 1
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
562
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "VAEDecode"
}
},
{
"id": 317,
"type": "SaveImage",
"pos": [
1530,
420
],
"size": [
315,
270
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 562
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
},
{
"id": 175,
"type": "CLIPTextEncode",
"pos": [
530,
480
],
"size": [
301.38145862926115,
151.58555811101718
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 527
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
554
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"worst quality, low quality, normal quality, monochrome, grayscale, closed mouth, extended tongue, sad, text, signature, username, artist name, animal, big mouth,leg,hand"
],
"color": "#322",
"bgcolor": "#533"
},
{
"id": 181,
"type": "CheckpointLoaderSimple",
"pos": [
100,
390
],
"size": {
"0": 340.6639709472656,
"1": 98
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
552
],
"shape": 3,
"slot_index": 0
},
{
"name": "CLIP",
"type": "CLIP",
"links": [
527,
558
],
"shape": 3,
"slot_index": 1
},
{
"name": "VAE",
"type": "VAE",
"links": [
249
],
"shape": 3,
"slot_index": 2
}
],
"properties": {
"Node name for S&R": "CheckpointLoaderSimple"
},
"widgets_values": [
"meinamix_meinaV11.safetensors"
]
},
{
"id": 174,
"type": "CLIPTextEncode",
"pos": [
530,
300
],
"size": [
294.7698808149855,
129.02360742742354
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 558,
"slot_index": 0
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
557
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"looking at viewer, detailed face, open mouth, smile, solo,eye-level angle,\nsimple background, 1 girl, half body"
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 318,
"type": "EmptyLatentImage",
"pos": [
530,
690
],
"size": [
299.24921209161903,
106
],
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
563
],
"shape": 3
}
],
"properties": {
"Node name for S&R": "EmptyLatentImage"
},
"widgets_values": [
512,
768,
1
]
},
{
"id": 176,
"type": "KSampler",
"pos": [
890,
410
],
"size": {
"0": 326.9862060546875,
"1": 262.3746643066406
},
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 552
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 557,
"slot_index": 1
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 554
},
{
"name": "latent_image",
"type": "LATENT",
"link": 563,
"slot_index": 3
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
248
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
24285104147823,
"randomize",
25,
5,
"dpmpp_2m",
"karras",
1
]
}
],
"links": [
[
248,
176,
0,
184,
0,
"LATENT"
],
[
249,
181,
2,
184,
1,
"VAE"
],
[
527,
181,
1,
175,
0,
"CLIP"
],
[
552,
181,
0,
176,
0,
"MODEL"
],
[
554,
175,
0,
176,
2,
"CONDITIONING"
],
[
557,
174,
0,
176,
1,
"CONDITIONING"
],
[
558,
181,
1,
174,
0,
"CLIP"
],
[
562,
184,
0,
317,
0,
"IMAGE"
],
[
563,
318,
0,
176,
3,
"LATENT"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,669 @@
{
"last_node_id": 23,
"last_link_id": 27,
"nodes": [
{
"id": 19,
"type": "ControlNetApply",
"pos": [
660,
300
],
"size": {
"0": 317.4000244140625,
"1": 98
},
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "conditioning",
"type": "CONDITIONING",
"link": 23
},
{
"name": "control_net",
"type": "CONTROL_NET",
"link": 22,
"slot_index": 1
},
{
"name": "image",
"type": "IMAGE",
"link": 26,
"slot_index": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
24
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "ControlNetApply"
},
"widgets_values": [
0.75
]
},
{
"id": 7,
"type": "ControlNetApply",
"pos": [
1020,
300
],
"size": {
"0": 317.4000244140625,
"1": 98
},
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "conditioning",
"type": "CONDITIONING",
"link": 24,
"slot_index": 0
},
{
"name": "control_net",
"type": "CONTROL_NET",
"link": 8,
"slot_index": 1
},
{
"name": "image",
"type": "IMAGE",
"link": 7
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
9
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "ControlNetApply"
},
"widgets_values": [
0.75
]
},
{
"id": 13,
"type": "VAEDecode",
"pos": [
1740,
309
],
"size": [
320.81564830322213,
46
],
"flags": {},
"order": 11,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 15
},
{
"name": "vae",
"type": "VAE",
"link": 16,
"slot_index": 1
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
27
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "VAEDecode"
}
},
{
"id": 23,
"type": "SaveImage",
"pos": [
1738,
413
],
"size": [
317.3241088867178,
288.2958862304681
],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 27
}
],
"properties": {},
"widgets_values": [
"Avatar"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
219,
301
],
"size": [
398.1301946411129,
115.324566581726
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 11,
"slot_index": 0
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
23
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"looking at viewer, detailed face, open mouth, [smile], solo,eye-level angle, upper body, half body"
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 12,
"type": "CLIPTextEncode",
"pos": [
221,
469
],
"size": [
395.5002463378903,
111.47454442596415
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 14,
"slot_index": 0
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
13
],
"shape": 3
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"nsfw, worst quality, low quality, normal quality, monochrome, grayscale, closed mouth, extended tongue, sad, text, signature, username, artist name, animal, big mouth, leg, hand, missing body, ugly, blurry"
],
"color": "#322",
"bgcolor": "#533"
},
{
"id": 11,
"type": "CheckpointLoaderSimple",
"pos": [
-150,
307
],
"size": [
324.9937083129885,
98
],
"flags": {},
"order": 4,
"mode": 0,
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
12
],
"shape": 3,
"slot_index": 0
},
{
"name": "CLIP",
"type": "CLIP",
"links": [
11,
14
],
"shape": 3
},
{
"name": "VAE",
"type": "VAE",
"links": [
16
],
"shape": 3
}
],
"properties": {
"Node name for S&R": "CheckpointLoaderSimple"
},
"widgets_values": [
"meinamix_meinaV10.safetensors"
]
},
{
"id": 22,
"type": "LoadImage",
"pos": [
653,
461
],
"size": [
315,
314
],
"flags": {},
"order": 2,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
26
],
"shape": 3
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"ComfyUI_temp_nycbp_00001_.png",
"image"
]
},
{
"id": 1,
"type": "LoadImage",
"pos": [
1020,
468
],
"size": [
315,
314.00001525878906
],
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
7
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"ComfyUI_temp_rlaph_00001_s.png",
"image"
]
},
{
"id": 9,
"type": "KSampler",
"pos": [
1379,
305
],
"size": {
"0": 315,
"1": 262
},
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 12
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 9
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 13,
"slot_index": 2
},
{
"name": "latent_image",
"type": "LATENT",
"link": 18,
"slot_index": 3
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
15
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
291874885197794,
"randomize",
25,
7,
"dpmpp_2m",
"karras",
1
]
},
{
"id": 8,
"type": "ControlNetLoader",
"pos": [
1020,
190
],
"size": {
"0": 315,
"1": 58
},
"flags": {},
"order": 3,
"mode": 0,
"outputs": [
{
"name": "CONTROL_NET",
"type": "CONTROL_NET",
"links": [
8
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "ControlNetLoader"
},
"widgets_values": [
"control_v11p_sd15_normalbae_fp16.safetensors"
]
},
{
"id": 20,
"type": "ControlNetLoader",
"pos": [
665,
190
],
"size": {
"0": 315,
"1": 58
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "CONTROL_NET",
"type": "CONTROL_NET",
"links": [
22
],
"shape": 3
}
],
"properties": {
"Node name for S&R": "ControlNetLoader"
},
"widgets_values": [
"control_v11p_sd15_openpose_fp16.safetensors"
]
},
{
"id": 15,
"type": "EmptyLatentImage",
"pos": [
1377,
150
],
"size": {
"0": 315,
"1": 106
},
"flags": {},
"order": 5,
"mode": 0,
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
18
],
"shape": 3
}
],
"properties": {
"Node name for S&R": "EmptyLatentImage"
},
"widgets_values": [
512,
768,
1
]
}
],
"links": [
[
7,
1,
0,
7,
2,
"IMAGE"
],
[
8,
8,
0,
7,
1,
"CONTROL_NET"
],
[
9,
7,
0,
9,
1,
"CONDITIONING"
],
[
11,
11,
1,
10,
0,
"CLIP"
],
[
12,
11,
0,
9,
0,
"MODEL"
],
[
13,
12,
0,
9,
2,
"CONDITIONING"
],
[
14,
11,
1,
12,
0,
"CLIP"
],
[
15,
9,
0,
13,
0,
"LATENT"
],
[
16,
11,
2,
13,
1,
"VAE"
],
[
18,
15,
0,
9,
3,
"LATENT"
],
[
22,
20,
0,
19,
1,
"CONTROL_NET"
],
[
23,
10,
0,
19,
0,
"CONDITIONING"
],
[
24,
19,
0,
7,
0,
"CONDITIONING"
],
[
26,
22,
0,
19,
2,
"IMAGE"
],
[
27,
13,
0,
23,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}