A typical production pipeline environment in VFX, animation and games is far more dynamic and fast phased than ever before. Technical directors and software engineers work very hard to catch up with the demand created by tight schedules, limited budget and ever growing expectations.
Building blocks of a production pipeline must be well architected, flexible and efficient in order to save money and time, while allowing team members working as productive as possible to deliver best possible product. After all, every single step, including modelling, animation, compositing and any other aspect of a production is done on top of a pipeline. Please remember, when I say pipeline I don't only refer to tools, plug-ins, and applications that we provide in a production environment but also I refer how we develop and deliver them.
We could see two major type of approaches implemented by the studios when we take a look at how pipelines work nowadays. Namely;
This system is managed based on series of configuration files, which are hard-coded in their nature. Thus, if a change needs to be made, such as creating a development environment or releasing a new version of a tool, including changing/editing environments, these configuration files need to be edited manually. This system is clanky, labour intensive and not flexible enough to answer the needs of such dynamic production environment in any way. Due to the architecture of the of the system, you do not have multiple development or testing environments either. Therefore, you need to work on one task a a time.
I personally heard technical directors complaining that, editing these files and releasing new version of a tool might easily take up to 10 minutes every single time. If a technical director releases 3 fixes a day, which is far less compare to today's expectations and practices, in a team where 15 technical directors work, this would add up to 7.5 hours of precious development time being wasted every single day on a task, which should be automated. Certainly, this is neither desirable situation in today's production environment, nor is it something employers would like to make their employees to go through.
In this system you use packages in your local path to develop tools. However, the local path is not an environment and packages from it do not get used directly, which is a major drawback since you have to build and install the packages you work on, then you have to resolve an environment to be able to use them. Because of this very reason, changes you make are not reflected in real-time, and you have to repeat these steps over and over again for every single change you make in your code. Things could get even more cumbersome when you need to work with a DCC such as Maya, which almost always the case. Now you have to launch the DCC you work on as an another step on top of previous ones every single time you make a change in your code. In some cases creating symlinks may help, however not all ceases work with symlinks either. The system also requires manual labour and additional knowledge of CMake to setup a build process since it is based on it.
Neither approaches give you enough flexibility, such as having more than one development environment for dedicated tasks and switching among them, nor did they offer comprehensive API so you could take advantage of automating virtually everything in a production pipeline as far as packaging, developing, testing and releasing tasks go.
I worked at studios where either one of these two solutions were implemented. Working with them wasn't a great experience and bothered technical directors and software engineers a lot since they want to spend their precious time more productively on developing tools, plug-ins, scripts and applications instead of dealing with chores, which could have been and should have been solved and automated all along.
Stash Software™ has been designed and developed in a way that addresses the problems I mentioned above while providing unprecedented flexibility and productivity. It does so by removing any clutter out of the way of developers and users a like. There is no hard coded configuration files to deal with for environments or building and installing packages every time you make a change in your code. Notable features of Stash Software™ are;
Stash Software™ has purpose built dedicated flexible environments, which allow you to develop, test and release code without impacting or interfering ongoing productions. Thanks to these dedicated environments, you can develop anything without re-initializing environments.
Dedicated environments in Stash Software™ are initialized dynamically, on demand, on the fly. There is no hard coded configuration files, no chores to deal with. You can jump one environment to another on the fly, whenever you need it. This gives you enormous amount of flexibility and boosts your productivity.
You can have multiple development and testing environments simultaneously in Stash Software™ where you can initialize the one you need. Therefore, you can have a dedicated environment for a dedicated task, which speeds you up in your work.
You do not build and install packages in Stash Ecosystem™ to use them, they just work from their respective environments! Thanks to dedicated environments, all changes are reflected in real-time too!
Stash Software™ offers simple yet powerful packaging system along with its API, which you can fully customize based on the requirements of your pipeline. Packages and their folder structure along with the built-in files are created automatically by provided API and commands.
Stash Software™ allows you to customize all aspects of feature-rich built-in release tools via its powerful API, which you can use in order to introduce your own coding standards for your development practices to make sure that only production ready code gets released.
Stash Software™ comes with many built-in packages. These packages are designed and developed to answer specific needs, which make Stash Ecosystem™ well organized framework to work with.
Stash Software™ has powerful app system where you can launch applications such as Maya, Nuke, etc. and customize the environment based on them for even more flexible production environment.
Stash Software™ offers highly customizable features including settings and callbacks, which are provided as Python modules so you can take advantage of Stash Software™'s flexible approach to production pipeline development.
Even though Stash Software™ is written in C++, it offers native Python capabilities since Python interpreter is embedded in Stash Software™ itself. Thus, you can use Python programming language whenever you need to customize Stash Software™ or its packages instead of dealing with hard coded configuration files such as yaml, toml, xml, etc.
Stash Software™ has built-in documentation system based on Doxygen. So you document your source code and Stash Software™ takes care of creating documentation from start to finish.
Stash Software™ provides Python, PySide and Doxygen out of the box to empower you in your development work.
You can utilize the API classes, that come with the built-in packages to boost your productivity of your development work since they are built that in mind.
You write unit tests and let Stash Software™ run and report them before you release any package to make sure that your code is production ready. You can also use the provided commands and API to run the unit tests for any package whenever you want.
Collaboration with other technical directors and software developers in your team is extremely easy since Stash Software™'s environment architecture is built from scratch for this very purpose.
Stash Software™ commands come with built-in auto-complete flags and flag values, which are awesome! Therefore, interacting with Stash Ecosystem™ in command line is a breeze.
Stash Software™ is a cross-platform application that supports Linux, Mac and Windows operating systems. Thus, all your needs in terms of supporting all major platforms in your production pipeline are covered out of the box.
Stash Ecosystem™ provides comprehensive documentation both for users and developers. Documentation for users are provided in this Confluence site. API documentation, which generated by using Doxygen is also provided so software developers and technical directors can leverage it in their development work.