Received Video objects from PeerTube are not understood #892

Open
opened 2025-03-25 16:39:10 +00:00 by Oneric · 1 comment
Owner

Forwarded from https://meta.akkoma.dev/t/errors-in-log/841

Your setup

OTP

Extra details

(unknown)

Version

3.15.2

PostgreSQL version

(unknown)

Describe the issue and provide relevant logs

It seems there’s an interop issue with PeerTube with us failing to understand the Video objects they send, specifically tag and attachment. Note Audio and Video objects are processed by a different validator than the more common Note, Article, etc.

akkoma-app  | 15:30:07.172 [info] Received invalid AP document: {:error, #Ecto.Changeset<
  action: :insert,
  errors: [
    tag: {"is invalid", [validation: :embed, type: {:array, :map}]},
    attachment: {"can't be blank", [validation: :required]}
  ],
  data: #Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator<>,
  valid?: false,
  changes: %{id: "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271", name: "Tschüss, USA: Europäische Alternativen", type: "Video", context: "https://social.zell-mbc.com/contexts/20ce7945-102a-42a2-ad19-23f4777efc25", cc: ["https://makertube.net/accounts/ct_3003_channel/followers"], to: ["https://www.w3.org/ns/activitystreams#Public"], url: "https://makertube.net/w/r82zDAKQPtDRAFhKfwUsMp", actor: "https://makertube.net/accounts/ct_3003_channel", published: "2025-03-21T17:42:07.958Z", content: "<p>=== Anzeige / Sponsorenhinweis ===  Sichere dir 4 EXTRA-Monate auf ein 2-Jahresabo über <a href=\"https://nordvpn.com/ct3003\">https://nordvpn.com/ct3003</a>. Teste NordVPN jetzt risikofrei mit der 30 Tage Geld-Zurück-Garantie. === Sponsorenhinweis Ende === ► Wie sich dieser Channel finanziert: <a href=\"https://www.youtube.com/watch?v=xWLRoMP3rLU&amp;t\">https://www.youtube.com/watch?v=xWLRoMP3rLU&amp;t</a> </p><p>Dieses Video geht an alle, die sich mal mit europäischen Alternativen zu großen US-Diensten wie Google, Meta, Microsoft oder Apple beschäftigen wollen.</p><p>► Alle Links aus dem Video:</p><ol><li><p>E-Mail-Anbieter: • Tutanota: <a href=\"https://tutanota.com\">https://tutanota.com</a> • ProtonMail: <a href=\"https://protonmail.com\">https://protonmail.com</a> • Posteo: <a href=\"https://posteo.de\">https://posteo.de</a> • Mailbox.org: <a href=\"https://mailbox.org\">https://mailbox.org</a> • GMX: <a href=\"https://www.gmx.net\">https://www.gmx.net</a> • Web.de: <a href=\"https://web.de\">https://web.de</a></p></li><li><p>Suchmaschinen: • Ecosia: <a href=\"https://www.ecosia.org\">https://www.ecosia.org</a> • Qwant: <a href=\"https://www.qwant.com\">https://www.qwant.com</a> • Startpage: <a href=\"https://www.startpage.com\">https://www.startpage.com</a> • Good Search: <a href=\"https://www.good-search.org\">https://www.good-search.org</a></p></li><li><p>Karten- und Navigations-Apps: • Here WeGo: <a href=\"https://wego.here.com\">https://wego.here.com</a> • Sygic GPS Navigation: <a href=\"https://www.sygic.com\">https://www.sygic.com</a> • TomTom GO Navigation: <a href=\"https://www.tomtom.com\">https://www.tomtom.com</a> • OsmAnd: <a href=\"https://osmand.net\">https://osmand.net</a> • Organic Maps: <a href=\"https://organicmaps.app\">https://organicmaps.app</a></p></li><li><p>Messenger: • Threema: <a href=\"https://threema.ch\">https://threema.ch</a> • Olvid: <a href=\"https://olvid.io\">https://olvid.io</a> • ginlo: <a href=\"https://ginlo.net\">https://ginlo.net</a> • SKRED: <a href=\"https://skred.mobi\">https://skred.mobi</a></p></li><li><p>Kollaborations- und Office-Lösungen: • Nextcloud: <a href=\"https://nextcloud.com\">https://nextcloud.com</a> • kSuite von Infomaniak: <a href=\"https://www.infomaniak.com\">https://www.infomaniak.com</a> • CryptPad: <a href=\"https://cryptpad.fr\">https://cryptpad.fr</a> • Jitsi Meet: <a href=\"https://meet.jit.si\">https://meet.jit.si</a> • OpenTalk: <a href=\"https://www.opentalk.eu\">https://www.opentalk.eu</a> • Stackfield: <a href=\"https://www.stackfield.com\">https://www.stackfield.com</a></p></li><li><p>Soziale Netzwerke: • Mastodon: <a href=\"https://joinmastodon.org\">https://joinmastodon.org</a> • Pixelfed: <a href=\"https://pixelfed.org\">https://pixelfed.org</a> • BeReal: <a href=\"https://bere.al\">https://bere.al</a> • Xing: <a href=\"https://www.xing.com\">https://www.xing.com</a></p></li></ol><p>► DER 3003-HYPE-NEWSLETTER: <a href=\"https://ct.de/hype\">https://ct.de/hype</a></p><p>► Alle Newsletter von Heise: <a href=\"https://www.heise.de/newsletter/\">https://www.heise.de/newsletter/</a></p><p>► Hier geht es zum c’t-WhatsApp-Kanal: <a href=\"https://whatsapp.com/channel/0029VaCU\">https://whatsapp.com/channel/0029VaCU</a>…</p><p>► Keno auf Instagram: <a href=\"https://www.instagram.com/elektroelvis/\">https://www.instagram.com/elektroelvis/</a></p><p>► c’t Magazin: <a href=\"http://ct.de\">http://ct.de</a>  ► und TOTAL CRAZY auf Papier! Überall wo es Zeitschriften gibt!</p><p>► Credits: Konzept &amp; Redaktion: Jan-Keno Janssen, Lukas Rumpler Schnitt: Sahin Erengil Host: Jan-Keno Janssen</p><p>#DigitaleSouveränität #EuropäischeAlternativen #Datenschutz</p>", updated: "2025-03-25T14:59:05.095Z", attributedTo: "https://makertube.net/accounts/ct_3003_channel"},
  ...
>}

