Skip to main content

A Production Asset Management (ProdAM) System

Project description

Travis-CI Build Status License Supported Python versions PyPI Version Wheel Support

About

Stalker is an Open Source Production Asset Management (ProdAM) Library designed specifically for Animation and VFX Studios but can be used for any kind of projects. Stalker is licensed under LGPL v3.

Features

Stalker has the following features:

  • Designed for Animation and VFX Studios.

  • Platform independent.

  • Default installation handles nearly all the asset and project management needs of an animation and vfx studio.

  • Customizable with configuration scripts.

  • Customizable object model (Stalker Object Model - SOM).

  • Uses TaskJuggler as the project planing and tracking backend.

  • Mainly developed for PostgreSQL in mind but SQLite3 is also supported.

  • Can be connected to all the major 3D animation packages like Maya, Houdini, Nuke, Fusion, Softimage, Blender etc. and any application that has a Python API. And with applications like Adobe Photoshop which does not have a direct Python API but supports win32com or comtypes.

  • Mainly developed for Python 3.0+ and Python 2.7 is fully supported.

  • Developed with TDD practices.

Stalker is build over these other OpenSource projects:

  • Python

  • SQLAlchemy and Alembic

  • Jinja2

  • TaskJuggler

Stalker as a library has no graphical UI, it is a python library that gives you the ability to build your pipeline on top of it. There are other python packages like the Open Source Pyramid Web Application Stalker Pyramid and the Open Source pipeline library Anima which has PyQt/PySide/PySide2 UIs for applications like Maya, Nuke, Houdini, Fusion, Photoshop etc.

Installation

Use:

pip install stalker

Examples

Let’s play with Stalker.

Initialize the database and fill with some default data:

from stalker import db
db.setup()
db.init()

Create a User:

from stalker.db.session import DBSession
from stalker import User
me = User(
    name='Erkan Ozgur Yilmaz',
    login='erkanozgur',
    email='my_email@gmail.com',
    password='secretpass'
)

# Save the user to database
DBSession.save(me)

Create a Repository for project files to be saved under:

from stalker import Repository
repo = Repository(
    name='Commercial Projects Repository',
    windows_path='Z:/Projects',
    linux_path='/mnt/Z/Projects',
    osx_path='/Volumes/Z/Projects'
)

Create a FilenameTemplate (to be used as file naming convention):

from stalker import FilenameTemplate

task_template = FilenameTemplate(
    name='Standard Task Filename Template',
    target_entity_type='Task',  # This is for files saved for Tasks
    path='{{project.repository.path}}/{{project.code}}/'
         '{%- for parent_task in parent_tasks -%}'
         '{{parent_task.nice_name}}/'
         '{%- endfor -%}',  # This is Jinja2 template code
    filename='{{version.nice_name}}_v{{"%03d"|format(version.version_number)}}'
)

Create a Structure that uses this template:

from stalker import Structure
standard_folder_structure = Structure(
    name='Standard Project Folder Structure',
    templates=[task_template],
    custom_template='{{project.code}}/References'  # If you need extra folders
)

Now create a Project that uses this structure and will be placed under the repository:

from stalker import Project
new_project = Project(
    name='Test Project',
    code='TP',
    structure=standard_folder_structure,
    repositories=[repo],  # if you have more than one repository you can do it
)

Define the project resolution:

from stalker import ImageFormat
hd1080 = ImageFormat(
    name='1080p',
    width=1920,
    height=1080
)

Set the project resolution:

new_project.image_format = hd1080

# Save the project and all the other data it is connected to it
DBSession.save(new_project)

Create Assets, Shots and other Tasks:

from stalker import Task, Asset, Shot, Type

# define Character asset type
char_type = Type(name='Character', code='CHAR', target_entity_type='Asset')

character1 = Asset(
    name='Character 1',
    code='CHAR1',
    type=char_type,
    project=new_project
)

# Save the Asset
DBSession.save(character1)

model = Task(
    name='Model',
    parent=character1
)

rigging = Task(
    name='Rig',
    parent=character1,
    depends=[model],  # For project management, define that Rig can not start
                      # before Model ends.
)

# Save the new tasks
DBSession.save([model, rigging])

# A shot and some tasks for it
shot = Shot(
    name='SH001',
    code='SH001',
    project=new_project
)

# Save the Shot
DBSession.save(shot)

animation = Task(
    name='Animation',
    parent=shot,
)

lighting = Task(
    name='Lighting',
    parent=shot,
    depends=[animation], # Lighting can not start before Animation ends,
    schedule_timing=1,
    schedule_unit='d',  # The task expected to take 1 day to complete
    resources=[me]
)
DBSession.save([animation, lighting])

Let’s create versions for the Animation task.

from stalker import Version

new_version = Version(task=animation)
new_version.update_paths()  # to render the naming convention template
new_version.extension = '.ma'  # let's say that we have created under Maya

Let’s check how the version path is rendered:

assert new_version.absolute_full_path == \
    "Z:/Projects/TP/SH001/Animation/SH001_Animation_Main_v001.ma"
assert new_version.version_number == 1

Create a new version and check that the version number increased automatically:

new_version2 = Version(task=animation)
new_version2.update_paths()  # to render the naming convention template
new_version2.extension = '.ma'  # let's say that we have created under Maya

assert new_version2.version_number == 2

See more detailed example in API Tutorial.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stalker-0.2.23.tar.gz (663.7 kB view details)

Uploaded Source

Built Distribution

stalker-0.2.23-py2.py3-none-any.whl (427.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file stalker-0.2.23.tar.gz.

File metadata

  • Download URL: stalker-0.2.23.tar.gz
  • Upload date:
  • Size: 663.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.6

File hashes

Hashes for stalker-0.2.23.tar.gz
Algorithm Hash digest
SHA256 b069380f5a60d1723095074ed92dff2e776194b8fac85ba9a609921a3df406b2
MD5 e1c0f8758e4716bd4b577d6fef1c74ff
BLAKE2b-256 3d0f45febc2b76ef6b731808b9c541b23d5b17d3631457fabf848fc1fdd134d2

See more details on using hashes here.

File details

Details for the file stalker-0.2.23-py2.py3-none-any.whl.

File metadata

  • Download URL: stalker-0.2.23-py2.py3-none-any.whl
  • Upload date:
  • Size: 427.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.6

File hashes

Hashes for stalker-0.2.23-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 449b6bf5e620df4748b51cc228051f2e2499874e21f75f5e52284e3b063e014a
MD5 773fbc8212fe276752088d537a3b6232
BLAKE2b-256 bf5348736fb9a18f31a721dc7c35399fe097b2ec188c58133cd9b150ace525ee

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page