Skip to content

Maxlo

Maxlo is a hybrid local/cloud storage and syncing service.

Slingshot integrates fully with its backend API, so the Maxlo client does not need to be installed on the Slingshot worker.

Maxlo mounts its storage as a local volume on computers running the client. In order for Slingshot to know and use the correct paths in Shotgrid, we map the local mount directory to the internal Maxlo volume id in the Maxlo configuration.

You can get the volume id from the url of the Maxlo web app, 631 in this example:

Maxlo App Volumes

Maxlo Volumes

Service Configuration

services:
  maxlo:
    session_key: your_session_key # (1)!
    mount_points: # (2)!
      /Volumes/slingshotdev: 631 # (3)!
  1. The API Session key. Currently, this must be obatined manually from the API, but in the future you'll probably be able to generate this from within the organization's Maxlo dashboard.
  2. A mapping of local mount points to Maxlo volume_ids
  3. This tells Slingshot to assume any file path that starts with the path /Volumes/slingshotdev actually belongs to the Maxlo volume_id 631

Ingest Pipelines

Even though Maxlo paths look like local paths (e.g. /Volumes/slingshotdev/SHOTS), they're actually remote cloud paths. As such, to copy to and from Maxlo storage you'll use the remote copy module.

To get files into Maxlo in the first place, you'll need download them to a temp directory, then remote copy them from local to a configured Maxlo volume:

pipelines:
  default:
    actions:
      - module: download # (1)!
        description: Download files to temp
        operation: download
        overwrite_existing_files: true
        set_local_path: true # (2)!
        paths:
          ALL: TEMP # (3)!
      - module: remote_copy # (4)!
        description: Copy from temp to Maxlo
        service: maxlo # (5)!
        copy_from: local # (6)!
        set_remote_path: true # (7)!
        paths:
          shot: /Volumes/slingshotdev/SHOTS/$episode/$name
          frame: /Volumes/slingshotdev/SHOTS/$episode/$name/$parent_folders
          asset: /Volumes/slingshotdev/ASSETS/$asset_type/$name
        overwrite_existing_files: true
      - module: remote_copy
        description: copy from maxlo to maxlo
        service: maxlo
        copy_from: remote # (8)!
        set_remote_path: false # (9)!
        paths:
          shot: /Volumes/slingshotdev/to_editorial/$package_name
        overwrite_existing_files: true
      - module: add_to_shotgrid
        file_types:
          shot:
            set_path_to_movie: remote # (10)!
            sg_link_to_movie_field: remote
            ...
  1. First, download the files (from Aspera, etc).
  2. Set the item's local_path so we know where it resides.
  3. These can be either paths to local storage, or the TEMP directory.
  4. Then we can remote_copy items to a Maxlo volume, which will upload them via the Maxlo API.
  5. Setting the service tells Slingshot that the destination path is on Maxlo.
  6. We want to copy from the saved local_path we set above, which is the TEMP directory in this case.
  7. Set the item's remote_path to the path on Maxlo.
  8. Since the files are already in Maxlo now, this time we copy from the saved remote_path we set above.
  9. In this case, we don't want to overwrite the previous remote_path since the to_editorial folder is not the path we want to save and add to Shotgrid.
  10. Use the saved remote_path to store in Shotgrid path_to_movie or path_to_frames. The local_path is still pointing to our TEMP directory in this case which is not what we want.