Joystream / youtube-synch

YouTube Synchronization
11 stars 10 forks source link

YouTube attribution for videos and channels #139

Closed bedeho closed 1 year ago

bedeho commented 1 year ago

Dependency

https://github.com/Joystream/joystream/issues/4307

Background

When council is choosing to reward channels and videos, and they happen to be coming from YT, then it would be very useful to be able to identify possible duplicate uploads/channels, whether intentional or not. It will also help substantially with raising certainty that such videos, of which there could quickly be many, are being published by the true owner - assuming the application itself is honest, as YouTube has a very robust rights management system. Establishing even a baseline level of confidence before deciding to pay someone from council will require far more work.

Note: While Gleev intends to directly pay creators, this may not apply to all apps, and certainly the long term equilibrium has to be that the DAO itself is financing all the onboarding that builds it's network effect.

Proposal

Allow binding URL to relative path, so /... , for YouTube videos and channels. We only want the backend application to be able to set, and perhaps in the future edit?, such paths, so this information should be part of the AppAction metadata field, not CreateVideo, CreateChannel, UpdateVideo or Update Channel. However this information can still be exposed as nullable fields on the Video and Channel entities as properties in the QN/Orionv2 APIs, so as to make queries like "show me all videos not-from YT" very easy.

Example

Channel Creation

  1. YT creator signs up to YPP, they have identifiers (read more here)
  2. Normal auth flow succeeds.
  3. YPP infra creates a member for creator on Joystream (does not use AppAction wrapper, as it is only meant for some specific content pallet extrinsics).
  4. YPP infra creates a new channel, owned by this new member, using extrinsic create_channel(.., metadata: m_1) where m_1 encodes the message AppAction { ... metadata: m_2, ... } where m_2 is a message from a schema something like
message ChannelCreationiAppActionMetadata {

    // Youtube channel-id
    required bytes channel_id = 1;

}

Video Publishing

Hopefully it's clear how one does the analogous thing for individual videos.

┆Issue is synchronized with this Asana task by Unito

zeeshanakram3 commented 1 year ago

Implemented in https://github.com/Joystream/youtube-synch/pull/152