From 7afd1049d98a82aa7754f80de80d97dd686cf40e Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:46:53 -0500 Subject: Update and rename 44.md to 71.md Changing to NIP-71 --- 71.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 71.md (limited to '71.md') diff --git a/71.md b/71.md new file mode 100644 index 0000000..39d6cc8 --- /dev/null +++ b/71.md @@ -0,0 +1,100 @@ +NIP-71 +====== + +Video Events +--------------- + +`draft` `optional` + +This specification defines video events representing a dedicated post of externally hosted content. These video events are _parameterized replaceable_ and deletable per [NIP-09](09.md). The content of a video event is the stringified JSON of a `kind 1063` File metadata event as described in [NIP-94](94.md). + +Unlike a `kind 1` event with a video attached, Video Events are meant to contain all additional metadata concerning the subject media and to be surfaced in video-specific clients rather than general micro-blogging clients. The thought is for events of this kind to be referenced in a Netflix, YouTube, or TikTok like nostr client where the video itself is at the center of the experience. + +## Video Events + +There are two types of video events represented by different kinds: horizontal and vertical video events. This is meant to allow clients to cater to each as the viewing experience for horizontal (landscape) videos is often different than that of vertical (portrait) videos (Stories, Reels, Shorts, etc). + +#### Format + +The format uses a parameterized replaceable event kind `34235` for horizontal videos and `34236` for vertical videos. + +The `.content` of these events is the stringified JSON of a `kind 1063` file metadata event. + +The list of tags are as follows: +* `d` (required) universally unique identifier (UUID). Generated by the client creating the video event. +* `e` (required, repeated) reference tag to kind 1063 file metadata event being posted, optional relay information for the file metadata event, optional quality value (low|medium|high) +* `title` (required) title of the video +* `summary` (optional) summary/description of the video (same as content) +* `url` (optional) a default link to the video data +* `text-track` (optional, repeated) link to WebVTT file for video, type of supplementary information (captions/subtitles/chapters/metadata), optional language code +* `thumb` (optional) url of thumbnail with same aspect ratio +* `content-warning` (optional) warning about content of NSFW video +* `t` (optional, repeated) hashtag to categorize video +* `p` (optional, repeated) 32-bytes hex pubkey of a participant in the video, optional recommended relay URL +* `r` (optional, repeated) references / links to web pages + +```json +{ + "id": <32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>, + "pubkey": <32-bytes lowercase hex-encoded public key of the event creator>, + "created_at": , + "kind": 34235 | 34236, + "content": "", + "tags": [ + ["d", ""], + ["e", "", "", ""], + + ["title", ""], + ["summary", "<summary of video>"], + ["thumb", "<thumbnail image for video>"], + + // Video Data + ["url", "<optional recommended url>"] + ["text-track", "<url>", "<text track type>", "<optional language>"], + ["content-warning", "<reason>"], + + // Participants + ["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>"], + ["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>"], + + // Hashtags + ["t", "<tag>"], + ["t", "<tag>"], + + // Reference links + ["r", "<url>"], + ["r", "<url>"] + ] +} +``` + +## Video View + +A video event view is a response to a video event to track a user's view or progress viewing the video. + +### Format + +The format uses a parameterized replaceable event kind `34237`. + +The `.content` of these events is optional and could be a free-form note that acts like a bookmark for the user. + +The list of tags are as follows: +* `a` (required) reference tag to kind `34235` or `34236` video event being viewed +* `d` (required) same as `a` reference tag value +* `viewed` (optional, repeated) timestamp of the user's start time in `HH:MM:SS.sss`, timestamp of the user's end time in `HH:MM:SS.sss` + + +```json +{ + "id": <32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>, + "pubkey": <32-bytes lowercase hex-encoded public key of the event creator>, + "created_at": <Unix timestamp in seconds>, + "kind": 34237, + "content": "<note>", + "tags": [ + ["a", "<34235 | 34236>:<video event author pubkey>:<d-identifier of video event>", "<optional relay url>"], + ["d", "<34235 | 34236>:<video event author pubkey>:<d-identifier of video event>"], + ["viewed", <start>, <end>], + ] +} +``` -- cgit v1.2.3 From c84d40f4a6dc39b1d420cdbaf75882ec0b78d478 Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:19:57 -0500 Subject: Update 71.md Co-authored-by: Pablo Fernandez <pfer@me.com> --- 71.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '71.md') diff --git a/71.md b/71.md index 39d6cc8..a18f277 100644 --- a/71.md +++ b/71.md @@ -24,7 +24,7 @@ The list of tags are as follows: * `d` (required) universally unique identifier (UUID). Generated by the client creating the video event. * `e` (required, repeated) reference tag to kind 1063 file metadata event being posted, optional relay information for the file metadata event, optional quality value (low|medium|high) * `title` (required) title of the video -* `summary` (optional) summary/description of the video (same as content) +* `summary` (optional) summary/description of the video * `url` (optional) a default link to the video data * `text-track` (optional, repeated) link to WebVTT file for video, type of supplementary information (captions/subtitles/chapters/metadata), optional language code * `thumb` (optional) url of thumbnail with same aspect ratio -- cgit v1.2.3 From d53f6fba1510db7ad7440ca0c93429a88f1c6fa9 Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:56:28 -0500 Subject: Update 71.md After discussing with Pablo, we decided to move away from relying on kind 1063 events and instead use the majority of the same tags for video events. The main motivations behind this are to allow for parameterized replaceable events for video events, prevent excessive `REQ` requests, not stringify event JSON in the `.content` section, ease of filtering by kind number, as well as some others. Happy to discuss this further. --- 71.md | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to '71.md') diff --git a/71.md b/71.md index a18f277..6d6775a 100644 --- a/71.md +++ b/71.md @@ -6,7 +6,7 @@ Video Events `draft` `optional` -This specification defines video events representing a dedicated post of externally hosted content. These video events are _parameterized replaceable_ and deletable per [NIP-09](09.md). The content of a video event is the stringified JSON of a `kind 1063` File metadata event as described in [NIP-94](94.md). +This specification defines video events representing a dedicated post of externally hosted content. These video events are _parameterized replaceable_ and deletable per [NIP-09](09.md). Unlike a `kind 1` event with a video attached, Video Events are meant to contain all additional metadata concerning the subject media and to be surfaced in video-specific clients rather than general micro-blogging clients. The thought is for events of this kind to be referenced in a Netflix, YouTube, or TikTok like nostr client where the video itself is at the center of the experience. @@ -18,17 +18,27 @@ There are two types of video events represented by different kinds: horizontal a The format uses a parameterized replaceable event kind `34235` for horizontal videos and `34236` for vertical videos. -The `.content` of these events is the stringified JSON of a `kind 1063` file metadata event. +The `.content` of these events is a summary or description on the video content. The list of tags are as follows: * `d` (required) universally unique identifier (UUID). Generated by the client creating the video event. -* `e` (required, repeated) reference tag to kind 1063 file metadata event being posted, optional relay information for the file metadata event, optional quality value (low|medium|high) +* `url` (required) the url to the video file +* `m` a string indicating the data type of the file. The [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) format must be used, and they should be lowercase. * `title` (required) title of the video -* `summary` (optional) summary/description of the video -* `url` (optional) a default link to the video data +* `"published_at"`, for the timestamp in unix seconds (stringified) of the first time the video was published +* `summary` (optional) summary/description of the video (same as `.content`) +* `"aes-256-gcm"` (optional) key and nonce for AES-GCM encryption with tagSize always 128bits +* `x` containing the SHA-256 hexencoded string of the file. +* `size` (optional) size of file in bytes +* `dim` (optional) size of file in pixels in the form `<width>x<height>` +* `duration` (optional) video duration in seconds +* `magnet` (optional) URI to magnet file +* `i` (optional) torrent infohash * `text-track` (optional, repeated) link to WebVTT file for video, type of supplementary information (captions/subtitles/chapters/metadata), optional language code * `thumb` (optional) url of thumbnail with same aspect ratio +* `image` (optional) url of preview image with same dimensions * `content-warning` (optional) warning about content of NSFW video +* `alt` (optional) description for accessibility * `t` (optional, repeated) hashtag to categorize video * `p` (optional, repeated) 32-bytes hex pubkey of a participant in the video, optional recommended relay URL * `r` (optional, repeated) references / links to web pages @@ -39,18 +49,27 @@ The list of tags are as follows: "pubkey": <32-bytes lowercase hex-encoded public key of the event creator>, "created_at": <Unix timestamp in seconds>, "kind": 34235 | 34236, - "content": "<stringified JSON of kind 1063 event>", + "content": "<summary / description of video>", "tags": [ ["d", "<UUID>"], - ["e", "<hex-id>", "<relay-url>", "<optional quality value>"], ["title", "<title of video>"], ["summary", "<summary of video>"], ["thumb", "<thumbnail image for video>"], + ["published_at", "<unix timestamp>"], + ["alt", <description>], // Video Data - ["url", "<optional recommended url>"] - ["text-track", "<url>", "<text track type>", "<optional language>"], + ["url",<string with URI of file>], + ["m", <MIME type>], + ["x",<Hash SHA-256>], + ["aes-256-gcm",<key>, <iv>], + ["size", <size of file in bytes>], + ["duration", <duration of video in seconds>], + ["dim", <size of file in pixels>], + ["magnet",<magnet URI> ], + ["i",<torrent infohash>], + ["text-track", "<encoded `kind 6000` event>", "<recommended relay urls>"], ["content-warning", "<reason>"], // Participants -- cgit v1.2.3 From 2bd3c7400293c7e142fc68bc8d58176cecb9ab2d Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Tue, 12 Dec 2023 14:01:51 -0500 Subject: Update 71.md Adding segments --- 71.md | 2 ++ 1 file changed, 2 insertions(+) (limited to '71.md') diff --git a/71.md b/71.md index 6d6775a..0a60d61 100644 --- a/71.md +++ b/71.md @@ -39,6 +39,7 @@ The list of tags are as follows: * `image` (optional) url of preview image with same dimensions * `content-warning` (optional) warning about content of NSFW video * `alt` (optional) description for accessibility +* `segment` (optional, repeated) start timestamp in format `HH:MM:SS.sss`, end timestamp in format `HH:MM:SS.sss`, chapter/segment title, chapter thumbnail-url * `t` (optional, repeated) hashtag to categorize video * `p` (optional, repeated) 32-bytes hex pubkey of a participant in the video, optional recommended relay URL * `r` (optional, repeated) references / links to web pages @@ -71,6 +72,7 @@ The list of tags are as follows: ["i",<torrent infohash>], ["text-track", "<encoded `kind 6000` event>", "<recommended relay urls>"], ["content-warning", "<reason>"], + ["segment", <start>, <end>, "<title>", "<thumbnail URL>"], // Participants ["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>"], -- cgit v1.2.3 From 8136be6eab526de8bdb22436431ea75831846395 Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Wed, 27 Dec 2023 08:26:15 -0600 Subject: Update 71.md Changed view start and end time to seconds --- 71.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '71.md') diff --git a/71.md b/71.md index 0a60d61..1daee7b 100644 --- a/71.md +++ b/71.md @@ -102,7 +102,7 @@ The `.content` of these events is optional and could be a free-form note that ac The list of tags are as follows: * `a` (required) reference tag to kind `34235` or `34236` video event being viewed * `d` (required) same as `a` reference tag value -* `viewed` (optional, repeated) timestamp of the user's start time in `HH:MM:SS.sss`, timestamp of the user's end time in `HH:MM:SS.sss` +* `viewed` (optional, repeated) timestamp of the user's start time in seconds, timestamp of the user's end time in seconds ```json -- cgit v1.2.3 From f316b219f4389021addbca02f1cb383eb8cb36d2 Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Fri, 29 Dec 2023 14:15:42 -0600 Subject: Update 71.md Co-authored-by: Pablo Fernandez <pfer@me.com> --- 71.md | 1 + 1 file changed, 1 insertion(+) (limited to '71.md') diff --git a/71.md b/71.md index 1daee7b..6b3fc0f 100644 --- a/71.md +++ b/71.md @@ -114,6 +114,7 @@ The list of tags are as follows: "content": "<note>", "tags": [ ["a", "<34235 | 34236>:<video event author pubkey>:<d-identifier of video event>", "<optional relay url>"], + ["e", "<event-id", "<relay-url>"] ["d", "<34235 | 34236>:<video event author pubkey>:<d-identifier of video event>"], ["viewed", <start>, <end>], ] -- cgit v1.2.3 From 54328d8979e5883922549293406bd77558fb34a7 Mon Sep 17 00:00:00 2001 From: zmeyer44 <54515037+zmeyer44@users.noreply.github.com> Date: Fri, 29 Dec 2023 17:25:13 -0600 Subject: Removing "summary" tag Content in the summary tag is duplicated in the .content field --- 71.md | 2 -- 1 file changed, 2 deletions(-) (limited to '71.md') diff --git a/71.md b/71.md index 6b3fc0f..3b8efca 100644 --- a/71.md +++ b/71.md @@ -26,7 +26,6 @@ The list of tags are as follows: * `m` a string indicating the data type of the file. The [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) format must be used, and they should be lowercase. * `title` (required) title of the video * `"published_at"`, for the timestamp in unix seconds (stringified) of the first time the video was published -* `summary` (optional) summary/description of the video (same as `.content`) * `"aes-256-gcm"` (optional) key and nonce for AES-GCM encryption with tagSize always 128bits * `x` containing the SHA-256 hexencoded string of the file. * `size` (optional) size of file in bytes @@ -55,7 +54,6 @@ The list of tags are as follows: ["d", "<UUID>"], ["title", "<title of video>"], - ["summary", "<summary of video>"], ["thumb", "<thumbnail image for video>"], ["published_at", "<unix timestamp>"], ["alt", <description>], -- cgit v1.2.3 From 5d1d1c178ec1761bac4867f69ae1c59bc7c0ca37 Mon Sep 17 00:00:00 2001 From: Asai Toshiya <to.asai.60@gmail.com> Date: Sat, 25 May 2024 01:41:15 +0900 Subject: NIP-71: remove `aes-256-gcm` tag --- 71.md | 2 -- 1 file changed, 2 deletions(-) (limited to '71.md') diff --git a/71.md b/71.md index 3b8efca..a811434 100644 --- a/71.md +++ b/71.md @@ -26,7 +26,6 @@ The list of tags are as follows: * `m` a string indicating the data type of the file. The [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) format must be used, and they should be lowercase. * `title` (required) title of the video * `"published_at"`, for the timestamp in unix seconds (stringified) of the first time the video was published -* `"aes-256-gcm"` (optional) key and nonce for AES-GCM encryption with tagSize always 128bits * `x` containing the SHA-256 hexencoded string of the file. * `size` (optional) size of file in bytes * `dim` (optional) size of file in pixels in the form `<width>x<height>` @@ -62,7 +61,6 @@ The list of tags are as follows: ["url",<string with URI of file>], ["m", <MIME type>], ["x",<Hash SHA-256>], - ["aes-256-gcm",<key>, <iv>], ["size", <size of file in bytes>], ["duration", <duration of video in seconds>], ["dim", <size of file in pixels>], -- cgit v1.2.3