Bernard Engine · Moteur de production · Animation et VFX · Depuis 2015

Toute la production, en direct.Bernard tient les comptes. Vous faites les images.

Ici, personne ne coche « prêt à démarrer ». L'état de chaque tâche se calcule à partir du workflow : quand l'étape d'avant est finie, la suivante s'ouvre, les scripts se lancent, les bonnes personnes sont prévenues.

● Bientôt open source · tout le code
Let's prod with style : un homme barbu à lunettes, costume orange des années 70 et cravate à carreaux, devant un ordinateur d'époque. Bernard Production Engine.
LET'S PROD WITH STYLE · LE T-SHIRT EXISTE
Spreadsheet Multi : une ligne par plan, un groupe de colonnes par étape (Layout, Animation, Compositing) avec l'état et l'artiste de chaque tâche
Spreadsheet Multi · une ligne par plan, une colonne par étapeVersion 2.1 · Images (CC) Blender Foundation | studio.blender.org
Bientôt

Bernard Engine devient open source. Tout le code.

Ce sera Bernard 3.0 : la version open source, installée chez vous, et la version hébergée par AArts Lab.

Le code sera publié : vous pourrez installer Bernard sur vos serveurs, le lire, le modifier, l'adapter à votre studio. Ou nous laisser l'héberger, le sauvegarder et le mettre à jour, et ne penser qu'à la production.

  • Chez vousInstallé sur vos serveurs, gratuitement. Vos données ne sortent pas du studio.
  • Chez nousUn environnement par studio, sauvegardé et mis à jour par AArts Lab. Un prix par studio, pas par tête.
  • Avec vousPlugins, scripts et API Python marchent déjà aujourd'hui ; avec le code ouvert, la communauté construit la suite avec nous.
Film d'entreprise n° 2 · « Le code source »Version française · 0 min 24

MoniqueGérard, le code de Bernard va être publié.

GérardTout le code, Monique ?

MoniqueTout le code.

GérardMême la moustache ?

MoniqueMême la moustache, Gérard.

Qui est Bernard ?

« The key is located in the graph workflow structure, not in the states multiplicity. »

— Bernard, séance de brainstorming, 21 mars 2015

Bernard porte des lunettes, une moustache, et connaît chaque plan du studio par son nom. Ce n'est pas un tableau de suivi de plus : c'est un moteur, centré sur le studio plutôt que sur un projet. Il range tout le studio dans un seul arbre (projets, équipes, postes, modèles), fait avancer les tâches, lance les scripts, copie les fichiers et prévient les bonnes personnes.

Une application de bureauWindows en priorité, macOS et Linux. Fonctionne aussi sous Citrix.
En directCe qu'un collègue modifie apparaît aussitôt dans toutes les vues ouvertes.
Vos fichiers restent chez vousDisques, partages, SFTP : ils ne passent jamais par le service Bernard.
Relié à vos logicielsNeuf logiciels de création dialoguent avec Bernard par des plugins.
Film d'entreprise n° 1 · « Présentation de Bernard »Version française · 0 min 18

BernardBonjour. Je suis Bernard. Je suis un moteur de production.

Jean-PierreEt ça mange quoi, un moteur de production, Bernard ?

BernardDes plans, Jean-Pierre. Beaucoup de plans.

Jean-Pierre regarde la caméra. Il ne sait pas quoi faire de cette information.

L'équipe Bernard en costumes des années 70 dans un atelier, l'un assis sur un tabouret avec un Minitel sur les genoux
L'équipe Bernard, séminaire annuelArchives · reconstitution

01 · Le workflow

Le graphe décide. Pas les étiquettes.

Chaque plan a son workflow : un graphe de tâches reliées, regroupées en étapes (les compounds). Bernard n'a que sept états. L'artiste décide de commencer, de faire une pause, de finir ; tout le reste (qui peut commencer, qui doit attendre, ce qui repart en arrière) se déduit du graphe, calculé par le serveur pour tout le monde en même temps.

D'habitude

L'état d'une tâche est une étiquette que quelqu'un pense à changer. La liste des statuts s'allonge à chaque production, et le tableau dit ce qu'on lui a dit.

Avec Bernard

L'état se calcule : une tâche ne peut commencer que si ce qui la précède est fini. Le tableau dit où en est vraiment la production, et un poste ne peut pas forcer un état que le graphe refuse.

