> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Référencer des médias dans votre propre bucket (BYOB) avec Weave Op

> Affichez des images et des vidéos stockées dans votre propre bucket cloud dans Weave Traces en journalisant leurs URI, sans importer les octets dans Weave.

Utilisez cette technique lorsque le contenu multimédia que vous souhaitez voir dans Weave se trouve déjà dans votre propre bucket :

* Des images issues d'un pipeline vidéo.
* Des captures d'écran d'un agent de navigateur.
* Des images qu'un modèle a enregistrées dans S3.

Au lieu de téléverser à nouveau ces octets dans Weave, vous journalisez l'URI de l'objet sous forme de `string`, et Weave affiche l'image ou la vidéo directement depuis votre bucket. Seule l'URI est envoyée à Weave ; les octets restent dans votre bucket. Journaliser une vidéo de 2 Go coûte autant que journaliser son chemin.

Cela diffère du journal de contenus multimédias avec la [Content API](/fr/weave/guides/core-types/media#contents-api), qui lit les octets et les stocke dans Weave.

<Note>
  Il s'agit d'une fonctionnalité de Weave, distincte de [BYOB de la plateforme (Secure Storage Connector)](/fr/platform/hosting/data-security/secure-storage-connector), qui prend en charge le stockage des artefacts W\&B et des runs. Les buckets de médias de référence sont configurés pour chaque équipe et nécessitent uniquement un accès en lecture.
</Note>

<div id="how-it-works">
  ## Comment cela fonctionne
</div>

Le rendu des médias de référence fonctionne en trois étapes :

1. Vous stockez un objet multimédia dans votre bucket, par exemple `s3://[YOUR-BUCKET]/frames/000123.png`.
2. Vous journalisez cet URI sous forme de chaîne de caractères n’importe où dans une trace : en entrée ou en sortie d’une op, ou comme résultat d’un outil d’agent. Le nom du champ n’a pas d’importance.
3. Lorsque vous ouvrez la trace, Weave résout l’URI en une [URL présignée](/fr/platform/hosting/data-security/presigned-urls) à durée de vie limitée et l’affiche directement dans la page. L’extension du fichier détermine le mode de rendu. Les formats d’image courants (tels que `.png`, `.jpg`, `.gif`) et les formats vidéo (tels que `.mp4`, `.mov`, `.webm`) s’affichent directement dans la page. Les autres formats s’affichent sous forme de lien de téléchargement.

Weave résout uniquement les URI qui pointent vers un bucket enregistré pour votre équipe. Les schémas pris en charge sont `s3://` et `gs://`.

<div id="prerequisites">
  ## Prérequis
</div>

* Cette fonctionnalité est prise en charge uniquement dans le [Cloud mutualisé de W\&B](/fr/platform/hosting/hosting-options/multi_tenant_cloud).
* Un compte W\&B et une [clé API](https://wandb.ai/authorize).
* Un bucket de stockage cloud que vous contrôlez (S3 ou GCS), contenant au moins un objet.
* Des autorisations d’administrateur de l’organisation. L’ajout d’un bucket de référence nécessite les mêmes autorisations que la création d’une équipe dans l’organisation.

<div id="configure-your-bucket">
  ## Configurez votre bucket
</div>

Accordez à W\&B un accès en lecture au bucket et autorisez le navigateur à récupérer les objets avec CORS.

Lorsque vous affichez une trace, W\&B génère une URL de téléchargement pré-signée de courte durée pour chaque objet référencé. Accordez au principal de l’intégration W\&B un accès en lecture au bucket afin que la génération de ces URL pré-signées fonctionne. Il s’agit d’un accès en lecture seule pour l’affichage intégré.

<Tabs>
  <Tab title="AWS S3">
    1. Appliquez une stratégie de bucket qui accorde `s3:GetObject` au principal de l’intégration W\&B. Enregistrez le contenu suivant dans `bucket-policy.json`, en remplaçant `[YOUR-BUCKET]` par le nom de votre bucket :

       ```json lines theme={null}
       {
         "Version": "2012-10-17",
         "Id": "WandBAccess",
         "Statement": [{
           "Sid": "WandbAccess",
           "Effect": "Allow",
           "Principal": {"AWS": "arn:aws:iam::725579432336:role/WandbIntegration"},
           "Action": "s3:GetObject",
           "Resource": "arn:aws:s3:::[YOUR-BUCKET]/*"
         }]
       }
       ```

       Appliquez-la ensuite à votre bucket :

       ```bash theme={null}
       aws s3api put-bucket-policy --bucket [YOUR-BUCKET] --policy file://bucket-policy.json
       ```

    2. Appliquez une configuration CORS afin que l’application puisse récupérer les objets dans le navigateur. Enregistrez le contenu suivant dans `cors.json` :

       ```json lines theme={null}
       {
         "CORSRules": [{
           "AllowedHeaders": ["*"],
           "AllowedMethods": ["GET", "HEAD"],
           "AllowedOrigins": ["https://wandb.ai"],
           "ExposeHeaders": ["ETag"],
           "MaxAgeSeconds": 3000
         }]
       }
       ```

       Appliquez-la ensuite à votre bucket :

       ```bash theme={null}
       aws s3api put-bucket-cors --bucket [YOUR-BUCKET] --cors-configuration file://cors.json
       ```

    <Note>
      Si un objet est chiffré avec une clé KMS gérée par le client, la stratégie de cette clé doit également accorder `kms:Decrypt` à `arn:aws:iam::725579432336:role/WandbIntegration`. La stratégie de bucket seule ne suffit pas.
    </Note>
  </Tab>

  <Tab title="Google Cloud Storage">
    1. Accordez au compte de service de l’intégration W\&B le rôle `roles/storage.objectViewer` sur le bucket. Remplacez `[YOUR-BUCKET]` par le nom de votre bucket :

       ```bash theme={null}
       gcloud storage buckets add-iam-policy-binding gs://[YOUR-BUCKET] \
         --member="serviceAccount:wandb-integration@wandb-production.iam.gserviceaccount.com" \
         --role="roles/storage.objectViewer"
       ```

    2. Appliquez une configuration CORS afin que l’application puisse récupérer les objets dans le navigateur. Enregistrez le contenu suivant dans `cors.json` :

       ```json lines theme={null}
       [{
         "origin": ["https://wandb.ai"],
         "method": ["GET", "HEAD"],
         "responseHeader": ["ETag"],
         "maxAgeSeconds": 3000
       }]
       ```

       Appliquez-la ensuite à votre bucket :

       ```bash theme={null}
       gcloud storage buckets update gs://[YOUR-BUCKET] --cors-file=cors.json
       ```
  </Tab>
</Tabs>

À ce stade, W\&B peut lire les objets de votre bucket, et l’interface Weave peut les récupérer dans le navigateur.

<div id="register-the-reference-bucket">
  ## Enregistrer le bucket de référence
</div>

Enregistrez le bucket dans les paramètres de l’équipe afin que Weave puisse générer des URL présignées et afficher les URI référencées.

1. Accédez à la page des paramètres de l’équipe (`https://wandb.ai/[YOUR-TEAM]/settings`).
2. Dans la section **Reference buckets**, sélectionnez **Add bucket**.
3. Sélectionnez votre fournisseur de cloud (**AWS** ou **Google Cloud**).
4. Pour le nom du bucket, saisissez uniquement `[YOUR-BUCKET]` — sans le préfixe `s3://` ou `gs://`.
5. Pour la clé de l’objet, saisissez la clé d’un objet existant dans le bucket, par exemple `photos/cat.png` (la clé de l’objet uniquement, pas une URL complète). W\&B lit cet objet pour confirmer qu’il dispose d’un accès en lecture et que CORS est correctement configuré. Cette vérification porte uniquement sur l’accès ; une fois celle-ci effectuée, la présignature fonctionne pour n’importe quel objet du bucket.
6. Si vous le souhaitez, sélectionnez **Test connection** pour valider la configuration sans l’enregistrer.
7. Sélectionnez **Add bucket** pour enregistrer.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/o9TcE0h2OeolGKJe/weave/guides/tracking/imgs/add-ref-bucket.png?fit=max&auto=format&n=o9TcE0h2OeolGKJe&q=85&s=1a02b73f79a0a0e396d32d48362d8acf" alt="Boîte de dialogue Add reference bucket dans les paramètres de l’équipe, avec des champs pour le fournisseur de cloud, le nom du bucket et la clé d’un objet existant, ainsi que les boutons Test connection et Add bucket." width="548" height="449" data-path="weave/guides/tracking/imgs/add-ref-bucket.png" />
</Frame>

<Warning>
  Tant que le bucket n’est pas enregistré, les URI référencées ne s’affichent pas. C’est l’enregistrement qui permet à Weave de présigner et d’afficher l’objet.
</Warning>

<div id="log-a-media-reference-using-weave-op-function-tracing">
  ## Journaliser une référence média avec le traçage des fonctions Weave Op
</div>

Journalisez l’URI sous forme de chaîne dans une trace. Tout champ de type chaîne dont la valeur est un URI de bucket s’affiche. Aucune annotation « aucun contenu » n’est nécessaire, car les octets restent dans votre bucket. Le Weave Op d’exemple suivant génère des légendes pour des images déjà présentes dans votre bucket et journalise chaque URI avec sa légende. Remplacez `[YOUR-TEAM]`, `[YOUR-PROJECT]` et `[YOUR-BUCKET]` par vos propres valeurs.

<Tip>
  Si vous ajoutez des médias de référence à une application agentique, consultez plutôt [Médias de référence dans les spans d’agent](/fr/weave/guides/tracking/agents-byob-references).
</Tip>

<Tabs>
  <Tab title="Python">
    ```python lines theme={null}
    import weave

    weave.init("[YOUR-TEAM]/[YOUR-PROJECT]")

    @weave.op
    def caption_image(image_uri: str) -> dict:
        caption = my_captioner(image_uri)  # Votre modèle ou appel d’API.
        # image_uri s’affiche en ligne à partir de sa valeur ; le nom du champ est arbitraire
        # et l’extension (.png ici) détermine s’il s’agit d’une image ou d’une vidéo.
        return {"image": image_uri, "caption": caption}

    caption_image("s3://[YOUR-BUCKET]/photos/cat.png")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript lines theme={null}
    import * as weave from 'weave';

    await weave.init('[YOUR-TEAM]/[YOUR-PROJECT]');

    const captionImage = weave.op(async function captionImage(imageUri: string) {
      const caption = await myCaptioner(imageUri); // Votre modèle ou appel d’API.
      // imageUri s’affiche en ligne à partir de sa valeur ; le nom du champ est arbitraire.
      return {image: imageUri, caption};
    });

    await captionImage('s3://[YOUR-BUCKET]/photos/cat.png');
    ```
  </Tab>
</Tabs>

<div id="view-the-reference-in-weave-traces">
  ## Voir la référence dans Weave Traces
</div>

Ouvrez la trace à partir du lien affiché par `weave.init()`. L’image ou la vidéo référencée s’affiche directement dans la vue **Traces**. Si Weave ne peut pas résoudre un URI, par exemple parce que l’objet est manquant ou que le bucket n’est pas enregistré, il affiche l’URI brut.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/pUxUQX3FjSUv8AVU/weave/guides/tracking/imgs/traces-byob.png?fit=max&auto=format&n=pUxUQX3FjSUv8AVU&q=85&s=8b960f82cc57ef5d8133bcd7897abd90" alt="Image référencée affichée directement dans la vue Weave Traces, résolue à partir d’un URI de bucket pointant vers un objet dans votre propre bucket cloud." width="1497" height="422" data-path="weave/guides/tracking/imgs/traces-byob.png" />
</Frame>
