Compare commits
126
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b36619031 | ||
|
|
a245ee64a1 | ||
|
|
2a861c36a8 | ||
|
|
802b83a9d5 | ||
|
|
7b3843f250 | ||
|
|
7fe971db45 | ||
|
|
21eb23f467 | ||
|
|
41d04bfb76 | ||
|
|
ccd99520f8 | ||
|
|
b587802f6c | ||
|
|
2f38c8467c | ||
|
|
3039963272 | ||
|
|
34fb26d6fb | ||
|
|
cb8b6679da | ||
|
|
8422acfc89 | ||
|
|
c066eea984 | ||
|
|
ce1b4702e0 | ||
|
|
0818a6f1c7 | ||
|
|
80493fa7bc | ||
|
|
4dd87437a4 | ||
|
|
b1f562c8e8 | ||
|
|
c693166d98 | ||
|
|
976ddc8348 | ||
|
|
6cc075422b | ||
|
|
d2c2984555 | ||
|
|
e9ff1e8b64 | ||
|
|
b39bfc0693 | ||
|
|
486000d2b5 | ||
|
|
2907800373 | ||
|
|
e928630a7a | ||
|
|
71d066a8d6 | ||
|
|
3077a2dbae | ||
|
|
323967dc08 | ||
|
|
e4cfb86114 | ||
|
|
788596525e | ||
|
|
3ee3714664 | ||
|
|
cada51a729 | ||
|
|
b7961e025b | ||
|
|
abac0ed6aa | ||
|
|
ff1ed96a74 | ||
|
|
fb81ea509f | ||
|
|
9c7721bb76 | ||
|
|
dfdc97b27b | ||
|
|
07904311ff | ||
|
|
71f6c679b9 | ||
|
|
c121ff37cf | ||
|
|
3931d6c7ed | ||
|
|
71211782aa | ||
|
|
3979064eee | ||
|
|
6f973ecd93 | ||
|
|
acc52d905a | ||
|
|
7803ac467b | ||
|
|
0c20b73d11 | ||
|
|
b2eb735bf4 | ||
|
|
50929a29b8 | ||
|
|
5cb899d9e1 | ||
|
|
ab2b239690 | ||
|
|
7bf1de543f | ||
|
|
850598abe8 | ||
|
|
85b2de6303 | ||
|
|
6854f9b59b | ||
|
|
bb50059376 | ||
|
|
a0f055f0cd | ||
|
|
c5560a8084 | ||
|
|
ab7f660f95 | ||
|
|
6af9e0c62f | ||
|
|
545ec8a3be | ||
|
|
dc97bbc540 | ||
|
|
4432c680cc | ||
|
|
aef869e6d1 | ||
|
|
6810145f0b | ||
|
|
1a39c236ff | ||
|
|
b843eb7c10 | ||
|
|
a48648025d | ||
|
|
8897d5c430 | ||
|
|
9f96f7bff1 | ||
|
|
3510381894 | ||
|
|
f21426106b | ||
|
|
acbb05572c | ||
|
|
56000fbe45 | ||
|
|
4c3864ec4f | ||
|
|
99481e00c0 | ||
|
|
2f0a6f688f | ||
|
|
6133c6c9fb | ||
|
|
c5c080d896 | ||
|
|
f13829a975 | ||
|
|
535e77a0d9 | ||
|
|
035439e1fe | ||
|
|
83a7ce7899 | ||
|
|
0effef3fe2 | ||
|
|
a436e3846d | ||
|
|
83d6a73cfd | ||
|
|
5516baa5c2 | ||
|
|
744cb75552 | ||
|
|
722542e92a | ||
|
|
6e3820b502 | ||
|
|
6ce009d984 | ||
|
|
94874357cd | ||
|
|
d37f9a87f3 | ||
|
|
0729bf982e | ||
|
|
9f1bd85c6b | ||
|
|
082f96262b | ||
|
|
b3340d6085 | ||
|
|
c269a1e340 | ||
|
|
02a6b37971 | ||
|
|
18958a22b0 | ||
|
|
df96815448 | ||
|
|
de211a79e4 | ||
|
|
ae22626e6d | ||
|
|
5313370518 | ||
|
|
b9fe7cce14 | ||
|
|
ad6a2aea56 | ||
|
|
fdc1268ea3 | ||
|
|
b27b6094e2 | ||
|
|
3820d98942 | ||
|
|
723dbe4a71 | ||
|
|
d20d6c1b10 | ||
|
|
2cbf3da2d0 | ||
|
|
3e49f992aa | ||
|
|
f438146927 | ||
|
|
3391bae9ff | ||
|
|
c5b903b9d1 | ||
|
|
834b7abfdf | ||
|
|
a20b23488a | ||
|
|
be5f2c8d1b | ||
|
|
eb2fb63d24 |
@@ -1,44 +1,205 @@
|
||||
# avatar-graph-comfyui
|
||||
|
||||
This introduce a custom workflow on top of comfyui built for avatar-graph.
|
||||