Des bannettes étiquetées En consultation, En commande, En fabrication, Devis en attente
D'habitude : les étiquettes
Un homme en cravate déplace une fiche sur un planning mural à fiches
D'habitude : le planning
Une employée au téléphone derrière un bureau enseveli sous les dossiers et les papiers
D'habitude : « je te rappelle »Archives · reconstitution
ÉtatsWaitingReadyWIPPauseDoneFailed
Types de tâchesTâcheScriptValidation

Règle 1

« Prête » ne se coche pas : elle se calcule.

Une tâche passe Ready toute seule quand tout ce qui la précède est Done. Ici, Blocking s'est ouvert tout seul dès que Layout et la mise à jour du casting ont été finis. L'animateur a été prévenu.

Waiting→ sources finies →Ready

Règle 2

La retake fait domino.

Un verdict Not Approved en revue rouvre la tâche terminée, et tout ce qui la suit repasse Waiting, même ce qui était fini. Approved fait avancer d'une étape, jamais plus.

Polish · Done→ retake →Ready· Validation LeadWaiting

Règle 3

Un script est une tâche comme les autres.

Une tâche Script (un contrôle de scène, une mise à jour du casting, un ingest) se lance d'elle-même quand elle passe Ready, sur le poste désigné. Code de sortie 0 : Done, et la suite s'enchaîne. Sinon : Failed, avec son journal.

Ready→ lancé seul →WIP→DoneouFailed

Règle 4

Changez le modèle, pas 800 plans.

Ajoutez une étape au workflow du modèle : elle arrive sur tous ses plans, avec pause et reprise. Là où le travail d'après a déjà commencé, elle naît Aborted : aucun plan fini ne repart en arrière.

Waitinglà où rien n'a commencé · ailleursAborted
Film d'entreprise n° 3 · « La retake »Version française · 0 min 31

MoniqueGérard, j'ai refusé le polish du plan 30.

GérardTrès bien, Monique. La validation du lead est déjà repassée en attente.

MoniqueDéjà ?

GérardC'est le graphe, Monique. Le graphe.

Gérard hoche la tête avec assurance. Gérard ne sait pas ce qu'est un graphe.