And here’s the failing object as shown when fetched (note though, while uncommon some implementations, like bridgy, show objects differently on fetch and proactive delivery)

Full object JSON (long)
{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "RsaSignature2017": "https://w3id.org/security#RsaSignature2017"
    },
    {
      "pt": "https://joinpeertube.org/ns#",
      "sc": "http://schema.org/",
      "Hashtag": "as:Hashtag",
      "category": "sc:category",
      "licence": "sc:license",
      "subtitleLanguage": "sc:subtitleLanguage",
      "automaticallyGenerated": "pt:automaticallyGenerated",
      "sensitive": "as:sensitive",
      "language": "sc:inLanguage",
      "identifier": "sc:identifier",
      "isLiveBroadcast": "sc:isLiveBroadcast",
      "liveSaveReplay": {
        "@type": "sc:Boolean",
        "@id": "pt:liveSaveReplay"
      },
      "permanentLive": {
        "@type": "sc:Boolean",
        "@id": "pt:permanentLive"
      },
      "latencyMode": {
        "@type": "sc:Number",
        "@id": "pt:latencyMode"
      },
      "Infohash": "pt:Infohash",
      "tileWidth": {
        "@type": "sc:Number",
        "@id": "pt:tileWidth"
      },
      "tileHeight": {
        "@type": "sc:Number",
        "@id": "pt:tileHeight"
      },
      "tileDuration": {
        "@type": "sc:Number",
        "@id": "pt:tileDuration"
      },
      "aspectRatio": {
        "@type": "sc:Float",
        "@id": "pt:aspectRatio"
      },
      "uuid": {
        "@type": "sc:identifier",
        "@id": "pt:uuid"
      },
      "originallyPublishedAt": "sc:datePublished",
      "uploadDate": "sc:uploadDate",
      "hasParts": "sc:hasParts",
      "views": {
        "@type": "sc:Number",
        "@id": "pt:views"
      },
      "state": {
        "@type": "sc:Number",
        "@id": "pt:state"
      },
      "size": {
        "@type": "sc:Number",
        "@id": "pt:size"
      },
      "fps": {
        "@type": "sc:Number",
        "@id": "pt:fps"
      },
      "commentsEnabled": {
        "@type": "sc:Boolean",
        "@id": "pt:commentsEnabled"
      },
      "canReply": "pt:canReply",
      "commentsPolicy": {
        "@type": "sc:Number",
        "@id": "pt:commentsPolicy"
      },
      "downloadEnabled": {
        "@type": "sc:Boolean",
        "@id": "pt:downloadEnabled"
      },
      "waitTranscoding": {
        "@type": "sc:Boolean",
        "@id": "pt:waitTranscoding"
      },
      "support": {
        "@type": "sc:Text",
        "@id": "pt:support"
      },
      "likes": {
        "@id": "as:likes",
        "@type": "@id"
      },
      "dislikes": {
        "@id": "as:dislikes",
        "@type": "@id"
      },
      "shares": {
        "@id": "as:shares",
        "@type": "@id"
      },
      "comments": {
        "@id": "as:comments",
        "@type": "@id"
      },
      "PropertyValue": "sc:PropertyValue",
      "value": "sc:value"
    },
    {
      "ptlc": "urn:peertube-plugin-livechat",
      "peertubeLiveChat": {
        "@id": "ptlc:peertubeLiveChat",
        "@type": "@json"
      }
    }
  ],
  "to": [
    "https://www.w3.org/ns/activitystreams#Public"
  ],
  "cc": [
    "https://makertube.net/accounts/ct_3003_channel/followers"
  ],
  "type": "Video",
  "id": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271",
  "name": "Tschüss, USA: Europäische Alternativen",
  "duration": "PT1302S",
  "uuid": "cb6fa58d-4981-4a4b-9a28-8af37d40f271",
  "category": {
    "identifier": "15",
    "name": "Science & Technology"
  },
  "licence": {
    "identifier": "3",
    "name": "Attribution - No Derivatives"
  },
  "language": {
    "identifier": "de",
    "name": "German"
  },
  "views": 3228,
  "sensitive": false,
  "waitTranscoding": true,
  "state": 1,
  "commentsEnabled": true,
  "canReply": null,
  "commentsPolicy": 1,
  "downloadEnabled": true,
  "published": "2025-03-21T17:42:07.958Z",
  "originallyPublishedAt": null,
  "updated": "2025-03-25T16:03:29.897Z",
  "tag": [
    {
      "type": "Hashtag",
      "name": "alternative"
    },
    {
      "type": "Hashtag",
      "name": "europa"
    },
    {
      "type": "Hashtag",
      "name": "fediverse"
    },
    {
      "type": "Hashtag",
      "name": "mastodon"
    },
    {
      "type": "Hashtag",
      "name": "technik"
    }
  ],
  "mediaType": "text/markdown",
  "content": "=== Anzeige / Sponsorenhinweis === \r\nSichere dir 4 EXTRA-Monate auf ein 2-Jahresabo über https://nordvpn.com/ct3003. Teste NordVPN jetzt risikofrei mit der 30 Tage Geld-Zurück-Garantie.\r\n=== Sponsorenhinweis Ende ===\r\n► Wie sich dieser Channel finanziert: https://www.youtube.com/watch?v=xWLRoMP3rLU&t \r\n\r\nDieses Video geht an alle, die sich mal mit europäischen Alternativen zu großen US-Diensten wie Google, Meta, Microsoft oder Apple beschäftigen wollen.\r\n\r\n► Alle Links aus dem Video:\r\n\r\n1. E-Mail-Anbieter:\r\n • Tutanota: https://tutanota.com\r\n • ProtonMail: https://protonmail.com\r\n • Posteo: https://posteo.de\r\n • Mailbox.org: https://mailbox.org\r\n • GMX: https://www.gmx.net\r\n • Web.de: https://web.de\r\n\r\n2. Suchmaschinen:\r\n • Ecosia: https://www.ecosia.org\r\n • Qwant: https://www.qwant.com\r\n • Startpage: https://www.startpage.com\r\n • Good Search: https://www.good-search.org\r\n\r\n3. Karten- und Navigations-Apps:\r\n • Here WeGo: https://wego.here.com\r\n • Sygic GPS Navigation: https://www.sygic.com\r\n • TomTom GO Navigation: https://www.tomtom.com\r\n • OsmAnd: https://osmand.net\r\n • Organic Maps: https://organicmaps.app\r\n\r\n4. Messenger:\r\n • Threema: https://threema.ch\r\n • Olvid: https://olvid.io\r\n • ginlo: https://ginlo.net\r\n • SKRED: https://skred.mobi\r\n\r\n5. Kollaborations- und Office-Lösungen:\r\n • Nextcloud: https://nextcloud.com\r\n • kSuite von Infomaniak: https://www.infomaniak.com\r\n • CryptPad: https://cryptpad.fr\r\n • Jitsi Meet: https://meet.jit.si\r\n • OpenTalk: https://www.opentalk.eu\r\n • Stackfield: https://www.stackfield.com\r\n\r\n6. Soziale Netzwerke:\r\n • Mastodon: https://joinmastodon.org\r\n • Pixelfed: https://pixelfed.org\r\n • BeReal: https://bere.al\r\n • Xing: https://www.xing.com\r\n\r\n\r\n► DER 3003-HYPE-NEWSLETTER: https://ct.de/hype\r\n\r\n\r\n► Alle Newsletter von Heise: https://www.heise.de/newsletter/\r\n\r\n► Hier geht es zum c't-WhatsApp-Kanal: https://whatsapp.com/channel/0029VaCU...\r\n\r\n► Keno auf Instagram: https://www.instagram.com/elektroelvis/\r\n\r\n► c't Magazin: http://ct.de \r\n► und TOTAL CRAZY auf Papier! Überall wo es Zeitschriften gibt!\r\n\r\n► Credits:\r\nKonzept & Redaktion: Jan-Keno Janssen, Lukas Rumpler\r\nSchnitt: Sahin Erengil\r\nHost: Jan-Keno Janssen\r\n\r\n#DigitaleSouveränität #EuropäischeAlternativen #Datenschutz",
  "support": null,
  "subtitleLanguage": [
    {
      "identifier": "de",
      "name": "German",
      "automaticallyGenerated": true,
      "url": "https://makertube01.fsn1.your-objectstorage.com/captions/ae1b7daf-3467-40a2-89f9-fba22e231636-de.vtt"
    }
  ],
  "icon": [
    {
      "type": "Image",
      "url": "https://makertube.net/lazy-static/thumbnails/95bc2e07-86f0-49f9-9999-c95be88f6955.jpg",
      "mediaType": "image/jpeg",
      "width": 280,
      "height": 157
    },
    {
      "type": "Image",
      "url": "https://makertube.net/lazy-static/previews/f7877a65-5d09-47d5-a72d-958a0127201b.jpg",
      "mediaType": "image/jpeg",
      "width": 850,
      "height": 480
    }
  ],
  "preview": [
    {
      "type": "Image",
      "rel": [
        "storyboard"
      ],
      "url": [
        {
          "mediaType": "image/jpeg",
          "href": "https://makertube.net/lazy-static/storyboards/bb588c28-b563-4934-8d6e-acb2cd94dd30.jpg",
          "width": 2112,
          "height": 1188,
          "tileWidth": 192,
          "tileHeight": 108,
          "tileDuration": "PT11S"
        }
      ]
    }
  ],
  "aspectRatio": 1.7778,
  "url": [
    {
      "type": "Link",
      "mediaType": "text/html",
      "href": "https://makertube.net/w/r82zDAKQPtDRAFhKfwUsMp"
    },
    {
      "type": "Link",
      "mediaType": "text/html",
      "href": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271"
    },
    {
      "type": "Link",
      "mediaType": "application/x-mpegURL",
      "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/6f83b29a-f4cf-4f13-aef4-1a1baaea9e62-master.m3u8",
      "tag": [
        {
          "type": "Infohash",
          "name": "454a41594257332b6b714c347a30514a6379492f"
        },
        {
          "type": "Infohash",
          "name": "596876656858307a71437a504430794950724c46"
        },
        {
          "type": "Infohash",
          "name": "794f576d64646c6d77415853506d4d65314a6b59"
        },
        {
          "type": "Link",
          "name": "sha256",
          "mediaType": "application/json",
          "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/5bdd728b-bab2-4b4e-bd68-ea76f14586fb-segments-sha256.json"
        },
        {
          "type": "Link",
          "mediaType": "video/mp4",
          "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/cc579609-4c8b-4137-b0d3-d29c90bb561f-2160-fragmented.mp4",
          "height": 2160,
          "width": 3840,
          "size": 1019354447,
          "fps": 30,
          "attachment": [
            {
              "type": "PropertyValue",
              "name": "ffprobe_codec_type",
              "value": "audio"
            },
            {
              "type": "PropertyValue",
              "name": "ffprobe_codec_type",
              "value": "video"
            },
            {
              "type": "PropertyValue",
              "name": "peertube_format_flag",
              "value": "fragmented"
            }
          ]
        },
        {
          "type": "Link",
          "rel": [
            "metadata",
            "video/mp4"
          ],
          "mediaType": "application/json",
          "href": "https://makertube.net/api/v1/videos/cb6fa58d-4981-4a4b-9a28-8af37d40f271/metadata/814500",
          "height": 2160,
          "width": 3840,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "application/x-bittorrent",
          "href": "https://makertube.net/lazy-static/torrents/7ce3ba0d-ea49-40d2-acd8-dad3b88c6291-2160-hls.torrent",
          "height": 2160,
          "width": 3840,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "application/x-bittorrent;x-scheme-handler/magnet",
          "href": "magnet:?xs=https%3A%2F%2Fmakertube.net%2Flazy-static%2Ftorrents%2F7ce3ba0d-ea49-40d2-acd8-dad3b88c6291-2160-hls.torrent&xt=urn:btih:603d37e77472a3387eb5dcdd0d0c87c9c7f7b938&dn=Tsch%C3%BCss%2C+USA%3A+Europ%C3%A4ische+Alternativen&tr=https%3A%2F%2Fmakertube.net%2Ftracker%2Fannounce&tr=wss%3A%2F%2Fmakertube.net%3A443%2Ftracker%2Fsocket&ws=https%3A%2F%2Fmakertube01.fsn1.your-objectstorage.com%2Fstreaming-playlists%2Fhls%2Fcb6fa58d-4981-4a4b-9a28-8af37d40f271%2Fcc579609-4c8b-4137-b0d3-d29c90bb561f-2160-fragmented.mp4",
          "height": 2160,
          "width": 3840,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "video/mp4",
          "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/1dc1848e-a9ab-4d6e-83c6-a9e5c52c0c76-1080-fragmented.mp4",
          "height": 1080,
          "width": 1920,
          "size": 302550633,
          "fps": 30,
          "attachment": [
            {
              "type": "PropertyValue",
              "name": "ffprobe_codec_type",
              "value": "audio"
            },
            {
              "type": "PropertyValue",
              "name": "ffprobe_codec_type",
              "value": "video"
            },
            {
              "type": "PropertyValue",
              "name": "peertube_format_flag",
              "value": "fragmented"
            }
          ]
        },
        {
          "type": "Link",
          "rel": [
            "metadata",
            "video/mp4"
          ],
          "mediaType": "application/json",
          "href": "https://makertube.net/api/v1/videos/cb6fa58d-4981-4a4b-9a28-8af37d40f271/metadata/814491",
          "height": 1080,
          "width": 1920,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "application/x-bittorrent",
          "href": "https://makertube.net/lazy-static/torrents/f938f351-2d85-4ac0-a724-23cf8e8fc91b-1080-hls.torrent",
          "height": 1080,
          "width": 1920,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "application/x-bittorrent;x-scheme-handler/magnet",
          "href": "magnet:?xs=https%3A%2F%2Fmakertube.net%2Flazy-static%2Ftorrents%2Ff938f351-2d85-4ac0-a724-23cf8e8fc91b-1080-hls.torrent&xt=urn:btih:684a0801f71f3ccde216aae53367ad7f7b9698d1&dn=Tsch%C3%BCss%2C+USA%3A+Europ%C3%A4ische+Alternativen&tr=https%3A%2F%2Fmakertube.net%2Ftracker%2Fannounce&tr=wss%3A%2F%2Fmakertube.net%3A443%2Ftracker%2Fsocket&ws=https%3A%2F%2Fmakertube01.fsn1.your-objectstorage.com%2Fstreaming-playlists%2Fhls%2Fcb6fa58d-4981-4a4b-9a28-8af37d40f271%2F1dc1848e-a9ab-4d6e-83c6-a9e5c52c0c76-1080-fragmented.mp4",
          "height": 1080,
          "width": 1920,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "video/mp4",
          "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/0c19a9c7-58a2-4a47-94dc-02f2b3d03639-720-fragmented.mp4",
          "height": 720,
          "width": 1280,
          "size": 147464828,
          "fps": 30,
          "attachment": [
            {
              "type": "PropertyValue",
              "name": "ffprobe_codec_type",
              "value": "audio"
            },
            {
              "type": "PropertyValue",
              "name": "ffprobe_codec_type",
              "value": "video"
            },
            {
              "type": "PropertyValue",
              "name": "peertube_format_flag",
              "value": "fragmented"
            }
          ]
        },
        {
          "type": "Link",
          "rel": [
            "metadata",
            "video/mp4"
          ],
          "mediaType": "application/json",
          "href": "https://makertube.net/api/v1/videos/cb6fa58d-4981-4a4b-9a28-8af37d40f271/metadata/814485",
          "height": 720,
          "width": 1280,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "application/x-bittorrent",
          "href": "https://makertube.net/lazy-static/torrents/40e37097-98ac-4c3c-8e01-b052718dd316-720-hls.torrent",
          "height": 720,
          "width": 1280,
          "fps": 30
        },
        {
          "type": "Link",
          "mediaType": "application/x-bittorrent;x-scheme-handler/magnet",
          "href": "magnet:?xs=https%3A%2F%2Fmakertube.net%2Flazy-static%2Ftorrents%2F40e37097-98ac-4c3c-8e01-b052718dd316-720-hls.torrent&xt=urn:btih:be7f961d620731254e636016920f57ffc9ce6b2e&dn=Tsch%C3%BCss%2C+USA%3A+Europ%C3%A4ische+Alternativen&tr=https%3A%2F%2Fmakertube.net%2Ftracker%2Fannounce&tr=wss%3A%2F%2Fmakertube.net%3A443%2Ftracker%2Fsocket&ws=https%3A%2F%2Fmakertube01.fsn1.your-objectstorage.com%2Fstreaming-playlists%2Fhls%2Fcb6fa58d-4981-4a4b-9a28-8af37d40f271%2F0c19a9c7-58a2-4a47-94dc-02f2b3d03639-720-fragmented.mp4",
          "height": 720,
          "width": 1280,
          "fps": 30
        }
      ]
    },
    {
      "type": "Link",
      "name": "tracker-http",
      "rel": [
        "tracker",
        "http"
      ],
      "href": "https://makertube.net/tracker/announce"
    },
    {
      "type": "Link",
      "name": "tracker-websocket",
      "rel": [
        "tracker",
        "websocket"
      ],
      "href": "wss://makertube.net:443/tracker/socket"
    }
  ],
  "likes": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/likes",
  "dislikes": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/dislikes",
  "shares": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/announces",
  "comments": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/comments",
  "hasParts": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/chapters",
  "attributedTo": [
    {
      "type": "Person",
      "id": "https://makertube.net/accounts/ct_3003_channel"
    },
    {
      "type": "Group",
      "id": "https://makertube.net/video-channels/ct_3003_und_heise"
    }
  ],
  "isLiveBroadcast": false,
  "liveSaveReplay": null,
  "permanentLive": null,
  "latencyMode": null
}