|
||||
|
||||
A custom nodes module for **creating real-time interactive avatars** powered by blender bpy mesh api + Avatech Shape Flow runtime.
|
||||
|
||||
> **WARNING**
|
||||
> We are still making changes to the nodes and demo templates, please stay tuned.
|
||||
|
||||
# Demo
|
||||
|
||||
| <img src="https://github.com/avatechai/avatar-graph-comfyui/assets/73209427/12e2bfc6-438e-4d16-bead-9957ced3bae1" width="186"/><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="186"/><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="186"/><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="186"/><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="186"/><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="186"/><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="186"/><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="186"/><br>[Interact 👆](https://editor.avatech.ai/viewer?avatarId=f97fc5bb-93b0-4b02-bbc0-327dd41d0fc5) |
|
||||
|
||||
|
||||
# How to?
|
||||
- [Basic Workflow Template](#basic-workflow-template)
|
||||
- [Best Practices for image input](#image-preprocess-guide)
|
||||
- [Custom Nodes List](#custom-nodes)
|
||||
- [Shape Flow](#shape-flow)
|
||||
- [Installation](#installation)
|
||||
- [Development](#development)
|
||||
- [Join Discord 💬](https://discord.gg/WNtBYksDwF)
|
||||
|
||||
# Basic Workflow Template
|
||||
|
||||
### Creating an eye blink and lipsync avatar
|
||||
|
||||
> 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.
|
||||
>
|
||||
> [💡Make your character mouth open Guide](#mouth-open-guide-inpaint) [💡Generate new image Guide](#character-gen-prompting-guide)
|
||||
|
||||

|
||||
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.
|
||||
|
||||

|
||||
|
||||
</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```
|
||||
>
|
||||
>
|
||||
>
|
||||
> ### 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.
|
||||
>
|
||||
> 
|
||||
>
|
||||
> ### 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
|
||||

|
||||
|
||||
# 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 +218,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
@@ -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"]
|
||||
|
||||
@@ -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
@@ -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=''):
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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)"
|
||||
}
|
||||
@@ -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)"
|
||||
}
|
||||
@@ -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)"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"}]}}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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,)
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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', })
|
||||
}
|
||||
|
||||
|
||||
@@ -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)"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
class UV_Unwrap():
|
||||
@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]
|
||||
|
||||
bpy.context.view_layer.objects.active = target_object
|
||||
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='SELECT')
|
||||
|
||||
# perform a cube projection unwrap
|
||||
bpy.ops.uv.cube_project(cube_size=1.0, correct_aspect=True, clip_to_bounds=False, scale_to_bounds=True)
|
||||
|
||||
# bpy.ops.mesh.delete(type='FACE')
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
|
||||
|
||||
return ([target_object],)
|
||||
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"UV_Unwrap": UV_Unwrap
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"UV_Unwrap": "UV Unwrap"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -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,
|
||||
}),
|
||||
);
|
||||
}
|
||||
@@ -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
@@ -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(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
+2030
File diff suppressed because it is too large
Load Diff
+1
-2
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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,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)
|
||||
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
@@ -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 "
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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 "}
|
||||
@@ -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 "
|
||||
}
|
||||
@@ -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();
|
||||
});
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user