Jump to content

All Activity

This stream auto-updates

  1. Yesterday
  2. Last week
  3. Thanks @Daniel Fleming , your advice has helped me solve this problem.
  4. Hi @Byron Nash thanks for writing in, we'll be happy to get you sorted. A lot has changed in our integrations feature set since this original forum post so we'd love to hear which aspects of the integrations you need help with and the team will be happy help out. As you are currently evaluating, feel free to drop any questions to support@ftrack.com and we'll do our best to get you sorted. We'll also report back anything that may apply to this thread as well. Cheers, Andrew
  5. Has anyone found a solution for these questions raise from the original post? I'm evaluating ftrack currently and these a big deals for us.
  6. Did you ever get any answer on this one? I'm looking at ftrack and AE now and having some of the same questions.
  7. Hi Honda, Here is a small snippet showing how to retrieve the real id and type from tempdata, and an example of the contents. I believe that the type attribute will be what I call legacy API form (e.g. "show" and "task" instead of "Project" and "TypedContext" as the new API). results = session.call([{ 'action': '_get_tempdata', 'id': tempdata_id, }]) # results = [[ # { # "type": "assetversion", # "id": "ab580b37-70a8-45c9-8008-09aa4e71b6b7" # }, # { # "type": "assetversion", # "id": "6cefaf1c-f8e6-47df-bbe8-1e1801b1d571" # } # ]] Three variations on how to resolve paths for those AssetVersions. The first two assume that you've defined "componentName" to be something like "main" to match the value in system settings, for the particular Asset type that you're using. However, the third example shows how to query the Asset for the proper Component name. # URLs will contain the session's API key. for result in results[0]: if result['type'] != 'assetversion': continue playable_component = session.query( f'''Component where version_id is "{result['id']}" and name is {componentName}''').one() print(server_location.get_url(playable_component)) # URLs will be signed and expire after some time. for result in results[0]: component_location = session.query( f'''select url from ComponentLocation where component.name is "{componentName}"''' f''' and component.version_id is "{result['id']}"''').one() print(component_location['url']['value']) # This shows the resolver service used by the ftrack web UI. for result in results[0]: av = session.query( f'''select asset.type.component, components.name from AssetVersion where id is "{result['id']}"''' ).one() comps = { comp['id']: comp for comp in av['components'] if comp['name'] == av['asset']['type']['component'] } for comp_id in comps: event = ftrack_api.event.base.Event( topic='ftrack.location.request-resolve', data={ 'componentId': comp_id, } ) session.event_hub.publish( event=event, synchronous=False, on_reply=lambda event: print(event['data']['path']), ) session.event_hub.wait()
  8. Hi @AndyMaurer thanks for sharing back the fixes. Surely will come at hand to many others to have it ! Cheers.
  9. Hi Liam, Expand/collapse all only works when the data is already fetched from the server. If there are more than 500 items in the result and no filter is applied, only the top-most items are fetched. We suggest that you filter down the result or look at part of the project at the time using the project outliner. You can also force the spreadsheet to load all data by applying a filter. A dummy filter (e.g. task state is any of the available states), can be used in case you want to look at everything. let me know if that sorts it for you regards, Daniel
  10. The code i changed: deadline repo: \submission\FTrack\Main FTrackAPI.py Only my addition: class FTrackTask( FTrack ): def __init__( self, task ): super( FTrackTask, self ).__init__( rawObject=task ) self._id = None self._name = None self._description = None self._status = None self._project = None self._parent = None self._assets = None ###Added by me self._parentName = None @property def parentName( self ): if self._parentName == None: self._parentName = self.raw['parent']['name'] return self._parentName ### END of EDIT, leave the rest as it is FTrackUI.py def updateTasks( self, taskList ): #ignore None value if taskList != None: #update cache selectedProjKey = self.GetValue( "ProjectBox" ) self.cachedTasks[ selectedProjKey ] = taskList newTaskDict = {} foundDefault = False for task in taskList: pathNames = [task.name] taskKey = " / ".join( pathNames ) ### MY EDIT taskKey += " [shot: %s]" % task.parentName if taskKey in newTaskDict: #already a task with this name, append the key to stay unique taskKey += " [shot: %s]" % task.parentName ###EDIT END
  11. Oh great. glad you were able to solve it. Out of curiosity how did the script end up looking? which part did you change? Thanks again for posting your solution you found!
  12. I altered the deadline scripts and now get the tasklist how i would it expect to work:
  13. I found out the following, Deadline gathers the list of tasks assigned to current user and if they have the same name like "Animation" it adds the taskkey/ID to stay unique. As we never used Deadline to Ftrack i am not sure how this should look like normally. If i remember an older version right, there was the hierarchy present int the task selection list like: "Shot_1/Animation" "Shot_2/Lighting" and so on ?
  14. Currently the UI allows to link object only within the same project. It is possible to link cross-project entities with the API though. It would be great to link cross-project entities in the UI. Probably, the same request may apply to the upcoming custom attributes links as well.
  15. Hi there, i updated Ftrack local install to the current relaese (4.7.2)and Deadline also to When i want to submit for instance an nuke job that publishes a new version to ftrack, i get internal IDs as selection list and not the task names, please have a look at the Screenshot. I guess Thinkbox did something wrong with the API but i hope someone could help me on this. Thanks, Andy
  16. Hi all, I was testing ftrack integration with RV and encountered some difficulties to handle the data between them. Hope that someone knows any workarounds. Before anything, the long story short: Is it possible to query real entityId and entityType from tempdata? To explain what I tested and what are my thoughts, I made an simple graph showing a flow chart of how ftrack-RV integration works. It is important to say that those tests are based on how RV works in Windows 10 environment with an normal RV installation. --- Windows 10 RV 7.5.1 ftrack-connect 1.1.2 --- ,─────, ( ftrack ) '─────' ├───────────────────────────────────────────────────────┐ ↓ ↓ ┌──────────┐ ┌─────┐ │ play in RV button │ │ Actions │ └──────────┘ └─────┘ │ ↓ ↓ ┌───────────┐ ┌─────────┐ │ ftrack Connect -> RV │ │ RVLINK protocol │ └───────────┘ └─────────┘ ↓ │ ,────────────────────────────────────────, ↓ ( "C:\Program Files\Shotgun\RV-7.5.1\bin\rv.exe" rvlink://baked/...(assetVersion) ) defined in ftrack_connect_rv_hook.py ┌──────────────────────────────┐ '────────────────────────────────────────' │ call registry HKEY_CLASSES_ROOT\rvlink\shell\open\command │ └──────────────────────────────┘ │ ↓ ┌──────────────────────────────────────────────────┐ │ "C:\Program Files\Shotgun\RV-7.5.1\bin\rvpush.exe" -tag rvlink url "rvlink://baked/...(tempdata)" │ or whatever is in the registry └──────────────────────────────────────────────────┘ │ / \ < rvpush could find a rv.exe instance with networkTag rvlink already running? \ / │ ├───────────────┐ │ │ │ YES │ NO ↓ │ ,─────────────────, │ ( connect to already running rv.exe )│ '─────────────────' │ / \ < RVPUSH_RV_EXECUTABLE_PATH is defined? \ / │ ├─────┐ │ │ │ YES │ NO │ ↓ │ ,────────────────────────────────────────────────────, │ ( "C:\Program Files\Shotgun\RV-7.5.1\bin\rv.exe" -networkTag rvlink -network rvlink://baked/...(tempdata) ) ↓ '────────────────────────────────────────────────────' ,────────────────, ( call RVPUSH_RV_EXECUTABLE_PATH ) '────────────────' When a user selects an AssetVersion and pushes the "play selection in RV button", a rvlink protocol is called, rvpush.exe runs and rv.exe is launched. In this chain of executions, the rvlink url(passed to rv.exe as an argument) includes a tempdata information, instead of the information from selected entity. This tempdata info is read by RV, passed to FtrackMode.generateUrl, which generates and returns an temporary url. something like below: https://DOMAIN.ftrackapp.com/widget?view=freview_nav_v1&itemId=freview&theme=dark&auth_token=AUTHTOKEN&entityId=ENTITYID&entityType=tempdata This url is accessible from any browser, but I couldn't query entityId nor entityType of the item selected in the ftrack's webUI. On the other hand, when launching RV using Actions and ftrack-connect, real entityId and entityType are passed to RV, allowing me to handle those information easily. However, it has its cons: a.) to use it, I need an running instance of ftrack-connect b.) it always launches a new instance of RV About b.), customizing ftrack_rv_hook.ApplicationLauncher._getApplicationLaunchCommand function seems to solve the problem. Here is a sample code that shows how I implemented a custom launch process. def _getApplicationLaunchCommand(self, application, context=None): command = None if sys.platform in ('win32', ): # command = [application['path']] # ======================================================================================== # # CUSTOM LAUNCH PROCESS environment = self._getApplicationEnvironment(application, context) server = environment.get('FTRACK_SERVER') event = environment.get('FTRACK_CONNECT_EVENT') event_decode = base64.b64decode(event) event_obj = json.loads(event_decode) selection = event_obj.get('selection', '') rvlink_str = "-flags ModeManagerPreload=ftrack ftrackUrl=%s params='%s'" % ( server, selection ) rvlink_encoded = codecs.encode(rvlink_str, 'hex') # do not use normal command that calls rv.exe # instead, call an instance of cmd, start a rvlink protocol and call rvpush command = [ "cmd.exe", "/c", 'start', "", "rvlink://baked/%s" % rvlink_encoded ] # ======================================================================================== # else: self.logger.warning( 'Unable to find launch command for {0} on this platform.' .format(application['identifier']) ) return command With this code, I could call rvlink protocol using ftrack-connect RV launcher, instead of launching new RV instances every time. About a.), the only way I could solve was editing HKEY_CLASSES_ROOT\rvlink\shell\open\command in a way that launches RV with required environment variables. This allows me to launch a RV that mimics a RV instance launched from ftrack-connect, without the need of a running ftrack-connect instance. The problem is that, when calling RV from "play Selection in RV" button, I only have tempdata. As so, solving a.) does not solves my problem at all. I have the same problem as when I launched a ftrack instance without ftrack-connect, indeed. So I return to my first question: Is it possible to query real entityId and entityType from tempdata? I've already checked other posts in the forum: https://forum.ftrack.com/topic/987-ftrack-rv-integration https://forum.ftrack.com/topic/26-installation-guide-for-rv And some helps pages: https://help.ftrack.com/en/articles/1040451-review https://help.ftrack.com/en/articles/1040536-reviewing-in-hiero-player-or-rv Maybe I'm missing something or misunderstanding how integration works. I'll be glad if anyone could correct me or show me any workaround to reach entityId when using ftrack-RV integration without ftrack-connect's Actions. Thanks in advance. Best Regards, Honda
  17. Hi Daniel, There are more than 1000 shots in tasks board, and I have tried to expand only a few of them, but no matter I choose one or more shots to expand, the result is the same. Is it because there are too many records in the board ? regards, liam
  18. Earlier
  19. Hello, yes, the code was running server-side. Thank you for clarifying this issue!
  20. We've updated the docs to clarify that the Event Hub is not supported under Node. Please let us know if you encountered this error in some other environment. https://ftrack-javascript-api.readthedocs.io/en/latest/handling_events.html#node-support
  21. Hi Liam, I believe this is due to amount of records you are trying to expand. can you tell me how many records you are trying to expand? Did this only begin happening recently? regards, daniel
  22. Hi everyone, When I tried to expand objects, I got this error: What's going on here please ?
  23. “Changing a global custom attribute configuration to a project specific is not allowed.” Why?
  24. Hi, I verified your code and could not get the issue you are reporting (testing on 4.7.0.current.13.277). Could you please create a ticket at support@ftrack.com and supply your ftrack details - ftrack url (and version, if onprem). Cheers /Henrik
  25. Would be keen on this too...lost count of the amount of times I've helped people log in by explaining how the user name works
  26. I'm enjoying the new review player, but I'm hoping for one existing feature from the old current player. I can't see an easy way to be able to write a note or annotate a version, then set the status of that same version. I realize it's under info, but it's more than just information, as it's an editable item that's used (at least in our workflow) on every single version. I really wish I could have it visible at all times without clicking away from the feedback thread (which we also want to see on every shot). Would it be possible to add version status to the feedback UI at the bottom? Something like this. Thanks! Mark
  27. Hello, I'm begining to deal with the Ftrack api and since my idea is to make a Next.js app, I'm using the javascript API. Following the example codes, I can create a session and do queries without issues. But now I'm trying to use the eventhub and following the example code I'm doing: const session = new Session( "https://ftrackurl:443", "FTRACKUSER", "FTRACKKEY", { autoConnectEventHub: true } ); session.eventHub.isConnected();... So I'm including the port in the server url. When I try to run the application I'm receiving the following error: TypeError: Cannot read property 'port' of undefined I also tried: session.initializing.then(function () { console.info("API session initialized successfully."); session.eventHub.connect(); session.eventHub.isConnected(); }).catch(error => console.log(error)); but I got the same error. What am I doing wrong? Thanks
  28. @aline3d you should be in now!
  1. Load more activity
  • Create New...