Et aussi : les Triggers (« quand l'état passe à Done, lance cette action »), les Events programmés (une fois, chaque heure, jour ou semaine), et l'API Python pour tout le reste.

02 · Pour chacun

Un seul Bernard, quatre métiers.

Production

Savoir où on en est

Spreadsheet Multi, Gantt et Workload, temps passé réel contre budget (Time Delta), export des temps. L'équipe du projet est assignée automatiquement, par département et par rôle.

Leads et superviseurs

Valider, renvoyer

Tâches de validation, instructions à cocher avant Done, notes et retakes depuis la revue : le graphe suit vos verdicts.

Artistes

Ouvrir, travailler, publier

Ses tâches, ses consignes, le bon fichier ouvert dans son logiciel, Save & Increment dans les plugins, et le temps qui se compte tout seul.

TD pipeline

Tout automatiser

Tâches script, Triggers, Events, actions, expressions de chemins et API Python : le pipeline se branche sur le graphe. Modèles, workflows et tâches se créent aussi par commandes Python, prêts à être pilotés par une IA.

03 · Suivre

Tout le studio dans un seul arbre. Et chacun y trouve sa vue.

Projets, séquences, plans, assets, tâches : chaque objet porte ses propriétés, et chaque profil a la vue qui lui sert. Les presets d'écran peuvent être imposés par rôle.

Spreadsheet

Spreadsheet · l'état et l'artiste de chaque tâche

Le tableur qui suit

Tri, filtres par colonne (et filtre inversé), filtrage côté serveur pour les gros projets, vignettes, édition en masse, copie vers Excel.

Spreadsheet Multi

Spreadsheet Multi · une ligne par plan, une colonne par étape

Une ligne par plan

Un groupe de colonnes par étape ou par département, avec la tâche en cours de chacune.

Properties

Property View · la tâche Animation du plan SH010

Tout sur un objet

Notes, fichiers, historique, assignations, instructions, actions : en onglets, au même endroit.

Nodal View

Nodal View · le workflow d'un plan, étape par étape

Le workflow sous les yeux

Le graphe de chaque plan, ses étapes et l'état de chaque tâche, en direct.

Notifications

Réglages · chacun choisit comment être prévenu

Les bonnes personnes, prévenues

Dans Bernard ou par e-mail en récapitulatif, au choix de chacun, type par type.

Rôles

Des droits fins

Création, états, workflows, temps, fichiers, réglages : chaque rôle voit et fait ce qu'il doit.

Planning View

Gantt et charge

Le Gantt en haut, la charge de chacun (Workload) en bas, sur la même échelle de temps ; plusieurs plannings côte à côte.

Path Edit

Path Edit · les chemins du plan SH020, une erreur signalée avant d'écrire

Les chemins, pour l'IT

Le chemin de chaque fichier, calculé par expression, par système et par site ; les erreurs d'interprétation signalées avant d'écrire.

04 · Fichiers et sites

Les bons fichiers, au bon endroit. Sur chaque site.

Les chemins sont calculés à partir de vos règles de nommage, avec une variation par système et par site. Bernard copie et déplace les fichiers entre disques, partages et serveurs SFTP, et garde la trace de chaque opération.

  • Path Edit et expressions : coloration, autocomplétion et contrôle des noms.
  • Versions : ajout, incrément, fichiers rattachés à chaque objet.
  • Copies entre sites par rclone, débit réseau plafonné, journal des opérations.
  • Ingest des livraisons, import depuis des dossiers ou des tableaux.
  • Présence sur le disque surveillée en direct.
Path Edit sur le plan SH020 : les chemins calculés pour Windows, l'animation, le layout, et une expression mal écrite signalée en rouge avant d'écrire quoi que ce soit
Path Edit · le plan SH020, sur WindowsBernard 2.1
Bernard Review en mode sombre : un rush RED en comparaison A/B avec le volet, la playlist à gauche, l'inspecteur couleur à droite, la timeline en bas
Bernard Review · A/B sur un rush RED R3DImages courtesy of RED Digital Cinema

05 · Revoir Inclus · gratuit

Bernard Review est inclus. Et il ne coûte rien.

Le lecteur de revue Bernard Review s'installe avec Bernard, gratuitement, et il est open source lui aussi. EXR multicouches, RAW de caméra, A/B, annotations : on revoit, on note, et la revue fait avancer le graphe. Avec Bernard (et lui seul : pas avec les autres trackers), le récapitulatif montre avant de publier l'état que prendra chaque tâche : approuvée, elle avance ; refusée, elle repart à l'artiste et le domino suit.

  • Notes et corrections rattachées à un fichier et à une version.
  • Instructions à cocher, importables depuis un tableau Excel.
  • Playlists dans l'arborescence, ou temporaires sur le poste.
  • Revue à distance avec des invités dans le navigateur : en option, sur bernardreview.com.
Récapitulatif avant publication d'une revue : trois plans, une correction et deux approbations, et l'état que prendra chaque tâche
Publish the review · l'état que prendra chaque tâcheImages (CC) Blender Foundation | studio.blender.org

06 · Temps et planning

Le temps passé se compte tout seul. Les feuilles de temps, c'était avant.

Une tâche en WIP compte le temps de ses assignés ; une seule tâche en cours par personne, la précédente se met en pause. Inactivité, fermeture, déconnexion : la tâche passe en Pause et le compteur s'arrête à l'heure réelle.

Planning

Gantt et charge

Plusieurs plannings côte à côte, la charge de travail de chacun (Workload), puis « Validate your plan ».

Working Time

Présences et absences

Types de jours, horaires, absences : le calendrier du studio.

Activity

History · qui a fait quoi sur la tâche, minute par minute

Qui a fait quoi

Sur la période choisie, chaque action de chaque utilisateur : création, modification, suppression, restauration, avec la nouvelle valeur.

Budget

Spreadsheet · Time Delta, le temps passé contre le budget

L'écart, en un coup d'œil

Time Delta dans le tableur, export des temps pour la paie ou la compta.

Film d'entreprise n° 5 · « La feuille de temps »Version française · 0 min 27

SylvieRoger, combien de temps avez-vous passé sur le plan 12 ?

RogerJe l'ignore, Sylvie.

SylvieMoi, je le sais : sept heures trente.

RogerComment le savez-vous ?

SylvieJe ne le sais pas, Roger. C'est Bernard qui le sait.

Un homme barbu en costume à son bureau, derrière un terminal beige et des piles de dossiers
Roger, en train de ne pas remplir sa feuille de tempsArchives · reconstitution

En production depuis 2015

Dix ans de production. Et même une banque.

Bernard tourne depuis dix ans dans des studios d'animation, des studios d'effets visuels… et dans une banque. Personne ne sait très bien ce qu'il y fait. Mais les tâches avancent.

Où l'on croise Bernard

10 ans

  • des studios d'animation
  • des studios d'effets visuels
  • une banque (Bernard n'a pas posé de questions)

Thomas Lhomme · CG Supervisor, Milk VFX

« Bernard Engine me permet de créer des workflows très complexes en quelques clics, avec des automatisations puissantes qui auraient demandé une grosse équipe de développement avec d'autres outils de suivi de production. »

Traduit de l'anglais

Soal Givord · Head of Pipeline, In The Box

« Nous utilisons Bernard depuis plusieurs mois : c'est une solution robuste et structurante pour la gestion du studio et le suivi de projet. Vivement les nouvelles fonctionnalités ! »

Traduit de l'anglais

07 · Intégrations

Bernard parle à vos logiciels. Et à vos scripts.

Les plugins s'installent depuis Settings › Plugins Manager. L'artiste ouvre le bon fichier depuis sa tâche, Bernard lui propose de la passer en WIP ; il publie sa version, et le graphe suit.

MayaNukeBlenderHoudini 3DEqualizer3ds MaxAfter EffectsAnimate TVPaintBernard ReviewAPI Python

QUALITAY : un script qui vérifie votre comp avant tout le monde

Une tâche script de Bernard se lance toute seule quand elle devient Ready. Celle-ci retrouve le plan, sa dernière comp et sa plage d'images, compte les images vraiment présentes sur le disque, et laisse une note sur le plan s'il en manque. Code de sortie 0 : Done, le workflow continue ; sinon Failed, avec le journal.

Sur le plan, la note dit ce qui manque : 87 images au lieu de 96, par exemple.

"""QUALITAY: a Script task that checks a shot's comp render before the workflow moves on."""
import os
import sys

# Bernard sets BERNARDPATH at install time: it is how a script finds the API.
sys.path.append(os.path.join(os.environ["BERNARDPATH"], "Plugins", "Python"))
from Bernard import CallBernard
from Bernard.Static import ClassName

# Task Command (an expression):  python qualitay.py -id <id>
task_id = sys.argv[sys.argv.index("-id") + 1]
bernard = CallBernard()  # talks to the Bernard client running on this machine


def not_qualitay(shot_id, why):
    """Leave a note on the shot, then exit 1: the task goes Failed and the Log tells why."""
    note_id = bernard.CreateNode(className=ClassName.note, parentID=shot_id)
    bernard.SetPropertyValue(nodeID=note_id, propName="Text", value=f"Not QUALITAY: {why}")
    print(f"QUALITAY: NOPE - {why}")
    sys.exit(1)


shot_id = bernard.GetItemID(nodeID=task_id)  # the shot this task belongs to
shot = bernard.GetPropertyValue(nodeID=shot_id, propName="Name")  # e.g. "SH030"
first = bernard.GetPropertyValue(nodeID=shot_id, propName="Start Frame")
last = bernard.GetPropertyValue(nodeID=shot_id, propName="End Frame")
if first is None or last is None:
    not_qualitay(shot_id, f"{shot} has no frame range, nobody can be right")

# Latest comp render = the "*comp*" file with the highest version
comps = bernard.FindNodeIDs(nameFilter="*comp*", classNames=[ClassName.file], parentIDs=[shot_id])
if not comps:
    not_qualitay(shot_id, f"no comp render on {shot}, did it go on holiday?")
latest = max(comps, key=lambda f: bernard.GetPropertyValue(nodeID=f, propName="Version"))

# One path per frame of the sequence: count the ones really on disk
found = sum(os.path.isfile(p) for p in bernard.GetFileSequencePaths(nodeID=latest))
if found != last - first + 1:
    not_qualitay(shot_id, f"{found} frames instead of {last - first + 1} on {shot}")
print(f"QUALITAY: OK - {shot}, {found} frames, all present")

Référence de l'API : bernardengineapi.readthedocs.io

08 · Déploiement et sécurité

Chez nous, ou bientôt chez vous. Vos fichiers ne bougent pas.

  • Service hébergé par AArts Lab, un environnement par studio.
  • Communications chiffrées entre les postes et le service.
  • Postes autorisés par un administrateur, avec la liste de leurs adresses MAC et de leurs adresses IP.
  • Sessions : déverrouillage, fermeture par un administrateur avec la raison affichée.
  • Citrix et bureau à distance : partages en lecture seule, transferts bridés.
FinBernard Engine · AArts Lab
Un Minitel dont l'écran affiche 3615 BERNARDJouer au jeu« Bernard sauve la prod »Le jeu de Bernard Engine · gratuit, dans le navigateur

Bernard vous remercie de votre attention.

Il retourne à ses plans.

Aucun Gérard n'a été maltraité pendant le tournage de ce site.