divine-relay-video-requirements

Par divinevideo · divine-mobile

Corrigez les erreurs « blocked: event rejected by relay policy » lors de la publication d'événements Kind 34236 (vidéo) sur les relais divine. À utiliser quand : (1) les événements de profil Kind 0 réussissent mais Kind 34236 échoue, (2) rejet générique de la politique sans raison précise, (3) les événements vidéo fonctionnent sur d'autres relais mais échouent sur les relais divine. Le relais divine exige des miniatures pour tous les événements vidéo — plus strict que la spécification NIP-71.

npx skills add https://github.com/divinevideo/divine-mobile --skill divine-relay-video-requirements

Exigences vidéo Divine Relay

Problème

La publication d'événements Kind 34236 (vidéo de courte durée) sur les relais divine échoue avec « blocked: event rejected by relay policy » même si les événements sont conformes à la spécification NIP-71.

Contexte / Conditions déclencheurs

  • Message d'erreur : blocked: event rejected by relay policy
  • Les événements Kind 0 (profil) se publient avec succès sur le même relais
  • Les événements Kind 34236 échouent sur les relais divine (wss://relay.poc.dvines.org, wss://relay.dvines.org)
  • Les événements qui fonctionnent sur d'autres relais échouent sur les relais divine

Cause racine

Le relais divine (funnelcake) effectue une validation supplémentaire au-delà de NIP-71 :

Depuis divine-funnelcake/crates/relay/src/relay.rs:554-564 :

// divine.video requires thumbnail for all videos (stricter than NIP-71)
// Accept: thumb tag, thumbnail tag, image tag, or imeta with image field
let has_thumb = event.get_tag("thumb").is_some()
    || event.get_tag("thumbnail").is_some()
    || event.get_tag("image").is_some()
    || has_imeta_with_image(&event);

if !has_thumb {
    // Event rejected
}

Solution

Assurez-vous que les événements vidéo incluent une vignette dans l'un de ces formats :

  1. À l'intérieur de la balise imeta (préféré - conforme à NIP-92) :

    ["imeta", "url https://...", "m video/mp4", "image https://thumbnail.jpg", ...]
  2. Balise autonome :

    ["thumb", "https://thumbnail.jpg"]
    ["thumbnail", "https://thumbnail.jpg"]
    ["image", "https://thumbnail.jpg"]

Obtenir les vignettes depuis Blossom

Blossom (media.divine.video) génère automatiquement les vignettes pour les vidéos téléchargées :

  • URL de la vignette : https://media.divine.video/{video_sha256}.jpg
  • La génération est asynchrone - peut prendre quelques secondes après le téléchargement
  • Vérifier avec une requête HEAD avant d'assumer la disponibilité

Vérification

  1. Assurez-vous que la balise imeta contient le champ image https://...
  2. Testez la publication : nak event -k 34236 ... wss://relay.poc.dvines.org
  3. Vérifiez avec : nak req -k 34236 -a {pubkey} --limit 1 wss://relay.poc.dvines.org

Exemple

// Build imeta with thumbnail
const imetaParts = [
  `url ${videoUpload.url}`,
  "m video/mp4",
  `image ${videoUpload.url}.jpg`,  // Blossom thumbnail URL
  "dim 480x480",
  `x ${videoUpload.sha256}`,
  "duration 6"
];
tags.push(["imeta", ...imetaParts]);

Notes

  • Ceci est spécifique à divine - d'autres relais peuvent accepter des vidéos sans vignettes
  • Le message d'erreur générique n'indique pas quelle validation a échoué
  • Pour déboguer les rejets de relais : consultez le code source du relais pour les détails de la politique
  • Autres validations du relais divine dans le même fichier :
    • Balise d requise pour les événements adressables
    • Balise title requise
    • Source vidéo requise (balise imeta ou url)

Stratégie de débogage

Lors de rejets génériques « relay policy » :

  1. Testez différentes sortes d'événements (Kind 0 vs kind cible) pour isoler le problème
  2. Vérifiez si la base de code du relais est disponible (les repos divine sont dans ~/code/divine/)
  3. Cherchez « reject » ou « blocked » dans le code du gestionnaire de relais
  4. Recherchez des validations au-delà des exigences NIP standard

Fichiers associés

  • Validation du relais : divine-funnelcake/crates/relay/src/relay.rs
  • Seed des kinds autorisés : divine-funnelcake/database/migrations/000015_seed_allowed_kinds.up.sql
  • Configuration du relais : divine-funnelcake/crates/relay/src/config.rs

Skills similaires