Severity

I can manage

Have you searched for this issue?

  • I have double-checked and have not found this issue mentioned anywhere.
**Forwarded from https://meta.akkoma.dev/t/errors-in-log/841** ### Your setup OTP ### Extra details (unknown) ### Version 3.15.2 ### PostgreSQL version (unknown) ### Describe the issue and provide relevant logs It seems there’s an interop issue with PeerTube with us failing to understand the `Video` objects they send, specifically `tag` and `attachment`. Note `Audio` and `Video` objects are processed by a different validator than the more common `Note`, `Article`, etc. ``` akkoma-app | 15:30:07.172 [info] Received invalid AP document: {:error, #Ecto.Changeset< action: :insert, errors: [ tag: {"is invalid", [validation: :embed, type: {:array, :map}]}, attachment: {"can't be blank", [validation: :required]} ], data: #Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator<>, valid?: false, changes: %{id: "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271", name: "Tschüss, USA: Europäische Alternativen", type: "Video", context: "https://social.zell-mbc.com/contexts/20ce7945-102a-42a2-ad19-23f4777efc25", cc: ["https://makertube.net/accounts/ct_3003_channel/followers"], to: ["https://www.w3.org/ns/activitystreams#Public"], url: "https://makertube.net/w/r82zDAKQPtDRAFhKfwUsMp", actor: "https://makertube.net/accounts/ct_3003_channel", published: "2025-03-21T17:42:07.958Z", content: "<p>=== Anzeige / Sponsorenhinweis === Sichere dir 4 EXTRA-Monate auf ein 2-Jahresabo über <a href=\"https://nordvpn.com/ct3003\">https://nordvpn.com/ct3003</a>. Teste NordVPN jetzt risikofrei mit der 30 Tage Geld-Zurück-Garantie. === Sponsorenhinweis Ende === ► Wie sich dieser Channel finanziert: <a href=\"https://www.youtube.com/watch?v=xWLRoMP3rLU&amp;t\">https://www.youtube.com/watch?v=xWLRoMP3rLU&amp;t</a> </p><p>Dieses Video geht an alle, die sich mal mit europäischen Alternativen zu großen US-Diensten wie Google, Meta, Microsoft oder Apple beschäftigen wollen.</p><p>► Alle Links aus dem Video:</p><ol><li><p>E-Mail-Anbieter: • Tutanota: <a href=\"https://tutanota.com\">https://tutanota.com</a> • ProtonMail: <a href=\"https://protonmail.com\">https://protonmail.com</a> • Posteo: <a href=\"https://posteo.de\">https://posteo.de</a> • Mailbox.org: <a href=\"https://mailbox.org\">https://mailbox.org</a> • GMX: <a href=\"https://www.gmx.net\">https://www.gmx.net</a> • Web.de: <a href=\"https://web.de\">https://web.de</a></p></li><li><p>Suchmaschinen: • Ecosia: <a href=\"https://www.ecosia.org\">https://www.ecosia.org</a> • Qwant: <a href=\"https://www.qwant.com\">https://www.qwant.com</a> • Startpage: <a href=\"https://www.startpage.com\">https://www.startpage.com</a> • Good Search: <a href=\"https://www.good-search.org\">https://www.good-search.org</a></p></li><li><p>Karten- und Navigations-Apps: • Here WeGo: <a href=\"https://wego.here.com\">https://wego.here.com</a> • Sygic GPS Navigation: <a href=\"https://www.sygic.com\">https://www.sygic.com</a> • TomTom GO Navigation: <a href=\"https://www.tomtom.com\">https://www.tomtom.com</a> • OsmAnd: <a href=\"https://osmand.net\">https://osmand.net</a> • Organic Maps: <a href=\"https://organicmaps.app\">https://organicmaps.app</a></p></li><li><p>Messenger: • Threema: <a href=\"https://threema.ch\">https://threema.ch</a> • Olvid: <a href=\"https://olvid.io\">https://olvid.io</a> • ginlo: <a href=\"https://ginlo.net\">https://ginlo.net</a> • SKRED: <a href=\"https://skred.mobi\">https://skred.mobi</a></p></li><li><p>Kollaborations- und Office-Lösungen: • Nextcloud: <a href=\"https://nextcloud.com\">https://nextcloud.com</a> • kSuite von Infomaniak: <a href=\"https://www.infomaniak.com\">https://www.infomaniak.com</a> • CryptPad: <a href=\"https://cryptpad.fr\">https://cryptpad.fr</a> • Jitsi Meet: <a href=\"https://meet.jit.si\">https://meet.jit.si</a> • OpenTalk: <a href=\"https://www.opentalk.eu\">https://www.opentalk.eu</a> • Stackfield: <a href=\"https://www.stackfield.com\">https://www.stackfield.com</a></p></li><li><p>Soziale Netzwerke: • Mastodon: <a href=\"https://joinmastodon.org\">https://joinmastodon.org</a> • Pixelfed: <a href=\"https://pixelfed.org\">https://pixelfed.org</a> • BeReal: <a href=\"https://bere.al\">https://bere.al</a> • Xing: <a href=\"https://www.xing.com\">https://www.xing.com</a></p></li></ol><p>► DER 3003-HYPE-NEWSLETTER: <a href=\"https://ct.de/hype\">https://ct.de/hype</a></p><p>► Alle Newsletter von Heise: <a href=\"https://www.heise.de/newsletter/\">https://www.heise.de/newsletter/</a></p><p>► Hier geht es zum c’t-WhatsApp-Kanal: <a href=\"https://whatsapp.com/channel/0029VaCU\">https://whatsapp.com/channel/0029VaCU</a>…</p><p>► Keno auf Instagram: <a href=\"https://www.instagram.com/elektroelvis/\">https://www.instagram.com/elektroelvis/</a></p><p>► c’t Magazin: <a href=\"http://ct.de\">http://ct.de</a> ► und TOTAL CRAZY auf Papier! Überall wo es Zeitschriften gibt!</p><p>► Credits: Konzept &amp; Redaktion: Jan-Keno Janssen, Lukas Rumpler Schnitt: Sahin Erengil Host: Jan-Keno Janssen</p><p>#DigitaleSouveränität #EuropäischeAlternativen #Datenschutz</p>", updated: "2025-03-25T14:59:05.095Z", attributedTo: "https://makertube.net/accounts/ct_3003_channel"}, ... >} ``` And here’s the failing object as shown when fetched *(note though, while uncommon some implementations, like bridgy, show objects differently on fetch and proactive delivery)* <details> <summary>Full object JSON (long)</summary> ```json { "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { "RsaSignature2017": "https://w3id.org/security#RsaSignature2017" }, { "pt": "https://joinpeertube.org/ns#", "sc": "http://schema.org/", "Hashtag": "as:Hashtag", "category": "sc:category", "licence": "sc:license", "subtitleLanguage": "sc:subtitleLanguage", "automaticallyGenerated": "pt:automaticallyGenerated", "sensitive": "as:sensitive", "language": "sc:inLanguage", "identifier": "sc:identifier", "isLiveBroadcast": "sc:isLiveBroadcast", "liveSaveReplay": { "@type": "sc:Boolean", "@id": "pt:liveSaveReplay" }, "permanentLive": { "@type": "sc:Boolean", "@id": "pt:permanentLive" }, "latencyMode": { "@type": "sc:Number", "@id": "pt:latencyMode" }, "Infohash": "pt:Infohash", "tileWidth": { "@type": "sc:Number", "@id": "pt:tileWidth" }, "tileHeight": { "@type": "sc:Number", "@id": "pt:tileHeight" }, "tileDuration": { "@type": "sc:Number", "@id": "pt:tileDuration" }, "aspectRatio": { "@type": "sc:Float", "@id": "pt:aspectRatio" }, "uuid": { "@type": "sc:identifier", "@id": "pt:uuid" }, "originallyPublishedAt": "sc:datePublished", "uploadDate": "sc:uploadDate", "hasParts": "sc:hasParts", "views": { "@type": "sc:Number", "@id": "pt:views" }, "state": { "@type": "sc:Number", "@id": "pt:state" }, "size": { "@type": "sc:Number", "@id": "pt:size" }, "fps": { "@type": "sc:Number", "@id": "pt:fps" }, "commentsEnabled": { "@type": "sc:Boolean", "@id": "pt:commentsEnabled" }, "canReply": "pt:canReply", "commentsPolicy": { "@type": "sc:Number", "@id": "pt:commentsPolicy" }, "downloadEnabled": { "@type": "sc:Boolean", "@id": "pt:downloadEnabled" }, "waitTranscoding": { "@type": "sc:Boolean", "@id": "pt:waitTranscoding" }, "support": { "@type": "sc:Text", "@id": "pt:support" }, "likes": { "@id": "as:likes", "@type": "@id" }, "dislikes": { "@id": "as:dislikes", "@type": "@id" }, "shares": { "@id": "as:shares", "@type": "@id" }, "comments": { "@id": "as:comments", "@type": "@id" }, "PropertyValue": "sc:PropertyValue", "value": "sc:value" }, { "ptlc": "urn:peertube-plugin-livechat", "peertubeLiveChat": { "@id": "ptlc:peertubeLiveChat", "@type": "@json" } } ], "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://makertube.net/accounts/ct_3003_channel/followers" ], "type": "Video", "id": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271", "name": "Tschüss, USA: Europäische Alternativen", "duration": "PT1302S", "uuid": "cb6fa58d-4981-4a4b-9a28-8af37d40f271", "category": { "identifier": "15", "name": "Science & Technology" }, "licence": { "identifier": "3", "name": "Attribution - No Derivatives" }, "language": { "identifier": "de", "name": "German" }, "views": 3228, "sensitive": false, "waitTranscoding": true, "state": 1, "commentsEnabled": true, "canReply": null, "commentsPolicy": 1, "downloadEnabled": true, "published": "2025-03-21T17:42:07.958Z", "originallyPublishedAt": null, "updated": "2025-03-25T16:03:29.897Z", "tag": [ { "type": "Hashtag", "name": "alternative" }, { "type": "Hashtag", "name": "europa" }, { "type": "Hashtag", "name": "fediverse" }, { "type": "Hashtag", "name": "mastodon" }, { "type": "Hashtag", "name": "technik" } ], "mediaType": "text/markdown", "content": "=== Anzeige / Sponsorenhinweis === \r\nSichere dir 4 EXTRA-Monate auf ein 2-Jahresabo über https://nordvpn.com/ct3003. Teste NordVPN jetzt risikofrei mit der 30 Tage Geld-Zurück-Garantie.\r\n=== Sponsorenhinweis Ende ===\r\n► Wie sich dieser Channel finanziert: https://www.youtube.com/watch?v=xWLRoMP3rLU&t \r\n\r\nDieses Video geht an alle, die sich mal mit europäischen Alternativen zu großen US-Diensten wie Google, Meta, Microsoft oder Apple beschäftigen wollen.\r\n\r\n► Alle Links aus dem Video:\r\n\r\n1. E-Mail-Anbieter:\r\n • Tutanota: https://tutanota.com\r\n • ProtonMail: https://protonmail.com\r\n • Posteo: https://posteo.de\r\n • Mailbox.org: https://mailbox.org\r\n • GMX: https://www.gmx.net\r\n • Web.de: https://web.de\r\n\r\n2. Suchmaschinen:\r\n • Ecosia: https://www.ecosia.org\r\n • Qwant: https://www.qwant.com\r\n • Startpage: https://www.startpage.com\r\n • Good Search: https://www.good-search.org\r\n\r\n3. Karten- und Navigations-Apps:\r\n • Here WeGo: https://wego.here.com\r\n • Sygic GPS Navigation: https://www.sygic.com\r\n • TomTom GO Navigation: https://www.tomtom.com\r\n • OsmAnd: https://osmand.net\r\n • Organic Maps: https://organicmaps.app\r\n\r\n4. Messenger:\r\n • Threema: https://threema.ch\r\n • Olvid: https://olvid.io\r\n • ginlo: https://ginlo.net\r\n • SKRED: https://skred.mobi\r\n\r\n5. Kollaborations- und Office-Lösungen:\r\n • Nextcloud: https://nextcloud.com\r\n • kSuite von Infomaniak: https://www.infomaniak.com\r\n • CryptPad: https://cryptpad.fr\r\n • Jitsi Meet: https://meet.jit.si\r\n • OpenTalk: https://www.opentalk.eu\r\n • Stackfield: https://www.stackfield.com\r\n\r\n6. Soziale Netzwerke:\r\n • Mastodon: https://joinmastodon.org\r\n • Pixelfed: https://pixelfed.org\r\n • BeReal: https://bere.al\r\n • Xing: https://www.xing.com\r\n\r\n\r\n► DER 3003-HYPE-NEWSLETTER: https://ct.de/hype\r\n\r\n\r\n► Alle Newsletter von Heise: https://www.heise.de/newsletter/\r\n\r\n► Hier geht es zum c't-WhatsApp-Kanal: https://whatsapp.com/channel/0029VaCU...\r\n\r\n► Keno auf Instagram: https://www.instagram.com/elektroelvis/\r\n\r\n► c't Magazin: http://ct.de \r\n► und TOTAL CRAZY auf Papier! Überall wo es Zeitschriften gibt!\r\n\r\n► Credits:\r\nKonzept & Redaktion: Jan-Keno Janssen, Lukas Rumpler\r\nSchnitt: Sahin Erengil\r\nHost: Jan-Keno Janssen\r\n\r\n#DigitaleSouveränität #EuropäischeAlternativen #Datenschutz", "support": null, "subtitleLanguage": [ { "identifier": "de", "name": "German", "automaticallyGenerated": true, "url": "https://makertube01.fsn1.your-objectstorage.com/captions/ae1b7daf-3467-40a2-89f9-fba22e231636-de.vtt" } ], "icon": [ { "type": "Image", "url": "https://makertube.net/lazy-static/thumbnails/95bc2e07-86f0-49f9-9999-c95be88f6955.jpg", "mediaType": "image/jpeg", "width": 280, "height": 157 }, { "type": "Image", "url": "https://makertube.net/lazy-static/previews/f7877a65-5d09-47d5-a72d-958a0127201b.jpg", "mediaType": "image/jpeg", "width": 850, "height": 480 } ], "preview": [ { "type": "Image", "rel": [ "storyboard" ], "url": [ { "mediaType": "image/jpeg", "href": "https://makertube.net/lazy-static/storyboards/bb588c28-b563-4934-8d6e-acb2cd94dd30.jpg", "width": 2112, "height": 1188, "tileWidth": 192, "tileHeight": 108, "tileDuration": "PT11S" } ] } ], "aspectRatio": 1.7778, "url": [ { "type": "Link", "mediaType": "text/html", "href": "https://makertube.net/w/r82zDAKQPtDRAFhKfwUsMp" }, { "type": "Link", "mediaType": "text/html", "href": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271" }, { "type": "Link", "mediaType": "application/x-mpegURL", "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/6f83b29a-f4cf-4f13-aef4-1a1baaea9e62-master.m3u8", "tag": [ { "type": "Infohash", "name": "454a41594257332b6b714c347a30514a6379492f" }, { "type": "Infohash", "name": "596876656858307a71437a504430794950724c46" }, { "type": "Infohash", "name": "794f576d64646c6d77415853506d4d65314a6b59" }, { "type": "Link", "name": "sha256", "mediaType": "application/json", "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/5bdd728b-bab2-4b4e-bd68-ea76f14586fb-segments-sha256.json" }, { "type": "Link", "mediaType": "video/mp4", "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/cc579609-4c8b-4137-b0d3-d29c90bb561f-2160-fragmented.mp4", "height": 2160, "width": 3840, "size": 1019354447, "fps": 30, "attachment": [ { "type": "PropertyValue", "name": "ffprobe_codec_type", "value": "audio" }, { "type": "PropertyValue", "name": "ffprobe_codec_type", "value": "video" }, { "type": "PropertyValue", "name": "peertube_format_flag", "value": "fragmented" } ] }, { "type": "Link", "rel": [ "metadata", "video/mp4" ], "mediaType": "application/json", "href": "https://makertube.net/api/v1/videos/cb6fa58d-4981-4a4b-9a28-8af37d40f271/metadata/814500", "height": 2160, "width": 3840, "fps": 30 }, { "type": "Link", "mediaType": "application/x-bittorrent", "href": "https://makertube.net/lazy-static/torrents/7ce3ba0d-ea49-40d2-acd8-dad3b88c6291-2160-hls.torrent", "height": 2160, "width": 3840, "fps": 30 }, { "type": "Link", "mediaType": "application/x-bittorrent;x-scheme-handler/magnet", "href": "magnet:?xs=https%3A%2F%2Fmakertube.net%2Flazy-static%2Ftorrents%2F7ce3ba0d-ea49-40d2-acd8-dad3b88c6291-2160-hls.torrent&xt=urn:btih:603d37e77472a3387eb5dcdd0d0c87c9c7f7b938&dn=Tsch%C3%BCss%2C+USA%3A+Europ%C3%A4ische+Alternativen&tr=https%3A%2F%2Fmakertube.net%2Ftracker%2Fannounce&tr=wss%3A%2F%2Fmakertube.net%3A443%2Ftracker%2Fsocket&ws=https%3A%2F%2Fmakertube01.fsn1.your-objectstorage.com%2Fstreaming-playlists%2Fhls%2Fcb6fa58d-4981-4a4b-9a28-8af37d40f271%2Fcc579609-4c8b-4137-b0d3-d29c90bb561f-2160-fragmented.mp4", "height": 2160, "width": 3840, "fps": 30 }, { "type": "Link", "mediaType": "video/mp4", "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/1dc1848e-a9ab-4d6e-83c6-a9e5c52c0c76-1080-fragmented.mp4", "height": 1080, "width": 1920, "size": 302550633, "fps": 30, "attachment": [ { "type": "PropertyValue", "name": "ffprobe_codec_type", "value": "audio" }, { "type": "PropertyValue", "name": "ffprobe_codec_type", "value": "video" }, { "type": "PropertyValue", "name": "peertube_format_flag", "value": "fragmented" } ] }, { "type": "Link", "rel": [ "metadata", "video/mp4" ], "mediaType": "application/json", "href": "https://makertube.net/api/v1/videos/cb6fa58d-4981-4a4b-9a28-8af37d40f271/metadata/814491", "height": 1080, "width": 1920, "fps": 30 }, { "type": "Link", "mediaType": "application/x-bittorrent", "href": "https://makertube.net/lazy-static/torrents/f938f351-2d85-4ac0-a724-23cf8e8fc91b-1080-hls.torrent", "height": 1080, "width": 1920, "fps": 30 }, { "type": "Link", "mediaType": "application/x-bittorrent;x-scheme-handler/magnet", "href": "magnet:?xs=https%3A%2F%2Fmakertube.net%2Flazy-static%2Ftorrents%2Ff938f351-2d85-4ac0-a724-23cf8e8fc91b-1080-hls.torrent&xt=urn:btih:684a0801f71f3ccde216aae53367ad7f7b9698d1&dn=Tsch%C3%BCss%2C+USA%3A+Europ%C3%A4ische+Alternativen&tr=https%3A%2F%2Fmakertube.net%2Ftracker%2Fannounce&tr=wss%3A%2F%2Fmakertube.net%3A443%2Ftracker%2Fsocket&ws=https%3A%2F%2Fmakertube01.fsn1.your-objectstorage.com%2Fstreaming-playlists%2Fhls%2Fcb6fa58d-4981-4a4b-9a28-8af37d40f271%2F1dc1848e-a9ab-4d6e-83c6-a9e5c52c0c76-1080-fragmented.mp4", "height": 1080, "width": 1920, "fps": 30 }, { "type": "Link", "mediaType": "video/mp4", "href": "https://makertube01.fsn1.your-objectstorage.com/streaming-playlists/hls/cb6fa58d-4981-4a4b-9a28-8af37d40f271/0c19a9c7-58a2-4a47-94dc-02f2b3d03639-720-fragmented.mp4", "height": 720, "width": 1280, "size": 147464828, "fps": 30, "attachment": [ { "type": "PropertyValue", "name": "ffprobe_codec_type", "value": "audio" }, { "type": "PropertyValue", "name": "ffprobe_codec_type", "value": "video" }, { "type": "PropertyValue", "name": "peertube_format_flag", "value": "fragmented" } ] }, { "type": "Link", "rel": [ "metadata", "video/mp4" ], "mediaType": "application/json", "href": "https://makertube.net/api/v1/videos/cb6fa58d-4981-4a4b-9a28-8af37d40f271/metadata/814485", "height": 720, "width": 1280, "fps": 30 }, { "type": "Link", "mediaType": "application/x-bittorrent", "href": "https://makertube.net/lazy-static/torrents/40e37097-98ac-4c3c-8e01-b052718dd316-720-hls.torrent", "height": 720, "width": 1280, "fps": 30 }, { "type": "Link", "mediaType": "application/x-bittorrent;x-scheme-handler/magnet", "href": "magnet:?xs=https%3A%2F%2Fmakertube.net%2Flazy-static%2Ftorrents%2F40e37097-98ac-4c3c-8e01-b052718dd316-720-hls.torrent&xt=urn:btih:be7f961d620731254e636016920f57ffc9ce6b2e&dn=Tsch%C3%BCss%2C+USA%3A+Europ%C3%A4ische+Alternativen&tr=https%3A%2F%2Fmakertube.net%2Ftracker%2Fannounce&tr=wss%3A%2F%2Fmakertube.net%3A443%2Ftracker%2Fsocket&ws=https%3A%2F%2Fmakertube01.fsn1.your-objectstorage.com%2Fstreaming-playlists%2Fhls%2Fcb6fa58d-4981-4a4b-9a28-8af37d40f271%2F0c19a9c7-58a2-4a47-94dc-02f2b3d03639-720-fragmented.mp4", "height": 720, "width": 1280, "fps": 30 } ] }, { "type": "Link", "name": "tracker-http", "rel": [ "tracker", "http" ], "href": "https://makertube.net/tracker/announce" }, { "type": "Link", "name": "tracker-websocket", "rel": [ "tracker", "websocket" ], "href": "wss://makertube.net:443/tracker/socket" } ], "likes": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/likes", "dislikes": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/dislikes", "shares": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/announces", "comments": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/comments", "hasParts": "https://makertube.net/videos/watch/cb6fa58d-4981-4a4b-9a28-8af37d40f271/chapters", "attributedTo": [ { "type": "Person", "id": "https://makertube.net/accounts/ct_3003_channel" }, { "type": "Group", "id": "https://makertube.net/video-channels/ct_3003_und_heise" } ], "isLiveBroadcast": false, "liveSaveReplay": null, "permanentLive": null, "latencyMode": null } ``` </details> ### Severity I can manage ### Have you searched for this issue? - [x] I have double-checked and have not found this issue mentioned anywhere.

