diff --git a/website/docs/addon_aftereffects_artist.md b/website/docs/addon_aftereffects_artist.md index 5c1059b0..9896d6a7 100644 --- a/website/docs/addon_aftereffects_artist.md +++ b/website/docs/addon_aftereffects_artist.md @@ -6,6 +6,8 @@ sidebar_label: After Effects import ReactMarkdown from "react-markdown"; import versions from '@site/docs/assets/json/Ayon_addons_version.json' +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; {versions.Aftereffects_Badge} @@ -20,16 +22,48 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' - [Publish](artist_tools_publisher) - [Manage](artist_tools_inventory) -## Setup +## AE Extension installation -To install the extension, download, install [Anastasyi's Extension Manager](https://install.anastasiy.com/). Open Anastasyi's Extension Manager and select AfterEffects in menu. Then go to `{path to pype}hosts/aftereffects/api/extension.zxp`. +:::info +Once your admin has activated `After Effects` in the production bundle, you need to run the AYON launcher at least once. This allows the launcher to download the addon to the correct location on your computer. +After that, you can continue with the installation instructions for the After Effects extension. +::: + + + + + +1. Use your favorite app to install extensions. We recommend using [Anastasyi's Extension Manager](https://install.anastasiy.com/). +2. Locate and install the `extension.zxp` file. You can find it in the `AppData` folder, typically at `c:\Users\YOUR_USER\AppData\Local\Ynput\AYON\addons\aftereffects_X.X.X\ayon_aftereffects\api`. + +:::tip +You can quickly navigate to the local app data using the environment variable shortcut: `%LOCALAPPDATA%`. For example, using `%LOCALAPPDATA%\Ynput\AYON\addons` as path to see your installed addons. +::: + + + + + +1. Use your favorite app to install extensions. +2. Locate and install the `extension.zxp` file. You can find it in the user data folder, typically at `~/.local/share/Ynput/AYON/addons/aftereffects_X.X.X/ayon_aftereffects/api`. + + + + -(Current location will be most likely in artist `AppData`, on Windows it would be something like `c:\Users\YOUR_USER\AppData\Local\Ynput\AYON\addons\core_X.X.X\ayon_core\hosts\aftereffects\api`. -On Linux look in `~/.local/share/Ynput/AYON/addons`, on Mac `~/Library/Application Support/Ynput/AYON/addons`) -This location is temporary until full separation of addons is implemented. Artist must start Tray at least once for Ayon server to populate this location.) +1. Use your favorite app to install extensions. We recommend using [Anastasyi's Extension Manager](https://install.anastasiy.com/). +2. Locate and install the `extension.zxp` file. You can find it in the `Application Support` folder, typically at `~/Library/Application Support/Ynput/AYON/addons/aftereffects_X.X.X/ayon_aftereffects/api`. + -Drag extension.zxp and drop it to Anastasyi's Extension Manager. The extension will install itself. + ## Implemented functionality diff --git a/website/docs/addon_aquarium_admin.md b/website/docs/addon_aquarium_admin.md new file mode 100644 index 00000000..ace1c073 --- /dev/null +++ b/website/docs/addon_aquarium_admin.md @@ -0,0 +1,107 @@ +--- +id: addon_aquarium_admin +title: Aquarium +sidebar_label: Aquarium +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.Aquarium_Badge} + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +![Aquarium addon for Ayon](assets/aquarium/aquarium-ayon-logo.png) + +## Introduction + +Aquarium addon, allow you to: + + - Create new Ayon project using existing Aquarium's data + - Create new Aquarium project using existing Ayon's data + - Keep your Ayon project in sync with Aquarium, using Ayon services system and Aquarium's events. + - Publish media + + +:::info +In the future, new feature will be added, based on your requests. Feel free to [reach us](https://support@fatfi.sh). +::: + +We are open to receive new pull request (PR). Follow our [developer documentation to start](addon_aquarium_developer). + + +## Configuring addon + +First, you need to install the addon. It's available from Ayon market or you can install it from its repository. For that follow our [developer documentation](addon_aquarium_developer) or [Ayon's manual installation guide](admin_server_installing_addons) + +### Getting Aquarium bot + +Synchronizing Ayon and Aquarium rely on a specific account type called Bot. + +Go into your Aquarium `project settings`, `connectors` tab and select `Ayon`. + +![Enable Ayon connector in Aquarium](assets/aquarium/ayon-connector-enable.png) + +Select an existing bot, or create a dedicated bot for this project + +![Select or create a bot](assets/aquarium/ayon-connector-bot.png) + +When you create a bot, a `bot secret` is created. It's like a password, but for bot. So keep it safe ! It won't be shown twice. If you lost that secret, you will need to generate a new one. + +### Setting Ayon Secrets + +Go back to Ayon. From your `Studio settings`, select your `Secret` tab, and create two new secrets : + + - One to store your bot_key + - Another one to store your bot_secret + +Choose the name you want, but if you don't have any idea, `aq_bot_key` and `aq_bot_secret` is a good start 👍 + +![Ayon secrets](assets/aquarium/ayon-secrets.png) + +### Aquarium addon Studio settings configuration + +Once secrets are configured then Aquarium addon can be set. In your `Studio settings` or `Project settings` is you want a specific configuration only for the selected project, choose your `Aquarium` addon, and fill the inputs. + +:::tip +Don't forget to select the correct bundle version on which you want to set this configuration. +::: + +![Aquarium addon settings](assets/aquarium/aquarium-addon-settings.png) + +Here is the detail of each option: + +- **Aquarium URL** is your specific Aquarium URL you use to access to. +- **Aquarium domain** is specific for Fatfish Lab developers, or customers who run Aquarium in a non DNS environment. +- **Service settings** is all the setting dedicated to Aquarium services + - Select the **Bot key** secret you want to use + - Select the **Bot secret** you want to use +- **Sync settings** is all the settings for synching data + - **Default sync info** regroup all default data transformation. It's used to transform Aquarium data to Ayon. Those settings are optional, if they are not provided, the addon will try to translate it for you. + - **Tasks** is for translating Aquarium's tasks to Ayon's tasks names + - **Statuses** is for transforming Aquarium's tasks statuses to Ayon's statuses + + +## Starting Ayon Aquarium addon service + +Aquarium addon rely on two services to synchronize your projects: + +- Leecher, responsible to listening Aquarium events, and store them into Ayon's database for later process +- Processor, responsible to processing specific Aquarium events, stored in Ayon's database. The processor "only" transform the data and then pass it to the Addon API. + +This requires to ASH to be working so the service can be attached to it. In main menu select Services. + +![Ayon services menu](assets/aquarium/ayon-services.png) + +Use **New service** button. + +![Spawn new service](assets/aquarium/ayon-spawn-service.png) + +Once ASH is working then worker options should be offering any available workers. Find `Aquarium` addon name and the same version which is used in your bundle. For easier late recognition, make sure to prefix your service with `aquarium_` or just `aq_`. Hit **Spawn** and wait for status of service to be set to green *Running*. + +:::info +Don't forget to repeat the same action for the processor +::: \ No newline at end of file diff --git a/website/docs/addon_aquarium_artist.md b/website/docs/addon_aquarium_artist.md new file mode 100644 index 00000000..67f96791 --- /dev/null +++ b/website/docs/addon_aquarium_artist.md @@ -0,0 +1,38 @@ +--- +id: addon_aquarium_artist +title: Aquarium for artists +sidebar_label: Artists +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.Aquarium_Badge} + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +![Aquarium addon for Ayon](assets/aquarium/aquarium-ayon-logo.png) + +## Introduction + +The Aquarium addon integration allow you to + + - Authenticate the user + - Publish media + +:::tip We need you +You are looking for other integrations or feature ? [Contact our team](mailto:support@fatfi.sh) to exchange about your need ! +::: + +## Signing to your Aquarium account + +From the launcher tray menu, click on Aquarium to show the sign-in form. Enter your Aquarium credential here. + +![Ayon launcher sign-in](assets/aquarium/ayon-launcher-signin.png) + +:::info +This form will automatically open when the launcher start and the user is not login +::: \ No newline at end of file diff --git a/website/docs/addon_aquarium_developer.md b/website/docs/addon_aquarium_developer.md new file mode 100644 index 00000000..44414c87 --- /dev/null +++ b/website/docs/addon_aquarium_developer.md @@ -0,0 +1,168 @@ +--- +id: addon_aquarium_developer +title: Aquarium +sidebar_label: Aquarium +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.Aquarium_Badge} + + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +![Aquarium addon for Ayon](assets/aquarium/aquarium-ayon-logo.png) + +## Introduction + +Welcome in the developer documentation of Aquarium addon and thanks for looking into it. + +This documentation is here to provide information on : + +- [How this code is structured](#code-structure) ? +- [How to setup your developer environment](#developer-environment) ? + +:::info +Disclaimer: We are new developers into Ayon's ecosystem. +The following documentation might require some improvements and we may have missed steps. +Feel free to update this file or directly reach us at [support@fatfi.sh](mailto:support@fatfi.sh) +::: + +## Code structure + +This addon is composed by 3 main parts: + +- [Client](#client) +- [Server](#server) + - API + - Frontend +- [Services](#services) + - Leecher + - Processor + +### Directory + +#### Client + +Client code is used in the [Ayon Launcher](https://github.com/ynput/ayon-launcher), the AYON pipeline desktop application. + +:::info +The client integration is not finished yet. +::: + +This client integration allow you to + + - Authenticate the user + - Publish media + +#### Server + +Python server-side part of the addon. It's mainly used to declare specific addon API endpoints, used by the leecher and processor services to keep your data in sync. + +It's also responsible to declare specific addon settings, in your Ayon server and project settings. + +##### Frontend + +This folder is used to provide a web UI in your Ayon settings to pair projects between Ayon and Aquarium and also to trigger a full project sync. + +#### Services + +Syncing data between Ayon and Aquarium relies on [Ayon services system](./dev_event_system). + +This addon use two services: + +- **Leecher** + - It's listening Aquarium's events, and store them into Ayon database for async processing. +- **Processor** + - It's looking for specific Aquarium events in Ayon's database and process them to transform data into compatible Ayon's structure and send request to addon server API endpoints to interact with the server. + +## Developer environment + +### Requirements + +You will need to clone several Ayon repositories in order to run everything locally: + +- You need to [install Docker](https://docs.docker.com/engine/install/) first. +- [Ayon Docker](https://github.com/ynput/ayon-docker) +- [Ayon Core](https://github.com/ynput/ayon-core) + - You can clone this one, into `ayon-docker/addons/core` folder. Here is the steps : + 2. From the `core` folder execute this command: + - `git clone ssh://git@github.com:ynput/ayon-core.git dev` + - This command will clone the repository and rename it `dev`, in order to follow [Ayon addon directory structure](https://ayon.ynput.io/docs/admin_server_installing_addons#directory-structure) +- [Ayon dependencies](https://github.com/ynput/ayon-dependencies-tool) +- [Aquarium addon](https://github.com/ynput/ayon-aquarium) + - You can clone this one, into `ayon-docker/addons` folder. Here is the steps : + 1. Create a folder `ayon-aquarium` in `ayon-docker/addons` folder + 2. From the `ayon-aquarium` folder execute this command: + - `git clone ssh://git@github.com:ynput/ayon-aquarium.git dev` + - This command will clone the repository and rename it `dev`, in order to follow [Ayon addon directory structure](https://ayon.ynput.io/docs/admin_server_installing_addons#directory-structure) + +### Optional requirements + +If you are looking for Python type checking, you will need extra steps: + +1. Clone [Ayon Backend](https://github.com/ynput/ayon-backend) repository +2. Clone [Aquarium python API](https://github.com/fatfish-lab/aquarium-python-api) +3. Create a new pyenv dedicated for development `pyenv virtualenv ayondevaquarium` using python 3.10.12 +4. Enable your pyenv `pyenv shell ayondevaquarium` and/or select this pyenv in your IDE. +5. Install dependencies from your local repositories + 1. `python -m pip install -e /path/to/aquarium-python-api` + 2. `python -m pip install -e /path/to/ayon-backend` + +### Setup your dev environment + +#### 1. Start Ayon + +Start your Ayon instances, from the Ayon Docker repository, using the command `docker compose up --build`. For a more precise steps, check out the [repository README file](https://github.com/ynput/ayon-docker). + +#### 2. Create a service user + +To interact with Ayon server, we need to create a service User. + +1. On your Ayon server, create a service user from `Studio settings` > `Users` tab > `Add new user`. Choose `Service` in the access level section. +1. On the newly created Service User, generate an API Key. + 1. Keep that API key, we will use it later. + +#### 3. Upload addon to Ayon + +1. From your `ayon-aquarium` folder, execute the file `create_package.py` +2. Locate the `.zip` file created in the new folder `package` +3. From Ayon server web interface, go to `Studio settings` > `Bundles` tab. +4. Click on the button `Install addon` and upload your previous `.zip` file. +5. Restart your Ayon server + +#### 4. Create a dev bundle + +1. From the `Studio settings` > `Bundles` tab, create a new bundle `aquarium-dev` (choose the name you want) +2. Assign your self as a developer on this bundle +3. Locate `aquarium` line in the addon list, and select the version where you have a `+git` at the end. +4. Enable addon directory and paste the location of the client folder `ayon-docker/addons/ayon-aquarium/dev/client` +5. Locate `core` line in the addon list, and select the version where you have a `+git` at the end. +6. Enable addon directory and paste the location of the client folder `ayon-docker/addons/core/dev/client` +7. Don't forget to save your dev bundle by clicking on the top right button `Save bundle` + +#### 5. Build Ayon dependencies + +1. From the Ayon dependencies repository folder, copy the file `example_env` as `.env` file. +2. Edit this file and add your local Ayon dev server URL and your previously generated service API key. +3. Run the command `./start install` +4. Run the command `./start create -b aquarium-dev` (Use the name of the previously bundle you created) + 1. This command will create and upload the dependencies to your Ayon server + +#### 6. Update bundle dependencies + +1. From the `Studio settings` > `Bundles` tab, select your `aquarium-dev` bundle. +2. In the right panel, locate the section `Dependency Packages` +3. Edit dependencies of your OS to select the latest upload dependencies + +--- + +Congratulations, you are now good to go developing ! 🎉 + +:::tip +Don't forget to restart your Ayon server if you work on the server part, it's the only way to take your modification in consideration. +::: \ No newline at end of file diff --git a/website/docs/addon_aquarium_manager.md b/website/docs/addon_aquarium_manager.md new file mode 100644 index 00000000..7b766339 --- /dev/null +++ b/website/docs/addon_aquarium_manager.md @@ -0,0 +1,102 @@ +--- +id: addon_aquarium_manager +title: Aquarium for managers +sidebar_label: Project manager +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.Aquarium_Badge} + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +![Aquarium addon for Ayon](assets/aquarium/aquarium-ayon-logo.png) + +:::info Requirements +Don't forget to [setup and configure your addon](addon_aquarium_admin) before being able to use it. +::: + +:::danger Only for Ayon managers +All the following information, are only available for Ayon users flag at least manager access level. If a "standard" user try to click on button, the server will raise a `Forbidden 403` error. +::: + +## Pairing projects + +Once your Aquarium addon is enabled on a production bundle, a new tab will appear : `Aquarium`. If you are in the development environment, you need to start it from your computer. Check our [developer documentation](addon_aquarium_developer.md). + +![Aquarium sync interface](assets/aquarium/aquarium-sync.png) + +This interface shows you all your Ayon and Aquarium active projects. You can see the state of each projects : + +- [**Create on Ayon**](#create-on-ayon), mean that the project exists only on Aquarium +- [**Create on Aquarium**](#create-on-aquarium), mean that the project exists only on Ayon +- [**Sync on Ayon**](#sync-to-ayon), mean that the project is paired with Aquarium + +### Create on Ayon + +Use the button to trigger the creation of a new Ayon project, based on Aquarium's data. + +![Create on Ayon](assets/aquarium/create-on-ayon.png) + +Use the form to provide you Ayon `project name` and `project code`. The addon will provide by default a name and code compatible with Ayon naming convention. + +Creating a project with this tools, will do multiple things : + +- Ensuring that the project doesn't exists yet +- Storing Aquarium project._key in new Ayon's project data +- Gathering Aquarium's project data to create a project anatomy +- Trigger a full project to get all your compatible items in Ayon (Library, Asset, Episode, Sequence, Shot and Task) + +If you try to create a project, with the same name, the addon will ask you if you want to pair projects together instead of creating it. + +![Pair to Ayon project](assets/aquarium/pair-to-ayon.png) + +:::warning +If the project is already paired with another Aquarium project, you won't be able to pair it. Use the `Unpair` button first. +::: + +### Create on Aquarium + +Use this button to trigger the creation of a new Aquarium project, based on Ayon's data. + +![Create on Aquarium](assets/aquarium/create-on-aquarium.png) + +Clicking on the button will : + +- Gather your Ayon hierarchy +- Generate a compatible JSON file with the project, templates, entities and tasks +- Upload that JSON file to Aquarium + +:::info +This process is asynchronous. So if your Ayon project is really big, the import will take few minutes. For now, the only way to track the completion of the import, is to use Aquarium API, to list all the jobs of your bot. + +In a next release, we will provide an interface from Ayon, to display the progression. Feel free to [reach us](mailto:support@fatfi.sh) if you are interested or if you need assistance. + +::: + + +### Sync to Ayon + +Use this button to trigger a full project sync. We provide an interface for you to be able to track the progression of the synchronization. + +![Sync to ayon progression](assets/aquarium/sync-to-ayon.png) + +Clicking on the `Sync to Ayon` button will: + +- Create an event into Ayon database so sync can be processed by the processor service +- The processor will: + - Get Aquarium items + - "Ayonise" Aquarium's item + - Create or update entities in Ayon + +Next to the Sync to Ayon button, you have a red button. This button is used to un-pair projects from each other. + +![Unpair project](assets/aquarium/unpair-projects.png) + +:::info +No data will be deleted or trashed ! Technically it's just an update on your project's data : we remove the `aquariumProjectKey` in Ayon and Aquarium. +::: \ No newline at end of file diff --git a/website/docs/addon_blender_admin.md b/website/docs/addon_blender_admin.md index 3558d97a..f730529d 100644 --- a/website/docs/addon_blender_admin.md +++ b/website/docs/addon_blender_admin.md @@ -20,7 +20,7 @@ Blender integration requires to use **PySide2** module inside blender. Module is ### How to install :::info Permissions -This step requires Admin persmission. +This step requires Admin permission. ::: -## AYON global tools +Once you **launch Blender** via AYON toolset (e.g. **using Launcher**) you will be introduced to **AYON Menu** present in the menu header which is also a clear indication of running Blender using AYON. + +![Blender AYON Menu](assets/blender_ayon.png) + +:::tip +Before starting to use the Blender AYON integration, please check the following user documentation sections to fully understand the core concepts of the AYON toolset and what it offers you as a user, as you will use those tools very frequently. +::: + +## AYON Tools - [Work Files](artist_tools_workfiles) - [Create](artist_tools_creator) @@ -22,90 +30,121 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' ## Working with AYON in Blender -AYON is here to ease you the burden of working on project with lots of -collaborators, worrying about naming, setting stuff, browsing through endless -directories, loading and exporting and so on. To achieve that, AYON is using -concept of being _"data driven"_. This means that what happens when publishing -is influenced by data in scene. This can by slightly confusing so let's get to -it with few examples. - +AYON streamlines collaborative projects, simplifying tasks like naming conventions, configurations, and file navigation. It employs a "data-driven" approach, meaning the data within a scene dictates the publishing process. To clarify, let's explore some examples. ## Setting scene data -Blender settings concerning framerate, resolution and frame range are handled -by AYON. If set correctly in Ftrack, Blender will automatically set the -values for you. +Blender settings concerning **frame rate**, **resolution** and **frame range** are fully **handled by AYON**. +If set correctly on the AYON server or in Ftrack, Blender will automatically set the values for you. + +:::tip +You can force a specific resolution and frame range/fps at any time using **Set Frame Range** and **Set Resolution** actions sitting in the AYON menu. +::: + +## Dealing with workfiles (scene save/scene open) + +When wanting to save your Blender scene aka `Workfile`, instead of using regular actions `File` > `Save As` + +...use `AYON` > `Workfiles` instead. +It will make saving, naming and versioning your file a breeze... -## Publishing models +![Blender AYON Workfiles](assets/blender_save.gif) + +You will use `Workfiles` tool not just for saving your work but for all `.blend` file operations like `File` > `Open` too. + +Just navigate to `AYON` > `Workfiles` > `Open` instead. + +For more details and what options it offers navigate to [Work Files](artist_tools_workfiles) user's docs section. + + +## Publishing + +Publishing is a process of producing data which can be shared across your project and with your team members. It consists of several steps: + +- creating of your data (model, rig etc.) +- creating of AYON publish instance (defines product type / data to be published from your workfile) +- publishing of a product (process of making such data publicly available) ### Intro +Let's begin with `model` product and how to approach publishing process. -Publishing models in Blender is pretty straightforward. Create your model as you -need. You might need to adhere to specifications of your studio that can be different -between studios and projects but by default your geometry does not need any -other convention. +Publishing a `model` product in Blender is quite simple. Begin by preparing your model, either from scratch or by importing it into Blender. While studio specifications may vary depending on the project, generally, no additional conventions are needed for your geometry. ![Model example](assets/blender-model_example.jpg) -### Creating instance +### Creating Publish Instance + +Once your model geometry been ready, select it (select multiple objects if needed) and navigate to -Now create **Model instance** from it to let AYON know what in the scene you want to -publish. Go **AYON → Create... → Model**. +`AYON` > `Create...` + +**Publisher** window will be introduced to you... ![Model create instance](assets/blender-model_create_instance.png) +Choose `Model` Publish type and keep the `Variant` and `Use Selection` as is. +:::tip See [Variant](artist_concepts.md#variant) and [Product](artist_concepts.md#product) for more detail on what they are and how they are used in AYON. +::: + +`Use selection` toggle will use whatever you have selected in the Blender Outliner before triggering `Create...` +This is usually what you want. + +Now click on **Create >>** button. + +You'll notice then after you've created new **Model** instance, there is a new +collection in the Outliner called after your product and variant, in our case it is +`/assets/props/suzanne_modelMain`. The objects selected when creating the `Model` publish instance got parented under a locator +representing the newly created product. -`Use selection` toggle will use whatever you have selected in Outliner to be -wrapped in Model instance. This is usually what you want. Click on **Create** button. +And that's it, you have your first model ready to be published as `model` product. -You'll notice then after you've created new Model instance, there is a new -collection in Outliner called after your product and variant, in our case it is -`/assets/props/suzanne_modelMain`. The assets selected when creating the Model instance -are linked in the new collection. +Now save your scene if you didn't already! -And that's it, you have your first model ready to publish. +...again using `AYON` > `Workfiles` > `Save As` + +:::tip +You are **free to perform** an ordinary `File > Save` aka `CTRL`+`S` at **any time** besides using the Workfiles, which are more suited for `Save As`, aka creating new versions. +::: -Now save your scene (if you didn't do it already). You will notice that path -in Save dialog is already set to place where scenes related to modeling task on -your asset should reside. As in our case we are working on product called -**suzanne** and on task **modeling**, path relative to your project directory will be -`project_XY/assets/props/suzanne/work/modeling`. The default name for the file will -be `project_XY_product_task_version`, so in our case -`test_suzanne_modeling_v001.blend`. Let's save it. ![Model create instance](assets/blender-save_modelling_file.png) -### Publishing models +### Publishing Model -Now let's publish it. Go **AYON → Publish...**. You will be presented with following window: +Finally, let's publish our model! Go to **AYON → Publish...**. You will be presented with following window: ![Model publish](assets/blender-model_pre_publish.png) -Note that content of this window can differs by your pipeline configuration. -For more detail see [Publisher](artist_tools_publisher). +:::note +Content of this window can differ depending on your studio's AYON configuration. +For more details see [Publisher](artist_tools_publisher) user's docs section. +::: Items in left column are instances you will be publishing. You can disable them by clicking on the toggle next to them. See that in this case we are publishing the Blender model named `modelMain` and the workfile `workfileModeling` (its instance is generated -automatically for any workfile). +automatically for any workfile). Also `Context` being implicit widget and just resolves the +product location within a project aka so called **Context**. You can't disable this one. On the right side, you can enable or disable optional validators or extractors for the selected instance. -Lets do dry-run on publishing to see if we pass all validators. Click on the filter -icon at the bottom next to the "Publish" button. Validators are run. +Lets do dry-run on publishing to see if we pass all validators. +Click on the funnel icon at the bottom next to the `Publish` button. -### Fixing problems +...validators are run. -For the sake of demonstration, I intentionally kept the model in Edit Mode, to -trigger the validator designed to check just this. +### Fixing Validation Issues -![Failed Model Validator](assets/blender-model_publish_error.png) +For the sake of demonstration, we intentionally kept the model in `Edit Mode`, to +trigger the validator designed to check if model not being in such a state. + +![Model Model Edit Mode](assets/blender_model_validate.png) The report tab in the publisher window shows us that we have problem with validator `Validate Object Mode`. @@ -117,40 +156,51 @@ select objects that cause trouble. This is the case with our failed validator. On top you can see a button `Select Invalid`. This will select offending object in Blender. -Fix is easy. Without closing Publisher window we just turn back the Object Mode. -Then we need to reset it to make it notice changes we've made. Click on arrow -circle button at the bottom and it will reset the Publisher to initial state. Run -validators again (filter icon) to see if everything is ok. +![Failed Model Validator](assets/blender-model_publish_error.png) -It should OK be now. Click the Publish button when ready. +Fix is easy. Without closing the Publisher window we just turn back to `Object Mode`. +Then we need to reset the **Publisher** to make it notice changes we've made. Click on arrow +circle button at the bottom and it will reset the Publisher to initial state. + +Run validators again (by funnel icon) to see if everything is ok now. + +The validation should pass properly without any errors now. + +Click the `Publish` button when ready. Publish process will now take its course. Depending on data you are publishing it can take a while. You should end up in the report tab of the publisher window, -with a success message and information about published data. +with a success message and information about published data as seen on the picture below. ![Success Publish](assets/blender-model_publish_success.png) -You can now close publisher window. -To check for yourself that model is published, open -[Asset Loader](artist_tools_loader) - **AYON → Load...**. -There you should see your model, named `modelDefault`. +You can dismiss the publisher window now. ### Loading models +Once you have some published product available you can use **AYON** and its **Loader** tool to bring such +product(s) into your active Blender workfile. + +Navigate to **AYON → Load...** -You can load model with [Loader](artist_tools_loader). Go **AYON → Load...**, -select your rig, right click on it and click **Link model (blend)**. +By selecting your Suzanne's `modelMain` and performing right click on it and choosing **Append Blend (Blend)** action. + +:::note +**AYON Loader** offers you the ability to load available published products using different methods, which will vary depending on the occasion. Check +[Asset Loader](artist_tools_loader) for more details. +::: ## Creating Rigs Creating and publishing rigs with AYON follows similar workflow as with -other data types. Create your rig and mark parts of your hierarchy in sets to -help AYON validators and extractors to check it and publish it. +other publish types. Simply by first creating your rig and selecting its parts before populating the scene with `rig` publish instance type in the Publisher window and finally performing publish action resulting into `rigMain` product. -### Preparing rig for publish +### Preparing the rig When creating rigs in Blender, it is important to keep a specific structure for -the bones and the geometry. Let's first create a model and its rig. For -demonstration, I'll create a simple model for a robotic arm made of simple boxes. +the bones and the geometry. + +Let's first create a model and its control rig. For demonstration, We will create a simple model +for a robotic arm made of simple boxes. ![Blender - Simple model for rigging](assets/blender-rig_model_setup.jpg) @@ -184,8 +234,8 @@ select your rig, right click on it and click **Link rig (blend)**. ## Layouts in Blender -A layout is a set of elements that populate a scene. AYON allows to version -and manage those sets. +A **Layout** is a set of loaded products that are loaded in your scene. You can produce +layout from selected products and version manage such set via AYON toolset. ### Publishing a layout @@ -204,3 +254,7 @@ You can load a Layout using [Loader](artist_tools_loader) (**AYON → Load...**). Select your layout, right click on it and select **Link Layout (blend)**. This will populate your scene with all those models you've put into layout. + +:::note This Docs Section is Incomplete +This user docs section is still work in progress +::: \ No newline at end of file diff --git a/website/docs/addon_core_settings.md b/website/docs/addon_core_settings.md index a1336d92..16d536b8 100644 --- a/website/docs/addon_core_settings.md +++ b/website/docs/addon_core_settings.md @@ -99,6 +99,27 @@ Applicable context filters: (This image shows use case where `render` anatomy template is used for products of families ['review, 'render', 'prerender'], `publish` template is chosen for all other.) +### Filter creator profiles + +This feature offers settings that narrow down the list of creators appearing in Publisher according to the specific context, thereby making it easier for artists to choose the right creator for their work. +Each profile consists of +- A list of host names. +- Task Types drop down menu. +- A list of task names, which can serve as an alternative to task types. +- A list of Creator Labels, where you can add the labels of the creators you want to be displayed. + +If you would like to show creator, put its creator label to `Allowed Creator Labels`, easiest way is to open DCC, select creator label in the list of creators and copy&paste it to Settings. +Regular expression is supported (eg. `Image.*` would show all `ImageHD`, `ImageLD`, `ImageThumb` creators). + +Logging is provided in debug mode (`ayon_console --debug`) to highlight if profile matched and filtering is happening. + +![core_tools_filter_creators](assets/tools/core_tools_filter_creators.png) + +::: note +In the example shown above only available creators with labels starting with `Render` (eg. `Render`, `RenderLOD` etc.) for `animation` task started in `AfterEffects`. +No other creators will be shown for use when this filter profile being active. No other DCCs or even tasks in `AfterEffects` would be affected. +::: + #### Custom Staging Directory Profiles With this feature, users can specify a custom data folder path based on presets, which can be used during the creation and publishing stages. @@ -306,6 +327,62 @@ Time Code `{timecode}` key is supported which is evaluated in the format `HH:MM: - Nuke extractor settings path: `project_settings/nuke/publish/ExtractReviewDataMov/outputs/baking/add_custom_tags` - Filtering by input length. Input may be video, sequence or single image. It is possible that `.mp4` should be created only when input is video or sequence and to create review `.png` when input is single frame. In some cases the output should be created even if it's single frame or multi frame input. +### Extract Burnin + +:::info +Remember to include the `burnin` tag when using `Extract Burnin`. Add it in the `Extract Review` settings to ensure it works correctly. +::: + +The `Extract Burnin` plugin is a powerful tool for adding important details when publishing reviews. It comes with six placeholders that you can use right away. +![](assets/core/admin/extract_burnin.png) + +**Customizing Extract Burnin** + +You have the freedom to tailor the Extract Burnin to your needs. There are two main areas you can adjust: +- **Burnin Formatting Options**: Change how the text looks. +- **Profiles**: Set up different rules and data for the plugin. + +#### Burnin formatting options + +![](assets/core/admin/extract_burnin_format_settings.png) + +Adjust text appearance and position with these settings: +1. Text Settings: + - Choose font size, color, and background color. + - Set x offset, y offset, and padding to position the text just right. +2. Custom Font Path: + - Use a specific font by providing its file path. + +#### Profiles +![](assets/core/admin/extract_burnin_profile_settings.png) + +Create profiles to control how the plugin functions: +1. Define the Context: + - Choose specific products, hosts, and tasks that the plugin will identify and work with. +2. Burnin definitions: + - a. **Name**: Burnin definition name. + - b. **Placeholders Customization**: Tailor the placeholder text using [template keys](admin_settings_project_anatomy#available-template-keys), allowing flexibility for each user and context. + - c. **Additional Filtering**: Add extra filters to manage the use of multiple burnin definitions effectively. + - d. **Expansion (+)**: Add more definitions to fit your need. +3. **Expansion (+)**: Add more profiles. + +:::info Placeholders and template keys +To see a list of available template keys, please visit the [template keys](admin_settings_project_anatomy#available-template-keys) section. +Additionally, be aware that some keys are exclusive to specific hosts. Nevertheless, these keys should function properly as we often align the addon features to ensure compatibility. +::: + +:::tip Link Burnin by name +You can link `Extract Review` profiles to a specific burn-in by using its name. +However, you're limited to choosing among burn-ins that are within the same burn-in profile. + +In my example, both `focal_length_burnin` and `default_burnin` are within the same burn-in profile. + +| **Extract Burnin** | **Extract Review** | +|--|--| +| ![](assets/core/admin/different_burnin_profiles.png) | ![](assets/core/admin/link_to_burnin_by_name.png) | + +::: + ### Integrate Product Group Published products might be grouped together for cleaner and easier selection in the **[Loader](artist_tools_loader.md)** diff --git a/website/docs/addon_deadline_admin.md b/website/docs/addon_deadline_admin.md index 63e091f3..43558c90 100644 --- a/website/docs/addon_deadline_admin.md +++ b/website/docs/addon_deadline_admin.md @@ -27,13 +27,21 @@ For [AWS Thinkbox Deadline](https://www.awsthinkbox.com/deadline) support you ne 3. Set up *Deadline Web API service*. For more details on how to do it, see [here](https://docs.thinkboxsoftware.com/products/deadline/10.1/1_User%20Manual/manual/web-service.html). -4. Point AYON to your deadline webservice URL in the Deadline settings `ayon+settings://deadline/deadline_urls/0/value`. +4. Provide values for all Deadline servers you want to use in `ayon+settings://deadline` ![Webservice url](assets/deadline_webserver_config.png) -5. Install our custom plugin and scripts to your deadline repository. It should be as simple as copying content of `ayon/modules/deadline/repository/custom` to `path/to/your/deadline/repository/custom`. + Where field on the left is label (descriptive name) of Deadline server + `Url` - is IP or host name including port (example of locally running DL `http://127.0.0.1:8081`) + `Require authentication` - DL webservice could be protected by username/password (set in Deadline Monitor in `Tools > Configure Repository Options > Web Service Settings > Require Authentication`) + `Don't verify SSL` - if your Dl webservice is using SSL (eg. on https://) self-signed certificates might trigger an error. Disable verification of certificate here. + `Default user name` - if `Require authentication` is enabled, this and next field provides possibility to fill single credentials for all artists publishing to Deadline. + (If every artist should have separate credentials, they need to provide them in `Site Settings` (on `Studio Settings` page -6. Create service account on Ayon server http://YOUR_AYON/settings/users , `Generate new key` and store it, you would need it in Deadline plugin configuration. +5. Select which Deadline server should be used for project in `ayon+settings://deadline/deadline_server?project=YOUR_PROJECT` +6. Install our custom plugin and scripts to your deadline repository. It should be as simple as copying content of `ayon/modules/deadline/repository/custom` to `path/to/your/deadline/repository/custom`. + +7. Create service account on Ayon server http://YOUR_AYON/settings/users , `Generate new key` and store it, you would need it in Deadline plugin configuration. :::note guide You could check [deadline guide](https://community.ynput.io/t/ayon-openpype-deadline-setup/468) for more detailed steps and additional tips. @@ -129,6 +137,19 @@ Each publishing from AYON consists of 2 jobs, first one is rendering, second one Check if AYON is installed on the Worker handling this job and ensure `AYON` Deadline Plug-in is properly [configured](#configuration) +- ** Render jobs are failing with `Got invalid credentials. Invalid API key for...` error ** + + If you are sure that you provided correct AYON API key in Deadline `Configure Plugin`, check if you have enabled Deadline Secrets Management. + + You will need to grant access to secrets to user or machine. + + You will need to run this command on Deadline Server machine: + + `deadlinecommand secrets GrantKeyAccessToServer {SECRETS_USER} defaultKey {NODE_ID}` + + See more details [Deadline Secrets Management - GrantKeyAccessToServer](https://docs.thinkboxsoftware.com/products/deadline/10.1/1_User%20Manual/manual/secrets-management/deadline-secrets-management.html#deadline-secrets-management-command-grantkeyaccesstoserver) + + - ** Publishing job is failing with `ffmpeg not installed` error ** AYON executable has to have access to `ffmpeg` executable, check AYON `ayon+settings://ayon_third_party` diff --git a/website/docs/addon_flow_admin.md b/website/docs/addon_flow_admin.md index 5beaaea6..d48ff968 100644 --- a/website/docs/addon_flow_admin.md +++ b/website/docs/addon_flow_admin.md @@ -18,7 +18,7 @@ import TabItem from '@theme/TabItem'; In Ayon, we've been using the name Shotgrid. But since we plan to change it, we'll start calling it Flow addon in our documentation. Sometimes, we might use SG too, just to keep things interesting. ::: -### Introduction +## Introduction Flow ( previously known as ShotGrid or ShotGun) is a production tracking and asset management software that helps studios manage their projects, assets, and shots. The Ayon Flow integration allows you to seamlessly connect your Ayon Studio with Flow and automate the synchronization of your project data between the two systems. The integration enables you to synchronize folder attributes, status, tags, and reviewables between Ayon and Flow @@ -35,21 +35,21 @@ Current version of the integration also supports following features: - via Tray widget for User email input - with secret shared User api key set in addon settings -### Configuring Ayon +## Configuring Ayon Before any project can be synchronized form Flow first we need to configure the addon's Studio settings. -#### Setting up Flow Script connection +### Setting up Flow Script connection 1. Go to your Flow server and within your admin menu (1) select Scripts menu item (2). ![Flow Scripts](assets/shotgrid/sg_server_scripts.png) 2. You'll need to create a new item for each access level and give it a name. We're calling our items `ayon_connector` and _`ayon_user_publishing`_. Each item is linked to a different **permission group**. It's important to know that the `ayon_connector` script is only for services, while `ayon_user_publishing` is for users logging into the Ayon Desktop app. This helps us manage different access levels. ![Flow Scripts items](assets/shotgrid/sg_server_scripts_items.png) 3. When you create a script item, remember to save the generated hash key right away because it's only shown once. -#### Setting Ayon Secrets +### Setting Ayon Secrets Add the ayon_connector key to Ayon Secrets and name it some easy way so here in our example we are naming it `sg_server_script_key`. You can also add the `ayon_user_publishing` secret here just for future reference, but it will never be used as within SG addon settings. -#### Flow addon Studio settings configuration +### Flow addon Studio settings configuration :::tip Addon Frontend Tab To be able to use Shotgrid tab in Studio settings you need to have correctly configured addon at **production bundle** state. Please restart the server after you finalized the settings. After that, you should see the Shotgrid tab in Studio settings. @@ -61,15 +61,15 @@ To get the addon's frontend tab working and sync all Flow projects, you need to * ShotGrid's Script API key (`ayon+settings://shotgrid/service_settings/script_key`) * ShotGrid's Script Name (`ayon+settings://shotgrid/service_settings/script_name`) -#### Setting up the ShotGrid URL +### Setting up the ShotGrid URL First, enter your Flow server URL in the **Shotgrid URL** field. It looks something like `https://yourcompany.shotgrid.autodesk.com`. -#### Setting up the ShotGrid's Script API key for Services +### Setting up the ShotGrid's Script API key for Services Next, in the Services section, put your **ShotGrid's Script API key**. You should already have this key. Then, add your **ShotGrid's Script Name**. If you've followed the steps before, you might name it `ayon_connector`. ![Ayon Scripts items](assets/shotgrid/ay_server_scripts_items.png) -#### Setting login types for Users +### Setting login types for Users You need to decide how users will log into the Ayon Desktop app. Here are three options: 1. **Via Environment variable** - This is the default login method. Enter the user's email as `AYON_SG_USERNAME` on each user's computer in your studio. With this method, users won't see their login details on the Tray app widget. @@ -82,7 +82,7 @@ You need to decide how users will log into the Ayon Desktop app. Here are three ![Ayon user login shared](assets/shotgrid/ay_user_login_shared.png) -#### Setting up local storage for Flow +### Setting up local storage for Flow In order to use power of Flows file system you have to configure local storage settings. This is done by enabling local storage and adding local storage name which had been previously configured in **Flow's Admin menu** > **Site preferences** > **File management**. Here it is important to **Enable linking to local files** (1) and create preset (2) for multiplatform file system. Copy name of the created preset (3) and paste it in Ayon Studio settings. ![Flow local storage](assets/shotgrid/sg_local_storage.png) @@ -91,7 +91,7 @@ Paths should be mirroring defined paths in Ayon Anatomy root configuration. ![An The name of the preset copied previously should be pasted in Ayon Studio settings. ![Ayon local storage](assets/shotgrid/ay_local_storage.png) -#### Anatomy preset configuration +### Anatomy preset configuration To use the Flow addon with Ayon, you need to set up an Anatomy preset. This preset helps sync things between Ayon and Flow. To get started, you can create a new preset or pick an existing one. Right now, the only thing to remember is that _Task Types_, _Folder Types_, and _Statuses_ should each have only one item. Make sure it matches a common item you'd find in Flow. @@ -114,14 +114,14 @@ And now the anatomy preset is ready to be used in Flow addon settings. ![Ayon anatomy preset set](assets/shotgrid/ay_anatomy_preset_set.png) -#### Selecting enabled entities for synchronization +### Selecting enabled entities for synchronization Flow's enabled entity enumerator (`ayon+settings://shotgrid/compatibility_settings/shotgrid_enabled_entities`) lets us pick which entities to sync between Ayon and Flow. We do this by choosing the entities from the list and saving our choices. But remember, we must also turn on these entities in Flow's Project Tracking settings. Ensure all required entities are visible (not hidden). ![Flow enabled entities](assets/shotgrid/sg_tracking_settings.png) -#### Configuring folder attributes synchronization +### Configuring folder attributes synchronization To sync folder attributes between Ayon and Flow, set up the **Folder Attributes Map**. Choose attributes to sync by adding the name to the **SG** column (1). Attributes with no value won't be considered. Use the **Scope** column (2) to pick only the Flow entities that should have the attribute. For instance, the **fps** attribute might be used only for Versions, Shots, and Project entities. @@ -136,7 +136,7 @@ Here is a typical example of folder attributes mapping: ![Flow folder attributes](assets/shotgrid/ay_attribute_mapping.png) -#### Targeting reviewables to Flow +### Targeting reviewables to Flow You can effortlessly ensure that all reviewables will be uploaded to Flow. For this purpose, you simply need to attach a specific tag to Extract Review output presets. You can achieve this by following these steps: diff --git a/website/docs/addon_kitsu_admin.md b/website/docs/addon_kitsu_admin.md index 0f48b4bb..f17fde49 100644 --- a/website/docs/addon_kitsu_admin.md +++ b/website/docs/addon_kitsu_admin.md @@ -17,48 +17,132 @@ import TabItem from '@theme/TabItem'; Kitsu is a great open source production tracker and can be used for project management instead of Ftrack. This documentation assumes that you are familiar with Kitsu and its basic principles. If you're new to Kitsu, we recommend having a thorough look at [Kitsu Official Documentation](https://kitsu.cg-wire.com/). -## Prepare Kitsu for AYON +:::info prerequisites +- Having Kitsu set up and running.
For more info refer to [official installation guide](https://zou.cg-wire.com/) or [community kitsu docker](https://github.com/EmberLightVFX/Kitsu-for-Docker) +- Having [AYON Server Host (ASH)](https://github.com/ynput/ash) set up and running. +::: -### Server URL -If you want to connect Kitsu to AYON you have to set the `Server` url in Kitsu settings. And that's all! -This setting is available for all the users of the AYON instance. +## Kitsu Addon Installation -## Synchronize -Updating OP with Kitsu data is executed running the `sync-service`, which requires to provide your Kitsu credentials with `-l, --login` and `-p, --password` or by setting the environment variables `KITSU_LOGIN` and `KITSU_PWD`. This process will request data from Kitsu and create/delete/update OP assets. -Once this sync is done, the thread will automatically start a loop to listen to Kitsu events. +### Addon Market + +If you have already connected your ayon instance to Ynput cloud, you would be able to get the addon from Addon Market. + +![Addon Market](assets/kitsu/admin/kitsu_addon_market.png) + +### Manual Installation +Another method is to get it from Github releases and install it manually. + +- [Kitsu Addon Github Releases](https://github.com/ynput/ayon-kitsu/releases) + +| Download Addon | Install Addon | +|--|--| +| ![Kitsu GH Releases](assets/kitsu/admin/kitsu_gh_releases.png) | ![AYON Install AYON](assets/kitsu/admin/ayon_install_addon.png) | -```bash -openpype_console module kitsu sync-service -l me@domain.ext -p my_password -``` +## Preparation for Kitsu Addon +Essential preparation for Kitsu addon to work. -### Events listening -Listening to Kitsu events is the key to automation of many tasks like _project/episode/sequence/shot/asset/task create/update/delete_ and some more. Events listening should run at all times to perform the required processing as it is not possible to catch some of them retrospectively with strong reliability. If such timeout has been encountered, you must relaunch the `sync-service` command to run the synchronization step again. +1. Create New Bundle and set Kitsu addon version +2. Add Kitsu Admin Account to AYON Secrets. +3. Spawn Kitsu service. +4. Set Kitsu Server URL -Connection token is refreshed every week. -### Push to Kitsu -An utility function is provided to help update Kitsu data (a.k.a Zou database) with AYON data if the publishing to the production tracker hasn't been possible for some time. Running `push-to-zou` will create the data on behalf of the user. +### Create Bundle and Set Addon Version +Create new production bundle, Set Kitsu Addon version to your installed version, and finally restart server. + +:::note +As soon as you restart your server, you'll start seeing Empty Kitsu tab. +::: + +### Set Kitsu Admin Account +By default Kitsu addon expects two special keys in AYON secrets. +- `kitsu_email` +- `kitsu_password` + +![](assets/kitsu/admin/kitsu_admin_account.png) + + +### Spawn Kitsu service +From Services, Create New Service. + :::caution -This functionality cannot deal with all cases and is not error proof, some intervention by a human being might be required. +Kitsu service should be the same version as your Kitsu addon version. +If you already have a running Kitsu service, you can simply Right-click, delete it and create new one. ::: -```bash -openpype_console module kitsu push-to-zou -l me@domain.ext -p my_password -``` +![](assets/kitsu/admin/kitsu_service.png) -## Integrate Kitsu Note -Task status can be automatically set during publish thanks to `Integrate Kitsu Note`. This feature can be configured in: +### Server URL + +:::tip +If you're operating your Kitsu instance with Docker and encounter a connection error, it's likely due to an incorrect IP address. Make sure to use the right one. For additional details, visit this community post: [Kitsu connection error (Could not login to Kitsu)](https://community.ynput.io/t/kitsu-connection-error-could-not-login-to-kitsu/1556/13). +::: + +As soon as you set the `Server` url in Kitsu settings. And that's all! +- `ayon+settings://kitsu/server` + +![](assets/kitsu/admin/kitsu_server_url.png) + + +## Synchronize +Synchronization is two step process. +From Kitsu Tab: +1. Click `Pair project` +2. Click `Sync now` -`Admin -> Studio Settings -> Project Settings -> Kitsu -> Integrate Kitsu Note`. +> Currently, Synchronization is one-way only **Kitsu ➜ AYON**. -There are three settings available: -- `Set status on note` -> turns on and off this integrator. -- `Note shortname` -> Which status shortname should be set automatically (Case sensitive). -- `Status conditions` -> Conditions that need to be met for kitsu status to be changed. You can add as many conditions as you like. There are two fields to each conditions: `Condition` (Whether current status should be equal or not equal to the condition status) and `Short name` (Kitsu Shortname of the condition status). +| Kitsu Productions | Kitsu Tab | +|--|--| +| ![](assets/kitsu/admin/kitsu_tab_sync_2.png) | ![](assets/kitsu/admin/kitsu_tab_sync.png) | -![Integrate Kitsu Note project settings](assets/integrate_kitsu_note_settings.png) +## Kitsu Addon Configuration + +### Integrate Kitsu Note +Task status can be automatically set during publish thanks to `Integrate Kitsu Note`. This feature can be configured in: +- `ayon+settings://kitsu/publish/IntegrateKitsuNote`. + +Available settings: +- `Set status on note`: Turns on and off this integrator. +- `Note shortname`: Which status shortname should be set automatically (Case sensitive). +- `Status change conditions`: Conditions that need to be met for kitsu status to be changed. You can add as many conditions as you like. + - `Status Conditions`: There are two fields to each conditions: + - `Condition` (Whether current status should be equal or not equal to the condition status) + - `Short name` (Kitsu Shortname of the condition status). + - `Product type requirements` + - `Condition` (Whether published product type should be equal or not equal to the condition status) + - `Product type` (AYON Product type) +- `Custom Comment Template` -> when enabled, AYON publisher will use this template as Kitsu comment. You can use markdown as it's supported by Kitsu. + + +![Integrate Kitsu Note project settings](assets/kitsu/admin/integrate_kitsu_note_settings.png) + +#### Custom Comment Template example +Here's an example template that makes a nice table. +- `| comment | version | product type | name |\n|--|--|--|--|\n| {comment} | {version} | {productType} | {name} |` + +:::tip Custom Comment Template +Artists need only to provide comment in publisher UI. +And, `Integrate Kitsu Note` will do the hard work for them. +![](assets/kitsu/admin/kitsu_comment_publisher.png) + +![](assets/kitsu/admin/kitsu_comment_template.png) +::: +### Sync Settings + +- `Delete Projects`: Enabling 'Delete projects' will remove projects on Ayon when they get deleted on Kitsu +- `Sync users` Sync Kitsu Users, their passwords and map Kitsu roles to AYON roles. +- `Default sync info` + - Tasks (Name, Short Name, Icon) + - Statuses (Short Name, State, Icon) ## Q&A ### Is it safe to rename an entity from Kitsu? +:::caution +While changing the names of entities is allowed, Be aware it doesn't change the existent file names or publishes. +::: + Absolutely! Entities are linked by their unique IDs between the two databases. -But renaming from the OP's Project Manager won't apply the change to Kitsu, it'll be overridden during the next synchronization. +- If you rename an entity in the AYON project editor, this change won't show up in Kitsu. Instead, it will be replaced with the original name when the next sync happens. +- When you rename an entity directly in Kitsu, the new name will be updated in AYON during the upcoming synchronization. diff --git a/website/docs/addon_kitsu_artist.md b/website/docs/addon_kitsu_artist.md index 1cb60484..46e5d8be 100644 --- a/website/docs/addon_kitsu_artist.md +++ b/website/docs/addon_kitsu_artist.md @@ -17,8 +17,24 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' 1. Launch AYON, the `Kitsu Credentials` window will open automatically, if not, or if you want to log-in with another account, go to systray AYON icon and click on `Kitsu Connect`. 2. Enter your credentials and press *Ok*: - ![kitsu-login](assets/kitsu/kitsu_credentials.png) + ![kitsu-login](assets/kitsu/artist/kitsu_credentials.png) :::tip In Kitsu, All the publish actions executed by `pyblish` will be attributed to the currently logged-in user. -::: \ No newline at end of file +::: + +## Integrate Kitsu Note and Review + +If they are enabled in Kitsu addon settings. +- Your publish comment will be used as Kitsu note. +- When publishing a Review or Render, publisher can upload them to kitsu. + +:::note Notes +- Depending on the kitsu addon configuration, publisher also can update the task status. +- Admins are able to configure `Custom Comment Template`, [learn More](addon_kitsu_admin#custom-comment-template-example). +::: + +| Publish Comment | Kitsu Note and Review | +|--|--| +| ![kitsu Note 1](assets/kitsu/artist/kitsu_note_1.png) | ![kitsu Note 2](assets/kitsu/artist/kitsu_note_2.png) | + diff --git a/website/docs/addon_maya_admin.md b/website/docs/addon_maya_admin.md index 06391887..d18ffcaf 100644 --- a/website/docs/addon_maya_admin.md +++ b/website/docs/addon_maya_admin.md @@ -94,6 +94,43 @@ When you publish your model with top group named like `foo_GRP` it will fail. Bu All regexes used here are in Python variant. ::: +### Extract Alembic + +`ExtractAlembic` + +![ExtractAlembic](assets/maya/admin/alembic_settings.png) + +The settings below will become the default when extracting the alembics for `pointcache` and `animation`. Any attributes exposed in `Exposed Overrides` will be visible to the users to edit when publishing. When a user edits an attribute, the default settings below no longer has any effects on the publishing values. To enforce settings even when exposing attributes, you can utilize the validators; `ValidateAlembicDefaultsPointcache` and `ValidateAlembicDefaultsAnimation`. + +- **Euler Filter**: Apply Euler filter while sampling rotations. +- **Renderable Only**: Only export renderable visible shapes. +- **Strip Namespaces**: Namespaces will be stripped off of the node before being written to Alembic. +- **UVs Only**: If this flag is present, only uv data for PolyMesh and SubD shapes will be written to the Alembic file. +- **UV Write**: UV data for PolyMesh and SubD shapes will be written to the Alembic file. +- **Verbose**: Prints the current frame that is being evaluated. +- **Visible Only**: Only export dag objects visible during frame range. +- **Whole Frame Geo**: Data for geometry will only be written out on whole frames. +- **World Space**: Any root nodes will be stored in world space. +- **Write Color Sets**: Write vertex colors with the geometry. +- **Write Face Sets**: Write face sets with the geometry. +- **Write Normals**: Write normals with the deforming geometry. +- **Write UV Sets**: Write all uv sets on MFnMeshes as vector 2 indexed geometry parameters with face varying scope. +- **Write Visibility**: Visibility state will be stored in the Alembic file. Otherwise everything written out is treated as visible. +- **Pre Roll**: When enabled, the pre roll start frame is used to pre roll the evaluation of the mesh. From the pre roll start frame to the Alembic start frame, will not be written to disk. This can be used for simulation run-up. +- **Pre Roll Start Frame**: The frame to start scene evaluation at. This is used to set the starting frame for time-dependent translations and can be used to evaluate run-up that isn't actually translated. NOTE: Pre Roll needs to be enabled for this start frame to be considered. +- **Data Format**: The data format to use to write the file. +- **Bake Attributes**: List of attributes that will be included in the Alembic export. +- **Bake Attribute Prefixes**: List of attribute prefixes for attributes that will be included in the Alembic export. +- **Custom Attributes**: Attributes matching by name will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **Custom Attributes Prefix**: Attributes starting with these prefixes will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **User Attr**: Attributes matching by name will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **User Attr Prefix**: Attributes starting with these prefixes will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **Mel Per Frame Callback**: When each frame (and the static frame) is evaluated the string specified is evaluated as a Mel command. +- **Mel Post Job Callback**: When the translation has finished the string specified is evaluated as a Mel command. +- **Python Per Frame Callback**: When each frame (and the static frame) is evaluated the string specified is evaluated as a python command. +- **Python Post Job Callback**: When the translation has finished the string specified is evaluated as a python command. +- **Exposed Overrides**: These are the attributes from above that will be exposed in the publisher for users to edit when publishing. + ## AYON Tools You can add your custom tools menu into Maya by extending definitions in **Maya -> Scripts Menu Definition**. diff --git a/website/docs/addon_maya_arnold_artist.md b/website/docs/addon_maya_arnold_artist.md index eb0d8068..97e2a909 100644 --- a/website/docs/addon_maya_arnold_artist.md +++ b/website/docs/addon_maya_arnold_artist.md @@ -11,44 +11,82 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' {versions.Maya_Badge}
+You are able to create two types of **Arnold Scene Source** product + +- Arnold Scene Source +- Arnold Scene Source Proxy + +![Publish instance types](assets/maya/artist/ass_publish_types.png) + ## Arnold Scene Source (.ass) -Arnold Scene Source can be published as a single file or a sequence of files, determined by the frame range. +**Arnold Scene Source** contains whatever user selects when creating the publish instance. Arnold Scene Source can be published as a single file or a sequence of files and its determined by the frame range set on the publish instance. Use those values for producing still or animated `standin`. + +![Publish instance framerange](assets/maya/artist/ass_publish_framerange.png) + +### Arnold Scene Source Proxy +The main difference of this product type being possibility to use proxy geometries for viewport performance reasons. If this is not an issue use the first standin type instead. +Once the publish instance have been created, there is a `proxy_SET` created inside of the `Main_SET`. Meshes assigned to the `proxy_SET` will be the viewport representation of the `standin`. Once render triggered, they are switched for the content of the `Main_SET` on the fly. +In order to utilize operators and proxies on the `standin`, the content and proxy nodes need to share the same names (including the shape names +and cbIDs). + +:::note +You can duplicate content keeping all its attributes using maya `Group` for objects used in `Main_SET` and `proxy_SET` each being in distinct `Group` as maya does not allow having the same objects within the same hierarchy. +::: + +![Ass Proxy Sets](assets/maya/artist/ass_proxy_sets.gif) + +Here you can see we are having `Content_GRP` for renderable objects and `Proxy_GRP` for viewable objects in the maya viewport. Each having the same objects inside as duplicates differing only by level of detail. Note that offset of `Proxy` objects is just for sake of clarity and normally would be in the exact same location as high detail meshes for rendering aka `Content_GRP`. + +:::note +Use **Arnold Scene Source** product instead as there are not so many requirements / constraints when creating it if viewport performance not an issue. +::: + +### Validation of the Arnold Scene Source publishes -When creating the instance, two objectsets are created; `content` and `proxy`. Meshes in the `proxy` objectset will be the viewport representation when loading as `standin`. +After triggering publishing via Publisher a round of different validation checks being triggered informing user if anything setup wrong and offering set of `Repair` actions to fix those issues. -### Arnold Scene Source Proxy Workflow -`AssMain` set is created with `assMain_content_SET` and `assMain_proxy_SET` as its children. -In order to utilize operators and proxies, the content and proxy nodes need to share the same names (including the shape names -and CBIDs). This is done by parenting the content and proxy nodes into separate groups. For example: +Most common `Validator` is for checking proper asset hierarchy. Just by following the report you are able to adjust your scene hierarchy to match the desired one. -![Arnold Scene Source](assets/maya/artist/arnold_scene_source.png) +Here is an example of wrong hierarchy set as the model `Groups` assigned to the `standin` being children of the World and no such a hierarchy being allowed so need to be adjusted properly. -Once you put geometry contents(grouped objects) and proxy groups respectively into contents and proxies set, -you are ready to see if it passes validation and gets published. +![Ass Validator Hierarchy](assets/maya/artist/ass_validator_hierarchy.png) -Besides the grouped contents and proxies, you can put meshes and proxies into contents and proxies set. -It would pass validation too and gets published. +And the invalid hierarchy seen in the Maya Outliner -![Mesh Objects for contents and proxies sets](assets/maya/artist/creator_sets.png) +![Ass Validator Hierarchy 2](assets/maya/artist/ass_validator_hierarchy2.png) -Validators `ASS has relative texture paths` and `Validate Arnold Scene Source CBID` can allow you to set up -the context correctly by using repair function. +Instead of having the `Content_GRP` and `Proxy_GRP` in the `standin` sets, you should put in the actual `objects` geometries instead to fix this validation failure. As seen below the correct one: + +![Ass Validator Hierarchy 3](assets/maya/artist/ass_validator_hierarchy3.png) + + +Validators `ASS has relative texture paths` and `Validate Arnold Scene Source cbID` allows you to set up +the context correctly by using `Repair` action. ![Arnold Scene Source Validators](assets/maya/artist/validators_ass_family.png) -Once you pass the validator, you can publish your contents and proxies. -## Standin -Arnold Scene Source `ass` and Alembic `abc` are supported to load as standins. -When you load `ass` when the loaders, it will import two `ass` groups with standins as children. -Both standins load `_proxy` ass files by default, and you can choose to change the `content` -manually by clicking file icon in the standin and change the files with `_proxy` naming conventions. +Once all `Validators` being resolved you are ready to publish the `Arnold Scene Source` aka `Standin` product with the `.ass` representation being ready to be loaded using `Loader` tool located in the `Ayon toolset`. + +## Using Standins + +You can use published `standin` in your workfile via `AYON / Load` action. User is able to load `Arnold Scene Source` , `Arnold Scene Source Proxy` and even `Alembic` products as `standin` allowing taking advantage of arnold features also for other products like `animation` and `pointcache`. + +![Arnold Scene Source Loaders](assets/maya/artist/ass_loader.gif) -![Arnold Scene Source Loaders](assets/maya/artist/ass_loader.png) +:::note Arnold Standins +You can highly optimize your workfiles by introducing `standins` instead of regular reference loading of products like `animation` as there wont be any files referenced-in just local `standin` but still managable using `Scene Inventory`. +::: + +## Standins and LookDev +`Standin` supports `look` products and its assignment. If `look` product being available, You can assign the `look` to the loaded Arnold Scene Source `ass` and Alembic `abc` using + +`AYON -> Look Assigner...` -## Look Development -Standin Nodes are now supported for look assignment.If you publish the look development object with the look family, while you publish the object with Arnold Scene Source. You can assign the look to the published Arnold Scene Source `ass` and Alembic `abc` through `AYON -> Look Assigner...` when you load it as standin. +:::note Current Standins Limitation +`Look` assignment is not possible when using `Arnold Scene Source Proxy` +::: -![Arnold Standin](assets/maya/artist/ass_look_assigner.png) +![Standin Look Assign](assets/maya/artist/ass_look_assign.gif) :::note Limited support for shader assignments with standin nodes Limited amount of attributes supported by using operator to assign shaders to the loaded standins. @@ -76,14 +114,11 @@ aiSubdivIterations ``` ::: -### Standin Proxy Workflow -If a product has a proxy representation, this will be used as display in the viewport. At render time the standin path will be replaced using the recommended string replacement workflow; +### Arnold Scene Source Proxy +If a product has a `proxy_SET` representation, this will be used as display in the viewport. At render time the standin path will be replaced using the recommended string replacement workflow: https://help.autodesk.com/view/ARNOL/ENU/?guid=arnold_for_maya_operators_am_Updating_procedural_file_paths_with_string_replace_html -Since the content and proxy nodes share the same names and hierarchy, any manually shader assignments will be shared. - - :::note for advanced users You can stop the proxy swapping by disabling the string replacement operator found in the container. ![Arnold Standin](assets/maya/artist/arnold_standin.png) diff --git a/website/docs/addon_maya_artist.md b/website/docs/addon_maya_artist.md index 5f486db8..b2207bf3 100644 --- a/website/docs/addon_maya_artist.md +++ b/website/docs/addon_maya_artist.md @@ -352,7 +352,7 @@ Example setup: | Create Point Cache | Adjust Hierarchy | |--|--| -| ![Maya - PointCache 1 Example](assets/maya/artist/pointcache_setup_1.png) | ![Maya - PointCache 2 Example](assets/maya/artist/pointcache_setup_2.png) | +| ![Maya - PointCache 1 Example](assets/maya/artist/pointcache_setup_1.png) | ![Maya - PointCache 2 Example](assets/maya/artist/pointcache_setup_2.png) | | Publish Point Cache | |--| @@ -366,11 +366,45 @@ Example setup: - **Handle Start**: additional frames to export at frame end. Ei. frame end + handle end = export end. - **Step**: frequency of sampling the export. For example when dealing with quick movements for motion blur, a step size of less than 1 might be better. - **Refresh**: refresh the viewport when exporting the pointcache. For performance is best to leave off, but certain situations can require to refresh the viewport, for example using the Bullet plugin. -- **Attr**: specific attributes to publish separated by `;`. -- **AttrPrefix**: specific attributes which start with this prefix to publish separated by `;`. - **Include User Defined Attribudes**: include all user defined attributes in the publish. - **Farm**: if your studio has Deadline configured, artists could choose to offload potentially long running export of pointache and publish it to the farm. Only thing that is necessary is to toggle this attribute in created pointcache instance to True. - **Priority**: Farm priority. +- **Include Parent Hierarchy**: Set the root nodes if we don't want to include parents. The roots are to be considered the ones that are the actual direct members of the set. +- **Visible Only**: Does not filter out nodes that are only hidden on some frames as it counts "animated" or "connected" visibilities as if it's always visible. + +#### Alembic Options + +![Maya - Alembic Options](assets/maya/artist/alembic_options.png) + +:::note +These options can differ from settings depending on studios settings. Not all options below would be exposed in the publisher. +::: + +- **Euler Filter**: Apply Euler filter while sampling rotations. +- **Renderable Only**: Only export renderable visible shapes. +- **Strip Namespaces**: Namespaces will be stripped off of the node before being written to Alembic. +- **UVs Only**: If this flag is present, only uv data for PolyMesh and SubD shapes will be written to the Alembic file. +- **UV Write**: UV data for PolyMesh and SubD shapes will be written to the Alembic file. +- **Verbose**: Prints the current frame that is being evaluated. +- **Visible Only**: Only export dag objects visible during frame range. +- **Whole Frame Geo**: Data for geometry will only be written out on whole frames. +- **World Space**: Any root nodes will be stored in world space. +- **Write Color Sets**: Write vertex colors with the geometry. +- **Write Face Sets**: Write face sets with the geometry. +- **Write Normals**: Write normals with the deforming geometry. +- **Write UV Sets**: Write all uv sets on MFnMeshes as vector 2 indexed geometry parameters with face varying scope. +- **Write Visibility**: Visibility state will be stored in the Alembic file. Otherwise everything written out is treated as visible. +- **Pre Roll**: When enabled, the pre roll start frame is used to pre roll the evaluation of the mesh. From the pre roll start frame to the Alembic start frame, will not be written to disk. This can be used for simulation run-up. +- **Pre Roll Start Frame**: The frame to start scene evaluation at. This is used to set the starting frame for time-dependent translations and can be used to evaluate run-up that isn't actually translated. NOTE: Pre Roll needs to be enabled for this start frame to be considered. +- **Data Format**: The data format to use to write the file. +- **Custom Attributes**: Attributes matching by name will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **Custom Attributes Prefix**: Attributes starting with these prefixes will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **User Attr**: Attributes matching by name will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **User Attr Prefix**: Attributes starting with these prefixes will be included in the Alembic export. Attributes should be separated by semi-colon ;. +- **Mel Per Frame Callback**: When each frame (and the static frame) is evaluated the string specified is evaluated as a Mel command. +- **Mel Post Job Callback**: When the translation has finished the string specified is evaluated as a Mel command. +- **Python Per Frame Callback**: When each frame (and the static frame) is evaluated the string specified is evaluated as a python command. +- **Python Post Job Callback**: When the translation has finished the string specified is evaluated as a python command. ### Loading Point Caches diff --git a/website/docs/addon_maya_ornatrix_artist.md b/website/docs/addon_maya_ornatrix_artist.md new file mode 100644 index 00000000..cb00ddb8 --- /dev/null +++ b/website/docs/addon_maya_ornatrix_artist.md @@ -0,0 +1,100 @@ +--- +id: addon_maya_ornatrix_artist +title: Ornatrix for Maya +sidebar_label: Ornatrix +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.Maya_Badge} + + +AYON supports Ephere's **Ornatrix** with the workflow of publishing and loading maya scene with Ornatrix data, Ornatrix groom presets and Ornatrix Alembic. It also supports to connect your target geometry with the loaded Ornatrix data (either from the maya scene or the groom preset.) + +## Maya Addon Setting before using AYON for Ornatrix Maya +On the AYON Studio Settings or Project Settings enable the Ornatrix plug-ins for Maya: + +- Project settings > `Maya` > `Creators` > `Create Ornatrix Rig` +- Project settings > `Maya` > `Creators` > `Create Ornatrix Cache` +- Project settings > `Maya` > `Publishers` > `Validate Ornatrix Rig Contents` +- Project settings > `Maya` > `Publishers` > `Validate Ornatrix Cache Contents` +- Project settings > `Maya` > `Loaders` > `Ornatrix Cache Loader` +- Project settings > `Maya` > `Loaders` > `Ornatrix Rig Loader` + + +![Maya - Ornatrix Creators Setting](assets/maya/artist/ox_creators_maya_addon_setting.jpg) + +![Maya - Ornatrix Validator Setting](assets/maya/artist/ox_validator_maya_addon_setting.jpg) + +![Maya - Ornatrix Loader Setting](assets/maya/artist/ox_loaders_maya_addon_setting.png) + +## Workflow +AYON has two creators for Ornatrix publishing: ```Ornatrix Rig``` and ```Ornatrix Cache```. + +## Ornatrix Rig + +### Creating and publishing + +The **Ornatrix Rig** (product type: *oxrig*) publishes the geometry with the Ornatrix data. + +![Maya - Ornatrix Rig Publishing](assets/maya/artist/ornatrix_rig_publishing.gif) + +Select your mesh (that has Ornatrix fur) and create the Ornatrix Rig instance. + +:::tip +If the instance contains anything other than the mesh or the mesh has more than one hair shape, the publish validators will report the error to make sure there are always mesh(es) inside the instance. + +::: + +When it is published, several files are exported to the publish folder: + +- Maya Scene with the Ornatrix data (.ma) +- Rig Setting data (.rigsettings) +- Ornatrix Almebic (.abc) +- Cache Setting data (.cachesettings) + +### Loading + +![Maya - Ornatrix Loader Product Type](assets/maya/artist/ox_loader_product_type.png) + +**Ornatrix Rig** supports to load maya scene (.ma) and Ornatrix alembic (.abc). + +![Maya - Ornatrix Loaders](assets/maya/artist/ox_rig_loader.png) + +Both Maya Scene and groom preset allow for connecting ornatrix rig with the animation/pointcache rig. + +![Maya - Ornatrix Rig Loading](assets/maya/artist/ornatrix_rig_loading.gif) + +#### Connecting an Ornatrix rig with a pointcache or animation +After loading the Ornatrix Rig and a pointcache to connect it to, you can use the AYON tools to connect it for you: + +1. Go to `AYON` -> `Manage...` +2. In the inventory select the assets from oxrig and animation/pointcache product type. +3. Right-click `Actions` -> `Connect Ornatrix Rig` +The Ornatrix geometry will be connected the animation rig with the transform and mesh attributes. + +:::tip +The connecting will occur by node name - so if it fails, make sure the node name for the geometry is the same across your animation caches and the ornatrix exports. + +**Double geometry:** Be aware that both the ornatrix rig and your animated cache have the mesh geometry. After connecting the fur you will most likely want to hide one of the two to ensure you do not have two overlapping meshes during rendering. +::: + + +## Ornatrix Caches + +### Creating and publishing + +There are two options to allow users to publish with ```Ornatrix Cache``` product type: + +1. Create an ```Ornatrix Cache``` instance themselves by selecting the mesh with the Ornatrix data. +2. Load ornatrix rig which automatically creates the instance ready for publishing. + +![Maya - Ornatrix Cache Publishing](assets/maya/artist/ornatrix_cache_publishing.gif) + +The cache family exports Ornatrix Alembic (.abc) which includes the Ornatrix data into the publish folder. + +### Loading + +The **Ornatrix Cache** supports to load Ornatrix alembic (.abc), Vray Proxy (.abc) and Arnold Scene Source (.abc). diff --git a/website/docs/addon_maya_xgen_artist.md b/website/docs/addon_maya_xgen_artist.md index 8c550b21..29ad2b79 100644 --- a/website/docs/addon_maya_xgen_artist.md +++ b/website/docs/addon_maya_xgen_artist.md @@ -11,57 +11,68 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' {versions.Maya_Badge} -AYON supports Xgen classic with the follow workflow. It eases the otherwise cumbersome issues around Xgen's side car files and hidden behaviour inside Maya. The workflow supports publishing, loading and updating of Xgen collections, along with connecting animation from geometry and (guide) curves. +AYON supports **Xgen** classic (using **Collections** and **Descriptions**) with the following workflow. -## Setup +`AYON` integration of Xgen eases the otherwise cumbersome issues around Xgen's side car files and hidden behaviour inside Maya. The workflow supports publishing, loading and updating of Xgen collections, along with connecting animation from geometry and (guide) curves also allowing you to fully manage its versions and iterations. -### Settings +:::warning +Interactive Grooms are not supported within **AYON**, use **Xgen** descriptions with **Placing and Shaping Guides** control type when creating your setup +::: -Go to project settings > `Maya` > enable `Open Workfile Post Initialization`; +## Workflow -`project_settings/maya/open_workfile_post_initialization` +:::info +Please check **AYON Setup** section at the bottom of this page for details whats neccessary when using Xgen with AYON first! +::: -This is due to two errors occurring when opening workfile containing referenced xgen nodes on launch of Maya, specifically: +`Xgen` workflow consists of first creating an `Xgen` setup (aka rig), sharing it via publishing within the project, connecting such an `Xgen` product with existing animated data and optionally driving such a setup with simulation using guide curves, and finally outputting rendered images with hair strands. -- ``Critical``: Duplicate collection errors on launching workfile. This is because Maya first imports Xgen when referencing in external Maya files, then imports Xgen again when the reference edits are applied. -``` -Importing XGen Collections... -# Error: XGen: Failed to find description ball_xgenMain_01_:parent in collection ball_xgenMain_01_:collection. Abort applying delta: P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_sh040_Lighting_v001__ball_xgenMain_01___collection.xgen # -# Error: XGen: Tried to import a duplicate collection, ball_xgenMain_02_:collection, from file P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_sh040_Lighting_v001__ball_xgenMain_02___collection.xgen. Aborting import. # -``` -- ``Non-critical``: Errors on opening workfile and failed opening of published xgen. This is because Maya imports Xgen when referencing in external Maya files but the reference edits that ensure the location of the Xgen files are correct, has not been applied yet. -``` -Importing XGen Collections... -# Error: XGen: Failed to open file: P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_ball_xgenMain_v035__ball_rigMain_01___collection.xgen # -# Error: XGen: Failed to import collection from file P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_ball_xgenMain_v035__ball_rigMain_01___collection.xgen # -``` - -Go to project settings > `Deadline` > `Publish plugins` > `Maya Submit to Deadline` > disable `Use Published scene`; +### Creating Xgen publish -`project_settings/deadline/publish/MayaSubmitDeadline/use_published` +Begin with creating `Xgen` collection consisting of description(s) while selecting groom geometry ideally comming from loaded product using `AYON` >`Loader`. +You should be familiar with `Xgen` and its practices and following these when creating the setup on your loaded model. -This is due to temporary workaround while fixing rendering with published scenes. +![Xgen Create Publish](assets/maya/artist/xgen_create_2.gif) -## Create +:::info +Use your character **model or rig** product loaded via **AYON Loader** before starting to setup **Xgen** +::: -Create an Xgen instance to publish. This needs to contain only **one Xgen collection**. +Once your `Xgen` setup is ready, select it and create an `Xgen` publish instance type. This needs to contain only **one Xgen collection**. `AYON > Create... > Xgen` -You can create multiple Xgen instances if you have multiple collections to publish. +![Xgen Create Publish](assets/maya/artist/xgen_create.gif) -### Publish +:::tip +You can create multiple `Xgen` publish instances within single workfile each representing single `Xgen` collection. You can pick different name `Variant` for such occasions resulting in `XgenHead` and `XgenBody` etc. But most of the times single collection will do as it can consist of multiple descriptions representing these anyway. +::: -The publishing process will grab geometry used for Xgen along with any external files used in the collection's descriptions. This creates an isolated Maya file with just the Xgen collection's dependencies, so you can use any nested geometry when creating the Xgen description. An Xgen version will consist of: +### Publishing Xgen setup + +Once you are ready with your `Xgen` setup you can trigger `Publish` action via `AYON`>`Publish`. + +![Xgen Publish](assets/maya/artist/xgen_publish.gif) + +The publishing process will grab geometry used for grooming `Xgen` along with any external files used in the collection's descriptions. This creates an isolated Maya file with just the `Xgen` collection's dependencies, so you can use any nested geometry when creating the `Xgen` description. An `Xgen` version will consist of: - Maya file (`.ma`) - this contains the geometry and the connections to the Xgen collection and descriptions. - Xgen file (`.xgen`) - this contains the Xgen collection and description. - Resource files (`.ptx`, `.xuv`) - this contains Xgen side car files used in the collection and descriptions. -## Load +You should end up with new `Xgen` product `v001` in your project and such a product can be later loaded to any maya workfile within a project... + +### Loading Xgen -Open the Loader tool, `AYON > Loader...`, and navigate to the published Xgen version. On right-click you'll get the option `Reference Xgen (ma)` -When loading an Xgen version the following happens: +Open the `AYON > Loader...`, and navigate to the published `Xgen` version. On right-click action you'll get the option to `Reference Xgen (ma)` into your active workfile. + +![Xgen Load](assets/maya/artist/xgen_load.gif) + +:::warning +Save your maya workfile if you didn't before attempting to load Xgen product into your scene as it needs to be saved first because of Xgen side car files writing! Otherwise warning message appears telling you to do so... +::: + +When loading an `Xgen` product and version the following happens: - References in the Maya file. - Copies the Xgen file (`.xgen`) to the current workspace. @@ -69,38 +80,112 @@ When loading an Xgen version the following happens: - Makes a custom attribute on the Xgen collection, `float_ignore`, which can be seen under the `Expressions` tab of the `Xgen` UI. This is done to initialize the Xgen delta file workflow. - Setup an Xgen delta file (`.xgd`) to store any workspace changes of the published Xgen version. -When the loading is done, Xgen collection will be in the Xgen delta file workflow which means any changes done in the Maya workfile will be stored in the current workspace. The published Xgen collection will remain intact, even if the user assigns maps to any attributes or otherwise modifies any attribute. +:::info +Once loading completes, the `Xgen` collection enters the Xgen delta file workflow. This ensures that modifications in the Maya workfile are saved to the current workspace. The original Xgen collection remains unchanged, allowing for map assignments or attribute alterations without affecting the base setup. Thus, shot-specific tweaks can be made safely, preserving the integrity of the initial configuration. +::: + +### Updating Xgen -### Updating +When there are changes to the `Xgen` product and new version shows up, the user will be notified when opening the workfile or publishing. Since the `Xgen` is referenced in the active maya workfile, it follows the standard Maya referencing system and overrides. -When there are changes to the Xgen version, the user will be notified when opening the workfile or publishing. Since the Xgen is referenced, it follows the standard Maya referencing system and overrides. +Use `AYON` > `Manage` to set / change `Xgen` product `version` as with any other product types `AYON` offers. +![Xgen Manage](assets/maya/artist/xgen_manage.gif) + +:::note For example publishing `xgenMain` version 1 with the attribute `renderer` set to `None`, then version 2 has `renderer` set to `Arnold Renderer`. When updating from version 1 to 2, the `renderer` attribute will be updated to `Arnold Renderer` unless there is a local override. +::: -### Connect Patches +### Connecting Xgen to animation When loading in an Xgen version, it does not have any connections to anything in the workfile, so its static in the position it was published in. Use the [Connect Geometry](addon_maya_artist#connect-geometry) action to connect Xgen to any matching loaded animated geometry. -### Connect Guides +![Xgen Manage](assets/maya/artist/xgen_connect_geo.gif) + +:::info +`Animation` or `Pointcache` product type need to be used for connecting `Xgen` also reffered as `connect patches` in Xgen user docs. +::: + + +### Connect Guide Curves -Along with patches you can also connect the Xgen guides to an Alembic cache. +Along with patches (aka animated character model meshes) you can also connect the `Xgen` guides to an `Alembic` cache consisting of matching NURBS curves originating from simulation / other DCCs like `Houdini` etc. #### Usage -Select 1 animation container, of family `animation` or `pointcache`, then the Xgen containers to connect to. Right-click > `Actions` > `Connect Xgen`. +Navigate to `AYON` > `Manage` +First selecting the `animation` product container, of `animation` or `pointcache` type, then the `Xgen` product container to connect to. -***Note: Only alembic (`.abc`) representations are allowed.*** +Right-click > `Actions` > `Connect Xgen`. + +![Xgen Manage](assets/maya/artist/xgen_connect_xgn.gif) + +:::warning +Only alembic `.abc` representation is allowed and need to contain only nurbs curves matching Xgen guides present in the particular setup +::: #### Details -Connecting the guide will make Xgen use the Alembic directly, setting the attributes under `Guide Animation`, so the Alembic needs to contain the same amount of curves as guides in the Xgen. +Connecting the guide will make Xgen use the Alembic directly, setting the attributes under `Xgen` / `Guide Animation`, so the Alembic needs to contain the same amount of curves as guides in the Xgen. The animation container gets connected with the Xgen container, so if the animation container is updated so will the Xgen container's attribute. -## Rendering +### Rendering + +First check **AYON Setup** section below if all correctly setup within AYON settings. -To render with Xgen, follow the [Rendering With AYON](addon_maya_artist#rendering-with-ayon) guide. +To render with Xgen, follow the [Rendering With AYON](addon_maya_artist#rendering-with-ayon) guide. AYON will manage all necessary actions related to Xgen and its source files, including baking patches and other requirements for successful rendering of the animated sequence. + +:::note Details +When submitting a workfile with Xgen for rendering, all Xgen-related files are collected and published as the workfile's resources. This means the published workfile is no longer referencing the workspace's Xgen files and carries all dependencies exclusive to the rendering workfile. +::: + +## AYON Setup + +In order to be able to use `Xgen` in the `AYON` pipeline, a few setup steps need to be done first... + +### Maya Addon Settings +On the server, navigate to the following settings section: + +Project settings > `Maya` > enable `Open Workfile Post Initialization`; + +`project_settings/maya/open_workfile_post_initialization` + +![Maya Addon Settings](assets/maya/artist/xgen_maya_settings.gif) + +:::tip +You can set up these also on the Studio Settings level if preferable acting then as defaults for any present or future AYON projects not just for the active Project selected. +::: + +This is due to two errors occurring when opening workfile containing referenced `Xgen` nodes on launch of Maya specifically: + +- ``Critical``: Duplicate collection errors on launching workfile. This is because Maya first imports Xgen when referencing in external Maya files, then imports Xgen again when the reference edits are applied. +``` +Importing XGen Collections... +# Error: XGen: Failed to find description ball_xgenMain_01_:parent in collection ball_xgenMain_01_:collection. Abort applying delta: P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_sh040_Lighting_v001__ball_xgenMain_01___collection.xgen # +# Error: XGen: Tried to import a duplicate collection, ball_xgenMain_02_:collection, from file P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_sh040_Lighting_v001__ball_xgenMain_02___collection.xgen. Aborting import. # +``` +- ``Non-critical``: Errors on opening workfile and failed opening of published xgen. This is because Maya imports Xgen when referencing in external Maya files but the reference edits that ensure the location of the Xgen files are correct, has not been applied yet. +``` +Importing XGen Collections... +# Error: XGen: Failed to open file: P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_ball_xgenMain_v035__ball_rigMain_01___collection.xgen # +# Error: XGen: Failed to import collection from file P:/PROJECTS/OP01_CG_demo/shots/sh040/work/Lighting/cg_ball_xgenMain_v035__ball_rigMain_01___collection.xgen # +``` + +### Deadline Addon Settings + +In order to be able to render on AWS Deadline without Xgen errors... + +On the `AYON` server, navigate to the following settings section: + +Project settings > `Deadline` > `Publish plugins` > `Maya Submit to Deadline` > disable `Use Published scene` + +`project_settings/deadline/publish/MayaSubmitDeadline/use_published` -### Details +![DL Addon Settings](assets/maya/artist/xgen_dl_settings.gif) -When submitting a workfile with Xgen, all Xgen related files will be collected and published as the workfiles resources. This means the published workfile is no longer referencing the workspace Xgen files. +:::info +By setting it **AYON** will use **workfile** scene **directly instead of published** one for rendering as a temporary workaround +due to current Xgen limitations. This should be fixed in the future thought allowing using standard published exclusive workfile when +rendering on the farm instead. +::: \ No newline at end of file diff --git a/website/docs/addon_motionbuilder_admin.md b/website/docs/addon_motionbuilder_admin.md new file mode 100644 index 00000000..3f30d919 --- /dev/null +++ b/website/docs/addon_motionbuilder_admin.md @@ -0,0 +1,39 @@ +--- +id: addon_motionbuilder_admin +title: Motionbuilder Admin Docs +sidebar_label: Motionbuilder +--- +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.MotionBuilder_Badge} + + +:::caution Unknown support for MotionBuilder 2023 and below + +The AYON MotionBuilder addon was initially developed with MotionBuilder 2024 and 2025. +Hence functionality was not tested in older versions than 2024 and may not work. +::: + +## Supported Workflows + +The MotionBuilder addon currently enables you to import models, rigs, animations, and cameras. It also supports exporting animations and managing workfiles through saving, opening, and publishing. + +:::info MotionBuilder Addon Settings +The MotionBuilder addon does not include individual settings, so it won't be listed in your studio's addon settings. However, this does not affect the addon's ability to utilize the core settings. + +To detect whether `motionbuilder` addon is in your bundle, check the Bundles page (shortcut `B+B`). +![](assets/motionbuilder/motion_builder_in_bundle_settings.png) +::: + +## Publish Plugins + +The MotionBuilder addon leverages the plugins from the core addon. Many of these plugins offer filters where you can specify motionbuilder as the host. For example: + +- **Validate Version:** Ensures that the workfile version is up to date with the latest in AYON. Access this validator at `ayon+settings://core/publish/ValidateVersion` and include MotionBuilder's host name, which by default is `motionbuilder`. +![](assets/motionbuilder/valid_version_plugin.png) + + +- **Validate Outdated Container:** Checks that any loaded content is the most recent version. This validator is accessible at `ayon+settings://core/publish/ValidateOutdatedContainers`. Add MotionBuilder's host name, which by default is `motionbuilder`. +![](assets/motionbuilder/validate_outdated_containers.png) diff --git a/website/docs/addon_motionbuilder_artist.md b/website/docs/addon_motionbuilder_artist.md new file mode 100644 index 00000000..9cc8e29b --- /dev/null +++ b/website/docs/addon_motionbuilder_artist.md @@ -0,0 +1,85 @@ +--- +id: addon_motionbuilder_artist +title: Motionbuilder Docs +sidebar_label: Motionbuilder +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.MotionBuilder_Badge} + + + +## First Steps With AYON +With AYON plugins in Motionbuilder, you can save/load project in workfile tools, load your rig/character/animation into the scene, and publish your scene and animation. + +Locate **AYON Icon** in the OS tray (if hidden dive in the tray toolbar). + +> If you cannot locate the AYON icon ...it is not probably running so check [Getting Started](artist_getting_started.md) first. + +By clicking the icon ```AYON Menu``` rolls out. + +![Menu AYON](assets/3dsmax_tray_OP.png) + +Choose ```AYON Menu > Launcher``` to open the ```Launcher``` window. + +When opened you can **choose** the **project** to work in from the list. Then choose the particular **asset** you want to work on then choose **task** +and finally **run Motionbuilder by its icon** in the tools. + +![AYON Launcher](assets/motionbuilder_ayon_launcher.png) + +:::note Launcher Content +The list of available projects, assets, tasks and tools will differ according to your Studio and need to be set in advance by supervisor/admin. +::: + +## Running in the Motionbuilder + +If Motionbuilder has been launched via OP Launcher there should be **AYON Menu** visible in Motionbuilder **top header** after start. +This is the core functional area for you as a user. Most of your actions will take place here. + +![AYON Launcher](assets/motionbuilder_ayon_menu.png) + +:::note AYON Menu +User should use this menu exclusively for **Opening/Saving** when dealing with work files not standard ```File Menu``` even though user still being able perform file operations via this menu but preferably just performing quick saves during work session not saving actual workfile versions. +::: + +## Creating and Publishing Instances + +:::warning Important +Before proceeding further please check [Glossary](artist_concepts.md) and [What Is Publishing?](artist_publish.md) So you have clear idea about terminology. +::: + +### Intro + +Current MotionBuilder Integration supports ```Workfile```and ```Animation``` product types for publishing while ```Animation```, ```Camera```, +```Model```and ```Rig``` for loading. + +Both **Animation** and **Workfile** product type are outputting the animation in FBX format. **Workfile** product type generally outputs all objects from the scene. **Animation** product type allow users to choose export by model selections and their FBX export options before publishing. + +## Publish Animation +Select the objects in the scene you want to export and go **AYON -> Create** and select **Animation**. +There are several FBX options available being user customizable in AYON: *Embed Media*, *Save Selected Models Only*, *Keep Transform Hierarchy* + +*Embed Media*: When enabled, it is possible to embed all media into FBX file. If the FBX being in ASCII format then it is impossible to embed any media in. + +*Save Selected Models Only*: Only selected models will be saved. + +*Keep Transform Hierarchy*: Indicate if transform hierarchy is kept when SaveSelectedModelsOnly is true. Default value is false to ensure consistent behavior with SaveSelected operation via file menu. + + +![AYON Creator](assets/motionbuilder_creator.png) + +If you turn on *Save Selected Models Only*, and select your model in the scene, the model is added to the created set. AYON would solely publish the animated model under the set. + + +## Loading Products +The pointcache loader only imports the asset in FBX format which is published from ```Animation```, ```Camera```, ```Model```and ```Rig```. + +The loader will create the set which includes the loaded assets. All these assets are with the namespace, which is useful for updating assets. + +## Removing Products +If the users remove the assets by going to **AYON -> Manage**, right-click and **Remove items**. The assets would be removed along with its namespace. + +![Motionbuilder Scene Inventory](assets/motionbuilder_scene_inventory.png) \ No newline at end of file diff --git a/website/docs/addon_nuke_artist.md b/website/docs/addon_nuke_artist.md index 34bddba4..492d6960 100644 --- a/website/docs/addon_nuke_artist.md +++ b/website/docs/addon_nuke_artist.md @@ -127,6 +127,41 @@ It is usually enough if you once per while use this option just to make yourself + +### Push to Project + +
+
+ +This tool enables you to transfer your workfile to any accessible project. It simplifies packing and moving a workfile to a Library project. Additionally, It's handy when a shot spans multiple projects and requires the same workfile in each. The tool systematically processes all linked resources and relocates them to the new destination within the `/resources` folder. + +
+
+ +![Push to Project menu](assets/nuke/push_to_project_menu.png) + +
+
+ +
+
+ +1. Choose the desired project for the workfile. +2. Pick the specific folder within the project for the workfile. +3. Determine the task context. +4. Click 'OK' and await completion. + +A confirmation message will display the workfile's destination path. + +
+
+ +![Push to Project dialogue](assets/nuke/push_to_project_dialogue.png) + +
+
+ + ## Nuke QuickStart This QuickStart is short introduction to what AYON can do for you. It attempts to make an overview for compositing artists, and simplifies processes that are better described in specific parts of the documentation. diff --git a/website/docs/addon_openrv_artist.md b/website/docs/addon_openrv_artist.md index 3e599343..a30ed238 100644 --- a/website/docs/addon_openrv_artist.md +++ b/website/docs/addon_openrv_artist.md @@ -37,7 +37,7 @@ You should find `Ayon` menu next to `Window`. All Ayon target publish operations You can load any image, image sequences or movies (`.mov`, `.mp4`) via `Load` option in `Ayon` menu. -![Ayon Loader](assets/openrv_load.png) +![Ayon Loader](assets/openrv/openrv_load.png) (You could confirm or re-arrange order of loaded elements in `Tools > Session Manager`). @@ -45,7 +45,7 @@ You can load any image, image sequences or movies (`.mov`, `.mp4`) via `Load` op `Manage` options prints a list of loaded elements and allows to update them to latest version if necessary. -![Ayon Scene Inventory](assets/openrv_manage.png) +![Ayon Scene Inventory](assets/openrv/openrv_manage.png) ## Publish @@ -54,7 +54,17 @@ Whenever you are ready to publish final product of a review, press `Publish` but An instance of `workfile` product type will be created automatically for you. This a primary product type that gets versioned and tracked in `Ayon`. It produces versioned `.rv` workfile. -![Ayon Publish](assets/openrv_publish.png) +![Ayon Publish](assets/openrv/openrv_publish.png) Hit `Publish` button in bottom right corner whenever ready. If there are no validation issues, `workfile` instance should be published and current `working` workfile versioned up. + +## Open in OpenRV + +If your OpenRV is opened with `-network` flag (set in `ayon+settings://applications/applications/openrv/variants`) + +![OpenRV networking](assets/openrv/openrv_networking.png) + +you can load and play any reviewable item directly from Tray Loader or any DCC. + +![Play in OpenRV](assets/openrv/openrv_open.png) diff --git a/website/docs/addon_site_sync_admin.md b/website/docs/addon_site_sync_admin.md index 9236cf1b..20453d90 100644 --- a/website/docs/addon_site_sync_admin.md +++ b/website/docs/addon_site_sync_admin.md @@ -25,7 +25,7 @@ At the moment site sync is only able to deal with published files (eg. in `publi ## Studio Settings -First of all, you need to include Site Sync Addon to your bundle, and to use synchronization, *Site Sync* needs to be enabled globally in **ayon+settings://sitesync**. +First of all, you need to include `Site Sync Addon` to your bundle, and to use synchronization, *Site Sync* needs to be enabled globally in **ayon+settings://sitesync**. ![Configure module](assets/site_sync_system.png) @@ -200,20 +200,20 @@ As current implementation relies heavily on Settings and Site Settings, backgrou To do this: -- run OP `Tray` with environment variable AYON_LOCAL_ID set to name of active (source) site. In most use cases it would be studio (for cases of backups of everything published to studio site to different cloud site etc.) +- run AYON `Tray` with environment variable AYON_SITE_ID set to name of active (source) site. In most use cases it would be studio (for cases of backups of everything published to studio site to different cloud site etc.) - start `Tray` - check `Local ID` in information dialog after clicking on version number in the Tray -- open `Site Settings` in the `Ayon Server` +- open `Site Settings` in the `Ayon Server` (`ayon+settings://sitesync?project=ayon_test&site=studio`) - configure for each project necessary active site and remote site - close `Tray` -- run Ayon launcher from a command line with `syncserver` and `--active_site` arguments +- run AYON launcher from a command line with `syncservice` and `--active_site` arguments This is an example how to trigger background syncing process where active (source) site is `studio`. -(It is expected that OP is installed on a machine, `ayon_console` is on PATH. If not, add full path to executable. +(It is expected that AYON is installed on a machine, `ayon_console` is on PATH. If not, add full path to executable. ) ```shell -ayon_console syncserver --active_site studio +ayon_console addon sitesync syncservice --active_site studio ``` diff --git a/website/docs/addon_slack.md b/website/docs/addon_slack.md deleted file mode 100644 index 3d4e112d..00000000 --- a/website/docs/addon_slack.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -id: addon_slack_admin -title: Slack Admin Docs -sidebar_label: Slack ---- - -import ReactMarkdown from "react-markdown"; -import versions from '@site/docs/assets/json/Ayon_addons_version.json' - - -{versions.Slack_Badge} - - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - -This module allows configuring profiles(when to trigger, for which combination of task, host and family) -and templates(could contain {} placeholder) to send notification to Slack channel(s) -whenever configured asset type is published. - - -## App installation - -Slack application must be installed to company's Slack first. - -Please locate `ayon/modules/slack/manifest.yml` file in deployed AYON installation and follow instruction at -https://api.slack.com/reference/manifests#using and follow "Creating apps with manifests". - -### App icon - -If you would like to enrich bot with an icon, Slack admin must add the icon after app installation. - -Go to your Slack app home (something like https://api.slack.com/apps/XXXXXXXX/general?) > Basic information > Display Information. -You can upload any image you want, or for your convenience locate prepared AYON icon in your installed AYON installation in `ayon\modules\slac\resources`. - -## Settings - -If Slack addon is enabled on the server, admin can configure notification for all project (`User menu > Settings > Studio Settings`) -or per project (`Project menu > select project > Manage projects > Project Settings`) - -### Token -Most important for module to work is to fill authentication token -```Project settings > Slack > Publish plugins > Token``` - -This token should be available after installation of the app in the Slack dashboard. -It is possible to create multiple tokens and configure different scopes for them. - -![Get token](assets/slack_token.png) - -### Profiles -Profiles are used to select when to trigger notification. One or multiple profiles -could be configured, `Families`, `Task names` (regex available), `Host names`, `Product names` (regex available) combination is needed. - -Eg. If I want to be notified when render is published from Maya, setting is: - -- family: 'render' -- host: 'Maya' - -### Messages to channels - -#### Channels -Multiple messages could be delivered to one or multiple channels, by default app allows Slack bot -to send messages to 'public' channels (eg. bot doesn't need to join the channel first). - -![Configure module](assets/slack_project.png) - -#### Upload thumbnail -Integration can upload 'thumbnail' file (if present in an instance), for that bot must be -manually added to each target channel by Slack admin first! -(In target channel write: ```/invite @ayonNotifier``) - -#### Upload review -Integration can upload 'review' file (if present in an instance), for that bot must be -manually added to each target channel by Slack admin first! -(In target channel write: ```/invite @ayonNotifier``) - -This option is limited by `Upload review maximum file size` value in `Profiles` section. It might make sense to limit uploading -of reviews only up to certain size. If the review file hits that limit, only link to studio accessible location will be inserted instead. - -Burnin version of the review (usually .mp4) is preferred if present. - -Please be sure that this configuration is viable for your use case. In case of uploading large reviews to Slack, -all publishes will be slowed down and you might hit a file limit on Slack pretty soon (it is 5GB for Free version of Slack, any file cannot be bigger than 1GB). -You might try to add `{review_filepath}` to message content instead of using `Upload review`. This link might help users to find review easier on their machines. -(It won't show a playable preview though!) - -#### Message -Message content can use Templating (see [Available template keys](admin_settings_project_anatomy#available-template-keys)). - -Few keys also have Capitalized and UPPERCASE format. Values will be modified accordingly ({Asset} >> "Asset", {FAMILY} >> "RENDER"). - -**Additional implemented keys:** -- review_filepath - -##### Message example -``` -{Product} was published for {ASSET} in {task[name]} task. - -Here you can find review {review_filepath} -``` - -##### Dynamic message for artists -If artists uses host with implemented Publisher (new UI for publishing, implemented in Tray Publisher, Adobe products etc), it is possible for -them to add additional message (notification for specific users for example, artists must provide proper user id with '@'). -Additional message will be sent only if at least one profile, eg. one target channel is configured. -All available template keys (see higher) could be used here as a placeholder too. - -#### User or group notifications -Message template or dynamic data could contain user or group notification, it must be in format @artist.name, '@John Doe' or "@admin group" for display name containing space. -If value prefixed with @ is not resolved and Slack user is not found, message will contain same value (not translated by Slack into link and proper mention.) - -#### Message retention -Currently no purging of old messages is implemented in AYON. Admins of Slack should set their own retention of messages and files per channel. -(see https://slack.com/help/articles/203457187-Customize-message-and-file-retention-policies) \ No newline at end of file diff --git a/website/docs/addon_slack_admin.md b/website/docs/addon_slack_admin.md new file mode 100644 index 00000000..ffec6b4c --- /dev/null +++ b/website/docs/addon_slack_admin.md @@ -0,0 +1,171 @@ +--- +id: addon_slack_admin +title: Slack Admin Docs +sidebar_label: Slack +description: AYON Slack Addon's documentations for admins. +toc_max_heading_level: 5 +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.Slack_Badge} + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +This addon enables you to set up profiles that specify when to trigger notifications, and for which combination of task, host, and product types. +It also supports customizable message templates that use placeholders (denoted by curly brackets `{}`) that are automatically populated at the time of publishing. + + +## App installation + +Please ensure that the AYON Slack application is installed on the company's Slack using the `manifest.yml` before proceeding to AYON settings. + + + + + +1. Locate the `manifest.yml` file. You can find it in the `AppData` folder, typically at `c:\Users\YOUR_USER\AppData\Local\Ynput\AYON\addons\slack_X.X.X\ayon_slack\`. +2. To create your app, please follow the steps outlined in the "Creating apps with manifests" section at [Slack API Documentation](https://api.slack.com/reference/manifests#using). + +:::tip +You can quickly navigate to the local app data using the environment variable shortcut: `%LOCALAPPDATA%`. For example, using `%LOCALAPPDATA%\Ynput\AYON\addons` as path to see your installed addons. +::: + + + + + +1. Locate the `manifest.yml` file. You can find it in the user data folder, typically at `~/.local/share/Ynput/AYON/addons/slack_X.X.X/ayon_slack/`. +2. To create your app, please follow the steps outlined in the "Creating apps with manifests" section at [Slack API Documentation](https://api.slack.com/reference/manifests#using). + + + + + +1. Locate the `manifest.yml` file. You can find it in the `Application Support` folder, typically at `~/Library/Application Support/Ynput/AYON/addons/slack_X.X.X/ayon_slack/`. +2. To create your app, please follow the steps outlined in the "Creating apps with manifests" section at [Slack API Documentation](https://api.slack.com/reference/manifests#using). + + + + + +### Custom app icon + +Customize your Slack bot by adding a custom icon. +After the app is installed, the Slack admin can easily upload an image to serve as the app's icon. + +:::info +Please note that this setting is found within the Slack app settings, not in AYON settings. +::: + +Here's how to do it: + +1. Navigate to your Slack app settings at a URL similar to `https://api.slack.com/apps/XXXXXXXX/general`. +2. Click on 'Basic Information' and then find 'Display Information'. +3. Here, you can upload any image of your choice. For ease, you can use the [pre-made AYON icon](https://github.com/ynput/ayon-launcher/blob/develop/common/ayon_common/resources/AYON.png). + +## Settings + +![](assets/slack/notifications_to_slack.png) + +Once the Slack addon is enabled on the server, an AYON admin can turn on push `Notifications to Slack`: + +- For all projects: + - `ayon+settings://slack/publish/CollectSlackFamilies/enabled` +- For a specific project, replace {PROJECT_NAME} with your project's name: + - `ayon+settings://slack/publish/CollectSlackFamilies/enabled?project={PROJECT_NAME}` + +### Token + +![](assets/slack/auth_key.png) + +For the Slack addon to function properly, it's essential to enter the authentication token: + +- For all projects: + - `ayon+settings://slack/token` +- For a specific project, replace {PROJECT_NAME} with your project's name: + - `ayon+settings://slack/token?project={PROJECT_NAME}` + +
Get Slack Token +You'll find this token in the Slack dashboard once the app is installed. Remember, you can create separate tokens for use with different projects. + +![Get token](assets/slack/slack_token.png) + +
+ +### Profiles + +![](assets/slack/profiles.png) + +Profiles determine when notifications are triggered. You can configure one or several profiles based on `Product types`, `Hosts`, `Task types`, and `Task names` or `Product names` (with regex support). + +For example, to receive notifications when a render is published from Maya, the settings would be: + +- Product type: 'render' +- Host: 'Maya' + +### Upload review maximum file size + +This setting controls the maximum file size for the `Upload Review` feature within the `Message to Channels` section. It sets a cap on the size of review files you can upload. If a file exceeds this limit, a link to the file's location in the studio will be shared instead. +Additionally, if `Extract Burnin` plugin is enabled, AYON will default to using the burnin version of the review. + +:::info Slack storage limit +Uploading large files to Slack can slow down the publishing process since publish plugins run one after another, causing a pause until the upload completes. +Also, keep in mind that you can easily hit Slack's storage ceiling—5GB for the free version, and a max of 1GB for any single file. +::: + +### Messages to channels + +![Configure module](assets/slack/messages_to_channels.png) + +- **Channels:** +Specify one or more channels where you'd like the plugin to send messages. +:::info +Please note that the Slack bot can access public channels by default, so there's no need for it to join them first. +However, your Slack bot must be manually invited to each target channel by a Slack admin if they are private channels. +To add your bot to a target channel, simply mention it in the message field with the command: `/invite @ayonNotifier`. +::: +- **Upload thumbnail** & **Upload review:** +The plugin is capable of uploading a 'thumbnail' or 'review' from an instance (if they are present in an instance). +:::info +We have one additional implemented key `{review_filepath}`. +to message content instead of using `Upload review`. This link might help users to find review easier on their machines. +(It won't show a playable preview though!). +::: +- **Message:** +Message content can use template keys (see [Available template keys](admin_settings_project_anatomy.md#available-template-keys)). +Few keys also have Capitalized and UPPERCASE format. Values will be modified accordingly. e.g. `{Folder[name]}` ➜ "Gun", `{PRODUCT}` ➜ "RENDER". +:::tip Message Example + ``` + {Product} was published for {FOLDER[NAME]} in {task[name]} task. + Here you can find review {review_filepath}. + ``` +::: + + + +#### Further info about messages +- **Dynamic message for artists:** +It is possible for artists to add additional message (notification for specific users for example, artists must provide proper user id with `@`). +Additional message will be sent only if at least one profile, eg. one target channel is configured. +All available template keys (see higher) could be used here as a placeholder too. + +- **User or group notifications:** +Message template or dynamic data could contain user or group notification, it must be in format `@artist.name`, `@John Doe` or `@admin group` for display name containing space. +If value prefixed with `@` is not resolved and Slack user is not found, message will contain same value (not translated by Slack into link and proper mention.) + +- **Message retention:** +Currently no purging of old messages is implemented in AYON. Admins of Slack should set their own retention of messages and files per channel. +See [Customize-message-and-file-retention-policies](https://slack.com/help/articles/203457187-Customize-message-and-file-retention-policies). \ No newline at end of file diff --git a/website/docs/addon_traypublisher_admin.md b/website/docs/addon_traypublisher_admin.md index aca82ae9..96bb410f 100644 --- a/website/docs/addon_traypublisher_admin.md +++ b/website/docs/addon_traypublisher_admin.md @@ -28,4 +28,71 @@ Contains list of implemented families to show in middle menu in Tray Publisher. - **Extensions** ![example of simple creator plugin](assets/admin_traypublisher_settings_simple.png) -![example of complex creator plugin](assets/admin_traypublisher_settings_simple_extensions.png) \ No newline at end of file +![example of complex creator plugin](assets/admin_traypublisher_settings_simple_extensions.png) + + + +# CSV publishing + +You can use TrayPublisher to upload CSV data in two ways: interactive mode or headless mode (CLI). You can set up the CSV columns and what kind of data they should have. For each column, you can pick a data type and if it's needed or not. Plus, you can set a default value for when some data is missing. + +:::info CSV publishing +Tray publisher pushes your products into an existing tasks in AYON. +Tray publisher doesn't support **creating missing entities if they don't exist** yet. +Currently, the CSV data must pass a preflight check, so we don't need to validate it. + +Please ensure your shots and assets are created in your project. +::: + +## Feature settings + +To use the feature, you must first turn it on and set it up in the Studio settings under the Traypublisher addon. There, you can decide what goes in the CSV columns and what they need. + +![CSV Ingest settings](assets/traypublisher/csv_publishing_settings.png) +1. Enable the feature in `ayon+settings://traypublisher/create/IngestCSV` +2. Define the columns and their requirements in `ayon+settings://traypublisher/create/IngestCSV/columns_config/columns` +3. Define Representation requirements in `ayon+settings://traypublisher/create/IngestCSV/representations_config/representations` +4. Save the settings and you are good for CSV ingestion + +## CLI interface + +- **--filepath**: The absolute path to csv file which is in root of package folder +- **--project**: The name of a project used for ingestion +- **--folder-path**: The folder path used for ingestion data (storing csv file iterations) +- **--task**: The name of task used for ingestion data iteration backup (case sensitive!) +- **--ignore-validators**: Flag argument for skipping validators + +Example of CLI command for CSV ingestion: + +```powershell +cd "C:\Program Files\Ynput\AYON 1.0.2" +.\ayon_console.exe addon traypublisher ingestcsv --filepath '[CSV FILE ABS PATH]' --project [PROJECT_NAME] --folder-path [/FOLDER/PATH] --task [TASK NAME] --ignore-validators +``` + + +## Testing data and its use: + +1. Download testing package [ay_240319_0001.zip](https://github.com/ynput/ayon-core/files/14651928/ay_240319_0001.zip) +2. Make sure to create shots in your testing project before running the command. This process only creates products, versions, and representations, not shot folders. +3. The image below shows what the testing project should look like and how the shot hierarchy is set up to reflect the testing data found in the zip file mentioned above. + +![image](https://github.com/ynput/ayon-core/assets/40640033/577cc68e-9ffb-431e-ae07-e4ef9a18eb5d) +1. Project: Moawiya +2. CLI context: `ayon+entity://Moawiya/editorial?task=edit` +3. CSV folder: `ayon+entity://Moawiya/shots/mw_110_01_0060?task=comp` +4. CSV folder: `ayon+entity://Moawiya/shots/mw_110_01_0080?task=comp` +5. Follow the CLI command above and ingest the data. + + +# Editorial package + +Creator labeled as 'Editorial package' allows artists to import whole folder with OTIO file and resources easily. +This product type provides easy sharing of OTIO metadata for loading and creating timeline in other DCCs. + +One might want to convert all attached movie like resources into desired output format. That could be achieved by configuring +`ayon+settings://traypublisher/publish/ExtractEditorialPckgConversion` + +![Editorial package](assets/traypublisher/editorial_package_conversion.png) + +To skip conversion please toggle `Conversion enabled` to off. This propagates to Traypublisher UI where artists +could decide if they want to convert ad-hoc. \ No newline at end of file diff --git a/website/docs/addon_traypublisher_artist.md b/website/docs/addon_traypublisher_artist.md new file mode 100644 index 00000000..ae052374 --- /dev/null +++ b/website/docs/addon_traypublisher_artist.md @@ -0,0 +1,105 @@ +--- +id: addon_traypublisher_artist +title: Tray Publisher +sidebar_label: Tray Publisher +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +{versions.TrayPublisher_Badge} + + +Tray Publisher is a standalone tool for publishing products into AYON pipeline. +It can be accessed via UI or command line. + + +## Tray Publisher +How to use it ? +1. Access the tool via Tray menu. +![](assets/traypublisher/artist/open_publisher.gif) +2. Create and Publish + a. Select AYON Folder path + b. Select a Task + c. Select a product Type + d. Drop your files + e. Click create + f. Finally, click publish. +![](assets/traypublisher/artist/publish_a_product.gif) +3. Then you'll be able to access the published product via AYON Loader. +![](assets/traypublisher/artist/check_in_loader.gif) + +:::info Tray CLI Interface +Tray Publisher also provides a CLI Interface. +For more info: [Tray Publisher Admin Docs](addon_traypublisher_admin#cli-interface). +::: + +## Default Product Types +### Simple Create Plugins + +:::tip Simple Create Plugins +Admins are able to change (remove/add/modify) simple create plugins via [Tray publisher addon settings](https://ayon.ynput.io/docs/addon_traypublisher_admin#creator-plugins). +::: + +- `workfiles`: Workfiles are full scenes from any application that are directly edited by artists. They represent a state of work on a task at a given point and are usually not directly referenced into other scenes. +- `model`: Models should only contain geometry data, without any extras like cameras, locators or bones. *Keep in mind that models published from tray publisher are not validated for correctness.* +- `pointcache`: Alembic or bgeo cache of animated data +- `plate`: Any type of image seqeuence coming from outside of the studio. Usually camera footage, but could also be animatics used for reference. +- `render`: Sequence or single file renders. +- `camera`: Ideally this should be only camera itself with baked animation, however, it can technically also include helper geometry. +- `image`: Any image data can be published as image product type. References, textures, concept art, matte paints. This is a fallback 2d product type for everything that doesn't fit more specific product type. +- `vdb`: Hierarchical data structure for the efficient storage and manipulation of sparse volumetric data discretized on three-dimensional grids. +- `matchmove`: Script exported from matchmoving application to be later processed into a tracked camera with additional data. +- `rig`: CG rigged character or prop. Rig should be clean of any extra data and directly loadable into it's respective application. +- `simpleUnrealTexture`: Texture files with Unreal Engine naming conventions. +- `audio`: Audio files for review or final delivery. + + +### Editorial Simple + +Tray Publisher Editorial workflow allows mass setup of shots from reference video and EDL (Edit Decision List). + +:::info +The following video were created for Openpype (AYON's predecessor). +The workflow remains the same but the settings have been moved to AYON Server instead. +::: + + + + + +### Batch Movies + +It's capable of publishing individual mov files to specific shots based on file name. + + +:::note +Currently, This creator doesn't work as expected. +It should be fixed soon. +::: + + +### CSV Ingest +This feature allows mass publishing arbitrary files through a CSV file. +It requires a CSV file and then drag and drop it inside the Tray Publisher. +The CSV columns should follow the columns specified in your AYON tray publisher settings. +- `ayon+settings://traypublisher/create/IngestCSV/columns_config/columns` + + +Find example CSV file here: [ay_240319_0001.zip](https://github.com/ynput/ayon-core/files/14651928/ay_240319_0001.zip) + +:::info CSV Ingest +This is a working prototype and doesn't include all expected features. +e.g. it doesn't support creating missing hierarchy folders in case they are missing. +Therefore, please ensure that hierarchy folders exist before publishing. +::: + + +## Default Validators +Tray Publisher provides simple validators. +e.g. +- ColorSpace: Validate colorspace look attributes and representation colorspaces. +- Filepaths: Validate existence of source filepaths . +- Frame Ranges: Validating frame range of rendered files against state in AYON. \ No newline at end of file diff --git a/website/docs/addon_unreal_admin.md b/website/docs/addon_unreal_admin.md index dccd0ccc..0fe9abae 100644 --- a/website/docs/addon_unreal_admin.md +++ b/website/docs/addon_unreal_admin.md @@ -37,3 +37,81 @@ To use a custom path for the compiled plugin, you need to set an environment var `AYON_BUILT_UNREAL_PLUGIN=C:/Ayon/CompiledPlugin` You can set this variable either in Ayon Studio Setting in `applications/unreal/environment`, or, from there, to a specific version of Unreal. + +### Farm rendering via Deadline + +AYON Unreal integration supports rendering on Deadline, please take a look how to setup Deadline [here](addon_deadline_admin.md). + +Deadline requires Render Queue and Render Settings uassets to be physically present in unreal project at expected locations. + +By default they are expected at these paths: +- `/Game/Ayon/renderQueue` +- `/Game/Ayon/DefaultMovieRenderQueueConfig.DefaultMovieRenderQueueConfig` + +These could be modified by AYON admin in `ayon+settings://unreal/render_queue_path`. + +![Unreal AYON Render Queue and Settings](assets/unreal_render_queue_and_settings.png) + +Deadline workers need to expose location of Unreal editor for rendering via `UnrealExecutable` (or `UnrealEditorExecutable_5_4` for specific version) environment variable. +This variable could be set locally on the workers as needed or could be set and controlled by AYON by setting it in +`ayon+settings://applications/applications/unreal/variants/3/environment` + +Default value could be there as: +``` +{ + "UnrealExecutable": {"windows": "C:/Program Files/Epic Games/UE_5.4/Engine/Binaries/Win64/UnrealEditor-Cmd.exe"}, +} +``` +Please notice platform suport with `windows` key (could be also `linux` value). + + +### Perforce support + +There is also a Perforce support for rendering on a Deadline. `ayon-version-control` addon needs to be installed and configured for that. +(Install addon from AYON Marketplace or from https://github.com/ynput/ayon-version-control). + +This addon requires configuration in `Studio Settings` where `Perforce` should be selected as `Backend name`, `Host name` and `Port` filled. + +Each artist using this integration need to configure their `Local Setting` in `ayon+settings://version_control/local_setting?project=ayon_test&site=XXX-YYY-ZZZ` + +![Unreal AYON Local Settings](assets/unreal_perforce_local_settings.png) + +It is expected that value in `My Workspace Directory` would be pointing to existing and configured Perforce workspace on artist machine. +Initial checkout from Perforce should be done by P4V tool. + +AYON Perforce integration handles currently only rendering from P4 on Deadline, commits to Unreal project should be done in P4V or with +official Unreal Perforce plugin inside of Unreal editor. + +Each Deadline worker for this integration need to have set env vars: +- P4PORT (`perforce_host:1666`) +- P4USER +- P4PASSWD + +Again these variables could be set locally on the worker or be controlled by AYON in `ayon+settings://applications/applications/unreal/variants/3/environment`. +Please make sure you are modifying appropriate `Variant` of Unreal application as this configuration is separate. + + +## Manually installing Qt bindings + +It might happen that automatic installation of th Qt bindings into Unreal fails. It that case here are manual steps that can be taken to amend it: + +### Option A (preferred) + +Using Unreal's Python interpreter (located on a path like `Engine\Binaries\ThirdParty\Python3\Win64` depending on the platform): + +```sh +python -m pip install pyside6 +``` +### Option B (unsupported) +You can run following python code either directly from Unreal or using Unreal's Python interpreter: + +```python +import pip +pip.main(["install", "pyside6"]) +``` + +Be aware that calling **pip** like so is deprecated by pip itself and might not work in newer versions. + +:::note +For Unreal Engine versions `>= 5.4`, use `pyside6`. For earlier versions, use `pyside2`. +::: diff --git a/website/docs/addon_unreal_artist.md b/website/docs/addon_unreal_artist.md index 254cb732..973180ec 100644 --- a/website/docs/addon_unreal_artist.md +++ b/website/docs/addon_unreal_artist.md @@ -28,7 +28,14 @@ import loaderVideoUE from './assets/video/unreal_launch.mp4' ### Prerequisites -AYON supports Unreal Engine 5.0 and 5.1. To use it, you need to install the [AYON Integration plugin](https://temp.com) from the Unreal Marketplace. +AYON supports the latest Unreal Engine versions. To use it, you need to install the [AYON Integration plugin](https://www.unrealengine.com/marketplace/en-US/product/ayon-pipeline-integration) from the Unreal Marketplace. + +:::info +If you encounter following warning when you run Unreal, your installation is missing Qt bindings. +[Here are the steps](addon_unreal_admin#manually-installing-qt-bindings) to fix it. + +![Unreal missing Qt Bindings](assets/unreal_qtbindings_warning.png) +::: ## Unreal project and data structure @@ -592,3 +599,41 @@ Once the render is finished, you can publish the render. Click on the AYON icon - Select the ones that you want to publish, and click on **Publish**. ![Unreal AYON Tools Publish](assets/unreal_ayon_menu_publisher.png) + +### Farm rendering + +Unreal integration also supports rendering on Deadline. Process of creation of render instance is same as higher, difference is in +selection of `Farm rendering` in `Render target`. + +Deadline rendering process expects physically existing Render Queue and Render Settings uassets in the Unreal project. + +By default they are expected at these paths: +- `/Game/Ayon/renderQueue` +- `/Game/Ayon/DefaultMovieRenderQueueConfig.DefaultMovieRenderQueueConfig` + +These could be modified by AYON admin in `ayon+settings://unreal/render_queue_path` + +![Unreal AYON Render Queue and Settings](assets/unreal_render_queue_and_settings.png) + +### Perforce integration + +If Perforce integration is enabled by configured `ayon-version-control` addon in the bundle, artists could sync to any previous +changelist via small dialog that will open before opening Unreal editor. + +Artist need to have its Perforce username, password and path to existing configured Perforce workspace configure in `ayon+settings://version_control/local_setting?project=ayon_test&site=XXX-YYY-ZZZ` + +![Unreal AYON Local Settings](assets/unreal_perforce_local_settings.png) + +Any line with changelist could be selected and synched by `Sync to` button. When synching process finishes, it will be highlighted under the list of changes. + +It is expected that commits in Unreal projects will be done inside in Unreal editor official Perforce tool or via `P4V` + +![Unreal AYON Changes Viewer](assets/unreal_changes_viewer.png) + +Additional automatic instance will be created in Publisher to highlight last existing changelist id. This information will be +published to AYON server, will be used to Perforce on Deadline to synchronize to that changelist before rendering and might be used in future enhancement of integration. + +Name of the instance will start with `changelist_metadata` prefix and instance must be enabled to trigger usage of Perforce on the Deadline. +(Without it Deadline could render just from current state of Unreal project file.) + +![Unreal AYON Changelist Metadata](assets/unreal_perforce_changelist_metadata.png) diff --git a/website/docs/addon_usd_admin.md b/website/docs/addon_usd_admin.md new file mode 100644 index 00000000..071085c2 --- /dev/null +++ b/website/docs/addon_usd_admin.md @@ -0,0 +1,67 @@ +--- +id: addon_usd_admin +title: USD Admin Docs +sidebar_label: USD +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + +
+
+
+ + {versions.Core_Badge} + +
+
+ + {versions.USD_Badge} + +
+
+ + {versions.Houdini_Badge} + +
+
+ + {versions.Maya_Badge} + +
+
+ + {versions.Blender_Badge} + +
+
+
+ +:::tip +Currently, there's no need to install the [ayon-usd](https://github.com/ynput/ayon-usd) addon to utilize our USD workflow outlined in our [USD Artist Docs](category/usd). + +The base functionality is implemented in the [ayon-core](https://github.com/ynput/ayon-core) addon and each DCC specific workflow is implemented in its related DCC addon. e.g. Houdini USD workflow is implemented in [ayon-houdini](https://github.com/ynput/ayon-houdini). + +For the future, it is considered to move all the USD bits into [ayon-usd](https://github.com/ynput/ayon-usd) addon in a similar fashion to [ayon-deadline](https://github.com/ynput/ayon-deadline) addon. +::: + +## USD Addon Settings +Currently, the usd addon is only responsible for downloading of USD binaries for AYON, along with pre-built AYON USD resolvers for various DCCs. + +> The snippet below is from an early version of the USD add-on, which is still in development. + +![](assets/usd/admin/usd_addon_settings.png) + +## USD Workflow Settings +The USD workflow settings are currently limited. You can customize only the names and order of department layers at this stage. + +- `ayon+settings://core/publish/CollectUSDLayerContributions` + +![](assets/usd/admin/usd_core_settings_1.png) + +:::tip +Hover over the `Order` field for more details on the strength ordering: +- Higher order means a higher strength and stacks the layer on top. +- Opinions from a layer that is on top are stronger than those below it. +- See the USD acronym [LIVRPS](https://remedy-entertainment.github.io/USDBook/terminology/LIVRPS.html) for more details on USD's strength ordering. +::: \ No newline at end of file diff --git a/website/docs/addon_usd_artist_contribution_workflow.md b/website/docs/addon_usd_artist_contribution_workflow.md new file mode 100644 index 00000000..4d4654a2 --- /dev/null +++ b/website/docs/addon_usd_artist_contribution_workflow.md @@ -0,0 +1,313 @@ +--- +id: addon_usd_artist_contribution_workflow +title: AYON USD Contribution Workflow +sidebar_label: Contribution Workflow +--- + +Automatically contribute products into USD assets or shots + +:::info +The **AYON USD Contribution Workflow** was introduced with PR [Implement USD workflow with global asset/shot contributions plug-in](https://github.com/ynput/ayon-core/pull/295) +::: + +## What is it? + +The AYON USD Contribution Workflow allows to create small contribution publishes from DCCs with USD export support to directly add your publish into an asset's model or look variants or a shot's department layers. Automatically building up the USD structure for you. + +Traditionally each department or artist would generate multiple products that downstream departments would load individually. For example, a lighting department may load each character animation product, each FX product individually. + +So there would be some scattered products like: + +``` +- pointcacheMain +- pointcacheFX_building +- animationChar01 +``` + +However, **USD can reference and layer non-destructively** which means we can safely merge these together at any point. Also making it easy for multiple departments to stack their own opinions and changes onto the departments before you. + +This is where the USD Asset Contribution workflow automates this for you. + +With the **USD Contribution** enabled on the USD publish instances this means it will automatically add your product into the department layer for the Asset or Shot. + +``` +- usdShot + - usdShot_animation + - animationChar01 + - pointcacheMain + - usdShot_fx + - pointcacheFX_building +``` + +**TL;DR** + +With AYON's USD Contribution each product publish adds up into the target USD asset or USD shot. :tada: + +## Configuring the USD Contribution + +You can configure the USD contribution for an instance using the publisher UI on the _Publish_ tab selecting the USD instance. The right hand side will show a **USD Contribution** section. + +### Asset contribution to `usdAsset` + +![AYON USD Contribution to Asset in Publisher UI](assets/usd/ayon_usd_contribution_to_asset.png) +_This example publishes an asset contribution to the look department layer_ + +Asset contributions usually have [Add as variant **enabled**](addon_usd_artist_contribution_workflow#add-as-variant-enabled) so that multiple contributions to that department layer each become a variant. Publishing product `lookMain` and product `lookDamaged` with both set to add as variant will provide a variant set where you can switch between the two. + +:::tip +Enable the _Set as default variant selection_ to make that product become the default variant in target variant set. +::: + +### Shot contribution to `usdShot` + +![AYON USD Contribution to Shot in Publisher UI](assets/usd/ayon_usd_contribution_to_shot.png) +_This example publishes a shot contribution to the FX department layer_ + +Shot contributions usually have a different target product, like `usdShot`. + +In the majority of cases when contributing to a shot you want to [**disable** Add As Variant](addon_usd_artist_contribution_workflow#add-as-variant-disabled) because for a shot, if multiple contributions are made to one department layer those should usually live alongside each other and are *not* variants of each other. + +:::warning +Currently it is a manual process to target `usdShot` instead of `usdAsset` for shot contributions. +It is a **common mistake to forget changing the target product**, so be aware! + +Improvements to that workflow using better preset configurations are planned. +::: + +:::note Defining the target product name. +Technically the *Target Product* can be any name you like, you could make any number of target product assets in a single folder each with department layers of their own. + +However, it is usually **good practice** to maintain a single `usdAsset` in an asset and a single `usdShot` in shots. +::: + +:::note Initialize as asset or shot +The _Initialize as_ setting is **only** relevant if the target product does not exist yet - so it is only used on first time generation of that file. It defines the asset structure, like USD payloads, asset info for the target product's USD file. + +For now, set asset targets to initialize as asset, set shot targets to initialize as shots. However, we're looking to streamline this with better preset configurations. +::: + +### Disabling USD contribution workflow + +If you just disable the **USD Contribution > Enable** checkbox you will write out just the USD file using the host's export methods without any automated layering into another product - as such, disabling that means that all the settings underneath it do nothing at all. (They should appear greyed out, but unfortunately it's a limitation of the publisher UI that it can't currently) + +## Add as variant - or not? + +In most cases: +- an **asset** contribution is a variant. +- a **shot** contribution is **not** a variant. + +### Add as variant ENABLED + +When enabling _Add as variant_ it means your single contribution will be added as a variant in a variant set on the asset's root primitive (the default prim). As such, multiple variant contributions to the same department layer (and same variant set) are not active at the same time, but they are switchable variants. So you can for example: + +- Publish a model main variant +- Publish a model damaged variant + +Now in the USD asset on the root primitive you may have a variant set _model_ that contains your _modelMain_ and _modelDamaged_ variants that downstream departments can switch between in your asset. + +### Add as variant DISABLED + +With _Add as variant_ **disabled** each contribution to a single department layer is just added as essentially another layer - meaning that the contributions inside a single department layer are all live at the same time. + +You can for example: + +- Publish a FX shockwave +- Publish a FX building destruction + +Both to the FX department layer - one isn't necessarily 'in front of' the other they are both just unordered contributions in that layer, present at the same time. + +So loading the shot with the FX layer will show both the shockwave and building destruction - you're not picking between the two. + +## Contributions are additive + +Over time, contributing to the asset adds more products to the `usdAsset`, across likely a variety of department layers. +Say our current publish structure is: +``` +usdAsset (target product) + - usdAsset_model (department layer) + - usdModelMain (single contribution product) +``` + +Now publishing a `usdLookMain` to department layer `look` would make a new `usdAsset` version: +``` +usdAsset (target product) + - usdAsset_model (department layer) + - usdModelMain (single contribution product) + - usdAsset_look (department layer) + - usdLookMain (single contribution product) +``` + +Then publishing another look variant `usdLookDamaged` would make a new `usdAsset` version: + +``` +usdAsset (target product) + - usdAsset_model (department layer) + - usdModelMain (single contribution product) + - usdAsset_look (department layer) + - usdLookMain (single contribution product) + - usdLookDamaged (single contribution product) +``` + +:::note Contribution workflow is 'additive' to the target product's department layers + +Whenever publishing a product with contribution enabled it will add it to an existing target product's department layers (or _update_ if it's the exact same product). + +This workflow makes it possible for different departments to simultaneously work on an asset and contribute to it additively. + +::: + +## Removing contributions + +There currently are no ready-to-go AYON tools that make it trivial to remove existing contributions from a product or department layer. + +Unfortunately this means if you currently accidentally make a wrong contribution you will have to go and edit the actual USDA files' contents to remove entries. + +:::note +Providing tools for [easy editing of these existing contributions is on our issue tracker](https://github.com/ynput/ayon-usd/issues/23). +::: + +### Removing contributions manually + +:::warning +This is a technical process and may leave your USD files in a broken state if not handled with care. +::: + +#### Removing a department layer from the target product + +Your published `usdAsset` may have department layers 'payloaded' in. In the `../publish/usd/usdAsset/v001/payload.usd` file you may see for example: + +```usda +#usda 1.0 +( + defaultPrim = "hero" + metersPerUnit = 1 + subLayers = [ + @C:\projects\ayontest\asset\hero\publish\usd\usdAsset_look\v001\ynts_hero_usdAsset_look_v001.usd:SDF_FORMAT_ARGS:layer_id=look&order=300@, + @C:\projects\ayontest\asset\hero\publish\usd\usdAsset_model\v002\ynts_hero_usdAsset_model_v002.usd:SDF_FORMAT_ARGS:layer_id=model&order=100@ + ] + upAxis = "Y" +) +``` + +You can remove one of the `subLayers` entries to completely remove a department layer from that published file. +For example, removing the look layer makes it. + +```usda +#usda 1.0 +( + defaultPrim = "hero" + metersPerUnit = 1 + subLayers = [ + @C:\projects\ayontest\asset\hero\publish\usd\usdAsset_model\v002\ynts_hero_usdAsset_model_v002.usd:SDF_FORMAT_ARGS:layer_id=model&order=100@ + ] + upAxis = "Y" +) +``` + +#### Removing a single contribution in a department layer + +Your published `usdAsset_model` will have the individual contributions to that layer. In the `../publish/usd/usdAsset_model/v001/..._v001.usd` file you may see for example: + +```usda +#usda 1.0 +( + defaultPrim = "hero" + metersPerUnit = 1 + upAxis = "Y" +) + +def Xform "hero" ( + variants = { + string model = "ModelMain" + } + prepend variantSets = "model" +) +{ + variantSet "model" = { + "ModelMain" ( + prepend references = [ + @C:\projects\ayontest\asset\hero\publish\usd\usdModelMain\v001\ynts_hero_usdModelMain_v001.usd@ ( + customData = { + int ayon_order = 100 + string ayon_uri = "ayon://ayontest//asset/hero?product=usdModelMain&version=1&representation=usd" + } + ) + ] + ) { + + } + "ModelPhotoreal" ( + prepend references = [ + @C:\projects\ayontest\asset\hero\publish\usd\usdModelPhotoreal\v001\ynts_hero_usdModelPhotoreal_v001.usd@ ( + customData = { + int ayon_order = 100 + string ayon_uri = "ayon://ayontest//asset/hero?product=usdModelPhotoreal&version=1&representation=usd" + } + ) + ] + ) { + + } + } +} +``` + +To remove a single variant, like `ModelMain` you can remove that block. In this case, make sure to also update the default variant set at the top of the file. +```usda +#usda 1.0 +( + defaultPrim = "hero" + metersPerUnit = 1 + upAxis = "Y" +) + +def Xform "hero" ( + variants = { + string model = "ModelPhotoreal" + } + prepend variantSets = "model" +) +{ + variantSet "model" = { + "ModelPhotoreal" ( + prepend references = [ + @C:\projects\ayontest\asset\hero\publish\usd\usdModelPhotoreal\v001\ynts_hero_usdModelPhotoreal_v001.usd@ ( + customData = { + int ayon_order = 100 + string ayon_uri = "ayon://ayontest//asset/hero?product=usdModelPhotoreal&version=1&representation=usd" + } + ) + ] + ) { + + } + } +} +``` + +Or remove the variant set completely: +```usda +#usda 1.0 +( + defaultPrim = "hero" + metersPerUnit = 1 + upAxis = "Y" +) + +def Xform "hero" ( +) +{ + +} +``` + +Which in this case leaves the empty root prim `hero`. + +--- + +:::info TODO +- How to define or customize the layer strength +- Explain publisher UI asset contribution attributes to avoid confusion. +- Explain general shot workflow in Maya +- Explain Rig -> Animation workflow to publish animations for shot workflows. +::: diff --git a/website/docs/addon_usd_artist_faq.md b/website/docs/addon_usd_artist_faq.md new file mode 100644 index 00000000..857dc815 --- /dev/null +++ b/website/docs/addon_usd_artist_faq.md @@ -0,0 +1,255 @@ +--- +id: addon_usd_artist_faq +title: FAQ +sidebar_label: FAQ +--- + +Frequently Asked Questions or Issues + +### I do not see my model on loading the asset + +
On Load warning message "Unresolved Reference Path" shows + +![](assets/usd/artist_faq/unresolved-reference-path.png) + +Since you're publishing into the asset structure make sure your data is inside the expected default primitive path for that asset, where the default primitive is always `{folder[name]}` so your data should be inside `/{folder[name]}/...` so that the data resides inside the default primitive path. + +This is wrong: :warning: + +``` +/geo/marble +/materials/material1 +``` + +This is correct: :trophy: + +``` +/hero + /geo/marble + /materials/material1 +``` + + +You are lacking the default primitive it expects. +
+ +### What are all these publisher options, like Target Product? + + +
Some technical details explained by @MustafaJafar + +**USD Publish Settings explained** + +**Initialize as asset vs shot** + +As explained in [Getting Started](addon_usd_artist_get_started) +- `Asset` Layer supports: + - Load/unload the asset + - Have different layers to hold data from different departments + - Allow each layer to have switchable variants +- `Shot` Layer only combines different layers from different departments. + +Here's an example of the generated asset and shot structure +by AYON USD publish plugins. +- USD Asset Structure + ``` + # USD Asset + {target-product}.usda + └── Xform {folder[name]} + ├── inherits __class__/{folder[name]} + └── payload ./payload.usda # Relative path + + payload.usda + └── mata data + └── sublayers + └── {target-product_department-name}.usda:ARGS:{layer-id}, {order} + ``` +- USD Shot Structure + ``` + # USD Shot + {target-product}.usda + └── mata data + └── sublayers + └── {target-product_department-name}.usda:ARGS:{layer-id}, {order} + ``` + +**Available Department Layers** + +Please, be aware that we currently do not provide validators to confirm if the content you intend to publish matches your selected layer. As it stands, layers function as labels with a predetermined order. For example, the model layer will consistently be evaluated before the material layer. + + +
+
+ +**Layers order:** +- **Asset layers** + - model: 100 + - assembly: 150 + - groom: 175 + - look: 200 + - rig: 300 +- **Shot layers** + - layout: 200 + - animation: 300 + - simulation: 400 + - fx: 500 + - lighting: 600 + +
+
+ +![](assets/usd/artist_faq/available_layers.png) + +
+
+ + +**USD Different publish options** + +![](assets/usd/artist_faq/what_are_publish_options.png) + +Let's focus on 4 interesting settings + 1 computed value by the publisher. +1. `target-product` which is a user editable text. +2. `target-product_department-name` which is a selection from a drop down list. +3. `variant-set-name` which is by default is set to `{layer}` which evaluates to the selected item in the drop down list in Num2 +4. `variant-name` which is by default is set to `{variant}` as the arrow in the screenshot points. +5. `product-name` which what we have by default from the publisher for any publish instance. + +**Publish a separate layer** + +By disabling `Enable` toggle. +USD publish plugins will skip the USD contribution and publish a single layer. +and, it doesn't affect the version in the latest published `target-product` or `target-product_department-name`. + +![](assets/usd/artist_faq/separate_layer.png) + +Resultant Products: +- Product: `product-name` + ``` + {product-name}.usd + # It can be any usd hierarchy. + ``` +**Publishing Asset contribution with Variant** + +![](assets/usd/artist_faq/publish_layer_in_usd_product_with_variant.png) + +:::tip +When choosing shot instead of asset, the resultant Product: `target-product` +will follow the same shot structure mentioned earlier. +::: + +Resultant Products: +- Product: `target-product` (2 layers) + ``` + # USD Asset + {target-product}.usda + └── Xform {folder[name]} + ├── inherits __class__/{folder[name]} + └── payload ./payload.usda # Relative path + + payload.usda + └── mata data + └── sublayers + └── {target-product_department-name}.usda:ARGS:{layer-id}, {order} + ``` +- Product: `target-product_department-name` + ``` + # USD Asset Layer + {target-product_department-name}.usda + └── Xform {folder[name]} + ├── Variant Sets -> ["{variant-set-name}"] + └── Variant Set "{variant-set-name}" + └── Variant {variant-name} + ├── reference -> {product-name} + └── custom data + ├── ayon_order + └── ayon_uri -> AYON URI for the published AYON USD product variant + ``` +- Product: `{product-name}` + ``` + # USD product + {product-name}.usd + # It can be any hierarchy. + ``` + +**Publishing Asset contribution with no Variant** + +![](assets/usd/artist_faq/publish_layer_in_usd_product.png) + +:::tip +When choosing shot instead of asset, the resultant Product: `target-product` +will follow the same shot structure mentioned earlier. +::: + +Resultant Products: +- Product: `target-product` (2 layers) + ``` + # USD Asset + {target-product}.usda + └── Xform {folder[name]} + ├── inherits __class__/{folder[name]} + └── payload ./payload.usda # Relative path + + payload.usda + └── mata data + └── sublayers + └── {target-product_department-name}.usda:ARGS:{layer-id}, {order} + ``` +- Product: `target-product_department-name` + ``` + # USD Asset Layer + {target-product_department-name}.usda + └── mata data + └── sublayers + └── {product-name}.usda:ARGS:{layer-id} + ``` +- Product: `{product-name}` + ``` + # USD product + {product-name}.usd + # It can be any hierarchy. + ``` + +
+ +### We need to manually rename primitive paths the whole time? + +> We use reference so we can manually enter the primitive path, but i don't think that should be the way to go, they should all be connected and work without renaming and further input. + +
You should not need to manually rename all referenced primitive paths for assets + +Using the AYON USD Contribution Workflow manual 're-assigning' all the time for assets should be redundant for the majority of the workflow. (Preferably this should never be needed, but some sections like animation from shot layers may still fall outside of that scope.) + +1. Use the [AYON USD Contribution workflow](addon_usd_artist_contribution_workflow) where the asset build is built automatically from single product contributions into the root primitive. +2. Load the `usdAsset` - avoid using the individual layers. You should not need to load those individually since they are all in the main asset. + +Now, in a shot based workflow you just load the asset and since e.g. Maya animation caches are not already overlaid over a USD asset structure that is one of the moments where you *will* need to define the path you're overlaying to. + +That's usually like: + +1. Reference the `usdAsset` into your shot's structure, e.g. +``` +/asset/hero +``` +Which may result in e.g. an asset with model and look: +``` +/asset/ + hero/ <- the `usdAsset` reference is here + geo/.. + mtl/.. +``` +_(The "hero" is the prim where you have the reference to the `usdAsset`)_ + +You need to make sure that anything you want to layer on top of your asset comes in with the same hierarchy, so an animation cache preferably also has the structure: +``` +hero/ + geo/.. +``` +With the animated geometry only. + +That you can then also reference on top of `/asset/hero` in the shot structure which makes your referenced asset (that already has materials) move because just the geometries are being overridden. + +**Keep in mind the layer strength - referencing lower in the hierarchy means a stronger opinion!** + +It's usually important to reference on the same root prim of the asset, because as soon as you e.g. reference over `asset/hero/geo` instead your reference is lower in hierarchy than any reference on a higher prim like `asset/hero` and hence will ALWAYS be the stronger opinion. +
diff --git a/website/docs/addon_usd_artist_get_started.md b/website/docs/addon_usd_artist_get_started.md new file mode 100644 index 00000000..2136b9c7 --- /dev/null +++ b/website/docs/addon_usd_artist_get_started.md @@ -0,0 +1,134 @@ +--- +id: addon_usd_artist_get_started +title: Getting Started with USD in AYON +sidebar_label: Getting Started +--- + +A quick start into AYON x USD + +## Assets and Shots + +Within the USD workflow we usually make a big distinction between **Assets** and **Shots**. + +Assets usually follow [strict asset guidelines](addon_usd_artist_usd_intro#usd-asset-structure-guidelines) and fall under a **single root primitive** also referred to as its default primitive. +This is because Assets are usually *referenced* into a USD stage which means they overlay a single primitive (the root) into the scene you're referencing into. + +Shots usually contain multiple root prims, from referenced assets, to lights, to render settings and more. + +Regarding loading the assets, in almost all cases: + +- Assets are **referenced** into your scene (or payloaded in) +- Shots are **sublayered** into your current scene (or opened as root layer) + +Which means that for assets you can position the single root on top of any prim path in your scene (USD referencing) and with shots you load in the full stage hierarchy without moving things around (USD sublayers). + +For more details on referencing versus sublayering: + +- [SideFX: USD Referencing explained](https://www.sidefx.com/docs/houdini/solaris/usd.html#referencing) +- [SideFX: USD Sublayering explained](https://www.sidefx.com/docs/houdini/nodes/lop/sublayer.html#sublyrdetails) + +## Creating an asset + +When we are referring to the USD asset, we mean the full asset with the model's geometry, the look's materials and textures, potentially a groom and may even embed a rig (although USD is not a rig format, but it may encapsulate e.g. Maya Scene references) + +The USD structure (simplified) then becomes: + +``` +asset.usd + - look.usd + - groom.usd + - model.usd +``` +Where the groom is applied over the model, and the look is applied over those. +This means that the look's _opinions_ are stronger than the layers below it. + +:::note +A layer being stronger than another means it can override in essence all of its opinions depending on USD strength ordering ([LIVRPS](https://remedy-entertainment.github.io/USDBook/terminology/LIVRPS.html)). In simple words, a look can potentially override UVs, point positions and so forth. But usually only adds materials, render geometry settings and material bindings. +::: + +### Creating the model + +We will want to create our geometry's contribution to the asset. + +For the asset structure it's critical we work within the asset's hierarchy so that the asset referencing (explained above) works. + +As such, we'll always work within a root group with the current folder's name. +Say our character's folder path is `assets/hero` then the root group is `hero` + +We can make a hierarchy like: +``` +hero/ + geo/ + body + pants +``` + +When done. We publish that `hero` as USD contribution to the `model` layer. +The publishing logic will make the layering of the `model.usd` into the `asset.usd` for you automatically. + +So now we have: +``` +asset.usd + model.usd +``` + +When loading that in, we'll have our hero wearing pants. But it needs some 🖌️🎨 paint. + +### Creating the look + +_From a Houdini perspective_ + +1. Reference the asset so we have the model. + + +:::note +The **Asset USD file** is usually _referenced_ and not _sublayered_ into your scene. +Nor do you load the individual department or contribution layers. +::: + +2. Make sure to add a _[Layer Break LOP](addon_usd_artist_houdini_workflow.md#layer-break)_. This special Houdini node breaks off the USD scene above it and from that moment on any changes on the existing hierarchy are just opinions that are overlaid on top of it. This means that when writing out a USD file now we're not re-exporting the geometry itself, but only any changes we make after the layer break. + +3. Apply your materials to the `hero/geo` meshes and make sure your materials are within `hero` group as well. So usually you end up with: +``` +hero/ + geo/ + body <- material 'hero/mtl/body_shader' applied + pants <- material 'hero/mtl/pants_shader' applied + mtl/ + body_shader + pants_shader +``` + +4. Publish as the look product type (which is a USD look in Houdini). + +## Creating a shot + +:::info +Using AYON's contribution workflow targeting shots currently **requires extra +attention** on the publish attributes for the instance to correctly target the +`usdShot` and **disable variants** (_usually your shot contribution is not a variant_). + +For more information see the [AYON Contribution Workflow](addon_usd_artist_contribution_workflow.md#shot-contribution-to-usdshot). +::: + +_Houdini perspective_ + +- **Reference** the assets and perform you scene assembly or layout. This is usually a contribution to the Assembly or Layout department layer. +- Throw some lights into the scene. +- Set up the USD Render Settings. +- Publish your USD render submission to Husk Standalone + +## Additional context + +- [Ayon Core USD workflow PR contains some comments and explanations](https://github.com/ynput/ayon-core/pull/295) +- [In the original OpenPype PR description it contained quite some 'test' videos](https://github.com/ynput/OpenPype/pull/5925#issue-1995346181) +- [At FMX 2024 an OpenUSD presentation was given that showed usage of what is basically the functionality of this PR](https://www.youtube.com/watch?v=1KqrIRCi_EQ). + +--- + +:::info TODO +- General improvements; with this guide it's still hard to get started +- Add video recordings for the quick asset and shot workflow +- Move software-specifics to their individual workflows (Houdini, Maya, Blender) +- Explain more about variants versus non-variants in asset contributions +::: diff --git a/website/docs/addon_usd_artist_houdini_workflow.md b/website/docs/addon_usd_artist_houdini_workflow.md new file mode 100644 index 00000000..05f804f8 --- /dev/null +++ b/website/docs/addon_usd_artist_houdini_workflow.md @@ -0,0 +1,162 @@ +--- +id: addon_usd_artist_houdini_workflow +title: Houdini USD Workflow +sidebar_label: Houdini Workflow +--- + +Getting started with AYON USD integration in SideFX Houdini + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +
+
+
+ + {versions.Houdini_Badge} + +
+
+ + {versions.Core_Badge} + +
+
+ + {versions.USD_Badge} + +
+
+
+ +## Loading an asset or shot + +See the _[Getting Started | Assets and Shots](addon_usd_artist_get_started.md#assets-and-shots)_ for how they differ and how they are usually loaded (reference versus sublayer). + +In Houdini you'll most likely use the dedicated AYON nodes: + +- **AYON Load Asset LOP node**, superpowered Reference LOP node. +- **AYON Load Shot LOP node**, superpowered Sublayer LOP node. + +## Assets + +### Loading an asset + +Whether you're loading the asset because you're working on the asset build itself, like look or grooms, OR you are assembling a scene defines what primitive path you load them as. + +You would usually *always* **reference** the asset. That is the `usdAsset` product - not the separate layers or contributions. + +### Asset Build + +When working on the asset build, the asset name requires to remain constant and be in a root prim with the folder name. A trick is to set the Primitive Path on the Load Asset LOP to: + +``` +/`chs("folder_name")` +``` +So that it's always the folder name of the loaded content. + +:::note +The `chs("folder_name")` trick only applies to the Ayon Load Asset LOP. +::: + +:::tip Easy primitive path presets on AYON Load Asset LOP +Note that the Load Asset LOP provides some quick access to primitive path presets directly in the parameter view. + +![AYON Load Asset LOP Primitive Path Presets](assets/usd/ayon_usd_load_asset_lop_primpath_presets.png) +::: + +## Shot Assembly + +For scene assembly, like doing bigger scene layouts or even just loading assets into a shot. Since these are also for "shot" workflows (you're building a shot layer) and these sublayer in the different apartments you don't need a single root primitive, you can layout your scene hierarchy any way you want. + +As such you usually want each loaded asset to be a unique prim path in your scene - which is the default primitive path for the Load Asset LOP. + +``` +`chs("folder_path")`/$OS +``` + +Which translates to the full folder's path and the node's name. However, here you are free to make the hierarchy work in a way that makes sense for your scene assembly structure. + +## Assembly Prop (asset scene assembly) + +:::info TODO +Document how one could make an asset which is essentially an assembly of other assets. This would still require one root prim (a default primitive) and in large part behaves like Asset Build, but just containing child references of other assets. +::: + +## Manage Layers + +### Layer Break + +Via **[Layer Break LOP node](https://www.sidefx.com/docs/houdini/nodes/lop/layerbreak.html)** + +If you have Houdini Solaris experience you most definitely know the Layer Break node. It is not a USD fundamental concept but a Houdini Solaris specific fundamental. + +The layer break, when found in your graph, makes it so that exporting USD files from downstream in that graph will exclude all data above the layer break as opinions. So that for example loading a USD file or writing certain preview opinions can be excluded from your exported scene. + +:::info TODO +Explain layer break in more details +::: + +### Mute Layers + +Via **AYON Mute Layers LOP** or **[Configure Stage LOP node -> Mute Layers](https://www.sidefx.com/docs/houdini/nodes/lop/configurestage.html)** + +Muting layers allow you to mute for example your own department layer in a loaded USD asset or shot. This way you avoid that your Houdini Solaris graph after publishing and updating already has your generated data loaded back in at the start of the graph. + +:::tip +It is usually (99% of the time) good practice to mute your current department's layer. +Basically, always mute your own task/department layer to be sure. +::: + +Imagine you load a USD Shot containing the layers: + +- layout +- animation + +Now you're working in lighting and write out your contribution. +The USD shot now has: + +- layout +- animation +- lighting + +As such, your USD scene is now already loading back in what you wrote out last time - which is if you were to remove e.g. a light from Solaris graph it would still be there, because it's already being loaded in. So, **layer muting** is what you need here. You basically ensure that you mute your OWN layer so that you don't include that while you're working. + +:::note Layer Muting is not written to USD files +The state of muting layers is never written into a USD file - it's a run-time effect only on your composed USD stage. As such, you can not e.g. write out the opinion from one layer that another layer must be muted from now on. So, [**you can't save layer muting into USD files**](https://www.sidefx.com/forum/topic/86607/#post-374289). You can however write new opinions onto the prims or hide/deactivate prims you don't want - which will be opinions that you can write out and then effect downstream departments. +::: + +The **AYON Mute Layers** lop allows you to easily mute the layers for a particular department by using the context menu to the side of the Mute Patterns parameter: + +![AYON Mute Layers LOP Mute Patterns Presets](assets/usd/ayon_usd_mute_layer_lop.png) + + +--- + +## Implicit versus Explicit Layer Save Paths + +This is Houdini-specific and not necessarily a USD feature. Houdini can generate in-memory sublayers or references to USD files that does not exist on disk yet - these are so called anonymous layers that Houdini gives an "implicit save path". + +When exporting your USD file (e.g. USD ROP) these implicit layers will be written out from your Houdini scene *in addition* to the USD file path your set on the USD ROP node. + +### Publishing with explicit anonymous layers + +_What does the publisher do with these anonymous layers?_ + +Any anonymous layers generated in your current USD layer being exported can directly be published along as a product of its own. + +The `ayon-houdini` USD publishing logic detects these anonymous layers that will additionally be saved out, generates publish instances for them dynamically, and remaps the USD paths to the published representations. +The Explicit Save Path's **filename** acts as suffix for the product name generating the additional products: +- `{product_name}_{explict_save_filename}` + +It is totally fine to generate *more* layers at once and have them published, and this will work *with* and *without* the [AYON USD Contribution Workflow](addon_usd_artist_contribution_workflow). + +However, there may be many cases where you do essentially not want this extra layer. For example, a SOP import by default generates that additional sublayer, but you may *just* want to write out that SOP data completely into the resulting USD file - not in an extra sublayer USD file that is layered into a USD file. + +--- + +:::info TODO +- Explain Implicit Layer Save Paths and the USD ROP settings for flattening +- Houdini USD Rop: Flatten All Layers +::: \ No newline at end of file diff --git a/website/docs/addon_usd_artist_maya_workflow.md b/website/docs/addon_usd_artist_maya_workflow.md new file mode 100644 index 00000000..bba24cca --- /dev/null +++ b/website/docs/addon_usd_artist_maya_workflow.md @@ -0,0 +1,112 @@ +--- +id: addon_usd_artist_maya_workflow +title: Maya USD Workflow +sidebar_label: Maya Workflow +--- + +Getting started with AYON USD integration in Autodesk Maya + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + +
+
+
+ + {versions.Maya_Badge} + +
+
+ + {versions.Core_Badge} + +
+
+ + {versions.USD_Badge} + +
+
+
+ +## Publishing a model + +Any contribution to an asset structure should be within the default root primitive. In AYON, that defaults to the asset's folder name. + +So for folder path `/asset/characters/hero` that root name is `hero`. + +The Creator allows to create that asset structure for you by enabling the `Create Asset Structure` checkbox. +Then select your geometry, create and it will directly be conveniently parented to the required hierarchy. + +![](assets/usd/ayon_usd_maya_publish_model.gif) + +:::tip Create Asset Structure + +The Create Asset Structure checkbox will create a root group `{asset}` and child group `geo`. +The root group is namespaced with the variant so that you can easily publish multiple variants from one scene without having naming conflicts on that root node's name which must match the current folder name exactly. + +So when working in `/asset/characters/hero` it will create for variant `modelMain`: +``` +modelMain:hero/ + geo/ +``` + +Note: If the **Use Selection** checkbox was also enabled then any active selection will be reparented to that `geo` group. +::: + +After publishing this asset contribution you will have generated three products: + +![](assets/usd/ayon_usd_maya_products_after_publish.gif) +![](assets/usd/ayon_usd_maya_products_after_publish_web.png) + +The AYON asset contribution workflow automates the generation of the layers for you. + +Above we published a `usdMain` product, which had USD contributions enabled and targeted the product `usdAsset` with the department layer `model`. + +So it generated: + +- The target `usdAsset` product. +- The department layer for the `usdAsset`, specifically `usdAsset_{layer}` -> `usdAsset_model`. +- The `usdMain` product is added into that department layer, so the `usdMain` product is in the `usdAsset_model` layer. + +Generating the asset structure: +``` +usdAsset (target product) + - usdAsset_model (department layer) + - usdMain (product of the instance) +``` + +If you were to publish multiple products at once, say we would generate `usdModelMain` and `usdModelDamaged`. It would then generate: + +``` +usdAsset (target product) + - usdAsset_model (department layer) + - usdModelMain + - usdModelDamaged +``` + +The [USD Contributions are additive](addon_usd_artist_contribution_workflow.md) and will on each contribution populate and update the target product, like the `usdAsset`. + +## Loading USD products + +You can load USD products back to Maya into Maya USD Proxy Shapes. + +![](assets/usd/ayon_usd_maya_load_usd_product.gif) + +:::note Looking for different loaders? + +Different Loaders are being implemented, like referencing the data as regular +maya geometry or "referencing" directly into an existing Maya USD Proxy. + +See: https://github.com/ynput/ayon-maya/pull/61 + +::: + +--- + +:::info TODO +- Explain LookdevX look workflow to publish a look layer with asset contribution +- Explain general shot workflow in Maya +- Explain Rig -> Animation workflow to publish animations for shot workflows. +::: diff --git a/website/docs/addon_usd_artist_usd_intro.md b/website/docs/addon_usd_artist_usd_intro.md new file mode 100644 index 00000000..1d73bb6e --- /dev/null +++ b/website/docs/addon_usd_artist_usd_intro.md @@ -0,0 +1,101 @@ +--- +id: addon_usd_artist_usd_intro +title: Why and What is USD? +sidebar_label: USD Intro +--- + +Introduction to USD and reasons to adopt it + +## Why USD +[USD Explainer Guide](https://www.foundry.com/insights/film-tv/usd-explainer-guide) article provides great insights about why USD is very useful. + +Let me paraphrase it: + +> Traditional pipeline production followed a waterfall model, where each stage involved a "baking" process. To make any alterations, you would need to return to the start and re-bake at each step along the way. +Conversely, USD enables the seamless continuation of decisions throughout the pipeline by allowing live updates to existing USD layers. This is achieved through the creation of higher-order layers that can override an attribute or a value, thereby eliminating the need for baking the existing layers. +Thus, USD significantly enhances team collaboration by enabling multiple individuals to work on different layers of the same assets or shots simultaneously. Team members can override each other's work in a non-destructive manner, preserving the integrity of the overall project. + + +## What is USD +USD, short for Universal Scene Description, is a robust ecosystem featuring a versatile file format and a comprehensive Library API. The USD file format,which represents a USD layer, is capable of representing a wide array of 3D data, including scene hierarchies, geometries, instances, material networks, lights, cameras, volumes, coordinate systems, and shading nodes. + +The accompanying USD API offers a suite of tools designed for broad adoption, enabling a wide array of applications to effectively interact with USD content. + +This versatility is why USD has earned the name Universal Scene Description—it has the unique ability to "describe" scenes across any application that implements USD, independent of the operating system on which it runs. + +In the screenshot provided, I've opened the [ALab usd scene](https://animallogic.com/alab/) across various applications: Houdini, Omniverse, and Usdview. + +![](assets/usd/usd_intro/usd_scene.png) + + +## Understanding a USD Asset +A USD Asset is content organized to facilitate efficient asset exchange. It boasts several key features: +- The ability to load and unload the asset as needed. +- Multiple layers to store data from various departments, such as modeling, materials, effects, lighting, and animation. +- Flexibility for each layer to contain switchable variants, enhancing adaptability and collaboration. + +### Load and Unload + +Unloading an asset effectively makes it resemble an empty folder, which can significantly lighten the scene. This feature is particularly beneficial when assembling scenes, as it helps manage resource usage efficiently. +![](assets/usd/usd_intro/asset_load_unload.gif) + +### Multiple Layers +This jar asset consists of three layers: +- surfacing +- modeling +- assembly + +![](assets/usd/usd_intro/asset_layers.png) + +### Variants +Assets can contain multiple variant sets, yet only a single variant within each set can be active at any given moment. + +![](assets/usd/usd_intro/asset_variant.png) + +![](assets/usd/usd_intro/asset_variant.gif) + + +## Understanding a USD Shot +A USD Shot is a USD file structured to enhance shot exchange. +It effectively combines distinct layers from various departments into one streamlined file. + +![](assets/usd/usd_intro/usd_shot.png) + + +## Further Reading + +### USD Introduction Guides +- [**Book of USD** - Getting Started with Universal Scene Description (USD)](https://remedy-entertainment.github.io/USDBook/) by Remedy Entertainment +> :point_up: Very good introduction to USD concepts in a slightly simplified and practical way + +- [**Usd Survival Guide**](https://lucascheller.github.io/VFX-UsdSurvivalGuide/index.html) by Luca Scheller +> :point_up: More technical guide going over USD with the API as guideway. Also introduces a lot of "workflow optimizations" tips with a focus on Houdini Solaris and Python + +### USD Asset Structure Guidelines +:::info +Our USD workflow follows the following structure guidelines. +::: + +* **[Principles of Scalable Asset Structure in OpenUSD](https://docs.omniverse.nvidia.com/usd/latest/learn-openusd/independent/asset-structure-principles.html#id5)** +* **[Guidelines for Structuring USD Assets](https://wiki.aswf.io/display/WGUSD/Guidelines+for+Structuring+USD+Assets)** + +### Example USD Assets + +#### Alab +The ALab data set is the Animal Logic interpretation and implementation of real world production and pipeline concepts in USD. + +- **[ALab Download](https://dpel.aswf.io/alab/)** +- **[ALab Documentation](https://usd-alab2.s3.amazonaws.com/README.html)** + +#### Activision +Activision provides a USD data set from their Call of Duty franchise with some good instructions in the readme: + +- **[Activision's Call of Duty®: Warzone™ Caldera USD dataset](https://github.com/Activision/caldera)** + +#### J Cube + +3D Assets by J Cube Inc. + +The Esper Room by J Cube Inc. is an excellent and user-friendly starting point for experimentation. + +- **[3D Assets | JCube](https://j-cube.jp/solutions/multiverse/assets/)** \ No newline at end of file diff --git a/website/docs/addon_wrap_admin.md b/website/docs/addon_wrap_admin.md index 13a60eca..11145b15 100644 --- a/website/docs/addon_wrap_admin.md +++ b/website/docs/addon_wrap_admin.md @@ -32,4 +32,34 @@ Allows to open prepared workfile for an artist when no workfile exists. Useful t Could be configured per `Task type`, eg. `composition` task type could use different `.wrap` template file than `art` task. Workfile template must be accessible for all artists. -(Currently template sharing is not handled by [SiteSync](addon_site_sync_admin.md) so they must be accessible for all artist machines.) \ No newline at end of file +(Currently template sharing is not handled by [SiteSync](addon_site_sync_admin.md) so they must be accessible for all artist machines.) + +### Multi templates per task + +If your use case requires usage of multiple templates for single task (imagine it as steps) +``` +Example: +- ALIGN (task) + - align scan (step) + - align scan render + - retouch sheet +- MODEL (task) + - wrap (step) +``` +configuration in `Workfile Builder` wouldn't be enough. + + +Admin needs to configure location of separate templates in `ayon+settings://wrap/multiple_templates_per_tasks`. + +![Wrap Multi templates Project Settings](assets/admin_hosts_wrap_multi_templates.png) + +Inputs are type name or type and returned value is path to the template. + +There is also need for additional new template in `Anatomy`. It is expected to be called `wrap_multi` and would look like: +``` +Directory template: {root[work]}/{project[name]}/{hierarchy}/{folder[name]}/work/{task[name]} +File name template: {project[code]}_{folder[name]}_{task[name]}<_{template_name}>_{@version}.{ext} +``` +That added `` is important to separate workfiles for particular template into subfolders. + +Artist then will be shown with new Dialog where they can select from list of templates and shown if any workfile exist for those. diff --git a/website/docs/addon_wrap_artist.md b/website/docs/addon_wrap_artist.md index 6e63a3bf..045206f0 100644 --- a/website/docs/addon_wrap_artist.md +++ b/website/docs/addon_wrap_artist.md @@ -58,11 +58,18 @@ time or updated if opening for next times. ### Launching of Wrap -Regular artist opens Wrap ordinary via Launcher. Before Wrap is opened Scene Inventory tool will be shown to highlight which items -were loaded when placeholders got resolved. Artist can see version, if loaded version is not the latest, it is highlighted by red color. +Regular artist opens Wrap ordinary via Launcher. + +If workflow needs multiple templates for single task, artist will be shown this dialog, where they need to select template +they want to work on. They will be also offered to `Create New` workfile from selected template, or `Open` existing workfile. ![Wrap Scene Inventory](assets/artist_hosts_wrap_scene_inventory.png) +Before Wrap is opened Scene Inventory tool will be shown to highlight which items +were loaded when placeholders got resolved. Artist can see version, if loaded version is not the latest, it is highlighted by red color. + +![Wrap Scene Inventory](assets/artist_hosts_wrap_multi_templates.png) + In case of error, it could be a missing representation of specified product, similar error dialog will be shown. Artist can change version of loaded item via dialog after Right Mouse Click is pressed above the item. diff --git a/website/docs/artist_activity_feed.md b/website/docs/artist_activity_feed.md new file mode 100644 index 00000000..b2096607 --- /dev/null +++ b/website/docs/artist_activity_feed.md @@ -0,0 +1,103 @@ +--- +id: artist_activity_feed +title: The Activity Feed +sidebar_label: Activity Feed +--- + +:::info +The activity feed is a suite of features that were introduced in `1.1.0`. +::: + +### Overview + +In essence, the activity feed serves as a unified interface for viewing a stream of events associated with a specific entity. For instance, the activity feed for a task may include comments from supervisors, status updates, or instances when a user was assigned to the task. + +Think of it as a timeline illustrating different activities associated with the entity. + +The activity feed encompasses more than just a section for comments; it aggregates a variety of distinct "activities" into a single feed. + +![Activity feed overview](assets/activity_feed/activity-feed-overview-sh030-compositing.png) +The activity feed will primarily be utilized on your tasks board but will be extended to additional pages in the future. + +:::note +Initially, the activity feed will be accessible on tasks and versions but may potentially be expanded to include other entity types in the future, such as folders. +::: + +### Types of activities + +1. Comments +2. Status changes +3. Assignee changes +4. Published versions + +![Activity feed types](assets/activity_feed/activity-feed-types.png) + +:::tip +You can filter these different types for a more focused feed. Additionally, there are special filters available to target specific comment types, such as comments containing checklist items. + +![Activity feed filters](assets/activity_feed/activity-feed-filters.png) +::: + +### Mentions + +The activity feed features a robust linking system among entities, enabling seamless collaboration and contextual communication. + +You can mention or "tag" three different things using the @ annotation: + +1. @users - any user on the same project. +2. @@versions - versions related to the entity. +3. @@@tasks - sibling tasks of the same folder. + +When something is mentioned in a comment, it will be displayed in the activity feed associated with that mention. + +![Activity feed mentioning other tasks](assets/activity_feed/activity-feed-mentions.png) + +:::info +In this example, Felix leaves a comment on his Compositing task, mentioning the Lighting task that requires fixes. Felix doesn't need to search for the Lighting task and rewrite his comment; it automatically appears on the Lighting task. Now, both Felix and Frank can collaborate on the fix without leaving the context of their tasks. Frank can then mention the Compositing task to inform Felix that a new version is ready. +::: + +### Relations + +Certain activity items can be related to another entity besides their origin. For instance, comments made on versions are related to their parent task. When a comment is made on a version, this relation causes the comment to be visible on the task itself. This operates similarly to mentions but without requiring an explicit mention. + +![Activity feed relations](assets/activity_feed/activity-feed-relations.png) + +### Rich Text Editor and Markdown + +Comments fully support [github flavoured](https://github.github.com/gfm/#:~:text=1Introduction-,1.1What%20is%20GitHub%20Flavored%20Markdown%3F,-GitHub%20Flavored%20Markdown) [markdown](https://www.markdownguide.org/basic-syntax/). You might be wondering, what is markdown? Don't worry, the comment text editor is also a rich text editor and supports everything you would expect, including headings, bold, italic, underlines, and lists. + +![Rich text and markdown support](assets/activity_feed/activity-feed-markdown.png) + +### Checklists + +Checklists can be created and checked/unchecked by any user. They do not affect the status of the task but provide a general idea of the remaining work on a task. They are useful for reviews to keep track of whether feedback has been addressed. + +![Activity feed checklists](assets/activity_feed/activity-feed-checklists.png) + +### Versions + +Published versions will appear in the activity feed, allowing you to track when a new version is published and understand its context. To view all versions without grouping, utilize the "Published Versions" filter. + +![Activity feed versions](assets/activity_feed/activity-feed-versions.png) + +Click on a version to access its details and activity feed. Any comments made on a version will be visible in the parent task activity feed. + +![Activity feed versions slide out](assets/activity_feed/activity-feed-versions-slideout.png) + +### Attachments + +You can attach any type of file to a comment. Common image types will be previewable inside the web app, and we plan to support previewable videos in the future. + +![Activity feed attachments](assets/activity_feed/activity-feed-attachments.png) + +:::tip +In addition to using the attachments button, you can drag and drop files or even paste images directly from your clipboard. + +Review workflow: Capture a screenshot -> Markup in your preferred app -> Paste the marked-up image as an attachment. +::: + +:::note +Attachment files are stored in the docker storage space `/storage/server/uploads`. When a comment is deleted a background worker cleans up unused files. + +There is currently no file size limit but we intend to introduce a default that can be configurable. +::: diff --git a/website/docs/artist_getting_started.md b/website/docs/artist_getting_started.md index d6a23a6e..039d508f 100644 --- a/website/docs/artist_getting_started.md +++ b/website/docs/artist_getting_started.md @@ -9,17 +9,19 @@ import TabItem from '@theme/TabItem'; ## Installation -AYON comes in packages for Windows (10 or Server), Mac OS X (Mojave or higher), and Linux distribution (Centos, Ubuntu). +**AYON** and its installation files are available for all major operating systems: **Windows** 10 (Server, WIN 11 and newer), **macOS** (Mojave or later), and **Linux** distributions (Rocky Linux, Ubuntu and formerly CentOS). + +Besides getting AYON installation files from Github you also have option to get those via `AYON server` webUI in the `Studio Settings` section. + -In AYON you can download the installer from within the website: ![A screenshot of the AYON main menu with the "Download Launcher" menu expanded](assets/ayon_download_installer.png) -A "Download Launcher" blue button should be present, which provides a binary for the Operating System you are accessing the webistes, alternatively you can download a specific binary from the dropdown in the main menu. +A `Download Launcher` button should be present, which provides a binary for the Operating System you are accessing the server website, alternatively you can download a specific binary from the dropdown in the main menu. If you are testing or working by yourself, you can also grab installation files from the releases: https://github.com/ynput/ayon-launcher/releases -:::important -To install AYON you will need administrator permissions. +:::important User Permissions +To install **AYON** on your machine you will need **admin user account rights** to do so. ::: :::note pick your platform @@ -72,36 +74,37 @@ After the installation, you can find AYON among the other Applications. ## Working in the studio -In studio environment you should have AYON already installed and deployed, so you can start using it without much setup. Your admin has probably put AYON icon on your desktop or even had your computer set up so AYON will start automatically. +Ensure AYON is installed and deployed in your studio environment for immediate use. Your admin likely placed the AYON icon on your desktop or configured your system to launch AYON upon startup. + +![AYON Launcher Icon](assets/ayon_launcher_icon.png) -If this is not the case, please contact your administrator to consult on how to launch AYON in your studio. +If this is not the case, reach out to your administrator for guidance on deploying AYON in your studio. -## Working from home +## Working remotely -If you are working from home though, you'll need to install it yourself. You should, however, receive the AYON installer files from your studio -administrator, because AYON versions and executables might not be compatible between studios. +If you are working remotely e.g. from home, you'll need to install the AYON Launcher by yourself. You should, however, receive the AYON installer files from your studio administrator, because AYON versions and executables might not be compatible between sites. Installing AYON is possible by using the Installer or by unzipping downloaded ZIP archive to any drive location. -:::tip Using the AYON Installer -See the [Installation section](#installation) for more information on how to use the AYON Installer +:::tip +See the [Installation section](#installation) for more information on how to use the **AYON Installer** ::: -You can run AYON by desktop "P" icon (if it exists after installing) or by directly executing **ayon_gui.exe** located in the AYON installation folder. This executable being suitable **for artists**, or alternatively by **ayon_console.exe** which is more suitable for **TDs/Admin** for debugging and error reporting. The later runs with a console window where all the necessary info will appear during user's work session. +You can run AYON by desktop "AYON" green triangle icon (if it exists after installing) or by directly executing **ayon_gui.exe** located in the AYON installation folder. This executable being suitable **for artists**, or alternatively by **ayon_console.exe** which is more suitable for **TDs/Admin** for debugging and error reporting. The later runs with a console window where all the necessary info will appear during user's work session. :::tip Is AYON running? AYON runs in the operating system's tray. If you see a green AYON icon in the tray you can easily tell AYON is currently running. Keep in mind that on Windows this icon might be hidden by default, in which case, the artist can simply drag the icon down to the tray. +::: ![A screenshot of the Windows System Tray showing the AYON icon](assets/artist_systray.png) -::: -:::tip Icon not showing on Linux +:::tip Linux / missing AYON icon Some Linux distributions do not ship with tray icons by defaults, mostly GNOME based, to get the icon, install the following extension: [Appindicator Support for GNOME Shell](https://extensions.gnome.org/extension/615/appindicator-support/) ::: ## First Launch -When you first start AYON, you will be asked to fill in some basic information. +Upon launching AYON, you'll be prompted to enter your credentials to login to the AYON server and its URL. ![A screenshot of the AYON login dialog](assets/artist_login.png) @@ -109,7 +112,7 @@ When you first start AYON, you will be asked to fill in some basic information. Your Studio should provide you with the AYON `url`, `username` and `password` to fill in the dialog. -:::tip Example details +:::tip Example URL: `https://mystudio.ayon.app/` username: `johndoe` password: `v3ry53cur3p455w0rd` @@ -118,8 +121,8 @@ password: `v3ry53cur3p455w0rd` ## Updates -AYON updates automatically, based on your studio server, every time you launch it; that's why on first time launch it might do a new installation, if your Studio is using a more recent version, even though you might have just installed it. +**AYON** updates automatically, based on your studio server every time you start AYON Launcher on your machine. Upon initial launch, the software may perform a fresh installation to ensure compatibility with the latest version of Studio, even if you recently installed it. ## Advanced Usage -For more advanced use of AYON commands please visit [Admin section](admin_launcher_run#arguments). +For more advanced usage of **AYON Launcher** app, like running with console, staging, or develop mode, please visit [Admin section](admin_launcher_run#arguments). diff --git a/website/docs/artist_inbox.md b/website/docs/artist_inbox.md new file mode 100644 index 00000000..42f9dda7 --- /dev/null +++ b/website/docs/artist_inbox.md @@ -0,0 +1,80 @@ +--- +id: artist_inbox +title: Inbox and Notifications +sidebar_label: Inbox and Notifications +--- + +:::info +The inbox was introduced in `1.2.0`. +::: + +![Inbox overview](./assets/inbox/inbox_important.png) + +## Overview + +The inbox is an email-inspired feature that consolidates all your updates and notifications across AYON. Designed for more than just listing notifications, it serves as a hub of organization and prioritization. With two tabs, "Important" and "Other," it ensures that crucial messages don't get lost in the production noise. Related notifications, such as multiple messages about the same folder, are grouped together for better clarity. + +Think of the inbox as a dynamic to-do list for tasks that require your attention. You can mark messages as read to revisit them later, or clear them once you're done to keep your workflow organized. + +:::tip +The inbox has full keyboard support! Hover over any message and press `X` to mark it as read/unread or `C` to clear/unclear. +::: + +**Important Messages Examples** + +- You are directly mentioned in the comment. For example: `Looks great @Felix Peterson`. +- You are a watcher on a task. +- You are assigned to or removed from a task and therefore become a watcher. +- You make a comment and therefore become a watcher. + +**Other Messages Examples** + +- You are removed from a task. +- New activity on entities you are assigned to or have authored, including: + - Comments + - Status changes + - Assignee changes + +[Read more about importance](./artist_inbox.md#importance-table) + +## Watchers + +Watchers are users who receive important notifications about changes to an entity. This is useful in scenarios where you may not be directly working on an entity but still need to stay updated. + +Watchers are often added automatically. For example, posting a comment on an entity will automatically add you as a watcher so you can receive updates such as replies to your comment. Similarly, being assigned to a task will add you as a watcher to that task. + +You can manually update your watcher status using the bell icon in the toolbar at the top of the entity’s details panel. A blue bell indicates that you are watching the entity. + +![Watchers dropdown](./assets/inbox/watchers.png) + +Watchers was introduced in `1.3.1` + +## Importance Table + +| When you... | Then you... | Watchers receive... | Users with a relation receive... | +| ---------------------------- | -------------------------- | ------------------- | -------------------------------- | +| post a comment | become a watcher | Important | Other | +| are mentioned in a comment | get important notification | Important | Other | +| post a reviewable | become a watcher | Important | Other | +| publish a version | become a watcher | Important | Other | +| get assigned to a task | become a watcher | Important | Other | +| change a status of an entity | - | Important | Other | +| assign someone to a task | - | Other | Other | +| remove someone from a task | - | Other | Other | + +## Realtime Notifications + +Enable browser push notifications to stay aware of new important inbox messages. You can activate these notifications from the inbox or your account profile page. + +You can also enable notification sounds for added awareness. + +![Turn on notifications](./assets/inbox/inbox_enable.png) +![Turn on notifications in account](./assets/inbox/notifications_account_settings.png) + +:::tip +Desktop notifications and notification sounds work independently to one another. +::: + +:::warning +Desktop notifications will not work over HTTP connections due to strict browser security measures. +::: diff --git a/website/docs/artist_my_tasks_page.md b/website/docs/artist_my_tasks_page.md new file mode 100644 index 00000000..6542fccd --- /dev/null +++ b/website/docs/artist_my_tasks_page.md @@ -0,0 +1,97 @@ +--- +id: artist_my_tasks_page +title: Tasks (Home) Page +sidebar_label: Tasks (Home) Page +--- + +:::tip +Use the shortcut H+H (double press H) to navigate to the home page from anywhere. +::: + +![Tasks overview](assets/home_tasks/home_tasks_main.png) + +## Overview + +Welcome to your Tasks home page! This is where you'll land when you first log in and is likely to be your central hub for managing your tasks. Designed specifically for artists, it provides a clear view of your assignments, their statuses, and allows you to collaborate by leaving comments and receiving feedback. + +:::note +This page displays all your **assigned** tasks. To see the complete project context, open it in the browser or log in with an admin or manager account. +::: + +## Board View + +The task board, also known as Kanban, visually organizes your tasks by status. Click a task to open the details panel, revealing more information like its activity feed, versions, and attributes. Within the activity feed, you can discuss the task and leave comments. [Read more about the activity feed](artist_activity_feed). + +### Status Management + +You can change a task's status by either dragging it to a different column on the board or selecting a new status from the dropdown menu within its details panel. + +![Drag tasks between columns](assets/home_tasks/home_tasks_dragging.png) + +:::tip +Boost your efficiency! Select multiple tasks simultaneously and either drag them together to update their status or manage them all at once through the details panel. + +![Select multiple tasks](assets/home_tasks/home_tasks_dragging_multiple.png) +::: + +### Board Organisation + +You can minimize the Kanban board by collapsing individual status columns. Click the small button located in the top right corner of each column to collapse it. + +![Collapse status columns](assets/home_tasks/home_tasks_collapse.png) + +### Thumbnails + +While we recommend using thumbnails for published versions, you can easily update any task's thumbnail by dragging a file directly onto its details panel. + +![Drop images on tasks](assets/home_tasks/home_tasks_dropping.png) + +:::note +By default, task thumbnails display the latest version's thumbnail. However, if a custom thumbnail has been set for a specific task, that will take precedence. +::: + +## Sorting and Filtering + +The Tasks page has powerful sorting and filtering features and we intend to add more overtime based on user feedback. + +### Sort By + +Sort tasks by multiple types and in different directions. + +For example, you might sort by folder name to group related tasks. However, if you have multiple tasks within a folder named similarly (like "sh020"), you can add a secondary sort by task name for a more granular view. + +![Sort tasks](assets/home_tasks/home_tasks_sortby.png) + +### Group By + +Group tasks by any relevant field, like project or type. This is especially helpful for managing tasks across different projects or bringing similar tasks together for a clearer view. Grouping even works alongside sorting, so you can sort your grouped tasks for ultimate organization! + +![Group tasks](assets/home_tasks/home_tasks_groupby.png) + +### Assignee View + +Admins and managers can view other users' boards. This provides a quick way to see what tasks are assigned to specific artists and their current workload. + +![Group tasks](assets/home_tasks/home_tasks_assignee_select.png) + +:::note +Stay tuned! We're developing a feature that will allow you to select all users simultaneously. +::: + +## List View + +Switch to the list view for a data-rich, minimalist layout that prioritizes efficiency. This view is perfect for users with heavy workloads, and it offers full keyboard support for lightning-fast task selection. Plus, grouping lets you organize your tasks and collapse them for a cleaner, focused workspace. + +![Group tasks](assets/home_tasks/home_tasks_list.png) + +:::tip +To collapse or expand a group in the list view, simply hover over the group and press To collapse or expand a group in the list view, simply hover over the group and press **C** on your keyboard. + +![Group tasks](assets/home_tasks/home_tasks_list_collapse.png) +::: + +:::tip +In the list view, you can change a task's status directly. Just click the status icon next to the task to see the available options and choose the new one. + +![Group tasks](assets/home_tasks/home_tasks_list_status.png) +::: diff --git a/website/docs/artist_reviewables.mdx b/website/docs/artist_reviewables.mdx new file mode 100644 index 00000000..84ccc02a --- /dev/null +++ b/website/docs/artist_reviewables.mdx @@ -0,0 +1,113 @@ +--- +id: artist_reviewables +title: Reviewables +sidebar_label: Reviewables +description: Upload videos and images to be reviewed. +--- + +:::info +Reviewables were introduced in `1.3.0`. +::: + +![Spinning robot in a web view player](./assets/review/reviewables_viewer_robot.png) + +## Overview + +The reviewables feature streamlines the version review process, making it both simple and powerful. Traditionally, each version could only have a single "representation" for reviewing. Reviewables revolutionize this by allowing you to create and manage as many focused review elements as needed for a single version. These reviewables can be conveniently uploaded and managed directly within the web interface. + +:::tip +Here are some examples of how reviewables could be utilized: + +- A model needs to be reviewed with multiple different lighting setups. +- A complex model needs to have be viewed close up. +- An animation needs to be viewed from multiple angles. +- An environment needs to show different areas in more detail. + +::: + +## Reviewables Tab + +Every version has a "Files" tab that can be used to view, manage and upload new reviewables. To upload a reviewable drag and drop a media file over the reviewables area or click the dropzone to pick a file. + +![A tab with multiple reviewables and a file upload dropzone](./assets/review/reviewables_tab_highlighted.png) + +### Default File Support + +By default the viewer supports web standard file types that don't need any conversion. + +**Image**: `png` `jpg` `webp` + +**Video**: `mp4` + +:::info +You will see a message to let you know if a reviewable file is not viewable, however anyone with access can still download the file. + +![Three reviewables, two that need converting](./assets/review/reviewables_conversion_required.png) +::: + +### Transcoding File Support + +File types that are not natively supported by the browser need to be converted using a transcoder. The transcoder is only available through a subscription on [Ynput Cloud](https://ynput.cloud/subscribe/ayon). + +**Image**: Most images types including `psd` files + +**Video**: `mp4` `mov: 264, 265, prores` `mpeg` `webm` `wmv` `avi` + +:::tip +Transcoded media will have filenames with `.transcoded.` in them. You can always download the original uploaded file. + +![Three reviewables, two that need converting](./assets/review/reviewables_transcoded.png) +::: + +## Web Viewer + +You can quickly view a Reviewable by using the Web Viewer. To open the viewer: + +1. Click on a reviewable +2. Click on any entity thumbnail +3. Press spacebar on any selection for folders, tasks and versions. + +![3 different ways to open the viewer](./assets/review/reviewables_open.png) + +### Player Controls + +The viewer comes with all the player controls you would expect and we plan to add more advanced controls in the future. + +- Play/Pause `Spacebar` +- Next/Previous frame `Left and Right arrows` +- Next/Previous 5 frames `Shift Left and Right arrows` +- First frame `Shift A` +- Last frame `Shift D` +- Full screen `F` +- Mute `M` +- Looping +- Grid overlay +- Scrubbable timeline + +![A video player with all the controls](./assets/review/reviewables_viewer_robot.png) + +### Comparing Versions + +The viewer makes it incredibly easy to compare different versions of the same reviewable. Go to any frame and select the next or previous version. If there's a matching reviewable it will be displayed on the same frame. + +![Series of buttons for changing the version](./assets/review/reviewables_version_selector.png) + +import versionsSwitching from "./assets/review/viewer_versions_switching_v002.mov"; + + + +:::tip +We recommend using the two main shortcuts `A - previous version` and `D - next version` to quickly flick back and forth between versions. +::: + +### Comparing Reviewables + +Reviewables with the same label across versions will be synced allowing for comparison of two reviewables from different versions. + +import reviewablesSwitching from "./assets/review/reviewables_switching_v002.mov"; + + diff --git a/website/docs/artist_task_progress_page.mdx b/website/docs/artist_task_progress_page.mdx new file mode 100644 index 00000000..b49c78a1 --- /dev/null +++ b/website/docs/artist_task_progress_page.mdx @@ -0,0 +1,49 @@ +--- +id: artist_task_progress_page +title: Task Progress Page +sidebar_label: Task Progress Page +--- + +:::info +The Task Progress page was introduced in `1.4.0`. +::: + +![Tasks for three folders](./assets/task_progress/task_progress_overview.png) + +### Overview + +The Task Progress page provides a clear overview of the status of all tasks within a project. + +It’s an ideal tool for assessing the overall progress of the entire project or focusing on specific areas. The page also allows for full task editing, with emphasis on updating task statuses and reassigning team members. + +### Focused On + +- Getting an overall feel of progression +- Managing statuses of many tasks +- Assigning users to tasks + +import showcase from "./assets/task_progress/task_progress_showcase_v002_min.mp4"; + + + +### Management + +To update a task's status or assignees, first select the task cell, then click on the left or middle section. + +![Editing the assignees of a task](./assets/task_progress/task_progress_editing.png) + +:::tip +When selecting multiple tasks and adding or removing a user, the original assignees for each task will be updated to include or exclude that user. For example, adding "John" to tasks will keep the current assignees intact while adding "John" to each task. +::: + +### Details + +For more details or additional changes to a task, open the details panel by double-clicking on the task. + +![Selected task with a panel open with more details](./assets/task_progress/task_progress_details_panel.png) + +:::tip +To quickly view a task's reviewables, press the `Spacebar` on a selected task. Tasks with available reviewables will display a play button in the top-right corner. +::: diff --git a/website/docs/artist_tools_inventory.md b/website/docs/artist_tools_inventory.md index 2d834b0a..09076c71 100644 --- a/website/docs/artist_tools_inventory.md +++ b/website/docs/artist_tools_inventory.md @@ -15,7 +15,7 @@ To use it go to **AYON** Menu > **Manage** which opens **Inventory** for use. ![tools_inventory_01](assets/tools/tools_inventory_01.png) :::note -Understanding [Key concepts](artist_concepts) and being aware of AYON terminology is a neccessity to be able to use this tool fully. +Understanding [Key concepts](artist_concepts.md) and being aware of AYON terminology is a neccessity to be able to use this tool fully. ::: Here is a small demo of a usage in Maya DCC host and where to locate it and its basics: diff --git a/website/docs/assets/activity_feed/activity-feed-attachments.png b/website/docs/assets/activity_feed/activity-feed-attachments.png new file mode 100644 index 00000000..ae00b9ee Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-attachments.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-checklists.png b/website/docs/assets/activity_feed/activity-feed-checklists.png new file mode 100644 index 00000000..b93eeb70 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-checklists.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-filters.png b/website/docs/assets/activity_feed/activity-feed-filters.png new file mode 100644 index 00000000..87dbd4c2 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-filters.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-markdown.png b/website/docs/assets/activity_feed/activity-feed-markdown.png new file mode 100644 index 00000000..48c5ae07 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-markdown.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-mentions.png b/website/docs/assets/activity_feed/activity-feed-mentions.png new file mode 100644 index 00000000..d404886d Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-mentions.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-overview-sh030-compositing.png b/website/docs/assets/activity_feed/activity-feed-overview-sh030-compositing.png new file mode 100644 index 00000000..abb491f1 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-overview-sh030-compositing.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-relations.png b/website/docs/assets/activity_feed/activity-feed-relations.png new file mode 100644 index 00000000..ad41ac8b Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-relations.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-types.png b/website/docs/assets/activity_feed/activity-feed-types.png new file mode 100644 index 00000000..397dd3e2 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-types.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-versions-slideout.png b/website/docs/assets/activity_feed/activity-feed-versions-slideout.png new file mode 100644 index 00000000..9c87f4b5 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-versions-slideout.png differ diff --git a/website/docs/assets/activity_feed/activity-feed-versions.png b/website/docs/assets/activity_feed/activity-feed-versions.png new file mode 100644 index 00000000..ef2f9775 Binary files /dev/null and b/website/docs/assets/activity_feed/activity-feed-versions.png differ diff --git a/website/docs/assets/admin_hosts_wrap_multi_templates.png b/website/docs/assets/admin_hosts_wrap_multi_templates.png new file mode 100644 index 00000000..4a8c44cd Binary files /dev/null and b/website/docs/assets/admin_hosts_wrap_multi_templates.png differ diff --git a/website/docs/assets/aquarium/aquarium-addon-settings.png b/website/docs/assets/aquarium/aquarium-addon-settings.png new file mode 100644 index 00000000..e7b6816e Binary files /dev/null and b/website/docs/assets/aquarium/aquarium-addon-settings.png differ diff --git a/website/docs/assets/aquarium/aquarium-ayon-logo.png b/website/docs/assets/aquarium/aquarium-ayon-logo.png new file mode 100644 index 00000000..911518fd Binary files /dev/null and b/website/docs/assets/aquarium/aquarium-ayon-logo.png differ diff --git a/website/docs/assets/aquarium/aquarium-sync.png b/website/docs/assets/aquarium/aquarium-sync.png new file mode 100644 index 00000000..55b5671a Binary files /dev/null and b/website/docs/assets/aquarium/aquarium-sync.png differ diff --git a/website/docs/assets/aquarium/ayon-connector-bot.png b/website/docs/assets/aquarium/ayon-connector-bot.png new file mode 100644 index 00000000..223a1b0e Binary files /dev/null and b/website/docs/assets/aquarium/ayon-connector-bot.png differ diff --git a/website/docs/assets/aquarium/ayon-connector-enable.png b/website/docs/assets/aquarium/ayon-connector-enable.png new file mode 100644 index 00000000..93c97a43 Binary files /dev/null and b/website/docs/assets/aquarium/ayon-connector-enable.png differ diff --git a/website/docs/assets/aquarium/ayon-launcher-signin.png b/website/docs/assets/aquarium/ayon-launcher-signin.png new file mode 100644 index 00000000..a3de9a09 Binary files /dev/null and b/website/docs/assets/aquarium/ayon-launcher-signin.png differ diff --git a/website/docs/assets/aquarium/ayon-secrets.png b/website/docs/assets/aquarium/ayon-secrets.png new file mode 100644 index 00000000..ff05ef2c Binary files /dev/null and b/website/docs/assets/aquarium/ayon-secrets.png differ diff --git a/website/docs/assets/aquarium/ayon-services.png b/website/docs/assets/aquarium/ayon-services.png new file mode 100644 index 00000000..8f27bae7 Binary files /dev/null and b/website/docs/assets/aquarium/ayon-services.png differ diff --git a/website/docs/assets/aquarium/ayon-spawn-service.png b/website/docs/assets/aquarium/ayon-spawn-service.png new file mode 100644 index 00000000..800bfd1a Binary files /dev/null and b/website/docs/assets/aquarium/ayon-spawn-service.png differ diff --git a/website/docs/assets/aquarium/create-on-aquarium.png b/website/docs/assets/aquarium/create-on-aquarium.png new file mode 100644 index 00000000..8071c331 Binary files /dev/null and b/website/docs/assets/aquarium/create-on-aquarium.png differ diff --git a/website/docs/assets/aquarium/create-on-ayon.png b/website/docs/assets/aquarium/create-on-ayon.png new file mode 100644 index 00000000..8c527995 Binary files /dev/null and b/website/docs/assets/aquarium/create-on-ayon.png differ diff --git a/website/docs/assets/aquarium/pair-to-ayon.png b/website/docs/assets/aquarium/pair-to-ayon.png new file mode 100644 index 00000000..f3a5bc95 Binary files /dev/null and b/website/docs/assets/aquarium/pair-to-ayon.png differ diff --git a/website/docs/assets/aquarium/sync-to-ayon.png b/website/docs/assets/aquarium/sync-to-ayon.png new file mode 100644 index 00000000..593cca0b Binary files /dev/null and b/website/docs/assets/aquarium/sync-to-ayon.png differ diff --git a/website/docs/assets/aquarium/unpair-projects.png b/website/docs/assets/aquarium/unpair-projects.png new file mode 100644 index 00000000..60ef1d71 Binary files /dev/null and b/website/docs/assets/aquarium/unpair-projects.png differ diff --git a/website/docs/assets/artist_hosts_wrap_multi_templates.png b/website/docs/assets/artist_hosts_wrap_multi_templates.png new file mode 100644 index 00000000..6c26a2e9 Binary files /dev/null and b/website/docs/assets/artist_hosts_wrap_multi_templates.png differ diff --git a/website/docs/assets/artist_systray.png b/website/docs/assets/artist_systray.png index 1e7ba9be..d95d7adb 100644 Binary files a/website/docs/assets/artist_systray.png and b/website/docs/assets/artist_systray.png differ diff --git a/website/docs/assets/ayon_install_windows_01.png b/website/docs/assets/ayon_install_windows_01.png index c0d4e95c..ff883276 100644 Binary files a/website/docs/assets/ayon_install_windows_01.png and b/website/docs/assets/ayon_install_windows_01.png differ diff --git a/website/docs/assets/ayon_install_windows_02.png b/website/docs/assets/ayon_install_windows_02.png index c145aab8..3c23b925 100644 Binary files a/website/docs/assets/ayon_install_windows_02.png and b/website/docs/assets/ayon_install_windows_02.png differ diff --git a/website/docs/assets/ayon_launcher_icon.png b/website/docs/assets/ayon_launcher_icon.png new file mode 100644 index 00000000..88d79e22 Binary files /dev/null and b/website/docs/assets/ayon_launcher_icon.png differ diff --git a/website/docs/assets/blender-model_pre_publish.png b/website/docs/assets/blender-model_pre_publish.png index a3473914..9fdfb8a2 100644 Binary files a/website/docs/assets/blender-model_pre_publish.png and b/website/docs/assets/blender-model_pre_publish.png differ diff --git a/website/docs/assets/blender_ayon.png b/website/docs/assets/blender_ayon.png new file mode 100644 index 00000000..8699ec27 Binary files /dev/null and b/website/docs/assets/blender_ayon.png differ diff --git a/website/docs/assets/blender_model_validate.png b/website/docs/assets/blender_model_validate.png new file mode 100644 index 00000000..c455f48d Binary files /dev/null and b/website/docs/assets/blender_model_validate.png differ diff --git a/website/docs/assets/blender_save.gif b/website/docs/assets/blender_save.gif new file mode 100644 index 00000000..b549d93f Binary files /dev/null and b/website/docs/assets/blender_save.gif differ diff --git a/website/docs/assets/core/admin/different_burnin_profiles.png b/website/docs/assets/core/admin/different_burnin_profiles.png new file mode 100644 index 00000000..910fea0c Binary files /dev/null and b/website/docs/assets/core/admin/different_burnin_profiles.png differ diff --git a/website/docs/assets/core/admin/extract_burnin.png b/website/docs/assets/core/admin/extract_burnin.png new file mode 100644 index 00000000..4557776f Binary files /dev/null and b/website/docs/assets/core/admin/extract_burnin.png differ diff --git a/website/docs/assets/core/admin/extract_burnin_format_settings.png b/website/docs/assets/core/admin/extract_burnin_format_settings.png new file mode 100644 index 00000000..daca2b74 Binary files /dev/null and b/website/docs/assets/core/admin/extract_burnin_format_settings.png differ diff --git a/website/docs/assets/core/admin/extract_burnin_profile_settings.png b/website/docs/assets/core/admin/extract_burnin_profile_settings.png new file mode 100644 index 00000000..a897836a Binary files /dev/null and b/website/docs/assets/core/admin/extract_burnin_profile_settings.png differ diff --git a/website/docs/assets/core/admin/link_to_burnin_by_name.png b/website/docs/assets/core/admin/link_to_burnin_by_name.png new file mode 100644 index 00000000..d587b5fe Binary files /dev/null and b/website/docs/assets/core/admin/link_to_burnin_by_name.png differ diff --git a/website/docs/assets/deadline_webserver_config.png b/website/docs/assets/deadline_webserver_config.png index 5483e9e7..24839df0 100644 Binary files a/website/docs/assets/deadline_webserver_config.png and b/website/docs/assets/deadline_webserver_config.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_assignee_select.png b/website/docs/assets/home_tasks/home_tasks_assignee_select.png new file mode 100644 index 00000000..009a936e Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_assignee_select.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_collapse.png b/website/docs/assets/home_tasks/home_tasks_collapse.png new file mode 100644 index 00000000..29ba457d Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_collapse.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_dragging.png b/website/docs/assets/home_tasks/home_tasks_dragging.png new file mode 100644 index 00000000..6e925da5 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_dragging.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_dragging_multiple.png b/website/docs/assets/home_tasks/home_tasks_dragging_multiple.png new file mode 100644 index 00000000..2ba7f631 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_dragging_multiple.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_dropping.png b/website/docs/assets/home_tasks/home_tasks_dropping.png new file mode 100644 index 00000000..e9d546b4 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_dropping.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_groupby.png b/website/docs/assets/home_tasks/home_tasks_groupby.png new file mode 100644 index 00000000..91d31cd4 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_groupby.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_list.png b/website/docs/assets/home_tasks/home_tasks_list.png new file mode 100644 index 00000000..37127a69 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_list.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_list_collapse.png b/website/docs/assets/home_tasks/home_tasks_list_collapse.png new file mode 100644 index 00000000..d35689b2 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_list_collapse.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_list_status.png b/website/docs/assets/home_tasks/home_tasks_list_status.png new file mode 100644 index 00000000..3c8b1b43 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_list_status.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_main.png b/website/docs/assets/home_tasks/home_tasks_main.png new file mode 100644 index 00000000..1c7beb81 Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_main.png differ diff --git a/website/docs/assets/home_tasks/home_tasks_sortby.png b/website/docs/assets/home_tasks/home_tasks_sortby.png new file mode 100644 index 00000000..6c3a297f Binary files /dev/null and b/website/docs/assets/home_tasks/home_tasks_sortby.png differ diff --git a/website/docs/assets/inbox/inbox_enable.png b/website/docs/assets/inbox/inbox_enable.png new file mode 100644 index 00000000..a6251de1 Binary files /dev/null and b/website/docs/assets/inbox/inbox_enable.png differ diff --git a/website/docs/assets/inbox/inbox_important.png b/website/docs/assets/inbox/inbox_important.png new file mode 100644 index 00000000..bde72605 Binary files /dev/null and b/website/docs/assets/inbox/inbox_important.png differ diff --git a/website/docs/assets/inbox/notifications_account_settings.png b/website/docs/assets/inbox/notifications_account_settings.png new file mode 100644 index 00000000..7662e82a Binary files /dev/null and b/website/docs/assets/inbox/notifications_account_settings.png differ diff --git a/website/docs/assets/inbox/watchers.png b/website/docs/assets/inbox/watchers.png new file mode 100644 index 00000000..c231509a Binary files /dev/null and b/website/docs/assets/inbox/watchers.png differ diff --git a/website/docs/assets/integrate_kitsu_note_settings.png b/website/docs/assets/integrate_kitsu_note_settings.png deleted file mode 100644 index 127e79ab..00000000 Binary files a/website/docs/assets/integrate_kitsu_note_settings.png and /dev/null differ diff --git a/website/docs/assets/json/Ayon_addons_version.json b/website/docs/assets/json/Ayon_addons_version.json index 2dec4462..3965f96c 100644 --- a/website/docs/assets/json/Ayon_addons_version.json +++ b/website/docs/assets/json/Ayon_addons_version.json @@ -2,6 +2,7 @@ "_comment" : " Badges are used to indicate the version of addons. The following badges are generated using https://michaelcurrin.github.io/badge-generator/#/generic , Supported icons https://simpleicons.org/", "Aftereffects_Badge" : "[![AfterFX Addon - 0.1.2](https://img.shields.io/badge/AfterEffects_Addon-0.1.2-222246?logo=adobeaftereffects)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/aftereffects)", "Applications_Badge" : "[![Applications Addon - 0.1.3](https://img.shields.io/badge/Applications_Addon-0.1.3-00d6a1)](https://github.com/ynput/OpenPype/tree/develop/server_addon/applications)", + "Aquarium_Badge" : "[![Aquarium Addon - 0.0.3](https://img.shields.io/badge/Aquarium_Addon-_0.0.3-339af0)](https://github.com/ynput/ayon-aquarium)", "Blender_Badge" : "[![Blender Addon - 0.1.5](https://img.shields.io/badge/Blender_Addon-0.1.5-e87d0d?logo=blender)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/blender)", "Celaction_Badge" : "[![CelAction Addon - 0.1.0](https://img.shields.io/badge/CelAction_Addon-0.1.0-09bef3)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/celaction)", "Clockify_Badge" : "[![Clockify Addon - 0.1.1](https://img.shields.io/badge/Clockify_Addon-0.1.1-0ca5eb)](https://github.com/ynput/OpenPype/tree/develop/openpype/modules/clockify)", @@ -14,10 +15,11 @@ "Harmony_Badge" : "[![Harmony Addon - 0.1.2](https://img.shields.io/badge/Harmony_Addon-0.1.2-8bcbb8)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/harmony)", "Hiero_Badge" : "[![Hiero Addon - 0.1.0](https://img.shields.io/badge/Hiero_Addon-0.1.0-fab41a)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/hiero)", "Houdini_Badge" : "[![Houdini addon - 0.2.12](https://img.shields.io/badge/Houdini_Addon-0.2.12-FF4713?logo=houdini)](https://github.com/ynput/ayon-core/tree/develop/client/ayon_core/hosts/houdini)", - "Kitsu_Badge" : "[![Kitsu Addon - 0.1.3](https://img.shields.io/badge/Kitsu_Addon-0.1.3-e56b27)](https://github.com/ynput/ayon-kitsu)", + "Kitsu_Badge" : "[![Kitsu Addon - 1.1.0](https://img.shields.io/badge/Kitsu_Addon-1.1.0-e56b27)](https://github.com/ynput/ayon-kitsu)", "Max_Badge" : "[![3Ds Max Addon - 0.1.2](https://img.shields.io/badge/3Ds_Max_Addon-0.1.2-3190b2)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/max)", "Maya_Badge" : "[![Maya addon - 0.1.6](https://img.shields.io/badge/Maya_Addon-0.1.6-3190b2)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/maya)", "Muster_Badge" : "[![Muster Addon - 0.1.1](https://img.shields.io/badge/Muster_Addon-0.1.1-1589b8)](https://github.com/ynput/OpenPype/tree/develop/openpype/modules/muster)", + "MotionBuilder_Badge" : "[![Motionbuilder Addon - 0.1.1](https://img.shields.io/badge/MotionBuilder_Addon-0.1.1-f279b1)](https://github.com/ynput/ayon-motionbuilder)", "Nuke_Badge" : "[![Nuke Addon - 0.1.5](https://img.shields.io/badge/Nuke_Addon-0.1.5-fab41a?logo=nuke&logoColor=fab41a)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/nuke)", "OpenPype_Badge" : "[![OpenPype Addon - 3.7.17](https://img.shields.io/badge/OpenPype_Addon-3.7.17-00d6a1)](https://github.com/ynput/OpenPype)", "OpenRV_Badge" : "[![OpenRV Addon - 1.0.0](https://img.shields.io/badge/OpenRV_Addon-1.0.0-36a4cb)](https://github.com/ynput/ayon-openrv)", @@ -26,13 +28,14 @@ "RoyalRender_Badge" : "[![Royal Render Addon - 0.1.1](https://img.shields.io/badge/Royal_Render_Addon-0.1.1-black)](https://github.com/ynput/OpenPype/tree/develop/openpype/modules/royalrender)", "Flow_Badge" : "[![Flow (ShotGrid) Addon - 0.4.0](https://img.shields.io/badge/Flow_(ShotGrid)_Addon-0.4.0-3190b2)](https://github.com/ynput/ayon-shotgrid)", "SitSync_Badge" : "![SiteSync Addon - 1.0.1](https://img.shields.io/badge/SiteSync_Addon-1.0.1-00d6a1)", - "Slack_Badge" : "[![Slack Addon - 1.0.1](https://img.shields.io/badge/Slack_Addon-1.0.1-4A154B?logo=slack&logoColor=a9e3cc)](https://github.com/ynput/ayon-slack)", + "Slack_Badge" : "[![Slack Addon - 1.1.2](https://img.shields.io/badge/Slack_Addon-1.1.2-4A154B?logo=slack&logoColor=a9e3cc)](https://github.com/ynput/ayon-slack)", "SubstancePainter_Badge" : "[![Substance Painter Addon - 0.1.0](https://img.shields.io/badge/Substance_Painter_Addon-0.1.0-e1212e)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/substancepainter)", "ThirdPart_Badge" : "[![3rd Party Settings Addon - 1.0.0](https://img.shields.io/badge/3rd_Party_Settings_Addon-1.0.0-00d6a1)](https://github.com/ynput/ayon-third-party/tree/develop)", "TimersManager_Badge" : "[![Timer Manager Addon - 0.1.1](https://img.shields.io/badge/Timer_Manager_Addon-0.1.1-00d6a1)](https://github.com/ynput/OpenPype/tree/develop/openpype/modules/timers_manager)", - "TrayPublisher_Badge" : "[![Tray Publisher Addon - 0.1.3](https://img.shields.io/badge/Tray_Publisher_Addon-0.1.3-00d6a1)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/traypublisher)", + "TrayPublisher_Badge" : "[![Tray Publisher Addon - 0.1.4](https://img.shields.io/badge/Tray_Publisher_Addon-0.1.4-00d6a1)](https://github.com/ynput/ayon-core/tree/develop/server_addon/traypublisher)", "TVPaint_Badge" : "[![TVPaint Addon - 0.1.0](https://img.shields.io/badge/TVPaint_Addon-0.1.0-4b89a0)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/tvpaint)", "Unreal_Badge" : "[![Unreal Addon - 0.1.0](https://img.shields.io/badge/Unreal_Addon-0.1.0-0E1128?logo=unrealengine)](https://github.com/ynput/OpenPype/tree/develop/openpype/hosts/unreal)", + "USD_Badge" : "[![USD Addon - 0.1.2](https://img.shields.io/badge/USD_Addon-1.0.3-1c91d4)](https://github.com/ynput/ayon-usd)", "Wrap_Badge" : "![wrap - 0.0.1](https://img.shields.io/badge/wrap-0.0.1-2f4249)", "Zbrush_Badge" : "![zbrush - 0.1.0](https://img.shields.io/badge/zbrush-0.1.0-2f4249)", diff --git a/website/docs/assets/kitsu/admin/ayon_install_addon.png b/website/docs/assets/kitsu/admin/ayon_install_addon.png new file mode 100644 index 00000000..b5e23786 Binary files /dev/null and b/website/docs/assets/kitsu/admin/ayon_install_addon.png differ diff --git a/website/docs/assets/kitsu/admin/integrate_kitsu_note_settings.png b/website/docs/assets/kitsu/admin/integrate_kitsu_note_settings.png new file mode 100644 index 00000000..1b4a75dd Binary files /dev/null and b/website/docs/assets/kitsu/admin/integrate_kitsu_note_settings.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_addon_market.png b/website/docs/assets/kitsu/admin/kitsu_addon_market.png new file mode 100644 index 00000000..68aff04a Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_addon_market.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_admin_account.png b/website/docs/assets/kitsu/admin/kitsu_admin_account.png new file mode 100644 index 00000000..3a4b5dce Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_admin_account.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_comment_publisher.png b/website/docs/assets/kitsu/admin/kitsu_comment_publisher.png new file mode 100644 index 00000000..a5817523 Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_comment_publisher.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_comment_template.png b/website/docs/assets/kitsu/admin/kitsu_comment_template.png new file mode 100644 index 00000000..4219e7eb Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_comment_template.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_gh_releases.png b/website/docs/assets/kitsu/admin/kitsu_gh_releases.png new file mode 100644 index 00000000..7ebc17d2 Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_gh_releases.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_server_url.png b/website/docs/assets/kitsu/admin/kitsu_server_url.png new file mode 100644 index 00000000..9a19f8f9 Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_server_url.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_service.png b/website/docs/assets/kitsu/admin/kitsu_service.png new file mode 100644 index 00000000..dceca16d Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_service.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_tab_sync.png b/website/docs/assets/kitsu/admin/kitsu_tab_sync.png new file mode 100644 index 00000000..a4b521cd Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_tab_sync.png differ diff --git a/website/docs/assets/kitsu/admin/kitsu_tab_sync_2.png b/website/docs/assets/kitsu/admin/kitsu_tab_sync_2.png new file mode 100644 index 00000000..6b4bac21 Binary files /dev/null and b/website/docs/assets/kitsu/admin/kitsu_tab_sync_2.png differ diff --git a/website/docs/assets/kitsu/kitsu_credentials.png b/website/docs/assets/kitsu/artist/kitsu_credentials.png similarity index 100% rename from website/docs/assets/kitsu/kitsu_credentials.png rename to website/docs/assets/kitsu/artist/kitsu_credentials.png diff --git a/website/docs/assets/kitsu/artist/kitsu_note_1.png b/website/docs/assets/kitsu/artist/kitsu_note_1.png new file mode 100644 index 00000000..74f7ac20 Binary files /dev/null and b/website/docs/assets/kitsu/artist/kitsu_note_1.png differ diff --git a/website/docs/assets/kitsu/artist/kitsu_note_2.png b/website/docs/assets/kitsu/artist/kitsu_note_2.png new file mode 100644 index 00000000..ebf3d882 Binary files /dev/null and b/website/docs/assets/kitsu/artist/kitsu_note_2.png differ diff --git a/website/docs/assets/maya/admin/alembic_settings.png b/website/docs/assets/maya/admin/alembic_settings.png new file mode 100644 index 00000000..5649ab90 Binary files /dev/null and b/website/docs/assets/maya/admin/alembic_settings.png differ diff --git a/website/docs/assets/maya/artist/alembic_options.png b/website/docs/assets/maya/artist/alembic_options.png new file mode 100644 index 00000000..89dc4f66 Binary files /dev/null and b/website/docs/assets/maya/artist/alembic_options.png differ diff --git a/website/docs/assets/maya/artist/ass_loader.gif b/website/docs/assets/maya/artist/ass_loader.gif new file mode 100644 index 00000000..5db0154e Binary files /dev/null and b/website/docs/assets/maya/artist/ass_loader.gif differ diff --git a/website/docs/assets/maya/artist/ass_look_assign.gif b/website/docs/assets/maya/artist/ass_look_assign.gif new file mode 100644 index 00000000..ccd6bf3e Binary files /dev/null and b/website/docs/assets/maya/artist/ass_look_assign.gif differ diff --git a/website/docs/assets/maya/artist/ass_proxy_sets.gif b/website/docs/assets/maya/artist/ass_proxy_sets.gif new file mode 100644 index 00000000..34dc6490 Binary files /dev/null and b/website/docs/assets/maya/artist/ass_proxy_sets.gif differ diff --git a/website/docs/assets/maya/artist/ass_publish_framerange.png b/website/docs/assets/maya/artist/ass_publish_framerange.png new file mode 100644 index 00000000..9a4ccd0d Binary files /dev/null and b/website/docs/assets/maya/artist/ass_publish_framerange.png differ diff --git a/website/docs/assets/maya/artist/ass_publish_types.png b/website/docs/assets/maya/artist/ass_publish_types.png new file mode 100644 index 00000000..ac01ea2e Binary files /dev/null and b/website/docs/assets/maya/artist/ass_publish_types.png differ diff --git a/website/docs/assets/maya/artist/ass_validator_hierarchy.png b/website/docs/assets/maya/artist/ass_validator_hierarchy.png new file mode 100644 index 00000000..77e6e8e2 Binary files /dev/null and b/website/docs/assets/maya/artist/ass_validator_hierarchy.png differ diff --git a/website/docs/assets/maya/artist/ass_validator_hierarchy2.png b/website/docs/assets/maya/artist/ass_validator_hierarchy2.png new file mode 100644 index 00000000..67152942 Binary files /dev/null and b/website/docs/assets/maya/artist/ass_validator_hierarchy2.png differ diff --git a/website/docs/assets/maya/artist/ass_validator_hierarchy3.png b/website/docs/assets/maya/artist/ass_validator_hierarchy3.png new file mode 100644 index 00000000..266b9d73 Binary files /dev/null and b/website/docs/assets/maya/artist/ass_validator_hierarchy3.png differ diff --git a/website/docs/assets/maya/artist/connect_ox_rig_scene_inventory.png b/website/docs/assets/maya/artist/connect_ox_rig_scene_inventory.png new file mode 100644 index 00000000..32345fac Binary files /dev/null and b/website/docs/assets/maya/artist/connect_ox_rig_scene_inventory.png differ diff --git a/website/docs/assets/maya/artist/ornatrix_cache_publishing.gif b/website/docs/assets/maya/artist/ornatrix_cache_publishing.gif new file mode 100644 index 00000000..20fe09e3 Binary files /dev/null and b/website/docs/assets/maya/artist/ornatrix_cache_publishing.gif differ diff --git a/website/docs/assets/maya/artist/ornatrix_rig_loading.gif b/website/docs/assets/maya/artist/ornatrix_rig_loading.gif new file mode 100644 index 00000000..132bb993 Binary files /dev/null and b/website/docs/assets/maya/artist/ornatrix_rig_loading.gif differ diff --git a/website/docs/assets/maya/artist/ornatrix_rig_publishing.gif b/website/docs/assets/maya/artist/ornatrix_rig_publishing.gif new file mode 100644 index 00000000..5368a821 Binary files /dev/null and b/website/docs/assets/maya/artist/ornatrix_rig_publishing.gif differ diff --git a/website/docs/assets/maya/artist/ox_creators_maya_addon_setting.jpg b/website/docs/assets/maya/artist/ox_creators_maya_addon_setting.jpg new file mode 100644 index 00000000..72db338a Binary files /dev/null and b/website/docs/assets/maya/artist/ox_creators_maya_addon_setting.jpg differ diff --git a/website/docs/assets/maya/artist/ox_loader_product_type.png b/website/docs/assets/maya/artist/ox_loader_product_type.png new file mode 100644 index 00000000..502a2df1 Binary files /dev/null and b/website/docs/assets/maya/artist/ox_loader_product_type.png differ diff --git a/website/docs/assets/maya/artist/ox_loaders_maya_addon_setting.png b/website/docs/assets/maya/artist/ox_loaders_maya_addon_setting.png new file mode 100644 index 00000000..c6f93821 Binary files /dev/null and b/website/docs/assets/maya/artist/ox_loaders_maya_addon_setting.png differ diff --git a/website/docs/assets/maya/artist/ox_rig_loader.png b/website/docs/assets/maya/artist/ox_rig_loader.png new file mode 100644 index 00000000..b531e096 Binary files /dev/null and b/website/docs/assets/maya/artist/ox_rig_loader.png differ diff --git a/website/docs/assets/maya/artist/ox_validator_maya_addon_setting.jpg b/website/docs/assets/maya/artist/ox_validator_maya_addon_setting.jpg new file mode 100644 index 00000000..1ef269a2 Binary files /dev/null and b/website/docs/assets/maya/artist/ox_validator_maya_addon_setting.jpg differ diff --git a/website/docs/assets/maya/artist/xgen_connect_geo.gif b/website/docs/assets/maya/artist/xgen_connect_geo.gif new file mode 100644 index 00000000..e9af7a1a Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_connect_geo.gif differ diff --git a/website/docs/assets/maya/artist/xgen_connect_xgn.gif b/website/docs/assets/maya/artist/xgen_connect_xgn.gif new file mode 100644 index 00000000..095e28ae Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_connect_xgn.gif differ diff --git a/website/docs/assets/maya/artist/xgen_create.gif b/website/docs/assets/maya/artist/xgen_create.gif new file mode 100644 index 00000000..d161656a Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_create.gif differ diff --git a/website/docs/assets/maya/artist/xgen_create_2.gif b/website/docs/assets/maya/artist/xgen_create_2.gif new file mode 100644 index 00000000..aaf9ce22 Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_create_2.gif differ diff --git a/website/docs/assets/maya/artist/xgen_dl_settings.gif b/website/docs/assets/maya/artist/xgen_dl_settings.gif new file mode 100644 index 00000000..1b91b0a7 Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_dl_settings.gif differ diff --git a/website/docs/assets/maya/artist/xgen_load.gif b/website/docs/assets/maya/artist/xgen_load.gif new file mode 100644 index 00000000..6aa5ad1b Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_load.gif differ diff --git a/website/docs/assets/maya/artist/xgen_manage.gif b/website/docs/assets/maya/artist/xgen_manage.gif new file mode 100644 index 00000000..c1d4ea92 Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_manage.gif differ diff --git a/website/docs/assets/maya/artist/xgen_maya_settings.gif b/website/docs/assets/maya/artist/xgen_maya_settings.gif new file mode 100644 index 00000000..7a994b91 Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_maya_settings.gif differ diff --git a/website/docs/assets/maya/artist/xgen_publish.gif b/website/docs/assets/maya/artist/xgen_publish.gif new file mode 100644 index 00000000..7fab55b1 Binary files /dev/null and b/website/docs/assets/maya/artist/xgen_publish.gif differ diff --git a/website/docs/assets/motionbuilder/motion_builder_in_bundle_settings.png b/website/docs/assets/motionbuilder/motion_builder_in_bundle_settings.png new file mode 100644 index 00000000..c6c5d61a Binary files /dev/null and b/website/docs/assets/motionbuilder/motion_builder_in_bundle_settings.png differ diff --git a/website/docs/assets/motionbuilder/valid_version_plugin.png b/website/docs/assets/motionbuilder/valid_version_plugin.png new file mode 100644 index 00000000..8830b85e Binary files /dev/null and b/website/docs/assets/motionbuilder/valid_version_plugin.png differ diff --git a/website/docs/assets/motionbuilder/validate_outdated_containers.png b/website/docs/assets/motionbuilder/validate_outdated_containers.png new file mode 100644 index 00000000..0e0ec002 Binary files /dev/null and b/website/docs/assets/motionbuilder/validate_outdated_containers.png differ diff --git a/website/docs/assets/motionbuilder_ayon_launcher.png b/website/docs/assets/motionbuilder_ayon_launcher.png new file mode 100644 index 00000000..b78c64eb Binary files /dev/null and b/website/docs/assets/motionbuilder_ayon_launcher.png differ diff --git a/website/docs/assets/motionbuilder_ayon_menu.png b/website/docs/assets/motionbuilder_ayon_menu.png new file mode 100644 index 00000000..e22a2cfb Binary files /dev/null and b/website/docs/assets/motionbuilder_ayon_menu.png differ diff --git a/website/docs/assets/motionbuilder_creator.png b/website/docs/assets/motionbuilder_creator.png new file mode 100644 index 00000000..c8b13ee5 Binary files /dev/null and b/website/docs/assets/motionbuilder_creator.png differ diff --git a/website/docs/assets/motionbuilder_scene_inventory.png b/website/docs/assets/motionbuilder_scene_inventory.png new file mode 100644 index 00000000..ecdb4cd6 Binary files /dev/null and b/website/docs/assets/motionbuilder_scene_inventory.png differ diff --git a/website/docs/assets/nuke/push_to_project_dialogue.png b/website/docs/assets/nuke/push_to_project_dialogue.png new file mode 100644 index 00000000..ca9660be Binary files /dev/null and b/website/docs/assets/nuke/push_to_project_dialogue.png differ diff --git a/website/docs/assets/nuke/push_to_project_menu.png b/website/docs/assets/nuke/push_to_project_menu.png new file mode 100644 index 00000000..0cdb58a2 Binary files /dev/null and b/website/docs/assets/nuke/push_to_project_menu.png differ diff --git a/website/docs/assets/openrv_load.png b/website/docs/assets/openrv/openrv_load.png similarity index 100% rename from website/docs/assets/openrv_load.png rename to website/docs/assets/openrv/openrv_load.png diff --git a/website/docs/assets/openrv_manage.png b/website/docs/assets/openrv/openrv_manage.png similarity index 100% rename from website/docs/assets/openrv_manage.png rename to website/docs/assets/openrv/openrv_manage.png diff --git a/website/docs/assets/openrv/openrv_networking.png b/website/docs/assets/openrv/openrv_networking.png new file mode 100644 index 00000000..d7e32f79 Binary files /dev/null and b/website/docs/assets/openrv/openrv_networking.png differ diff --git a/website/docs/assets/openrv/openrv_open.png b/website/docs/assets/openrv/openrv_open.png new file mode 100644 index 00000000..9d9933d1 Binary files /dev/null and b/website/docs/assets/openrv/openrv_open.png differ diff --git a/website/docs/assets/openrv_publish.png b/website/docs/assets/openrv/openrv_publish.png similarity index 100% rename from website/docs/assets/openrv_publish.png rename to website/docs/assets/openrv/openrv_publish.png diff --git a/website/docs/assets/review/reviewables_conversion_required.png b/website/docs/assets/review/reviewables_conversion_required.png new file mode 100644 index 00000000..7314d692 Binary files /dev/null and b/website/docs/assets/review/reviewables_conversion_required.png differ diff --git a/website/docs/assets/review/reviewables_open.png b/website/docs/assets/review/reviewables_open.png new file mode 100644 index 00000000..1b085fee Binary files /dev/null and b/website/docs/assets/review/reviewables_open.png differ diff --git a/website/docs/assets/review/reviewables_switching_v002.mov b/website/docs/assets/review/reviewables_switching_v002.mov new file mode 100644 index 00000000..d59be265 Binary files /dev/null and b/website/docs/assets/review/reviewables_switching_v002.mov differ diff --git a/website/docs/assets/review/reviewables_tab.png b/website/docs/assets/review/reviewables_tab.png new file mode 100644 index 00000000..4f7b290c Binary files /dev/null and b/website/docs/assets/review/reviewables_tab.png differ diff --git a/website/docs/assets/review/reviewables_tab_highlighted.png b/website/docs/assets/review/reviewables_tab_highlighted.png new file mode 100644 index 00000000..69ab6426 Binary files /dev/null and b/website/docs/assets/review/reviewables_tab_highlighted.png differ diff --git a/website/docs/assets/review/reviewables_transcoded.png b/website/docs/assets/review/reviewables_transcoded.png new file mode 100644 index 00000000..56ca2336 Binary files /dev/null and b/website/docs/assets/review/reviewables_transcoded.png differ diff --git a/website/docs/assets/review/reviewables_version_selector.png b/website/docs/assets/review/reviewables_version_selector.png new file mode 100644 index 00000000..d14ac512 Binary files /dev/null and b/website/docs/assets/review/reviewables_version_selector.png differ diff --git a/website/docs/assets/review/reviewables_viewer_robot.png b/website/docs/assets/review/reviewables_viewer_robot.png new file mode 100644 index 00000000..b47a1e93 Binary files /dev/null and b/website/docs/assets/review/reviewables_viewer_robot.png differ diff --git a/website/docs/assets/review/viewer_versions_switching_v002.mov b/website/docs/assets/review/viewer_versions_switching_v002.mov new file mode 100644 index 00000000..6dd5449a Binary files /dev/null and b/website/docs/assets/review/viewer_versions_switching_v002.mov differ diff --git a/website/docs/assets/server/api_querying_overview_diagram.png b/website/docs/assets/server/api_querying_overview_diagram.png new file mode 100644 index 00000000..7955deb9 Binary files /dev/null and b/website/docs/assets/server/api_querying_overview_diagram.png differ diff --git a/website/docs/assets/server/ayon_server_diagram.png b/website/docs/assets/server/ayon_server_diagram.png new file mode 100644 index 00000000..1455ab58 Binary files /dev/null and b/website/docs/assets/server/ayon_server_diagram.png differ diff --git a/website/docs/assets/server/develoepr_mode_purple.png b/website/docs/assets/server/develoepr_mode_purple.png new file mode 100644 index 00000000..25719d3e Binary files /dev/null and b/website/docs/assets/server/develoepr_mode_purple.png differ diff --git a/website/docs/assets/server/enhance_gql.png b/website/docs/assets/server/enhance_gql.png new file mode 100644 index 00000000..2bc06c65 Binary files /dev/null and b/website/docs/assets/server/enhance_gql.png differ diff --git a/website/docs/assets/server/enhance_with_provide_tags.png b/website/docs/assets/server/enhance_with_provide_tags.png new file mode 100644 index 00000000..048a38de Binary files /dev/null and b/website/docs/assets/server/enhance_with_provide_tags.png differ diff --git a/website/docs/assets/server/overwriting_types.png b/website/docs/assets/server/overwriting_types.png new file mode 100644 index 00000000..1e2955a8 Binary files /dev/null and b/website/docs/assets/server/overwriting_types.png differ diff --git a/website/docs/assets/server/prod_and_staging.png b/website/docs/assets/server/prod_and_staging.png new file mode 100644 index 00000000..5be0386c Binary files /dev/null and b/website/docs/assets/server/prod_and_staging.png differ diff --git a/website/docs/assets/server/query_hook_types.png b/website/docs/assets/server/query_hook_types.png new file mode 100644 index 00000000..fb0b769f Binary files /dev/null and b/website/docs/assets/server/query_hook_types.png differ diff --git a/website/docs/assets/server/rest_api_endpoint_example.png b/website/docs/assets/server/rest_api_endpoint_example.png new file mode 100644 index 00000000..11458dc6 Binary files /dev/null and b/website/docs/assets/server/rest_api_endpoint_example.png differ diff --git a/website/docs/assets/server/rest_api_import_and_enhance.png b/website/docs/assets/server/rest_api_import_and_enhance.png new file mode 100644 index 00000000..ad04d08a Binary files /dev/null and b/website/docs/assets/server/rest_api_import_and_enhance.png differ diff --git a/website/docs/assets/server/using_RTK_query_hook.png b/website/docs/assets/server/using_RTK_query_hook.png new file mode 100644 index 00000000..a453f24e Binary files /dev/null and b/website/docs/assets/server/using_RTK_query_hook.png differ diff --git a/website/docs/assets/server/writing_gql_query.png b/website/docs/assets/server/writing_gql_query.png new file mode 100644 index 00000000..193b2fed Binary files /dev/null and b/website/docs/assets/server/writing_gql_query.png differ diff --git a/website/docs/assets/server/writing_gql_query_2.png b/website/docs/assets/server/writing_gql_query_2.png new file mode 100644 index 00000000..e10fc950 Binary files /dev/null and b/website/docs/assets/server/writing_gql_query_2.png differ diff --git a/website/docs/assets/slack/auth_key.png b/website/docs/assets/slack/auth_key.png new file mode 100644 index 00000000..f05f8fdd Binary files /dev/null and b/website/docs/assets/slack/auth_key.png differ diff --git a/website/docs/assets/slack/messages_to_channels.png b/website/docs/assets/slack/messages_to_channels.png new file mode 100644 index 00000000..7290d517 Binary files /dev/null and b/website/docs/assets/slack/messages_to_channels.png differ diff --git a/website/docs/assets/slack/notifications_to_slack.png b/website/docs/assets/slack/notifications_to_slack.png new file mode 100644 index 00000000..e07c3ec7 Binary files /dev/null and b/website/docs/assets/slack/notifications_to_slack.png differ diff --git a/website/docs/assets/slack/profiles.png b/website/docs/assets/slack/profiles.png new file mode 100644 index 00000000..285b3454 Binary files /dev/null and b/website/docs/assets/slack/profiles.png differ diff --git a/website/docs/assets/slack_token.png b/website/docs/assets/slack/slack_token.png similarity index 100% rename from website/docs/assets/slack_token.png rename to website/docs/assets/slack/slack_token.png diff --git a/website/docs/assets/slack_project.png b/website/docs/assets/slack_project.png deleted file mode 100644 index 09d1420e..00000000 Binary files a/website/docs/assets/slack_project.png and /dev/null differ diff --git a/website/docs/assets/task_progress/task_progress_details_panel.png b/website/docs/assets/task_progress/task_progress_details_panel.png new file mode 100644 index 00000000..a8164f4c Binary files /dev/null and b/website/docs/assets/task_progress/task_progress_details_panel.png differ diff --git a/website/docs/assets/task_progress/task_progress_editing.png b/website/docs/assets/task_progress/task_progress_editing.png new file mode 100644 index 00000000..c5db45bc Binary files /dev/null and b/website/docs/assets/task_progress/task_progress_editing.png differ diff --git a/website/docs/assets/task_progress/task_progress_overview.png b/website/docs/assets/task_progress/task_progress_overview.png new file mode 100644 index 00000000..5052fc83 Binary files /dev/null and b/website/docs/assets/task_progress/task_progress_overview.png differ diff --git a/website/docs/assets/task_progress/task_progress_showcase_v002_min.mp4 b/website/docs/assets/task_progress/task_progress_showcase_v002_min.mp4 new file mode 100644 index 00000000..525aa123 Binary files /dev/null and b/website/docs/assets/task_progress/task_progress_showcase_v002_min.mp4 differ diff --git a/website/docs/assets/tools/core_tools_filter_creators.png b/website/docs/assets/tools/core_tools_filter_creators.png new file mode 100644 index 00000000..a20eba67 Binary files /dev/null and b/website/docs/assets/tools/core_tools_filter_creators.png differ diff --git a/website/docs/assets/traypublisher/artist/check_in_loader.gif b/website/docs/assets/traypublisher/artist/check_in_loader.gif new file mode 100644 index 00000000..cc77c6cb Binary files /dev/null and b/website/docs/assets/traypublisher/artist/check_in_loader.gif differ diff --git a/website/docs/assets/traypublisher/artist/editorial_simple.png b/website/docs/assets/traypublisher/artist/editorial_simple.png new file mode 100644 index 00000000..0e37943b Binary files /dev/null and b/website/docs/assets/traypublisher/artist/editorial_simple.png differ diff --git a/website/docs/assets/traypublisher/artist/open_publisher.gif b/website/docs/assets/traypublisher/artist/open_publisher.gif new file mode 100644 index 00000000..a0bb4459 Binary files /dev/null and b/website/docs/assets/traypublisher/artist/open_publisher.gif differ diff --git a/website/docs/assets/traypublisher/artist/publish_a_product.gif b/website/docs/assets/traypublisher/artist/publish_a_product.gif new file mode 100644 index 00000000..cf5ec055 Binary files /dev/null and b/website/docs/assets/traypublisher/artist/publish_a_product.gif differ diff --git a/website/docs/assets/traypublisher/csv_publishing_settings.png b/website/docs/assets/traypublisher/csv_publishing_settings.png new file mode 100644 index 00000000..2b2340cc Binary files /dev/null and b/website/docs/assets/traypublisher/csv_publishing_settings.png differ diff --git a/website/docs/assets/traypublisher/editorial_package_conversion.png b/website/docs/assets/traypublisher/editorial_package_conversion.png new file mode 100644 index 00000000..b66dc22b Binary files /dev/null and b/website/docs/assets/traypublisher/editorial_package_conversion.png differ diff --git a/website/docs/assets/unreal_changes_viewer.png b/website/docs/assets/unreal_changes_viewer.png new file mode 100644 index 00000000..f7237156 Binary files /dev/null and b/website/docs/assets/unreal_changes_viewer.png differ diff --git a/website/docs/assets/unreal_perforce_changelist_metadata.png b/website/docs/assets/unreal_perforce_changelist_metadata.png new file mode 100644 index 00000000..2aac29d2 Binary files /dev/null and b/website/docs/assets/unreal_perforce_changelist_metadata.png differ diff --git a/website/docs/assets/unreal_perforce_local_settings.png b/website/docs/assets/unreal_perforce_local_settings.png new file mode 100644 index 00000000..cc1251f3 Binary files /dev/null and b/website/docs/assets/unreal_perforce_local_settings.png differ diff --git a/website/docs/assets/unreal_qtbindings_warning.png b/website/docs/assets/unreal_qtbindings_warning.png new file mode 100644 index 00000000..ad6238f4 Binary files /dev/null and b/website/docs/assets/unreal_qtbindings_warning.png differ diff --git a/website/docs/assets/unreal_render_queue_and_settings.png b/website/docs/assets/unreal_render_queue_and_settings.png new file mode 100644 index 00000000..c7209a6c Binary files /dev/null and b/website/docs/assets/unreal_render_queue_and_settings.png differ diff --git a/website/docs/assets/usd/admin/usd_addon_settings.png b/website/docs/assets/usd/admin/usd_addon_settings.png new file mode 100644 index 00000000..9605a277 Binary files /dev/null and b/website/docs/assets/usd/admin/usd_addon_settings.png differ diff --git a/website/docs/assets/usd/admin/usd_core_settings_1.png b/website/docs/assets/usd/admin/usd_core_settings_1.png new file mode 100644 index 00000000..0b7d8167 Binary files /dev/null and b/website/docs/assets/usd/admin/usd_core_settings_1.png differ diff --git a/website/docs/assets/usd/artist_faq/available_layers.png b/website/docs/assets/usd/artist_faq/available_layers.png new file mode 100644 index 00000000..3b54ce5f Binary files /dev/null and b/website/docs/assets/usd/artist_faq/available_layers.png differ diff --git a/website/docs/assets/usd/artist_faq/publish_layer_in_usd_product.png b/website/docs/assets/usd/artist_faq/publish_layer_in_usd_product.png new file mode 100644 index 00000000..16b1c011 Binary files /dev/null and b/website/docs/assets/usd/artist_faq/publish_layer_in_usd_product.png differ diff --git a/website/docs/assets/usd/artist_faq/publish_layer_in_usd_product_with_variant.png b/website/docs/assets/usd/artist_faq/publish_layer_in_usd_product_with_variant.png new file mode 100644 index 00000000..beb8f0dc Binary files /dev/null and b/website/docs/assets/usd/artist_faq/publish_layer_in_usd_product_with_variant.png differ diff --git a/website/docs/assets/usd/artist_faq/separate_layer.png b/website/docs/assets/usd/artist_faq/separate_layer.png new file mode 100644 index 00000000..60a78b68 Binary files /dev/null and b/website/docs/assets/usd/artist_faq/separate_layer.png differ diff --git a/website/docs/assets/usd/artist_faq/unresolved-reference-path.png b/website/docs/assets/usd/artist_faq/unresolved-reference-path.png new file mode 100644 index 00000000..a54088d0 Binary files /dev/null and b/website/docs/assets/usd/artist_faq/unresolved-reference-path.png differ diff --git a/website/docs/assets/usd/artist_faq/what_are_publish_options.png b/website/docs/assets/usd/artist_faq/what_are_publish_options.png new file mode 100644 index 00000000..a184a769 Binary files /dev/null and b/website/docs/assets/usd/artist_faq/what_are_publish_options.png differ diff --git a/website/docs/assets/usd/ayon_usd_contribution_to_asset.png b/website/docs/assets/usd/ayon_usd_contribution_to_asset.png new file mode 100644 index 00000000..78334414 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_contribution_to_asset.png differ diff --git a/website/docs/assets/usd/ayon_usd_contribution_to_shot.png b/website/docs/assets/usd/ayon_usd_contribution_to_shot.png new file mode 100644 index 00000000..ad53c733 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_contribution_to_shot.png differ diff --git a/website/docs/assets/usd/ayon_usd_load_asset_lop_primpath_presets.png b/website/docs/assets/usd/ayon_usd_load_asset_lop_primpath_presets.png new file mode 100644 index 00000000..3d572ab0 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_load_asset_lop_primpath_presets.png differ diff --git a/website/docs/assets/usd/ayon_usd_maya_load_usd_product.gif b/website/docs/assets/usd/ayon_usd_maya_load_usd_product.gif new file mode 100644 index 00000000..e4c35463 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_maya_load_usd_product.gif differ diff --git a/website/docs/assets/usd/ayon_usd_maya_products_after_publish.gif b/website/docs/assets/usd/ayon_usd_maya_products_after_publish.gif new file mode 100644 index 00000000..244e2a22 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_maya_products_after_publish.gif differ diff --git a/website/docs/assets/usd/ayon_usd_maya_products_after_publish_web.png b/website/docs/assets/usd/ayon_usd_maya_products_after_publish_web.png new file mode 100644 index 00000000..0f6560f8 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_maya_products_after_publish_web.png differ diff --git a/website/docs/assets/usd/ayon_usd_maya_publish_model.gif b/website/docs/assets/usd/ayon_usd_maya_publish_model.gif new file mode 100644 index 00000000..ba031e08 Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_maya_publish_model.gif differ diff --git a/website/docs/assets/usd/ayon_usd_mute_layer_lop.png b/website/docs/assets/usd/ayon_usd_mute_layer_lop.png new file mode 100644 index 00000000..be55a9be Binary files /dev/null and b/website/docs/assets/usd/ayon_usd_mute_layer_lop.png differ diff --git a/website/docs/assets/usd/usd_intro/asset_layers.png b/website/docs/assets/usd/usd_intro/asset_layers.png new file mode 100644 index 00000000..fc731765 Binary files /dev/null and b/website/docs/assets/usd/usd_intro/asset_layers.png differ diff --git a/website/docs/assets/usd/usd_intro/asset_load_unload.gif b/website/docs/assets/usd/usd_intro/asset_load_unload.gif new file mode 100644 index 00000000..9282b205 Binary files /dev/null and b/website/docs/assets/usd/usd_intro/asset_load_unload.gif differ diff --git a/website/docs/assets/usd/usd_intro/asset_variant.gif b/website/docs/assets/usd/usd_intro/asset_variant.gif new file mode 100644 index 00000000..1e4c5d83 Binary files /dev/null and b/website/docs/assets/usd/usd_intro/asset_variant.gif differ diff --git a/website/docs/assets/usd/usd_intro/asset_variant.png b/website/docs/assets/usd/usd_intro/asset_variant.png new file mode 100644 index 00000000..19e6dd15 Binary files /dev/null and b/website/docs/assets/usd/usd_intro/asset_variant.png differ diff --git a/website/docs/assets/usd/usd_intro/usd_scene.png b/website/docs/assets/usd/usd_intro/usd_scene.png new file mode 100644 index 00000000..9cd2852a Binary files /dev/null and b/website/docs/assets/usd/usd_intro/usd_scene.png differ diff --git a/website/docs/assets/usd/usd_intro/usd_shot.png b/website/docs/assets/usd/usd_intro/usd_shot.png new file mode 100644 index 00000000..ce4979e7 Binary files /dev/null and b/website/docs/assets/usd/usd_intro/usd_shot.png differ diff --git a/website/docs/dev_launcher.md b/website/docs/dev_launcher.md index 0ebfe244..05000163 100644 --- a/website/docs/dev_launcher.md +++ b/website/docs/dev_launcher.md @@ -45,7 +45,7 @@ Upload command has more options, use `--help` to investigate them. For example, ### Running AYON Desktop application AYON can be executed either from live sources (this repository) or from -*"frozen code"* - executables that can be build using steps described above. +*"frozen code"* - executables that can be built using steps described above. ### From sources AYON can be run directly from sources by activating virtual environment: @@ -64,19 +64,19 @@ Executable `ayon_console.exe` creates console with output - useful for debugging Startup ------------- -Once AYON launcher is installed and launched there are few ways how to affect what will happen. Default behavior will ask for login to server, if user did not log in yet, then starts distribution of updates, and last step is to start the main logic. +Once AYON launcher is installed and launched there are few ways to affect what will happen next. Default behavior will ask for login to server (if user did not log in yet), then starts the distribution of updates, and eventually the main logic. -Main logic is now using command line handling from `openpype` addon. If path to python script is passed it will start the python script as main logic instead. +Main logic is now using command line handling from `openpype` addon. If a path to a python script is passed, it will start the python script as main logic instead. ### Arguments -There are reserver global arguments that cannot be used in any cli handling: +There are reserved global arguments that cannot be used in any cli handling: - `--bundle ` - Force AYON to use specific bundle instead of the one that is set in the config file. This is useful for testing new bundles before they are released. - `--verbose ` - Change logging level to one of the following: DEBUG, INFO, WARNING, ERROR, CRITICAL. - `--debug` - Simplified way how to change verbose to DEBUG. Also sets `AYON_DEBUG` environment variable to `1`. - `--skip-headers` - Skip headers in the console output. - `--use-dev` - Use dev bundle and settings, if bundle is not explicitly defined. - `--use-staging` - Use staging settings, and use staging bundle, if bundle is not explicitly defined. Cannot be combined with staging. -- `--headless` - Tell AYON to run in headless mode. No UIs are shown during bootstrap. Affects `AYON_HEADLESS_MODE` environment variable. Custom logic must handle headless mode on own. +- `--headless` - Tell AYON to run in headless mode. No UIs are shown during bootstrap. Affects `AYON_HEADLESS_MODE` environment variable. Custom logic must handle headless mode on its own. - `--skip-bootstrap` - Skip bootstrap process. Used for inner logic of distribution. ### Environment variables @@ -109,12 +109,12 @@ Environment variables that are set for backwards compatibility with openpype add ## Developer mode -[Developer mode](dev_dev_mode) enables to skip standard distribution process of addons, and use local sources of addon code. This is useful for development of addon. Developer mode must be enabled and configured on AYON server. +[Developer mode](dev_dev_mode) enables to skip the standard distribution process of addons to use local sources of addon code instead. This is useful for development of addon. Developer mode must be enabled and configured on AYON server. -There are 2 ways how to start in developer mode using command line arguments: +There are 2 ways to start in developer mode using command line arguments: 1. Start AYON launcher with `--bundle `. Dev bundle cannot be set as production or staging. 2. Using argument flag `--use-dev`. With this argument a dev bundle is found for logged user. Both options can be defined with environment variables `AYON_BUNDLE_NAME` and `AYON_USE_DEV` (value `1` to enable). -Developer mode automatically disregard any production or staging information. +Developer mode automatically disregards any production or staging information. diff --git a/website/docs/dev_requirements.md b/website/docs/dev_requirements.md index ccbc3d3f..7ff6f339 100644 --- a/website/docs/dev_requirements.md +++ b/website/docs/dev_requirements.md @@ -6,9 +6,9 @@ sidebar_label: Requirements AYON is a modular project, the AYON server lies at the core of it, so to develop for AYON we need an instance of it either in the localhost or in a remote server, refer to the [Admin Server Deployment](admin_server_deployment.md) for more. -AYON is written in [**Python 3 (3.9.x)**](#python) and addheres to the versions defined in the [VFX Reference Platform](https://vfxplatform.com/). +AYON is written in [**Python 3 (3.9.x)**](#python) and adheres to the versions defined in the [VFX Reference Platform](https://vfxplatform.com/). -Some parts are kept on Python 2.7.x for compatibility purposes with, until all supported third-party software are updated to a newer Python version, you can see the progress at the [VFX Python3 tracker](https://vfxpy.com/). +Some parts are kept on Python 2.7.x for compatibility purposes until all supported third-party software are updated to a newer Python version, you can see the progress at the [VFX Python3 tracker](https://vfxpy.com/). The main requirements needed to run and build AYON are: @@ -21,7 +21,7 @@ The main requirements needed to run and build AYON are: ## Supported Operating Systems -AYON can be built and ran in any platform that supports the above requirements, the development team develops and thest it on the following list of Operating Systems: +AYON can be built and ran in any platform that supports the above requirements, the development team develops and tests it on the following list of Operating Systems: - Windows 10 - Ubuntu 20.04 LTS - CentOS 7 @@ -45,24 +45,24 @@ As a rule of thumb, if the computer can run a DCC or perform render workloads, i ## Dependencies -AYON is an project built on top of the following projects: +AYON is a project built on top of the following projects: - [**Pyblish**](https://github.com/pyblish) - [**OpenTimelineIO**](https://github.com/PixarAnimationStudios/OpenTimelineIO) - [**OpenImageIO**](https://github.com/OpenImageIO/oiio) [^centos7] - [**FFmpeg**](https://github.com/FFmpeg/FFmpeg) -[^centos7]: On Centos 7 you need to install additional libraries to support OIIO there - mainly boost +[^centos7]: On Centos 7 you'll need to install additional libraries to support OIIO there - mainly boost and libraw (`sudo yum install boost-1.53.0 LibRaw`) -### Python Dependecies +### Python Dependencies -AYON uses [Poetry](https://python-poetry.org/) to handle the dependencies, and you can see the full list of dependencies in the [`pyproject.yoml`](https://github.com/ynput/OpenPype/blob/develop/pyproject.toml), here is a list of these with their corresponging licenses: +AYON uses [Poetry](https://python-poetry.org/) to handle the dependencies, and you can see the full list of dependencies in the [`pyproject.toml`](https://github.com/ynput/OpenPype/blob/develop/pyproject.toml), here is a list of these with their corresponging licenses: | Compatible | Package | License(s) | | ----------- | ------------------------ | -------------------------------------------------------------------- | | ✔ | Deprecated | MIT License | -| ✖ | OpenTimelineIO | Other/Proprietary License | +| ✖ | OpenTimelineIO | Apache Software License | | ✔ | SecretStorage | BSD License | | ✖ | Unidecode | GNU General Public License v2 or later (GPLv2+) | | ✔ | acre | GNU LESSER GENERAL PUBLIC LICENSE Version 3 | diff --git a/website/docs/dev_testing.md b/website/docs/dev_testing.md index b4b2a451..416e28fe 100644 --- a/website/docs/dev_testing.md +++ b/website/docs/dev_testing.md @@ -164,4 +164,4 @@ This location should contain library of helpers and miscellaneous classes used f ### `integration` folder -There are host specific test in `hosts` sub-folder. +There are host specific test in `hosts` sub-folder. \ No newline at end of file diff --git a/website/docs/server_api_architecture.md b/website/docs/server_api_architecture.md new file mode 100644 index 00000000..bdb95b33 --- /dev/null +++ b/website/docs/server_api_architecture.md @@ -0,0 +1,136 @@ +--- +id: server_api_architecture +title: Server API Architecture +sidebar_label: API Architecture +--- + +The backend exposes two APIs and redux is setup to handle both under a single api slice. + +:::note +There are still a lot of legacy queries that inject instead of enhance. Over time we hope to convert these legacy queries to the new methodology. +::: + +- REST - https://ayon.dev/doc/api +- GraphQL - https://ayon.dev/explorer + +## Code Generation + +We use code generation tools to automatically generate types and queries based off the restAPI and graphql schema. + +Here is an overview of what is generated (green) and how it is consumed in the app. + +![RTK Query oveview](./assets/server/api_querying_overview_diagram.png) + +**RTK Query docs** + +[RestAPI openAPI codegen](https://redux-toolkit.js.org/rtk-query/usage/code-generation#openapi) + +[Graphql codegen](https://the-guild.dev/graphql/codegen/plugins/typescript/typescript-rtk-query) + +## Codegen setup + +The generated types are included in the repo but they need to be regenerated every time the API changes or if you write new/update graphql queries. + +1. `yarn generate-rest` - This needs to be run every time a new query is used in the code base or when the API changes. +2. Generate graphql types and queries + a. Set `NAME` and `PASSWORD` values in your `.env.local` file. This can be for any user but I recommend using the admin credentials. + b. `yarn generate-token` - Fetches an auth token and writes to `.env` . Used by graphql-codegen to get the schema. + c. `yarn generate-graphql` - Generates types and rtk queries based on the schema and your `.graphql` files. +3. Both code gens create RTK queries. These queries can then be "enhanced" with more config and file separation. +4. All GraphQL queries are generated in one `graphql.ts` file. REST API queries are generated in multiple files under `src/api/rest/{query_name}.ts` + +## Generating REST API Queries + +Each REST endpoint needs to be explicitly defined inside `gen/openapi-config.ts` and categorized by endpoint type. + +```typescript +// Specify the endpoints you want to generate +const outputFiles = { + bundles: ["listBundles", "checkBundleCompatibility"], + folders: ["getFolderHierarchy", "getFolderList"], +}; +``` + +In the example above, two files will be generated with their associated endpoints: `src/api/rest/bundles.ts` and `src/api/rest/folders.ts` + +:::tip +To enhance IDE performance, the files are now split. This new approach creates individual files for each query, eliminating the significant performance issues associated with the previous method, which generated a single file for all queries. +::: + +## Writing and Enhancing RTK Queries + +### REST + +In this tutorial, we will use the **List Bundles** endpoint as an example. + +1. **Locate the Endpoint:** + + - Navigate to `http://localhost:3000/doc/api` to find the endpoint name. Look for `List Bundles -> listBundles`. + + ![Get Project Stats](./assets/server/rest_api_endpoint_example.png) + + :::note + The query might already be in use. Perform a global search for `listBundles` to check if it's already set up and can be reused. + ::: + +2. **Ensure Endpoint Generation:** + + - Once you have identified the endpoint, verify that it has been generated. If it hasn't, add the endpoint name (`listBundles`) to the `outputFiles` list, following the example provided above. + - Run `yarn generate-rest` again to generate the new query. + +3. **Create or Update Service File:** + + - Create a new folder in `/src/services/` (e.g., `bundles`) with a new file `getBundles.ts`, or add it to an existing file if appropriate. In this tutorial, we will add it to `getBundles.ts`. + +4. **Import the Correct API:** + + - The generated queries are split into different files. Ensure you import the correct API reference when enhancing these queries. For this example, import the API from `src/api/rest/bundles.ts` as it contains the query. + + ![Import API](./assets/server/rest_api_import_and_enhance.png) + + :::note + Although the queries have already been "injected" into the api we now "enhance" these queries and then export the enhanced queries as React hooks. + ::: + +5. **Enhance the Query:** + + - Perform any necessary enhancements to the query. + + ![Provide tags to endpoints](./assets/server/enhance_with_provide_tags.png) + +6. **Export the Enhanced Query:** + - Export the enhanced query as a hook to be consumed in a React component. + +## GraphQL + +Writing graphql queries are similar but involve one extra step at the start to define the queries first. + +1. Create a folder called inside `/src/services/{queryFolderName}/gql` . This is where you will write your graphql queries. Try to match the folder name to the query name and use PascalCase. + +_We use PascalCase so that it's easier to distinguish between rest and graphql queries._ + +![Writing gql query](./assets/server/writing_gql_query.png) + +2. Create a new file called {GetQueryName}.graphql and write your query. Intellisense should provide suggestions and eslint should highlight when a field has an error. + ![Writing gql query](./assets/server/writing_gql_query_2.png) + +3. Once finished `run yarn generate-gql`. This will take your new .graphql file and generate a RTK Query from it whilst also generating the matching types. + +_You can check this at the bottom of /src/api/graphql.ts _ + +4. Enhance the query similar to how the rest queries are enhanced; except in this case we use API.graphql.enhanceEndpoints . + ![Enhancing gql query](./assets/server/enhance_gql.png) + +5. Follow the same steps from step 3 of creating rest queries. + +## Typescript overrides + +Often you will want to transform the data inside the query to better structure it using transformResponse . Typescript only knows the full queries response type and so we need to tell it that the query will actually respond with our transformed type. + +We do this by overriding the result type for the query to match the actual response type. As you can see the the query responds with a boolean and we need to tell typescript this. + +![Overriding types](./assets/server/overwriting_types.png) + +Now when we use the query hook we should see the new type we defined as the data. If we hadn't done this then the type would have been the generated query from step 3. + +![Using types](./assets/server/query_hook_types.png) diff --git a/website/docs/server_introduction.md b/website/docs/server_introduction.md new file mode 100644 index 00000000..b43858ad --- /dev/null +++ b/website/docs/server_introduction.md @@ -0,0 +1,59 @@ +--- +id: server_introduction +title: Server Introduction +sidebar_label: Introduction +--- + +## Getting Started + +AYON Server is made up of two main repos, [ayon-backend](https://github.com/ynput/ayon-backend) and [ayon-frontend](https://github.com/ynput/ayon-frontend). + +The fastest and easiest way to start testing both together is through docker using [ayon-docker](https://github.com/ynput/ayon-docker). + +Once the server is running it can be accessed through the frontend UI using `http//localhost:5000`. + +:::tip +Running the docker container is also a great way to start developing on the frontend. Set env variable `SERVER_URL=http//localhost:5000`. +::: + +## AYON Overview + +This is a general overview of the different parts of AYON. The server development is written in different parts and then deployed as one docker container that interacts with the AYON Launcher (client). + +![Ayon server overview diagram](./assets/server/ayon_server_diagram.png) + +## AYON Backend + +- Python 3.12 +- FastAPI, Strawberry (GraphQL) +- PostgreSQL (asyncpg), Redis (aioredis) +- gunicorn/uvicorn server (option to use granian) + +## AYON Frontend + +- Yarn, Nodejs 20+, Vite +- ReactJs +- Typescript (migration in progress) +- Redux toolkit with RTK Query +- AYON React Component Library (ARC) +- Styled Components + +### **Env variables** + +Create a `env.local` file in the root directory. + +`SERVER_URL=http://localhost:5000` - URL of the backend server + +### **Recommended VSCode Extensions** + +- CSS Variable Autocomplete +- GitHub Pull Requests +- vscode-styled-components +- GraphQL: Language Feature Support +- GraphQL: Syntax Highlighting + +## AYON React Component Library (ARC) + +The frontend uses a custom component library for colors, fonts and reusable React components. The components are separated so that AYON addons can also utilize them for their UIs. Any component that could be useful for an addon and is not too specific should be created in ARC. + +Read more about the style theme of AYON here: [Server Theme](server_theme.md) diff --git a/website/docs/server_testing.md b/website/docs/server_testing.md new file mode 100644 index 00000000..09be77a0 --- /dev/null +++ b/website/docs/server_testing.md @@ -0,0 +1,55 @@ +--- +id: server_testing +title: Testing AYON Server +sidebar_label: Testing +--- + +# Frontend E2E tests + +:::note Work In Progress +Frontend E2E testing strategy is still under debate, current tests and their implementation details may change significantly in the near future. +::: + +## Introduction +End-to-end testing is a crucial part of the software development lifecycle, ensuring applications work as expected. We've embarked on the process of implementing E2E tests for AYON Server, our ultimate goal being the complete test coverage and consistent positive results across the multiple supported browsers. + +## Setting up and running tests +For the frontend E2E tests we're using [Playwright](https://playwright.dev) which proves to be useful and easy to use toolset for developers and even less technical users. In order to run tests locally you will need to install playwright and follow the installation instructions (defaults are safe choices): +``` +yarn create playwright +``` + +You'll also need to update your local ENV file by adding the following required variables (URLS & ports may vary for each setup): +``` +LOCAL_SERVER_URL=http://localhost:3000 +TEST_SERVER_URL=https://localhost:5000 +NAME=admin #authentication user +PASSWORD=pass #authentication password +``` + +Once installed you can run the existing tests either using the console - ```yarn test``` - or the test UI if you prefer so - ```yarn test-ui``` + +## How to add new tests +In order to add new tests of update existing ones we recommend following the existing files structure found in the ```tests``` folder. + +### Spec files +Tests are grouped by entity type, i.e. project level tests are written in the projects.spec.js, folders level tests in the folders.spec.js file and so on. + +### Fixture files +Most tests will need parent entities to be created - i.e. a folder can't exist outside a project. To ease test creation, we're using *fixtures* helpers. These allow you to easily create and destroy required entities with one-line calls, so you can focus on the task at hand. + + +### Test Isolation +Current configuration runs the tests in parallel, which might cause issues if specs are not properly written. In order to avoid any race issues, we recommend to follow a safe entity naming strategy, i.e. prefix entity names with unique identifiers (see existing tests for examples). + +### Tests cleanup +Testing entities that depend on others will require the creation of parent entities. Make sure that they are properly destroyed after testing is done to avoid pollution of future test runs. For example, when testing folders or tasks, the easiest cleanup method would be to delete the parent project, which will, in turn, delete all the related records. + +## Generate tests on the fly +As mentioned previously we chose [Playwright](https://playwright.dev) for its versatility and ease of use. + +One powerful tool that comes with it is code generation mode, which can translate a point and click interaction to actual spec statements, be it selecting specific UI elements, or making assertions. + +In order to use the code generation tool run ```yarn test-codegen``` which will run playwright in codegeneration mode. Once started, just interact with the embedded browser window while keeping an eye on the secondary window. All interactions will be recorded in the secondary window, you can quickly generate the basis of your test, which can be then copied over to the actual spec file - see the example below: + + \ No newline at end of file diff --git a/website/docs/server_theme.md b/website/docs/server_theme.md new file mode 100644 index 00000000..723a26a3 --- /dev/null +++ b/website/docs/server_theme.md @@ -0,0 +1,114 @@ +--- +id: server_theme +title: Server Theme +sidebar_label: Theme +--- + +The ayon theme is based on the material design philosophy: https://m2.material.io/. + +Every color used has a variable from the theme and will always start with --md-sys-color-{name} . + +## Colors + +### Surface Containers + +Surfaces go highest to lowest, elements with a higher z level should use higher surface levels. + +- Highest (buttons) `--md-sys-color-surface-container-highest` +- High (cards) `--md-sys-color-surface-container-high` +- Neutral (cards) `--md-sys-color-surface-container` +- Low (BGs) `--md-sys-color-surface-container-low` +- Lowest (BGs) `--md-sys-color-surface-container-lowest` + +### Primary Color + +The primary color is a bright blue and is used in areas to draw attention, like save buttons. When using a color, ensure any content on top uses the inverse to ensure sufficient contrast ratios. + +There are other colors like secondary and tertiary, but they are rarely used. + +**Primary - important stuff ** + +```CSS +background-color: var(--md-sys-color-primary); +color: var(--md-sys-color-on-primary); +``` + +**Primary container - less important selections** + +```CSS +background-color: var(--md-sys-color-primary-container); +color: var(--md-sys-color-on-primary-container); +``` + +### Text and border colors + +Mostly uses `--md-sys-color-on-surface` but can use the inverse of a color like `--md-sys-color-on-primary` . + +For a more fade text use `--md-sys-color-outline` or even more faded `--md-sys-color-outline-variant`. + +These are also used for borders (try to avoid outlines). + +### Developer Mode + +Developer mode actions and UI use a specific purple color to make them standout and to signal they are for developers only. Rarely should you see this color when not in developer mode. + +This color is a custom color outside of the theme color. + +![Purple UI elements for developer mode actions](./assets/server/develoepr_mode_purple.png) + +```CSS + var(--color-hl-developer); + var(--color-hl-developer-container); + var(--color-hl-developer-hover); + var(--color-hl-developer-surface); + var(--color-hl-developer-surface-hover) +``` + +### Production and Staging + +Two specific colors are used to specify the difference between "production" and "staging". These color are outside of the theme color. + +![Production and Staging UI elements](./assets/server/prod_and_staging.png) + +```CSS + var(--color-hl-production) + var(--color-hl-production-hover) + var(--color-hl-production-active) + + var(--color-hl-staging) + var(--color-hl-staging-hover) + var(--color-hl-staging-active) +``` + +:::note +Text on top of these colors should always be dark. +::: + +## Useful Variables + +- **Padding**: `--padding-s` (4px) `--padding-m` (8px) `--padding-l` (16px) +- **Border radius**: `--border-radius-m` (4px) `--border-radius-l` (8px) (there are more but they are wrong, this needs fixing) + +## Typography + +If you want to change the font size we have a theme of sizes. + +Instead of using font-size: 14px use a className module from ARC typography.module.css. + +(this could change) + +```jsx +import Typography from "@theme/typography.module.css"; + +Hello; +``` + +## Loading state + +- Avoid spinners +- Avoid layout shifts when the data loads in. +- Use skeleton shimmer placeholders. +- Use `${getShimmerStyles}` in styled components. + +Example loading shimmer +![Loading shimmer](https://github.com/ynput/ayon-frontend/assets/49156310/f589ca02-37a3-41e4-a64a-3e2062083407) diff --git a/website/docs/system_introduction.md b/website/docs/system_introduction.md index 9df674ed..3f8fb43a 100644 --- a/website/docs/system_introduction.md +++ b/website/docs/system_introduction.md @@ -13,7 +13,7 @@ To use AYON, you need to install both the server and the launcher app. Pre-built ## Studio Preparation -You can find a detailed breakdown of technical requirements [here](dev_requirements), but in general, AYON should be able to operate in most studios fairly quickly. The main obstacles are usually related to workflows and habits that may not be fully compatible with what AYON expects or enforces. It is recommended to go through the [key concepts](artist_concepts) for artists to get comfortable with the basics. +You can find a detailed breakdown of technical requirements [here](dev_requirements.md), but in general, AYON should be able to operate in most studios fairly quickly. The main obstacles are usually related to workflows and habits that may not be fully compatible with what AYON expects or enforces. It is recommended to go through the [key concepts](artist_concepts.md) for artists to get comfortable with the basics. Keep in mind that if you run into any workflows that are not supported, it is usually because AYON has not encountered that particular case and it can likely be added upon request. diff --git a/website/sidebars.js b/website/sidebars.js index ef98d239..cf886ea6 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -1,172 +1,226 @@ +function sorted(a, b) { + const nameA = typeof a == "string" ? a : a.items[0] || a.label; + const nameB = typeof b == "string" ? b : b.items[0] || b.label; + return nameA > nameB ? 1 : -1; +} + module.exports = { - artist: [ - { - type: "category", - collapsed: false, - label: "General", - items: [ - "artist_getting_started", - "artist_concepts", - "artist_publish", + artist: [ { - type: "category", - collapsed: true, - label: "Tools", - link: { type: "doc", id: "artist_tools" }, - items: [ - "artist_tools_creator", - "artist_tools_loader", - "artist_tools_library_loader", - "artist_tools_publisher", - "artist_tools_inventory", - "artist_tools_workfiles", - "artist_tools_look_assigner", - ], + type: "category", + collapsed: false, + label: "General", + items: [ + "artist_getting_started", + "artist_concepts", + "artist_publish", + { + type: "category", + collapsed: true, + label: "Tools", + link: { type: "doc", id: "artist_tools" }, + items: [ + "artist_tools_creator", + "artist_tools_loader", + "artist_tools_library_loader", + "artist_tools_publisher", + "artist_tools_inventory", + "artist_tools_workfiles", + "artist_tools_look_assigner", + ], + }, + ], }, - ], - }, - { - type: "category", - collapsed: false, - label: "Integrations", - items: [ - "addon_3dsmax_artist", - "addon_aftereffects_artist", - "addon_blender_artist", - "addon_resolve_artist", { - type: "category", - label: "Ftrack", - items: [ - "addon_ftrack_artist", - "addon_ftrack_manager", - "addon_ftrack_actions", - ], + type: "category", + collapsed: false, + label: "Integrations", + items: [ + "addon_3dsmax_artist", + "addon_aftereffects_artist", + "addon_blender_artist", + "addon_resolve_artist", + { + type: "category", + label: "Ftrack", + items: [ + "addon_ftrack_artist", + "addon_ftrack_manager", + "addon_ftrack_actions", + ], + }, + "addon_harmony_artist", + "addon_hiero_artist", + "addon_houdini_artist", + "addon_kitsu_artist", + { + type: "category", + label: "Maya", + items: [ + "addon_maya_artist", + "addon_maya_multiverse_artist", + "addon_maya_yeti_artist", + "addon_maya_xgen_artist", + "addon_maya_ornatrix_artist", + "addon_maya_arnold_artist", + "addon_maya_vray_artist", + "addon_maya_redshift_artist", + ], + }, + { + type: "category", + label: "USD", + link: { + type: 'generated-index', + title: 'AYON USD Book', + description: + "Welcome to AYON USD Book!", + keywords: ['usd'], + }, + items: [ + "addon_usd_artist_usd_intro", + "addon_usd_artist_get_started", + "addon_usd_artist_contribution_workflow", + "addon_usd_artist_maya_workflow", + "addon_usd_artist_houdini_workflow", + "addon_usd_artist_faq", + ], + }, + "addon_motionbuilder_artist", + "addon_nuke_artist", + "addon_photoshop_artist", + "addon_substancepainter_artist", + "addon_tvpaint_artist", + "addon_unreal_artist", + "addon_wrap_artist", + "addon_openrv_artist", + { + type: "category", + label: "Aquarium", + items: ["addon_aquarium_artist", "addon_aquarium_manager"], + }, + ].sort(sorted), }, - "addon_harmony_artist", - "addon_hiero_artist", - "addon_houdini_artist", - "addon_kitsu_artist", { - type: "category", - label: "Maya", - items: [ - "addon_maya_artist", - "addon_maya_multiverse_artist", - "addon_maya_yeti_artist", - "addon_maya_xgen_artist", - "addon_maya_arnold_artist", - "addon_maya_vray_artist", - "addon_maya_redshift_artist", - ], + type: "category", + collapsed: false, + label: "Production Tracking", + items: [ + "artist_my_tasks_page", + "artist_activity_feed", + "artist_reviewables", + "artist_inbox", + "artist_task_progress_page" + ], }, - "addon_nuke_artist", - "addon_photoshop_artist", - "addon_substancepainter_artist", - "addon_tvpaint_artist", - "addon_unreal_artist", - "addon_wrap_artist", - "addon_openrv_artist", - ], - }, - ], - Admin: [ - "system_introduction", - { - type: "category", - label: "AYON server", - items: [ - "admin_server_deployment", - "admin_server_configuration", - "admin_server_installing_addons", - "admin_server_provisioning", - "admin_server_services", - "admin_server_email", - ], - }, - { - type: "category", - label: "AYON Launcher", - items: ["admin_launcher_distribute", "admin_launcher_run"], - }, - { - type: "category", - label: "Configuration", - items: [ - "admin_environment", - "admin_settings", - "admin_colorspace", - "admin_settings_project_anatomy", - "addon_core_settings", - "addon_applications_admin", - ], - }, - { - type: "category", - label: "Integrations", - items: [ - "addon_3dsmax_admin", - "addon_aftereffects_admin", - "addon_blender_admin", - "addon_clockify_admin", - "addon_resolve_admin", - "addon_deadline_admin", - "addon_ftrack_admin", - "addon_harmony_admin", - "addon_hiero_admin", - "addon_houdini_admin", - "addon_keycloak_admin", - "addon_kitsu_admin", - "addon_maya_admin", - "addon_nuke_admin", - "addon_photoshop_admin", - "addon_site_sync_admin", - "addon_slack_admin", - "addon_sso_admin", - "addon_substancepainter_admin", - "addon_tvpaint_admin", - "addon_unreal_admin", - "addon_ftrack_admin", - "addon_kitsu_admin", - "addon_site_sync_admin", - "addon_deadline_admin", - "addon_clockify_admin", - "addon_slack_admin", - "addon_traypublisher_admin", - "addon_wrap_admin", - "addon_syncsketch_admin", - "addon_flow_admin", - ], - }, - "admin_releases", - "admin_import_openpype_project", - ], - Dev: [ - "dev_introduction", - "dev_requirements", - { - type: "category", - label: "AYON launcher", - items: [ - "dev_launcher", - "dev_launcher_build_windows", - "dev_launcher_build_macos", - "dev_launcher_build_linux", - ], - }, - "dev_dev_mode", - "dev_testing", - "dev_contribute", - { - type: "category", - label: "Hosts integrations", - items: [ - "dev_host_implementation", - "dev_publishing", - ], - }, - "dev_deadline", - "dev_colorspace", - "dev_event_system", - ], + ], + Admin: [ + "system_introduction", + { + type: "category", + label: "AYON server", + items: [ + "admin_server_deployment", + "admin_server_configuration", + "admin_server_installing_addons", + "admin_server_provisioning", + "admin_server_services", + "admin_server_email", + ], + }, + { + type: "category", + label: "AYON Launcher", + items: ["admin_launcher_distribute", "admin_launcher_run"], + }, + { + type: "category", + label: "Configuration", + items: [ + "admin_environment", + "admin_settings", + "admin_colorspace", + "admin_settings_project_anatomy", + "addon_core_settings", + "addon_applications_admin", + ], + }, + { + type: "category", + label: "Integrations", + items: [ + "addon_3dsmax_admin", + "addon_aftereffects_admin", + "addon_blender_admin", + "addon_resolve_admin", + "addon_deadline_admin", + "addon_ftrack_admin", + "addon_harmony_admin", + "addon_hiero_admin", + "addon_houdini_admin", + "addon_keycloak_admin", + "addon_maya_admin", + "addon_motionbuilder_admin", + "addon_nuke_admin", + "addon_photoshop_admin", + "addon_site_sync_admin", + "addon_slack_admin", + "addon_sso_admin", + "addon_substancepainter_admin", + "addon_tvpaint_admin", + "addon_unreal_admin", + "addon_kitsu_admin", + "addon_clockify_admin", + "addon_traypublisher_admin", + "addon_wrap_admin", + "addon_syncsketch_admin", + "addon_flow_admin", + "addon_aquarium_admin", + "addon_usd_admin", + + ].sort(sorted), + }, + "admin_releases", + "admin_import_openpype_project", + ], + Dev: [ + "dev_introduction", + "dev_requirements", + { + type: "category", + label: "AYON launcher", + items: [ + "dev_launcher", + "dev_launcher_build_windows", + "dev_launcher_build_macos", + "dev_launcher_build_linux", + ], + }, + { + type: "category", + label: "AYON server", + items: [ + "server_introduction", + "server_api_architecture", + "server_theme", + "server_testing", + ], + }, + "dev_dev_mode", + "dev_testing", + "dev_contribute", + { + type: "category", + label: "Hosts integrations", + items: ["dev_host_implementation", "dev_publishing"], + }, + "dev_deadline", + "dev_colorspace", + "dev_event_system", + { + type: "category", + label: "Integrations", + items: ["addon_aquarium_developer"].sort(sorted), + }, + ], }; diff --git a/website/src/data/addons/addons.ts b/website/src/data/addons/addons.ts index 2f3d46ec..dd4343b5 100644 --- a/website/src/data/addons/addons.ts +++ b/website/src/data/addons/addons.ts @@ -18,9 +18,9 @@ import { AddonType } from "."; // When using a icon image, a blurred background will be generated and a color palette will be extracted from the image // USING A PREVIEW IMAGE -// Sometimes icon images doesn't work as expected, in that case you can add a preview image that will be used instead +// Sometimes icon images don't work as expected, in that case you can add a preview image that will be used instead // Preview images should be around 1:2 ratio (landscape), include a blurred background and have the text "myAddon Addon" baked into the image. -// It's harder to match a preview image to the rest of the addons so it's recommended to use a icon image when possible +// It's harder to match a preview image to the rest of the addons so it's recommended to use an icon image when possible // OFFICIAL ADDONS export const officialAddons = [ @@ -39,6 +39,7 @@ export const officialAddons = [ "hiero", "houdini", "maya", + "motionbuilder", "nuke", "photoshop", "royalRender", @@ -49,12 +50,13 @@ export const officialAddons = [ "unreal", "wrap", "openrv", + "openusd", "syncsketch", - "zbrush" + "zbrush", ] as const; // COMMUNITY ADDONS -export const communityAddons = ["kitsu"] as const; +export const communityAddons = ["kitsu", "aquarium"] as const; // featured addons // pick addons from community or official to be featured on the homepage diff --git a/website/src/data/addons/data/aquarium.ts b/website/src/data/addons/data/aquarium.ts new file mode 100644 index 00000000..b6f0956d --- /dev/null +++ b/website/src/data/addons/data/aquarium.ts @@ -0,0 +1,27 @@ +import { type Addon } from "../types"; +import versions from "@site/docs/assets/json/Ayon_addons_version.json"; + +const aquarium: Addon = { + title: "Aquarium", + description: "Aquarium is a project management platform for creatives.", + descriptionLong: + "This addon allow you to synchronize your Aquarium project to Ayon, by listening to events. You can also trigger a full project sync to gather Aquarium's data to Ayon. You can also create Aquarium project using existing Ayon ones.", + icon: "aquarium-icon.png", + badge: versions.Aquarium_Badge, + docs: { + user: "addon_aquarium_artist", + admin: "addon_aquarium_admin", + developer: "addon_aquarium_developer", + }, + github: "https://github.com/ynput/ayon-aquarium", + products: ["render", "plate", "image", "background", "review"], + features: [ + "appLauncher", + "reviewables", + "trayPublisher", + "projectManager", + "aquariumSync", + ], +}; + +export default aquarium; diff --git a/website/src/data/addons/data/hiero.ts b/website/src/data/addons/data/hiero.ts index c53332bd..49bb37a0 100644 --- a/website/src/data/addons/data/hiero.ts +++ b/website/src/data/addons/data/hiero.ts @@ -12,7 +12,7 @@ and efficient management of complex projects. **Versions**: \`11.3\`, \`12.2\`, \`13.2\`, \`14.0\` `, - preview: "hiero.png", + icon: "hiero.png", badge: versions.Hiero_Badge, features: [ "workfiles", diff --git a/website/src/data/addons/data/img/aquarium-icon.png b/website/src/data/addons/data/img/aquarium-icon.png new file mode 100644 index 00000000..b03a5b3c Binary files /dev/null and b/website/src/data/addons/data/img/aquarium-icon.png differ diff --git a/website/src/data/addons/data/img/hiero.png b/website/src/data/addons/data/img/hiero.png index 2ecbe860..9fa65e2a 100644 Binary files a/website/src/data/addons/data/img/hiero.png and b/website/src/data/addons/data/img/hiero.png differ diff --git a/website/src/data/addons/data/img/motionbuilder-icon.png b/website/src/data/addons/data/img/motionbuilder-icon.png new file mode 100644 index 00000000..68a17f7a Binary files /dev/null and b/website/src/data/addons/data/img/motionbuilder-icon.png differ diff --git a/website/src/data/addons/data/img/openusd.png b/website/src/data/addons/data/img/openusd.png new file mode 100644 index 00000000..33dbc320 Binary files /dev/null and b/website/src/data/addons/data/img/openusd.png differ diff --git a/website/src/data/addons/data/motionbuilder.ts b/website/src/data/addons/data/motionbuilder.ts new file mode 100644 index 00000000..7512e0dc --- /dev/null +++ b/website/src/data/addons/data/motionbuilder.ts @@ -0,0 +1,31 @@ +import { type Addon } from "../types"; +import versions from "@site/docs/assets/json/Ayon_addons_version.json"; + +const addon: Addon = { + title: "Motion Builder", + description: + "MotionBuilder is a 3D character animation software which users can do virtual cinematography, motion capture and traditional keyframe animation.", + icon: "motionbuilder-icon.png", + badge: versions.MotionBuilder_Badge, + features: [ + "workfiles", + "loader", + "publisher", + "sceneManager", + "libraryLoader", + ], + products: [ + "animation", + "model", + "camera", + "workfile", + "rig" + ], + docs: { + user: "addon_motionbuilder_artist", + admin: "addon_motionbuilder_admin", + }, + github: "https://github.com/ynput/ayon-motionbuilder", +}; + +export default addon; \ No newline at end of file diff --git a/website/src/data/addons/data/openusd.ts b/website/src/data/addons/data/openusd.ts new file mode 100644 index 00000000..7c40d3bb --- /dev/null +++ b/website/src/data/addons/data/openusd.ts @@ -0,0 +1,23 @@ +import { type Addon } from "../types"; +import versions from "@site/docs/assets/json/Ayon_addons_version.json"; + +const addon: Addon = { + title: "Open USD", + description: + "USD is a high-performance extensible software platform for collaboratively constructing animated 3D scenes, designed to meet the needs of large-scale film and visual effects production.", + icon: "openusd.png", + badge: versions.USD_Badge, + features: [ + ], + products: [ + "usd", + "usdRender", + ], + docs: { + user: "category/usd", + admin: "addon_usd_admin", + }, + github: "https://github.com/ynput/ayon-usd", +}; + +export default addon; diff --git a/website/src/data/features/data.ts b/website/src/data/features/data.ts index 01eebf8f..9bfad847 100644 --- a/website/src/data/features/data.ts +++ b/website/src/data/features/data.ts @@ -65,6 +65,18 @@ const features: { [type in FeatureType]: Feature } = { "A way to synchronize projects across AYON and Flow (Shotgrid), as well as react to events in either platform.", preview: "shotgrid_sync.png", }, + aquariumSync: { + title: "Aquarium Sync", + description: + "Keep Ayon syncronized with your Aquarium's project, and create Aquarium from Ayon.", + preview: "aquarium_sync.png", + github: "https://github.com/ynput/ayon-aquarium", + docs: { + user: "addon_aquarium_artist", + admin: "addon_aquarium_admin", + developer: "addon_aquarium_developer", + }, + }, libraryLoader: { title: "Library Loader", description: diff --git a/website/src/data/features/img/aquarium_sync.png b/website/src/data/features/img/aquarium_sync.png new file mode 100644 index 00000000..2d417c36 Binary files /dev/null and b/website/src/data/features/img/aquarium_sync.png differ diff --git a/website/src/data/features/types.ts b/website/src/data/features/types.ts index 9eeace9f..d5112e71 100644 --- a/website/src/data/features/types.ts +++ b/website/src/data/features/types.ts @@ -32,4 +32,5 @@ export type FeatureType = | "burnins" | "bakingColorspacePresets" | "scriptBuilding" + | "aquariumSync" | "sgSync"; diff --git a/website/src/data/products/data.ts b/website/src/data/products/data.ts index 3f5ba933..47906594 100644 --- a/website/src/data/products/data.ts +++ b/website/src/data/products/data.ts @@ -199,11 +199,11 @@ const products: { [type in ProductType]: Product } = { icon: "photo_library", }, usd: { - title: "USD (experimental)", + title: "USD", icon: "home_repair_service", }, usdRender: { - title: "USD Render (experimental)", + title: "USD Render", icon: "photo_library", }, textureSet: { diff --git a/website/src/pages/features/_components/SideBar/styles.module.scss b/website/src/pages/features/_components/SideBar/styles.module.scss index 9ff3b93e..6f6bee6d 100644 --- a/website/src/pages/features/_components/SideBar/styles.module.scss +++ b/website/src/pages/features/_components/SideBar/styles.module.scss @@ -51,6 +51,7 @@ nav { padding: 0.5rem; scrollbar-gutter: stable; + padding-bottom: var(--ifm-navbar-height); // Allow the last element of the list to be visible flex-grow: 1; overflow-y: auto; diff --git a/website/src/pages/styles.module.scss b/website/src/pages/styles.module.scss index f9c19423..ca279edd 100644 --- a/website/src/pages/styles.module.scss +++ b/website/src/pages/styles.module.scss @@ -69,7 +69,7 @@ html[data-theme="dark"] .title { gap: 32px; flex: 1; padding: 64px 0; - max-height: 50vh; + min-height: 50vh; background-color: var(--ifm-background-surface-color); } @@ -83,6 +83,12 @@ html[data-theme="dark"] .title { gap: 32px; } +@media screen and (max-width: 475) { + .Links { + flex-direction: column; + } +} + .link { display: flex; flex-direction: column;