-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Master Version Workflow #511
Comments
I think the issue is less about the versioning, but about a single path you're referencing to change in place. Meaning, that whatever you do you will need to swap that file out, either you're changing symlinks or actually overwriting a file. For your specific use case, what if you turn the problem around. It seems what you're looking to produce is not even new versions at all, you're looking to "overwrite" whatever is there. What if your instance has a The downside of course is, that you are actually overwriting the same version. However, listening to your use case that's exactly what you'd want. So basically you'd have Again, at best the workflow with a master version can be very dangerous and when things go wrong it can be non-trivial to recover from. It's not something I'd recommend very quickly but I can see the production use case. |
this is exactly the approach that would make it dangerous. We're talking about keeping the standard versioning, but also having a single non-versioned file on top of that. So you get the best of both worlds. But most importantly at any point you can safely convert the scene to a locked version that will never change. Yes it is primarily about overwriting a particular dedicated version file with each publish, but not about ditching versioning altogether.
I agree 100%, and it is our standpoint as well, but at the end of the day it's the client's decision about how safe vs how fast they want to be. |
Maybe the way openPipeline handles this would be a good approach.
|
that is precisely the workflow we are after. The key questions we're solving are, how to handle this in the DB and of course writing a bunch of tools to allow converting master to explicit and vice versa within the scene |
This may be too complicated but how about publishing two versions and link them as dependent? The master version will always get overwritten when publishing, but you would update which version its dependent on. |
we've decided to do something similar. We'll create a new type called To make everything backwards compatible, all the tools will simply look if Visually we were thinking of simply showing version number with some symbol to tell user he will be importing master rather than locked one. For example if the latest version publish is v003, then in the loader you'll see As mentioned before, the master will be overwriten with every publish to match the latest (or approved) version. The plan is to make this completely transparent and backward compatible of course. If studio doesn't want to use masters, they simply won't publish them and everything works identically as it does now. So implementing it into a config should be as simple as writing a new integrator. |
We've implemented this in the pypeclub fork of core. From testing so far it looks very useable, albeit we'll still be recommending our clients not to use it unless the project absolutely requires it. There are plenty of caveats hidden in this. For instance what happens if the file that we're overwriting is being used and locked, like arnold textures when publishing, but other artist rendering at that time. We'll need to write some extra tools to lock the versions in the scene during publishing for example. |
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 themyForest
setdress,sh020_layout
andsh020_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.
master
tolocked
versions. To achieve this we could store extra fields on containers that would specify whether we havemaster
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 tolocked
based 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
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?
The text was updated successfully, but these errors were encountered: