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 :
-
À l'intérieur de la balise imeta (préféré - conforme à NIP-92) :
["imeta", "url https://...", "m video/mp4", "image https://thumbnail.jpg", ...] -
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
- Assurez-vous que la balise imeta contient le champ
image https://... - Testez la publication :
nak event -k 34236 ... wss://relay.poc.dvines.org - 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
drequise pour les événements adressables - Balise
titlerequise - Source vidéo requise (balise
imetaouurl)
- Balise
Stratégie de débogage
Lors de rejets génériques « relay policy » :
- Testez différentes sortes d'événements (Kind 0 vs kind cible) pour isoler le problème
- Vérifiez si la base de code du relais est disponible (les repos divine sont dans ~/code/divine/)
- Cherchez « reject » ou « blocked » dans le code du gestionnaire de relais
- 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