Skip to content

Master Version Workflow #511

Description

@mkolar

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.

  1. 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.
  2. 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.
  3. 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?

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions