ciomax 0.7.2b4
Max plugin for Conductor Cloud Rendering Platform.

# Conductor for 3DS Max

3ds Max plugin submitter for the Conductor Cloud rendering service.

## Install


**To install the latest version.**
```bash
pip install --upgrade ciomax --target=$HOME/Conductor
```

**To install a specific version, for example 0.1.0.**
```bash
pip install --upgrade --force-reinstall ciomax==0.1.0 --target=$HOME/Conductor
```

**Setup the Plugin startup file from a command prompt or Powershell on a Windows machine.** 

```bash
python ~/Conductor/ciomax/post_install.py
```

> **NOTE** An alternative is to install from the Plugins page in the [Conductor Companion app](https://docs.conductortech.com/getting_started/installation/#companion-app)


## Usage

To set up a render, go to **Rendering** menu in 3ds Max and choose **Render with Conductor**.

For detailed help, checkout the [tutorial](https://docs.conductortech.com/tutorials/max) and [reference](https://docs.conductortech.com/reference/max) documentation.


## Contributing

> **NOTE:** These instructions were written from the point of view of a developer coding on Mac or Linux, and where 3ds Max on Windows has access to $HOME/ConductorStaging over the network.

Clone the repo.

```
git clone git@github.com:ConductorTechnologies/ciomax.git
cd ciomax
```

Set up a clean virtual envirionment with Python 2.7 for development (optional).

```
python -m virtualenv venv
. ./venv/bin/activate
```

Install development dependencies
```
pip install -r requirements_dev.txt
```

Build and install from this directory into to a convenient location for testing.
```

pip install --upgrade -r requirements.txt --target=$HOME/ConductorStaging

```

When you install from the file requirements.txt, the dependency on ciocore is specified as a local sibling of this project, meaning you can develop ciocore and ciomaya in parallel. If you have no interest in using a dev version of ciocore, then replace `-r requirements.txt` with a dot `.` instead.

As we are working on a different platform, you'll have to tell 3ds Max on Windows where to find the installation. This means you have to create in MaxScript stub file in one of the locations 3ds Max searches for plugins.

Create the following stub file. Te content's must be a location reachable from the Windows machine.

<small>`%LOCALAPPDATA%\Autodesk\3dsMax\2021 - 64bit\ENU\scripts\startup\ciomax_stub.ms`</small>
```
-- Calls the Conductor 3DS Max plugin..
(
  include "Z:\\Mac\\Home\\ConductorStaging\\ciomax\\Conductor.ms"
)

```

> **NOTE** The above file is created automatically for customers when they use the Companion app, as it runs a post_install script.

If you develop natively on Windows, please consider adding your workflow steps to this section.


## License
[MIT](https://choosealicense.com/licenses/mit)

## Changelog

## Unreleased: 

* Updated plugin installation to avoid AppData pathing issue with Max on Windows 11

## Version:0.7.0 -- 27 Oct 2025

* Updated menu API for 2025 version compatability
* Upgraded PySide and core dependencies
* Refers to the correct sections after moving components around

### Version:0.6.1 -- 10 Nov 2023

* Files generated during the submission process are now checked for existence before being uploaded. This prevents submission failures caused by latency between shares. The affected files include timestamped scene files and project files for native submissions, ass and remap * files for kick submissions, and vrscene and remap files for Vray submissions.
* Several changes have been made to ensure compatibility with the latest versions of 3ds Max.
* We have removed the prerender script that used to set the project in the cloud. We now set an environment variable that serves the same purpose.
* The submitter uses the correct command line commands to match the installed Max versions: 3dsmaxcmd for version 2023, and 3dsmaxcmdio for versions 2021 and 2024.
* A bug related to preemptible checkbox has been fixed.
* We are now using ciocore version 7.0.2 which manages instance type descriptions and ensures there are no duplicates.
* We have implemented a cap on task count to alleviate stress on the dashboard. When the number of tasks goes over a specified value, frames are chunked.
* We use an updated dual combo box widget for instance types.
* Removed the preemptible checkbox when rendering on Coreweave since it is redundant.

### Version:0.5.17 -- 15 Nov 2022

* Task template is updated based on render settings. EXR is the default image type. [868d818]

### Version:0.5.16 -- 26 Aug 2022

* Submission now respects single frame setting, and no longer generates a range of tasks. [8cb63de]

### Version:0.5.15 -- 09 Aug 2022

* Change the load order of our packages so as to avoid conflicts with other packages or versions.
     
### Version:0.5.13 -- 28 Jul 2022

* Change preemptible label to Spot/Preemptible. [0d461ca]

### Version:0.5.12 -- 25 Jul 2022

* Max doesn't support color management, so we set abort_on_error to off while exporting so that the render doesn't stop when the OCIO config is not found. [1083175]

### Version:0.5.11 -- 16 May 2022

* Explicitly adds the vrscene extension. [ce9ddad]

### Version:0.5.10 -- 13 May 2022

* Doesn't use ammendments for submission as it can provide incorrect paths. [512458a]

### Version:0.5.8 -- 04 May 2022

* Attempt to become Python 2 compatible so that it works for 3dsMax 2019. [ba7c154]

### Version:0.5.7 -- 21 Apr 2022

* Adds validations to block invalid software or instance type fields. [64b0982]
* Filters out software for which there are no compatible instance types. [a5e0834]

### Version:0.5.6 -- 19 Apr 2022

* Adds support for vray scenes that are exported without an extension. [9d1a422]

### Version:0.5.5 -- 09 Mar 2022

* Sets up Conductor logging in in the 3dsMax plugin. [7040ff2]

### Version:0.5.4 -- 06 Mar 2022

* Adds a function to remove the color management block from 5.x ass files to work around a bug in the Linux build of Arnold 7.x. [465eebd]

### Version:0.5.3 -- 06 Mar 2022

* User environment overrides now come after amendments, for ultimate control. [d2e6dfe]

### Version:0.5.2 -- 03 Mar 2022

* Adds maxtoa versions: 5.x which maps to (arnold 7.x). [3f5f5a0]

### Version:0.5.1 -- 25 Jan 2022

* Internal pipeline changes that do not affect customers.

### Version:0.5.0 -- 08 Nov 2021

* The task template command for native 3ds Max renders now contains a preRenderScript flag to run a script that sets the current project. In addition, the project's mxp file is uploaded along with assets. This file specifies a mapping of paths to assets relative to the project. [d58dc9e]
* The presubmission scripts for different renderers now have a method that is called to get the payload amendments only. It's a kind of dry run. For example, the arnold presubmission script can return the list of ass files to be produced, without actually writing them. This allows you to get an exact representation of the payload in the preview window without waiting for file operations. 
* The test/execute button next to th presubmission script has been removed as it wasn't clear what to expect if you clicked it.
* 
### Version:0.4.2 -- 02 Nov 2021

* Fixed regression that caused error an when initializing the submitter in a new scene. [2df84b8]

### Version:0.4.1 -- 02 Nov 2021

* Fixed a bug where switching software was failing to switch platform, and therefore instance types were out of sync. This fix only addresses Arnold and the Native renderers, not Vray yet. [c2ec281]

### Version:0.4.0 -- 28 Oct 2021

* Adds windows package ids and dependencies. [fe6b801]

### Version:0.3.7 -- 07 Aug 2021

* Finalize send-to-Windows code, but disable it until we have Wiundows working on the backend. [983897b]

### Version:0.3.6 -- 28 Jul 2021

* Implement max-to-maya mapping to give us access to the latest arnold and allow vetter version
  detection and selection of renderer. [d7320a8]
* Allow failed submission responses to be displayed in the response panel. [9f9997c]
* Reload only in dev mode, since it can cause unexpected results, such as duplicate validator plugins. [0d54bd5]
* Inject 3ds Max packages for Windows compatibilty. [e9c8629]
* Fix bug in post_install script where folder was not prepared before writing. [3438944]

### Version:0.3.5 -- 25 Jul 2021

* Use destination token in render templates. [6f17352]

### Version:0.3.4 -- 25 Jul 2021

* Catch legacy_max_map_support. [920b6c0]


### Version:0.3.3 -- 25 Jul 2021

* Catch empty path. [fde17e1]

### Version:0.3.2 -- 24 Jul 2021

* Only reload in dev mode (when CONDUCTOR_MODE env variable is "dev"). [8e54a96]
* Fix some small bugs that caused the submission to fail.
  
### Version:0.3.1 -- 24 Jul 2021

* Remove custom coloring so that it works in dark and light mode. [6dfba13]
* Max's own GetAssets function is now called with a flag to get full path. [ca26622]
* Adds save_max_scene pre-render script, to be consistent with other pre render scripts. [0cc56b4]
* Adds destinaton token, which can be used in task and pre-sub templates. [184eb4e]
* Templates now auto-update when software choice changes. [95150a1]
* Develop renderscope class to put the submitter in the context of the currently chosen renderer. [2720c1f]

### Version:0.3.0 -- 25 Jun 2021

* Adds Python3 compatibility including the removal of MaxPlus. [a0648c6]
* Ensure the destination field always uses forward slashes.
* Adds a Reconnect button and a Reset UI button.
* The dialog no longer reconnects every time it's opened. The reconnect button makes that behaviour
  redundant.

### Version:0.2.9 -- 16 Mar 2021

* Adds slack to config. [6c09f33]

### Version:0.2.8 -- 12 Mar 2021

* Add .circleci/config.yml. [c922ffe]
* Change output path to something simpler: renders. [46aa00d]

### Version:0.2.5 -- 03 Mar 2021

* Scenes that used Conductor prior to this release should work fine, however, we recommended to delete the **ConductorStore** object and reopen the dialog to get the latest defaults and to avoid unanticipated conflicts.
* Remove sampling flags from default kick command. [28857a0]
* Adds a drop-down menu to choose the render camera. The presubmission scripts then attach this camera to the active view so that the vrscene or ass files use it to render through. [f97866c]
* Changed behavior of the presubmission script `Execute` button. It now runs, and then displays the **Preview** tab to show you how the fully resolved submission object looks. [35f551a]
* Presubmission scripts have a different return type. They now return an object the same shape as a regular submission, which means any fields can be amended during presubmission. A concrete example is adding the `ARNOLD_PATHMAP` variable to the environment. Extra Assets and Environment amendments work, but several fields are yet to be implemented. [d73690c]
* When rendering ass files, we now generate a path remapping file and set the ARNOLD_PATHMAP variable to point to the file on the remote render nodes. This is required to allow the renderer to find windows paths that start with drive letters on the Linux filesystem. ARNOLD_PATHMAP was introduced in Arnold 6.0.4.0 so we now limit the available versions of mtoa to those later than 4.0.4 for compatibility.
* This release adds two new validations.  [dcc77e5]
  1. Ensure either Vray or Artnold are the selected renderer. 
  2. Ensure Legacy 3d Maps Support is off when Arnold is the renderer.
* The `<timestamp>` token now has 1-second granularity as opposed to 1 minute. This helps to reduce conflicts when 2 jobs are submitted close to each other, especially if using an upload daemon. [0e90e9a]

### Version:0.2.4 -- 19 Feb 2021

* Disable pathhelper and add a validator (#8). [c637b36]
* Improves template command and presubmit script. [1ab2650]
* Vray presubmit now writes out a remapPathFile, used by the task command. [c6e7136]
* Fix bug in frame section resolve method. [42c2831]

### Version:0.2.3 -- 10 Feb 2021

* Adds validation and confirmation to flow. [4204ed9]
* Refactor, abstract buttoned panel. [81c0d2a]
* Displays correctly on high DPI screens such as MBP retina. [c7765b8]
* Adds icons for validation severity panels. [390aeb8]
* Reading from saved settings no longer crashes when old scene oppened with missing keys. [74a40ff]

### Version:0.2.2 -- 02 Feb 2021

* Set maximum retries to 5. [96fe970]
* Remove timestamp from renderoutput path template. [6ea4eec]

### Version:0.2.1 -- 02 Feb 2021

* Fix export ass script. [e9b53e0]
* Remove autodefault to stop close on enter. [e6f63e8]

### Version:0.2.0 -- 01 Feb 2021

* Bump version file to 0.2.0. [59cd56d]
* Ct 1568 change software selection to include only Arnold and Vray (#6)

* Adds a close button

* Adds safe store getters, in case old scene is missing some properties. [fe1300e]

### Version:0.1.10 -- 24 Jan 2021

* Save collapsible state of sections between invocations. [2c1b9b3]
* Adds per-renderer defaults and renderer detection. [0747f07]

### Version:0.1.9 -- 15 Jan 2021

* Ass export support and simplified UI. [b14b6b4]

### Version:0.1.8 -- 07 Jan 2021

* Require 0.2.17 core which has UNC path support. [8c2ca64]

### Version:0.1.7 -- 07 Jan 2021

* Adds presubmit script with test functionality. [1169a6c]
* Sections namespace and - presubmit script wip. [96ce40f]

### Version:0.1.6 -- 28 Dec 2020

* resolve() function works in all sections.. [fb5a765]

### Version:0.1.5 -- 23 Dec 2020

* Signals and slots in advanced section. [7f1a220]
* Assets section store signals and slots. [fadce90]
* Sots and signals for kvpair widgets: env and metadata. [aba9d1a]

### Version:0.1.4 -- 17 Dec 2020

* Frames info calculation working. Remove fixtures directory option (assume ~/Conductor/fixtures). [09236b6]
### Version:0.1.3 -- 14 Dec 2020

* Post_install to use ~ because env-vars are invalid in companion. [28d02b4]

### Version:0.1.2 -- 14 Dec 2020

### Version:0.1.1 -- 14 Dec 2020

* Fix path variable bug in post_install. [9bc1984]
* Fix readme. [43a20e8]

### Version:0.1.0 -- 14 Dec 2020

* Post_install and prep for pypi. [fbc9529]
* Implement software section and provide dialog object to sections. [59ac89f]
* Populate from store. [e4662c6]
* Projects and inst types sourced from coredata. [a6197c0]
* Wip implementing resolve. [18595ce]
* Consolidate single sections into advanced section. [cd874de]
* Adds destination path - plus aesthetic improvements. [bcaf90d]
* Ct 1530 general (#3)