I met the same problem with tag field in the Question type objects and I took some time investigating and fixed it. Just a disclaimer that I have zero experience with Elixir so I might be wrong with my vocabulary.

Starting from the error message:

tag: {"is invalid", [validation: :embed, type: {:array, :map}]}

Basically, it means that the tag field doesn't pass the validation as an embedded schema of the containing object, which, in OP's case, AudioVideoValidator and in my case, QuestionValidator. In more details, when the validator is looking at the tag field, it expects it to be an array of maps.

If you check the original object json by accessing it through the url in the id, it indeed satisfies the type requirement. However, if dumping the object from the objects table in the database, there are additional string-typed elements in the tag array, which come from:

# Insert copy of hashtags as strings for the non-hashtag table indexing
tag = (object["tag"] || []) ++ Object.hashtags(%Object{data: object})
object = Map.put(object, "tag", tag)

In the general note validator, there is a fix for this:

defp fix_tag(%{"tag" => tag} = data) when is_list(tag) do
Map.put(data, "tag", Enum.filter(tag, &is_map/1))
end
defp fix_tag(%{"tag" => tag} = data) when is_map(tag), do: Map.put(data, "tag", [tag])
defp fix_tag(data), do: Map.drop(data, ["tag"])

This filters out the string-typed elements when reading the tags from the db and just keeps the maps. And we lack this logic in other special object validators.

