Compare commits

..

16 Commits

Author SHA1 Message Date
snipeslow 1f6b33c2a1 Update blender_manifest.toml 2026-05-20 23:31:24 -05:00
snipeslow f4593f6846 Windows and Linux only Wheels. 2026-05-20 23:28:03 -05:00
snipeslow 4106ff2c94 Update README.md 2026-05-20 18:20:02 -05:00
snipeslow 2ffb8fb1f1 Update blender_manifest.toml 2026-05-20 18:13:36 -05:00
snipeslow 78200ab935 Update blender_manifest.toml 2026-05-20 18:13:13 -05:00
snipeslow 0881ed3831 Upload files to "wheels" 2026-05-20 18:12:48 -05:00
snipeslow 3ce1bc2ab3 Update core/updater.py 2026-05-20 17:51:34 -05:00
RinaDev 63460cf5a2 Update README.md 2026-02-07 23:03:58 +01:00
Yusarina cde0457ee1 Bump version to 0.5.3 in blender_manifest.toml 2025-12-09 02:52:17 +00:00
Yusarina 4ff17a66fe Update Blender version requirements to 5.0 2025-12-09 02:33:04 +00:00
Yusarina 8222f8b24c Delete CHANGELOG_NON_ASCII_FIX.md 2025-12-09 02:31:02 +00:00
Yusarina 37b92ded6d Change allowed version series to 0.5 2025-11-29 22:52:13 +00:00
Yusarina fb470f19da Merge pull request #217 from Yusarina/Current
Fix garbled Japanese/Unicode text in armature and mesh dropdowns
2025-11-29 22:45:11 +00:00
Yusarina 843147db69 Fix garbled Japanese/Unicode text in armature and mesh dropdowns
- Add proper caching to EnumProperty callbacks to prevent encoding corruption
- Use ASCII-safe identifiers (ARM_/MESH_ + pointer) with Unicode display names
- Add get_mesh_from_identifier() helper for safe mesh retrieval
- Update visemes panel to use new mesh identifier system
- Ensure stable string objects prevent Blender RNA encoding issues
2025-11-29 22:44:26 +00:00
Yusarina fe2b0d50cb Merge pull request #216 from Yusarina/Current
Fix swapped operator IDs for Apply Pose as Rest/Shapekey buttons #211
2025-11-29 22:26:40 +00:00
Yusarina c4dca2455d Fix swapped operator IDs for Apply Pose as Rest/Shapekey buttons #211 2025-11-29 22:22:58 +00:00
15 changed files with 16 additions and 276 deletions
+6 -3
View File
@@ -6,6 +6,9 @@ We are aware the wiki is down and are working on a new one, please don't report
Avatar Toolkit is a modern, Blender addon designed to streamline the process of preparing 3D avatars for virtual platforms including VRChat, ChilloutVR, Resonite, and other similar applications. Avatar Toolkit is a modern, Blender addon designed to streamline the process of preparing 3D avatars for virtual platforms including VRChat, ChilloutVR, Resonite, and other similar applications.
# No longer maintained by neoneko, neoneko has ceased all operations.
# This fork is maintained by snipeslow to barely function as is. Good luck if you find this.
## What is Avatar Toolkit? ## What is Avatar Toolkit?
Avatar Toolkit simplifies the workflow for avatar creation and optimization by providing an all-in-one solution that: Avatar Toolkit simplifies the workflow for avatar creation and optimization by providing an all-in-one solution that:
- Automates complex optimization processes like mesh joining and vertex merging. - Automates complex optimization processes like mesh joining and vertex merging.
@@ -33,8 +36,8 @@ See everything Avatar Toolkit has ot offer [here](https://avatartoolkit.xyz/lega
## Requirements ## Requirements
1) Blender Version 1) Blender Version
- Blender 4.5 or newer is required - Blender 5.0 or newer is required
- Blender 4.5 is the current recommended version - Blender 5.0 is the current recommended version
2) Python Requirements 2) Python Requirements
- If using a custom Python installation with Blender, ensure NumPy is installed - If using a custom Python installation with Blender, ensure NumPy is installed
@@ -42,7 +45,7 @@ See everything Avatar Toolkit has ot offer [here](https://avatartoolkit.xyz/lega
3) Recommended Setup 3) Recommended Setup
- Download Blender directly from https://blender.org - Download Blender directly from https://blender.org
- Use Blender 4.5 for the best experience - Use Blender 5.0 for the best experience
#### Unfortunately, due to the increased number of people complaining to me (yes, we get DMs about this) that AT or CATS is broken when it's not, we are going to have to be a bit more strict about which Blender releases we will provide support for. #### Unfortunately, due to the increased number of people complaining to me (yes, we get DMs about this) that AT or CATS is broken when it's not, we are going to have to be a bit more strict about which Blender releases we will provide support for.
+3 -5
View File
@@ -3,7 +3,7 @@
schema_version = "1.0.0" schema_version = "1.0.0"
id = "avatar_toolkit" id = "avatar_toolkit"
version = "0.6.0" version = "0.5.5"
name = "Avatar Toolkit" name = "Avatar Toolkit"
tagline = "A modern tool for importing and optimizing models for VRChat, Resonite, and other similar games." tagline = "A modern tool for importing and optimizing models for VRChat, Resonite, and other similar games."
maintainer = "Team NekoNeo" maintainer = "Team NekoNeo"
@@ -16,10 +16,8 @@ license = [
] ]
wheels = [ wheels = [
"./wheels/lz4-4.4.5-cp311-cp311-macosx_11_0_arm64.whl", "./wheels/lz4-4.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"./wheels/lz4-4.4.5-cp311-cp311-macosx_10_9_x86_64.whl", "./wheels/lz4-4.4.5-cp313-cp313-win_amd64.whl"
"./wheels/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"./wheels/lz4-4.4.5-cp311-cp311-win_amd64.whl"
] ]
[permissions] [permissions]
-124
View File
@@ -174,130 +174,6 @@ physics_names: Dict[str, List[str]] = {
"breast_tip": ["胸先", "むねさき", "ブレストティップ", "breasttip"], "breast_tip": ["胸先", "むねさき", "ブレストティップ", "breasttip"],
} }
# MMD bone name patterns (for detection)
mmd_bone_patterns: List[str] = [
# Japanese bone names
'全ての親', 'センター', '上半身', '下半身', '', '',
'右腕', '左腕', '右ひじ', '左ひじ', '右手首', '左手首',
'右足', '左足', '右ひざ', '左ひざ', '右足首', '左足首',
'両目', '左目', '右目', '右肩', '左肩',
# English bone names (common in MMD exports)
'center', 'groove', 'waist', 'upperbody', 'upperbody2', 'lowerbody',
'neck', 'head',
'shoulder_r', 'shoulder_l', 'arm_r', 'arm_l',
'elbow_r', 'elbow_l', 'wrist_r', 'wrist_l',
'leg_r', 'leg_l', 'knee_r', 'knee_l',
'ankle_r', 'ankle_l', 'toe_r', 'toe_l',
# Mixed/Romanized patterns
'센터', 'グルーブ', 'ウエスト',
# Common MMD suffixes
'_r', '_l', '.r', '.l'
]
# MMD to Unity bone mapping
# Maps MMD bone names (after English translation) to Unity humanoid bone names
mmd_to_unity_bone_map: Dict[str, Optional[str]] = {
# Root and core
"ParentNode": None, # Remove this
"Center": "Hips",
"センター": "Hips",
"Groove": None, # Remove this
"グルーブ": None,
"Waist": None, # Will be merged into Hips
# Spine chain
"LowerBody": "Hips",
"下半身": "Hips",
"UpperBody": "Spine",
"上半身": "Spine",
"UpperBody2": "Chest",
"上半身2": "Chest",
"Neck": "Neck",
"": "Neck",
"Head": "Head",
"": "Head",
# Right leg
"RightLeg": "Right leg",
"右足": "Right leg",
"RightLegD": None, # Remove D variant
"RightKnee": "Right knee",
"右ひざ": "Right knee",
"RightAnkle": "Right ankle",
"右足首": "Right ankle",
"RightToe": "Right toe",
"右つま先": "Right toe",
# Left leg
"LeftLeg": "Left leg",
"左足": "Left leg",
"LeftLegD": None, # Remove D variant
"LeftKnee": "Left knee",
"左ひざ": "Left knee",
"LeftAnkle": "Left ankle",
"左足首": "Left ankle",
"LeftToe": "Left toe",
"左つま先": "Left toe",
# Right arm
"RightShoulder": "Right shoulder",
"右肩": "Right shoulder",
"RightArm": "Right arm",
"右腕": "Right arm",
"RightElbow": "Right elbow",
"右ひじ": "Right elbow",
"RightWrist": "Right wrist",
"右手首": "Right wrist",
# Left arm
"LeftShoulder": "Left shoulder",
"左肩": "Left shoulder",
"LeftArm": "Left arm",
"左腕": "Left arm",
"LeftElbow": "Left elbow",
"左ひじ": "Left elbow",
"LeftWrist": "Left wrist",
"左手首": "Left wrist",
# Cancel/Helper bones (remove these)
"WaistCancelRight": None,
"WaistCancelLeft": None,
"LegIKParentRight": None,
"LegIKParentLeft": None,
}
# Unity humanoid bone hierarchy
# Defines parent-child relationships for Unity standard
unity_bone_hierarchy: Dict[str, Optional[str]] = {
"Hips": None, # Root bone
"Spine": "Hips",
"Chest": "Spine",
"Neck": "Chest",
"Head": "Neck",
# Arms
"Left shoulder": "Chest",
"Left arm": "Left shoulder",
"Left elbow": "Left arm",
"Left wrist": "Left elbow",
"Right shoulder": "Chest",
"Right arm": "Right shoulder",
"Right elbow": "Right arm",
"Right wrist": "Right elbow",
# Legs
"Left leg": "Hips",
"Left knee": "Left leg",
"Left ankle": "Left knee",
"Left toe": "Left ankle",
"Right leg": "Hips",
"Right knee": "Right leg",
"Right ankle": "Right knee",
"Right toe": "Right ankle",
}
# Create reverse lookup dictionaries # Create reverse lookup dictionaries
reverse_shapekey_lookup: Dict[str, str] = {} reverse_shapekey_lookup: Dict[str, str] = {}
reverse_material_lookup: Dict[str, str] = {} reverse_material_lookup: Dict[str, str] = {}
-61
View File
@@ -735,67 +735,6 @@ class AvatarToolkitSceneProperties(PropertyGroup):
default=True default=True
) )
# MMD Conversion Properties
mmd_make_parent: BoolProperty(
name=t("MMD.make_armature_parent"),
description="Remove parent Empty object and make armature the main parent",
default=True
)
mmd_rename_armature: BoolProperty(
name=t("MMD.rename_to_armature"),
description="Rename the armature object to 'Armature'",
default=True
)
mmd_translate_names: BoolProperty(
name=t("MMD.translate_names"),
description="Translate Japanese names to English using MMD dictionary and translation services",
default=True
)
mmd_translate_bones: BoolProperty(
name=t("MMD.translate_bones"),
description="Translate bone names",
default=True
)
mmd_translate_materials: BoolProperty(
name=t("MMD.translate_materials"),
description="Translate material names",
default=True
)
mmd_translate_shapekeys: BoolProperty(
name=t("MMD.translate_shapekeys"),
description="Translate shape key names",
default=True
)
mmd_translate_objects: BoolProperty(
name=t("MMD.translate_objects"),
description="Translate object names",
default=True
)
mmd_restructure_bones: BoolProperty(
name=t("MMD.restructure_bones"),
description="Restructure bone hierarchy to Unity humanoid format (Hips, Spine, Chest, etc.)",
default=True
)
mmd_remove_twist_bones: BoolProperty(
name=t("MMD.remove_twist_bones"),
description="Remove twist bones",
default=True
)
mmd_remove_zero_weight_bones: BoolProperty(
name=t("MMD.remove_zero_weight_bones"),
description="Remove bones with zero or near-zero vertex weights",
default=False
)
# Translation System Properties # Translation System Properties
translation_service: EnumProperty( translation_service: EnumProperty(
name=t("Translation.service"), name=t("Translation.service"),
+3 -3
View File
@@ -15,12 +15,12 @@ from .addon_preferences import get_preference, get_current_version, save_prefere
from ..ui.main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME from ..ui.main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME
from typing import Dict, List, Tuple, Optional, Set, Any from typing import Dict, List, Tuple, Optional, Set, Any
GITHUB_REPO = "teamneoneko/Avatar-Toolkit" GITHUB_REPO = "snipeslow/Avatar-Toolkit"
# Define which version series this installation can update to # Define which version series this installation can update to
# For example: ["0.1"] means only look for 0.1.x updates # For example: ["0.1"] means only look for 0.1.x updates
# ["0.2", "0.3"] would look for both 0.2.x and 0.3.x # ["0.2", "0.3"] would look for both 0.2.x and 0.3.x
ALLOWED_VERSION_SERIES = ["0.6"] ALLOWED_VERSION_SERIES = ["0.5"]
is_checking_for_update: bool = False is_checking_for_update: bool = False
update_needed: bool = False update_needed: bool = False
@@ -158,7 +158,7 @@ def get_github_releases() -> bool:
try: try:
ssl._create_default_https_context = ssl._create_unverified_context ssl._create_default_https_context = ssl._create_unverified_context
with request.urlopen(f'https://api.github.com/repos/{GITHUB_REPO}/releases') as url: with request.urlopen(f'https://git.snipeslow.dev/api/v1/repos/{GITHUB_REPO}/releases') as url:
data = json.loads(url.read().decode()) data = json.loads(url.read().decode())
except error.URLError: except error.URLError:
print('URL ERROR') print('URL ERROR')
+1 -74
View File
@@ -1,7 +1,7 @@
{ {
"authors": ["Avatar Toolkit Team"], "authors": ["Avatar Toolkit Team"],
"messages": { "messages": {
"AvatarToolkit.label": "Avatar Toolkit (Alpha 0.6.0)", "AvatarToolkit.label": "Avatar Toolkit (Alpha 0.5.2)",
"AvatarToolkit.desc1": "Avatar Toolkit is in Early Access there", "AvatarToolkit.desc1": "Avatar Toolkit is in Early Access there",
"AvatarToolkit.desc2": "will be issues, if you find any issues,", "AvatarToolkit.desc2": "will be issues, if you find any issues,",
"AvatarToolkit.desc3": "please report it on our Github.", "AvatarToolkit.desc3": "please report it on our Github.",
@@ -601,79 +601,6 @@
"VRM.remove_root": "Remove Root Bone", "VRM.remove_root": "Remove Root Bone",
"VRM.remove_root_desc": "Remove unnecessary VRM root bone and make Hips the root bone", "VRM.remove_root_desc": "Remove unnecessary VRM root bone and make Hips the root bone",
"MMD.panel.label": "MMD Converter",
"MMD.converter.title": "MMD Armature Converter",
"MMD.no_armature_selected": "No armature selected",
"MMD.select_armature_to_convert": "Select an armature to convert",
"MMD.armature_name": "Armature: {name}",
"MMD.armature_detected": "MMD armature detected",
"MMD.no_mmd_bones_detected": "No MMD bones detected",
"MMD.not_mmd_armature": "Selected armature does not appear to be MMD format",
"MMD.make_armature_parent": "Make Armature Main Parent",
"MMD.rename_to_armature": "Rename to 'Armature'",
"MMD.translate_names": "Translate Names to English",
"MMD.translate_bones": "Bones",
"MMD.translate_materials": "Materials",
"MMD.translate_shapekeys": "Shape Keys",
"MMD.translate_objects": "Objects",
"MMD.restructure_bones": "Restructure to Unity Format",
"MMD.bone_cleanup": "Bone Cleanup Options:",
"MMD.remove_ik_bones": "Remove IK Bones",
"MMD.remove_twist_bones": "Remove Twist Bones",
"MMD.remove_zero_weight_bones": "Remove Zero Weight Bones",
"MMD.translation_options": "Translation Options:",
"MMD.convert_armature_button": "Convert MMD Armature",
"MMD.convert_armature.label": "Convert MMD Armature",
"MMD.convert_armature.desc": "Convert MMD armature to standard Blender format",
"MMD.conversion_info.title": "Conversion Info:",
"MMD.conversion_info.removes_parent": "• Removes parent Empty object",
"MMD.conversion_info.renames_armature": "• Renames armature to 'Armature'",
"MMD.conversion_info.restructures_bones": "• Converts to Unity bone structure (Hips/Spine/Chest)",
"MMD.conversion_info.removes_ik_bones": "• Removes IK (Inverse Kinematics) bones",
"MMD.conversion_info.removes_twist_bones": "• Removes twist bones",
"MMD.conversion_info.removes_zero_weight_bones": "• Removes bones with zero vertex weights",
"MMD.conversion_info.maintains_hierarchy": "• Maintains object hierarchy",
"MMD.conversion_info.translates_names": "• Translates Japanese names to English",
"MMD.detection_failed.title": "MMD Detection Failed:",
"MMD.detection_failed.not_mmd_format": "• Selected armature is not MMD format",
"MMD.detection_failed.need_mmd_bones": "• Need at least 5 MMD bones detected",
"MMD.detection_failed.check_bone_names": "• Check armature bone names",
"MMD.error.invalid_armature": "Invalid armature object",
"MMD.error.not_mmd_armature": "Armature does not appear to be MMD format",
"MMD.error.rename_failed": "Failed to rename armature: {error}",
"MMD.armature_already_root": "Armature already has no parent",
"MMD.armature_already_named": "Armature is already named 'Armature'",
"MMD.parent_removed_and_reparented": "Removed parent '{parent_name}' and reparented {count} objects to armature",
"MMD.parent_unlinked_and_reparented": "Unlinked from parent '{parent_name}' and reparented {count} objects",
"MMD.parent_unlinked": "Unlinked armature from parent '{parent_name}'",
"MMD.armature_renamed": "Renamed armature from '{old_name}' to '{new_name}'",
"MMD.armature_renamed_with_suffix": "Renamed armature from '{old_name}' to '{new_name}' (name collision)",
"MMD.conversion_complete": "MMD armature conversion completed successfully",
"MMD.translation_starting": "Starting name translation...",
"MMD.bones_translated": "Translated {count} bones",
"MMD.bones_failed": "Failed to translate {count} bones",
"MMD.materials_translated": "Translated {count} materials",
"MMD.materials_failed": "Failed to translate {count} materials",
"MMD.shapekeys_translated": "Translated {count} shape keys",
"MMD.shapekeys_failed": "Failed to translate {count} shape keys",
"MMD.objects_translated": "Translated {count} objects",
"MMD.objects_failed": "Failed to translate {count} objects",
"MMD.translation_complete": "Translation complete: {total} items translated",
"MMD.restructure_starting": "Restructuring bones to Unity format...",
"MMD.bones_restructured": "Restructured {count} bones to Unity format",
"MMD.bones_removed": "Removed {count} unnecessary bones",
"MMD.bones_reparented": "Reparented {count} bones",
"MMD.restructure_failed": "Bone restructuring failed: {error}",
"MMD.ik_bones_removed": "Removed {count} IK bones",
"MMD.no_ik_bones_found": "No IK bones found to remove",
"MMD.ik_removal_failed": "IK bone removal failed: {error}",
"MMD.twist_bones_removed": "Removed {count} twist bones",
"MMD.no_twist_bones_found": "No twist bones found to remove",
"MMD.twist_removal_failed": "Twist bone removal failed: {error}",
"MMD.zero_weight_bones_removed": "Removed {count} zero weight bones",
"MMD.no_zero_weight_bones_found": "No zero weight bones found to remove",
"MMD.zero_weight_removal_failed": "Zero weight bone removal failed: {error}",
"Translation.label": "Translation", "Translation.label": "Translation",
"Translation.service": "Translation Service", "Translation.service": "Translation Service",
"Translation.service_desc": "Choose the translation service to use", "Translation.service_desc": "Choose the translation service to use",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"authors": ["Avatar Toolkit Team"], "authors": ["Avatar Toolkit Team"],
"messages": { "messages": {
"AvatarToolkit.label": "アバターツールキット (アルファ 0.6.0)", "AvatarToolkit.label": "アバターツールキット (アルファ 0.5.2)",
"AvatarToolkit.desc1": "アバターツールキットは早期アクセス中であり、", "AvatarToolkit.desc1": "アバターツールキットは早期アクセス中であり、",
"AvatarToolkit.desc2": "問題が発生する可能性があります。問題を見つけた場合は、", "AvatarToolkit.desc2": "問題が発生する可能性があります。問題を見つけた場合は、",
"AvatarToolkit.desc3": "GitHubで報告してください。", "AvatarToolkit.desc3": "GitHubで報告してください。",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"authors": ["Avatar Toolkit Team"], "authors": ["Avatar Toolkit Team"],
"messages": { "messages": {
"AvatarToolkit.label": "아바타 툴킷 (알파 0.6.0)", "AvatarToolkit.label": "아바타 툴킷 (알파 0.5.2)",
"AvatarToolkit.desc1": "아바타 툴킷은 초기 액세스 단계에 있으므로", "AvatarToolkit.desc1": "아바타 툴킷은 초기 액세스 단계에 있으므로",
"AvatarToolkit.desc2": "문제가 있을 수 있습니다. 문제를 발견하시면", "AvatarToolkit.desc2": "문제가 있을 수 있습니다. 문제를 발견하시면",
"AvatarToolkit.desc3": "Github에 보고해 주세요.", "AvatarToolkit.desc3": "Github에 보고해 주세요.",
+1 -4
View File
@@ -14,8 +14,7 @@ VISEMES_ORDER = 6
EYE_TRACKING_ORDER = 7 EYE_TRACKING_ORDER = 7
TEXTURE_ATLAS_ORDER = 8 TEXTURE_ATLAS_ORDER = 8
VRM_UNITY_ORDER = 9 VRM_UNITY_ORDER = 9
MMD_ORDER = 10 SETTINGS_ORDER = 10
SETTINGS_ORDER = 11
# Panel open/closed by default # Panel open/closed by default
PANELS_OPEN_BY_DEFAULT = { PANELS_OPEN_BY_DEFAULT = {
@@ -28,7 +27,6 @@ PANELS_OPEN_BY_DEFAULT = {
'EYE_TRACKING': True, 'EYE_TRACKING': True,
'TEXTURE_ATLAS': True, 'TEXTURE_ATLAS': True,
'VRM_UNITY': True, 'VRM_UNITY': True,
'MMD': True,
'SETTINGS': True, 'SETTINGS': True,
'TRANSLATION': True, 'TRANSLATION': True,
} }
@@ -46,7 +44,6 @@ def get_panel_order(panel_name: str) -> int:
'eye_tracking': EYE_TRACKING_ORDER, 'eye_tracking': EYE_TRACKING_ORDER,
'texture_atlas': TEXTURE_ATLAS_ORDER, 'texture_atlas': TEXTURE_ATLAS_ORDER,
'vrm_unity': VRM_UNITY_ORDER, 'vrm_unity': VRM_UNITY_ORDER,
'mmd': MMD_ORDER,
'settings': SETTINGS_ORDER, 'settings': SETTINGS_ORDER,
} }
return order_map.get(panel_name.lower(), 99) return order_map.get(panel_name.lower(), 99)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.