diff --git a/.github/workflows/VRC-Asset-Release-And-Upload.yml b/.github/workflows/VRC-Asset-Release-And-Upload.yml
new file mode 100644
index 0000000..ac34bff
--- /dev/null
+++ b/.github/workflows/VRC-Asset-Release-And-Upload.yml
@@ -0,0 +1,84 @@
+name: VRC Asset Release and Listing Upload
+on:
+ push:
+ tags:
+ - "*.*.*"
+
+env:
+ ASSETS_PATH: .
+ RELEASE_PATH: Packages
+ ARTIFACT_DURATION: 30 # In days
+ UPLOAD_ENDPOINT: https://api.vrlabs.dev/packages/add
+ WORKFLOW_VERSION: 1.0.0
+
+jobs:
+ build:
+ runs-on: "ubuntu-latest"
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Check if package.json exists
+ run: |
+ if [ ! -f package.json ]; then
+ echo "package.json not found"
+ exit 1
+ fi
+
+ - name: Get package.json
+ id: get_package_json
+ run: |
+ {
+ echo 'package_json<<"""'
+ echo $(cat package.json)
+ echo '"""'
+ } >> $GITHUB_OUTPUT
+
+ - name: Get needed Data
+ id: job_data
+ run: |
+ version=$(echo "${{ github.ref_name }}")
+ version=$(echo $version | tr '[:upper:]' '[:lower:]')
+ echo "version=$version" >> $GITHUB_OUTPUT
+ major_version=$(echo $version | cut -d '.' -f 1)
+ minor_version=$(echo $version | cut -d '.' -f 2)
+ echo "major_version=$major_version" >> $GITHUB_OUTPUT
+ echo "minor_version=$minor_version" >> $GITHUB_OUTPUT
+ name="${{ fromJson(steps.get_package_json.outputs.package_json).name }}"
+ display_name="${{ fromJson(steps.get_package_json.outputs.package_json).displayName }}"
+ echo "package_name=$name" >> $GITHUB_OUTPUT
+ echo "package_display_name=$display_name" >> $GITHUB_OUTPUT
+
+ - name: Create Packages
+ id: create_packages
+ uses: VRLabs/VRCTools-Packaging-Action@v1
+ with:
+ path: '${{ env.ASSETS_PATH }}'
+ outputPath: '${{ env.RELEASE_PATH }}'
+ releaseUrl: 'https://github.com/${{ github.repository }}/releases/download/${{ steps.job_data.outputs.version }}/${{ steps.job_data.outputs.package_name }}-${{ steps.job_data.outputs.version }}.zip'
+ unityReleaseUrl: 'https://github.com/${{ github.repository }}/releases/download/${{ steps.job_data.outputs.version }}/${{ steps.job_data.outputs.package_name }}-${{ steps.job_data.outputs.version }}.unitypackage'
+ releaseVersion: '${{ steps.job_data.outputs.version }}'
+
+ - name: Create Release
+ uses: softprops/action-gh-release@v1
+ if: startsWith(github.ref, 'refs/tags/')
+ with:
+ name: "${{ steps.job_data.outputs.package_display_name }} ${{ steps.job_data.outputs.version }}"
+ files: |
+ ${{ steps.create_packages.outputs.unityPackagePath }}
+ ${{ steps.create_packages.outputs.vccPackagePath }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ SOURCE_TAG: ${{ steps.job_data.outputs.version }}
+
+ - name: Add server-json to Artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: server-json
+ path: ${{ steps.create_packages.outputs.serverPackageJsonPath }}
+ retention-days: ${{ env.ARTIFACT_DURATION }}
+
+ - name: Send package info to a server
+ run: |
+ curl -X POST -H "Content-Type: application/json" -H "Vrl-Api-Key: ${{ secrets.LISTINGS_API_KEY }}" --data @${{ steps.create_packages.outputs.serverPackageJsonPath }} ${{ env.UPLOAD_ENDPOINT }} || exit 0
+ shell: bash
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index df010af..6a98738 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2022 VRLabs
+Copyright (c) 2022 VRLabs LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/Media/Preview.png b/Media/Preview.png
new file mode 100644
index 0000000..23b6d2b
Binary files /dev/null and b/Media/Preview.png differ
diff --git a/Media/Web/Preview.webp b/Media/Web/Preview.webp
new file mode 100644
index 0000000..fa2b7cf
Binary files /dev/null and b/Media/Web/Preview.webp differ
diff --git a/Media/Web/Preview.webp.meta b/Media/Web/Preview.webp.meta
new file mode 100644
index 0000000..2a1d2ab
--- /dev/null
+++ b/Media/Web/Preview.webp.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0dcbf27b7dfd9274482e5ca8fc5fe904
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/README.md b/README.md
index e191b32..f742c66 100644
--- a/README.md
+++ b/README.md
@@ -1,28 +1,60 @@
+
+
# Dynamic Bones Stub
-
-[](https://unity3d.com/unity/whats-new/2019.4.31)
-[](https://vrchat.com/home/download)
-[](https://github.com/VRLabs/Dynamic-Bones-Stub/blob/main/LICENSE)
+
[](https://github.com/VRLabs/Dynamic-Bones-Stub/releases/latest)
+[](https://github.com/VRLabs/Dynamic-Bones-Stub/blob/main/LICENSE)
+[](https://unity3d.com/unity/whats-new/2019.4.31)
+[](https://vrchat.com/home/download)
+
+[](https://discord.vrlabs.dev/)
+[](https://patreon.vrlabs.dev/)
+
+Stub package for the [Dynamic Bones](https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743) components whitelisted by VRChat
+
+
-Stub package for the VRChat and CVR whitelisted Dynamic Bones components. This package strips off everything that is not serialized, and only serves to preserve the serialized information in imported prefabs/scenes.
+### ⬇️ [Download Latest Version](https://github.com/VRLabs/Dynamic-Bones-Stub/releases/latest)
+
+
+### 📦 [Add to VRChat Creator Companion](https://vrlabs.dev/packages?package=dev.vrlabs.dynamic-bones-stub)
+
+
+
+---
## How it works
-By having the same GUID as original scripts, it makes the scripts automatically reference the stubs. By using the same variable names, the serialized information gets transferred properly.
+* VRChat copies all component data into duplicate ones when your avatar is loaded.
+* By employing identical variable names in the stubs, the serialized information seamlessly transfers to the duplicate component.
-## Credit
+## Additional notes
-[Dreadrith](https://github.com/Dreadrith)
+* You cannot use any of the Dynamic Bone components in the editor, as they lack executable code.
+* Note that in VRChat, Dynamic Bones are automatically converted to PhysBones. If you have a recent Avatar VRChat SDK and this stub, you can use one of the following options to convert the Dynamic Bones into PhysBones and obtain the full functionality in the editor.
+ * The `Auto Fix` button in the VRChat SDK Build Control Panel
+ * `VRChat SDK -> Utilities -> Convert DynamicBones to PhysBones` from the [top toolbar](https://creators.vrchat.com/avatars/avatar-dynamics/physbones#manual-dynamic-bone-conversion)
+* For testing in the editor, if Dynamic Bones are essential, we highly recommend purchasing the full software from the [Unity Asset Store](https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743).
-## Downloads
+## Contributors
-You can grab the latest version of the Dynamic Bones Stub in [Releases](https://github.com/VRLabs/Dynamic-Bones-Stub/releases/latest).
+* [Dreadrith](https://github.com/Dreadrith)
## License
Dynamic Bones Stub is available as-is under MIT. For more information see [LICENSE](https://github.com/VRLabs/Dynamic-Bones-Stub/blob/main/LICENSE).
-## Contact us
+
+
+
+
+[

](https://vrlabs.dev "VRLabs")
+

+[

](https://discord.vrlabs.dev/ "VRLabs")
+

+[

](https://patreon.vrlabs.dev/ "VRLabs")
+

+[

](https://twitter.com/vrlabsdev "VRLabs")
+
+
-If you need help, our support channel is on [Discord](https://discord.vrlabs.dev).
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8c48807
--- /dev/null
+++ b/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "dev.vrlabs.dynamic-bones-stub",
+ "displayName": "Dynamic Bones Stub",
+ "version": "1.3.999",
+ "license": "MIT",
+ "unity": "2019.4",
+ "description": "Stub package for the Dynamic Bones components whitelisted by VRChat",
+ "author": {
+ "name": "VRLabs",
+ "email": "mail@vrlabs.dev",
+ "url": "https://vrlabs.dev"
+ },
+ "siteUrl": "https://github.com/VRLabs/Dynamic-Bones-Stub",
+ "vpmDependencies": {},
+ "legacyFolders": {
+ "Assets\\VRLabs\\Dynamic Bones Stub": "24380da05081e4d49a901e8269ea3b6d"
+ },
+ "unityPackageDestinationFolder": "Assets/VRLabs/Dynamic Bones Stub",
+ "vccRepoCategory": "essentials",
+ "media": {
+ "previewImage": "https://raw.githubusercontent.com/VRLabs/Dynamic-Bones-Stub/main/Media/Web/Preview.webp",
+ "previewGif": "https://raw.githubusercontent.com/VRLabs/Dynamic-Bones-Stub/main/Media/Web/Preview.webp"
+ },
+ "unityPackageDestinationFolderMetas": {
+ "Assets/VRLabs": "652a1ba5b00554143bc9a76307dbc4e8",
+ "Assets/VRLabs/Dynamic Bones Stub": "24380da05081e4d49a901e8269ea3b6d"
+ }
+}
\ No newline at end of file
diff --git a/package.json.meta b/package.json.meta
new file mode 100644
index 0000000..65260b6
--- /dev/null
+++ b/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 253bdf1c8958162428a51f4a1e352d68
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: