ENTWICKLERDOKUMENTATION

Integrationen

Bernard Review mit einer Studio-Pipeline verbinden. Tracker-Konfiguration, Playlists mit Kennungen, zurückkommende Notizen, ein per Skript erstelltes Version Board und die Namensregel.

Diese Seite richtet sich an Pipeline-Teams. Sie beschreibt, wie man ein Review aus einem Produktions-Tracker in den Player holt und wie man die Notizen mit den richtigen Kennungen wieder herausbekommt. Die erwähnten Befehle sind unter Python-API und IPC beschrieben.

Bernard Engine und hauseigene Pipelines

Bernard Engine, der Produktions-Tracker von AArts Lab, und jede hauseigene Pipeline laufen in dieser Version über drei Mechanismen: die .bpl-Playlist mit ihrem Block x_tracking, den Befehl build-matrix und den Notizen-Export. Das direkte Veröffentlichen an Bernard Engine aus dem Player (die Schaltfläche Publish to Bernard Engine) kommt bald.

Eine Playlist mit ihren Kennungen

Eine .bpl-Playlist ist eine JSON-Datei (Schema: api/playlist.schema.json). Jeder Clip kann einen Block x_tracking mit den Kennungen des Trackers tragen. Schreiben Sie ihn aus Ihrem Tool und laden Sie ihn dann mit load-playlist:

{
  "current_idx": 0,
  "playlist": [
    {
      "path": "//server/proj/SQ010/SH010/comp/SQ010_SH010_COMP_v003.%04d.exr",
      "in_frame": 1001,
      "out_frame": 1100,
      "x_tracking": {
        "shot_id": "shot_1001",
        "shot_name": "SQ010_SH010",
        "version_id": "v003",
        "task": "Compositing"
      }
    }
  ]
}

Die Felder von x_tracking: shot_id, shot_name, version_id, shotgrid_version_id (eine ganze Zahl), ftrack_id, artist, task. Der Block bleibt erhalten, wenn die Playlist gespeichert wird.

Die zurückkommenden Notizen

export-notes schreibt ohne jeden Dialog export.json und export.html in den gewünschten Ordner, mit einem JPEG pro annotiertem Bild (Schema: api/notes_payload.schema.json). Für jeden Clip: name, status (Pending, Approved oder Not Approved), note, frames (die Nummer und die Datei jedes annotierten Bildes) und, falls er beim Laden vorhanden war, den Block x_tracking unverändert. Ein Skript leitet so jede Notiz anhand ihrer Kennung an die richtige Version zurück, ohne Dateinamen zu vergleichen.

client.load_playlist("D:/review/SQ010_dailies.bpl")
# ... the review takes place ...
client.export_notes("D:/review/SQ010_dailies_notes")

Die Dateien werden im Hintergrund geschrieben: Warten Sie, bis export.json aktuell ist, bevor Sie es lesen.

Ein per Skript erstelltes Version Board

Das Version Board (Versions) füllt sich aus Dateinamen. Eine Pipeline kann es auch fertig mit build-matrix senden, ohne jede Namenskonvention. Ein Befehl pro Sequenz; ein Abteilungseintrag pro anzubietender Version (senden Sie dieselbe Abteilung zweimal mit zwei Versionen, um ihre Liste zu füllen):

{"cmd": "build-matrix", "sequence": "SQ010", "id": "seq_42",
 "shots": [
   {"name": "SH010", "id": "shot_1001", "departments": {
      "ANIM": {"version": "v002", "path": "//server/proj/SQ010/SH010/anim/SQ010_SH010_ANIM_v002.mov", "version_id": "ver_77812", "id": "task_501"},
      "LGT":  {"version": "v001", "path": "//server/proj/SQ010/SH010/lgt/SQ010_SH010_LGT_v001.mov", "version_id": "ver_77950"}}},
   {"name": "SH020", "id": "shot_1002", "departments": {
      "COMP": {"version": "v003", "path": "//server/proj/SQ010/SH020/comp/SQ010_SH020_COMP_v003.mov", "version_id": "ver_78001"}}}]}

Jeder path, der noch nicht in der Playlist ist, wird ihr hinzugefügt. get-matrix liest das Board zurück. In Python: client.build_matrix(sequence, shots, matrix_id) und client.get_matrix().

Das Rezept ist für jeden Tracker dasselbe: die Versionen einer Sequenz abfragen, sie nach Shot und nach Abteilung (dem Pipeline-Schritt) gruppieren, den Pfad des Mediums in path und die Kennung der Version in version_id eintragen.

Die Namensregel

Ohne Skript wird jeder hinzugefügte Clip nach der Regel in der Datei naming_rules.json des Profilordners gelesen (siehe Installation und IT):

{"regex": "^([A-Za-z0-9]+)_([A-Za-z0-9]+)_([A-Za-z]+)_v([0-9]+)",
 "groups": {"sequence": 1, "shot": 2, "department": 3, "version": 4}}

Das ist die Konvention [Sequence]_[Shot]_[Department]_v[Version].[ext], zum Beispiel SQ010_SH010_ANIM_v002.mov. Passen Sie den regulären Ausdruck und die Gruppennummern an die Konvention Ihres Studios an. Eine Datei, die nicht passt, landet unter DefaultSeq / Base.

Kitsu, ftrack und Flow Production Tracking

Das Fenster Tracker verbindet sich direkt mit diesen drei Trackern. Für ein Deployment lassen sich die Sites in trackers.json im Profilordner vorbereiten; diese Datei enthält nie ein Secret (ein Schlüssel, der wie ein Secret aussieht, wird beim Lesen verworfen):

{"sites": [{
  "id": "demo-kitsu", "kind": "kitsu",
  "base_url": "https://kitsu.example.test",
  "user": "reviewer@example.test",
  "proxy": "", "ca_cert_file": "",
  "path_map": [{"from": "/mnt/show/",
                "to": {"windows": "S:\\show\\", "linux": "/mnt/show/", "macos": "/Volumes/show/"}}],
  "status_map": {"approved": "done"}
}]}
  • kind: kitsu, ftrack oder flow. user: die E-Mail-Adresse bei Kitsu, der API-Benutzer bei ftrack, der Skriptname bei Flow.
  • base_url muss mit https:// beginnen (http:// nur zu localhost).
  • proxy: leer für den der Umgebung, direct für keinen. ca_cert_file: eine PEM-Datei für eine Studio-Zertifizierungsstelle.
  • path_map übersetzt die Pfade des Trackers für jedes System; status_map ordnet die Status des Players (pending, approved, not_approved) denen des Trackers zu.
  • Das Secret (Passwort, API-Schlüssel, Skriptschlüssel) stammt aus dem Anmeldedatenspeicher des Systems, gefüllt über Remember im Fenster, oder aus der Umgebungsvariablen BERNARD_TRACKER_<ID>_SECRET, wobei <ID> die Id der Site in Großbuchstaben ist, mit _ anstelle jedes Zeichens außer A-Z und 0-9: für demo-kitsu also BERNARD_TRACKER_DEMO_KITSU_SECRET. Die Variable hat Vorrang.

Aus einem Skript tun die Befehle tracker-sites, tracker-connect, tracker-projects, tracker-playlists, tracker-load-playlist, tracker-publish (mit dry_run zum Ausprobieren), tracker-download-media und tracker-cancel das, was das Fenster tut; ihre Ergebnisse kommen als Ereignisse an. Eine Anfrage, die ein Secret enthält, wird abgelehnt.

Ein aus einem Tracker geladener Clip behält außerdem in x_tracking die Art des Trackers, die Site, die Aufgabe, die Playlist, die Medienreferenz und, sobald veröffentlicht, den Fingerabdruck der gesendeten Notiz: Eine unveränderte Notiz wird nie zweimal veröffentlicht.

Weiterführend: das vollständige Handbuch, Teile 6.4 und 6.6 (Help > User Guide im Player), und die Schemas im Ordner api/.