Problem:
A few of our clients are requesting the option to use "master versions" or "push" workflow for certain projects. The reasons are simple efficiency with scene updates in projects that are unlikely to break with asset updates. Currently, the whole version workflow is very safe, however, when change is published, it requires a tremendous amount of time to update all it's dependent scenes, which might have a lot of nesting.
Example:
Tree_model_v01.abc -> myForest_setdress_v01.ma -> sh020_layout_v01.ma -> sh020_lighting_v01 ...
When the tree is updated to tree_model_v02.abc, we need to update the myForest setdress, sh020_layout and sh020_lighting to v02 to have this change reflected all the way through the pipeline. If master version was possible, we would simply open the lighting scene and re-render. Now imagine that this happens on a tv show episode with 200 shots and all of them have to be re-done for one tree update, truly a PITA situation, and unfortunately quite common.
Of course, we can talk about better and more robust approaches to automatic updates through the files. Also if done properly the lighter can update the tree in the lighting scene without caring what happens underneath in layout and the setdress for example. But that's not ideal, considering the problem will still be there, next time he opens another shot.
The truth is that using a master version workflow is a very effective and viable, albeit somewhat dangerous, approach for working in many situations.
Solution
Write it to DB:
We'd need to update version schema to allow the identification of this master version. I think that the best would be allowing using an empty version name that would automatically mean it's the master. We must be able to tell from the master version data which explicit version it currently corresponds to. Hence if we used an empty version name, we still need another data to specify what version number it really is (or the id of that version of course).
Another option would be leaving the version name the same as the one it corresponds to, but adding another data master simply set to true or false.
The question is whether it shouldn't be a separate type with its own schema. Which might simplify a lot of things, however, it would complicate others.
Master version should also have its own representations that would essentially be duplicates of the originals, however with different context and template.
Write it to Disk:
This would be up to the config to sort out. It could simply fill the version key in the template with something else (master for instance), but we'd most likely use different template altogether and the file itself would live directly in the subset folder. That's however quite irrelevant for avalon-core itself.
The important thing is that these master publishes should always be re-written ( or hard-linked) with the latest/approved published version.
Load it via Loader
This should be a fairly simple update to the loader app, that would default to master version if it finds it, but otherwise function as it does currently
Manage it in the Scene
There are a few caveats when it comes to managing scene versions.
- we must be able to always convert the scene from
master to locked versions. To achieve this we could store extra fields on containers that would specify whether we have master version loaded and what is the published version equivalent. We would then have to provide a script that crawls the containers and converts them from master to locked based on this information.
- Storing information about current version equivalents for all containers should be happening fairly invisibly but in a safe manner. That we do it when the artist is certain the scene is "correct", personally I think that and integrator during publishing would be a good candidate.
- Inventory should treat master version as always up to date. But of course at any time changeable to a locked version.
Alternatives
We considered at length the option of just using version 0 or a very high number like 999. However for some of the studios we work with, this isn't an option. With certain jobs there are built-in client requirements for versions starting from ridiculous number ranges, say v2000 being the start (yep, it happens) for various reasons, while v000, is often used for first editorial sanity checks (making sure that plate going through comp and back, stays identical), or other purposes. So we'll need to implement this properly.
Anyone with some thoughts on the matter?
Problem:
A few of our clients are requesting the option to use "master versions" or "push" workflow for certain projects. The reasons are simple efficiency with scene updates in projects that are unlikely to break with asset updates. Currently, the whole version workflow is very safe, however, when change is published, it requires a tremendous amount of time to update all it's dependent scenes, which might have a lot of nesting.
Example:
Tree_model_v01.abc -> myForest_setdress_v01.ma -> sh020_layout_v01.ma -> sh020_lighting_v01 ...
When the tree is updated to
tree_model_v02.abc, we need to update themyForestsetdress,sh020_layoutandsh020_lightingto v02 to have this change reflected all the way through the pipeline. If master version was possible, we would simply open the lighting scene and re-render. Now imagine that this happens on a tv show episode with 200 shots and all of them have to be re-done for one tree update, truly a PITA situation, and unfortunately quite common.Of course, we can talk about better and more robust approaches to automatic updates through the files. Also if done properly the lighter can update the tree in the lighting scene without caring what happens underneath in layout and the setdress for example. But that's not ideal, considering the problem will still be there, next time he opens another shot.
The truth is that using a master version workflow is a very effective and viable, albeit somewhat dangerous, approach for working in many situations.
Solution
Write it to DB:
We'd need to update version schema to allow the identification of this
masterversion. I think that the best would be allowing using an empty version name that would automatically mean it's the master. We must be able to tell from the master version data which explicit version it currently corresponds to. Hence if we used an empty version name, we still need another data to specify what version number it really is (or the id of that version of course).Another option would be leaving the version name the same as the one it corresponds to, but adding another data
mastersimply set to true or false.The question is whether it shouldn't be a separate type with its own schema. Which might simplify a lot of things, however, it would complicate others.
Master version should also have its own representations that would essentially be duplicates of the originals, however with different context and template.
Write it to Disk:
This would be up to the config to sort out. It could simply fill the version key in the template with something else (
masterfor instance), but we'd most likely use different template altogether and the file itself would live directly in the subset folder. That's however quite irrelevant for avalon-core itself.The important thing is that these master publishes should always be re-written ( or hard-linked) with the latest/approved published version.
Load it via Loader
This should be a fairly simple update to the loader app, that would default to master version if it finds it, but otherwise function as it does currently
Manage it in the Scene
There are a few caveats when it comes to managing scene versions.
mastertolockedversions. To achieve this we could store extra fields on containers that would specify whether we havemasterversion loaded and what is the published version equivalent. We would then have to provide a script that crawls the containers and converts them from master tolockedbased on this information.Alternatives
We considered at length the option of just using version 0 or a very high number like 999. However for some of the studios we work with, this isn't an option. With certain jobs there are built-in client requirements for versions starting from ridiculous number ranges, say
v2000being the start (yep, it happens) for various reasons, while v000, is often used for first editorial sanity checks (making sure that plate going through comp and back, stays identical), or other purposes. So we'll need to implement this properly.Anyone with some thoughts on the matter?