Jump to content

Milan Kolar

Members
  • Posts

    81
  • Joined

  • Last visited

  • Days Won

    14

Posts posted by Milan Kolar

  1. Hi. 

    We'll try updating to this latest branch.  We've been using the previous one for python 3 for almost a year with only one problem, that we're running into now. It's compatible with either python3 or python 2, but doesn't work in mixed environment. So if we install it with pip3 and then try loading it to maya, it crashes on multilpe wrong imports. We'll investigate more closely and post here.

  2. Very interesting idea. 

    Even though we've never really longed for something like it, I'm sure we'd start using it right away and it would be clearer for the client. Right now we're also sending multiple review sessions if they concern different things (for example one session for fx approvals and one for animation). With this feature we could be sending dailies (which we'd love) that would be organised inside for clarity. 

    My approach would be more of a 'playlist' style, where we could set multiple playlist withing the review that could contain the same version if need be. 

    Client could then choose a playlist inside the review, or show all versions. If 'show all' could be disabled, then it would work exactly as Alberto's request, but having the extra option for other cases. 

    Just writing this down I can think of plethora options to use it. Mockup different cut versions with scrambled shots or different shot versions (that would of course need the sequence play in client review ;) ) and so on..

     

    Long story short: I love the idea

  3. 9 minutes ago, instinct-vfx said:

    I agree with connect integration though i am unsure if this is maybe too shop-dependent to be generally implemented. e.g. i would need this rather configurable and user selectable at different leves (e.g. opening max in 3 different shot contexts does not necessarily mean i need to track to the last one only. Might be opened for reference etc.)

    Very true actually. 

  4. To add to list these are some thing more in a bug than a feature category.

    • Adding time logs by just typing a duration in the main field and pressing save, should use current time as end time, rather than start. 
    • Editing time logs should allow changing the stop time as well as start time, currently the only way to change timelog is changing duration.

    Something to deal with the occasional super long day (as instinct-vfx mentioned) would be great. Maybe a notification that pops up every hour after certain time that prompts user to confirm he's still working, if he doesn't it turns off the logger, because he's most likely gone home. 

     

    Ideally though this could all be integrated with connect. Auto start timers on launching app for task, and stopping when artist closes it.

  5. Soo. I went ahead and created an Ftrack Slack User Group. However there's this small problem I haven't realized till now. Slack is not very good with public access, so every person needs to get an invite (or be within a specific domain, which is even worse).

    There is this lovely service called slackin, but that of course needs to run on something. 

    Right now I'm ok with just sending out invites like crazy if anyone asks here to get it going. Theoretically as it grows this won't be an issue, because any member can send an invite. It'll just be a bit of a hassle at the beginning.

    Maybe ftrack guys would be interested in hosting this tiny slackin service, to make it easier?

     

    Anyways

    the address is: ftrackusers.slack.com

    Come join the party... (it's very, very lonely right now :) )

  6. Another useful hook with this. Start timer automatically with app launch. Now we need to figure out how to stop it automatically and there will be some happy producers walking around here.

    import logging
    import ftrack
    import ftrack_api
    
    logger = logging.getLogger()
    
    def start_time_on_launch(event):
        '''Modify the application environment and start timer for the task.'''
        data = event['data']
    
        username = event['source']['user']['username']
    
        session = ftrack_api.Session()
        # Get user from username
        user = session.query('User where username is "{}"'.format(username)).one()
        # Try getting taskid from event selection
        try:
            taskid = data['context']['selection'][0]['entityId']
        except:
            logger.info('Unable to determine task. Timer not starting')
    
        if taskid:
            task = session.query('Task where id is {}'.format(taskid)).one()
            logger.info('Starting timer for task: ' + task['name'])
            user.start_timer(task, force=True)
    
    
    def register(registry, **kw):
        '''Register location plugin.'''
    
        # Validate that registry is the correct ftrack.Registry. If not,
        # assume that register is being called with another purpose or from a
        # new or incompatible API and return without doing anything.
        if registry is not ftrack.EVENT_HANDLERS:
            # Exit to avoid registering this plugin again.
            return
    
        ftrack.EVENT_HUB.subscribe(
            'topic=ftrack.connect.application.launch',
            start_time_on_launch
        )
    

     

  7. So I had some time to play with this a little bit and came up with compact and quite efficient way of dealing with environments using launching events. Technically all that is needed is one hook that listens to the launching events and appends environments from simple .json config files based on app identifiers.

    The hook looks for .json files in 'FTRACK_APP_ENVIRONMENTS' and tries to find 2 configs. One that is version independent i.e. 'maya.json' and one that is version dependent i.e. 'maya_2016.json', then it adds both into the environment. Config file names mus match the app identifier or the first part of the identifier when split by '_'.

    You can then have a hierarchical environment config files, where maya.json loads regardless of maya version you launch, and maya_2016.json gets added on top of the environment when you launch Maya 2016 from ftrack.

    'FTRACK_APP_ENVIRONMENTS' folder can then look like this for instance:

    • maya.json
    • maya_2015.json
    • maya_2016.json
    • maya_2016.5.json
    • nuke.json
    • nuke_9.0v8.json
    • houdini.json
    • houdini_15.json
    • etc....

     

    This is the core part of the hook (full hook attached):

    def modify_application_launch(event):
        '''Modify the application environment and start timer for the task.'''
        data = event['data']
    
        context = data['context']
        app = data['application']
        environment = data['options']['env']
    
        env_path = os.environ.get('FTRACK_APP_ENVIRONMENTS')
    
        env_files = []
    
        # determine config file for version independent environment
        app_name = app['identifier'].split('_')[0]
        app_file_name = '{}.json'.format(app_name)
        env_files.append(os.path.join(env_path, app_file_name))
    
        # determine config file for version dependent environment
        variant_file_name = '{}.json'.format(app['identifier'])
        env_files.append(os.path.join(env_path, variant_file_name))
    
        env_add = []
    
        # loop through config files
        for env_file in env_files:
            try:
                env_add = load_env(env_file)
            except:
                env_add = None
    
            # Add each path in config file to the environment
            if env_add:
                for variable in env_add:
                    for path in env_add[variable]:
                        ftrack_connect.application.appendPath(
                            str(path),
                            str(variable),
                            environment
                        )

     

    This is what the config file look like then:

    {
        "MAYA_PLUG_IN_PATH": [
            "K:\\.core\\dev\\maya\\plug-ins"
        ], 
        "MAYA_AUTOSAVE_FOLDER": [
            "C:\\mayatemp\\autosave"
        ], 
        "MAYA_SCRIPT_PATH": [
            "K:\\.core\\dev\\maya\\scripts", 
            "K:\\.core\\dev\\maya\\shelves", 
            "K:\\.core\\repos\\maya\\scripts", 
            "K:\\.core\\repos\\maya\\prefs\\shelves"
        ]
    }

     

    Now quite frankly, I think that a simple hook like this (probably a bit more robust version) should be a part of the default connect installation. Straight away people would have 3 options of modifying the app launches. 

    1. Only need to modify environment: Add your json formatted environment file to 'FTRACK_APP_ENVIRONMENTS' and name it 'app_identifier.json' (e.g.: maya_2016.json)
    2. Write your own hook that catches launching events and modify the launch that way.
    3. Change the launcher hook in connect and modify to your heart's content

     

    One way or another, our enviro setups just went from lot's of python file, to a simple json file per app without the need to tinker with default hooks. Thumbs up.

    modify_app_launch.py

  8. This is getting very close to a simple a straightforward system. I have however ran into some issues.

    The most prominent right now is the fact that I have no way of finding out what task/entity was the source of this launching event. It's not included in the event data and because it seems that this event precedes the ftrack addition of env variables the environment is missing the 'FTRACK_TASKID' key too.  It's important to be able to tell what originated the launch event because the enviro usually changes based on what project or task we're launching (different plugins for example.

     

    EDIT:

    Ah. One of those where you completely skip on part of docs and then realise it's of course all there. If anyone else enjoys skipping important parts of docs, then here's how you get it.

    event['data']['context']['selection'][0]['entityId']

    So considering I found it...Nice work guys.

  9. Hey guys. 

     

    One thing I'm dealing with right now and it appears I'm stuck. We have 2 shows using the same schema. However midway through production one of them started changing a bit in terms of requirements from client, director etc. So I need to tweak the schema for this one a bit. Different statuses, plus some other config differences. The question is. Is it possible to change the schema after the project is created? I didn't find a way, just as well as I didn't find a way to duplicate schema. That would be super helpful too considering how annoying it is to keep creating new ones all the time.

     

    Thanks

     

    EDIT:

     

    I forgot to add, that my aim is to separate these two shows, because we don't want the changes made on show2 reflected into show1

  10. Having messages, notes, newly assigned task... or pretty much anything (preferably customisable) make a small pop up notification on the desktop when they are sent or assigned would be very useful. The problem is that people might forget to check their messages, but if they get a tiny pop up it will at the very least remind them to go a check what's going on.

     

    Something like this for instance https://support.google.com/chrome/answer/3220216?hl=en-GB

     

    I'm not sure how easy is something like this to implement in other browsers, but Chrome seems to have built in way of doing it.

     

    I can imagine this appearing, when artist, get's a personal message (e.g. of certain category) or is assigned an urgent priority task and so on.  

×
×
  • Create New...