As a test, I copied the fix_tag methods into QuestionValidator and the problem is solved. This is not the cleanest solution though. I believe we should move the fix into the common_fixes.ex. Maybe not only the tag fix, but also other fixes in the article_note_page_validator.ex.

I met the same problem with `tag` field in the `Question` type objects and I took some time investigating and fixed it. Just a disclaimer that I have zero experience with Elixir so I might be wrong with my vocabulary. Starting from the error message: > tag: {"is invalid", [validation: :embed, type: {:array, :map}]} Basically, it means that the `tag` field doesn't pass the validation as an embedded schema of the containing object, which, in OP's case, `AudioVideoValidator` and in my case, `QuestionValidator`. In more details, when the validator is looking at the `tag` field, it expects it to be an array of maps. If you check the original object json by accessing it through the url in the id, it indeed satisfies the type requirement. However, if dumping the object from the objects table in the database, there are additional string-typed elements in the tag array, which come from: https://akkoma.dev/AkkomaGang/akkoma/src/commit/3791b695f486908c3ea0705c0ece5694eb2ce281/lib/pleroma/web/activity_pub/object_validator.ex#L122-L124 In the general note validator, there is a fix for this: https://akkoma.dev/AkkomaGang/akkoma/src/commit/3791b695f486908c3ea0705c0ece5694eb2ce281/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex#L65-L70 This filters out the string-typed elements when reading the tags from the db and just keeps the maps. And we lack this logic in other special object validators. As a test, I copied the `fix_tag` methods into `QuestionValidator` and the problem is solved. This is not the cleanest solution though. I believe we should move the fix into the common_fixes.ex. Maybe not only the tag fix, but also other fixes in the article_note_page_validator.ex.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AkkomaGang/akkoma#892
No description provided.