Atlas Publisher Experience
Background
We are currently building Atlas, the video consumption product for Joystream, as part of an ongoing release, based on these designs
https://www.figma.com/proto/rBjfm2tJ2Pr9M0UNTduU9v/Joystream-Atlas?node-id=1037%3A1082&scaling=min-zoom
and this component library
https://www.figma.com/file/rBjfm2tJ2Pr9M0UNTduU9v/Joystream-Atlas?node-id=0%3A1
Goal
Currently, there is not product experience for the publisher side of the Joystream. Publishing involves a number of activities, such as
- Creating new channels.
- Publishing new content under a channel.
- Managing metadata associated with existing content.
- Managing channel metadata.
- Viewing analytics and statistics relevant to content and channel.
- Managing monetisation policies.
- +more
We do not aim to capture the full set of activities described above in this first design, nor model what we do capture to the most detailed and ambitious level. The main goal is to create an initial design which expands Atlas to
a) deal with fundamental interactions such as dealing with the storage system and blockchain.
b) accommodate future scope growth.
c) unlock a few very high value activities, namely 1-4 above, and only with videos. In the future we will also have playlists, episodic videos, and other forms of media.
Domain
In what follows we attempt to describe how the underlying domain of content publishing works in this first version.
Account Management
Any user initiated action on the blockchain requires submitting a transaction, and such transactions require signatures that correspond to accounts with funds. Since publishing requires submitting transactions, Atlas will require some means of managing accounts, funds and transaction signing.
The approach to be taken is the same as the one described here for the Pioneer 2 project
https://github.com/Joystream/joystream/issues/1455
Be aware that for the current state of Atlas, the consumer experience does not require the user have a wallet or funds, it is only for the publisher side this is relevant.
External Images
User provided images are a critical part of the metadata required to deliver the consumer experience in Atlas. This includes images for things avatars, covers for channels and video previews. The platform does not currently store any of these images, they are only represented as HTTP URLs to external storage locations. This will likely change in the future, so the Joystream infrastructure stores all metadata, but currently we face this constraint. Moreover, we want people to be able to just use existing resources, without having to do local image cropping, resizing and lastly uploading. For this reason, the Joystream metadata for each image includes cropping and resizing information, called display information. The structure of the display information depends on how the image is to displayed, below we cover two cases: rectangular and circular
If no image is found at the external location described in the metadata, or if the display information is not compatible with the dimensions of the image found, then some sort of handling will be done in the consumer experience. This could either be ignoring the content wholesale, or displaying some graceful placeholder image.
Rectangular Display Information
Assumes pixels are 0 indexed, W = pixel width of source image, H = pixel height of source image.
- Left
- Description: Left hand side horizontal pixel offset in source image for what to include in display.
- Min: 0.
- Top
- Description: Top vertical pixel offset in source image for what to include in display.
- Min: 0.
- Max: H - 1.
- Width
- Description: Pixel width of source image to include in display.
- Min: 1
- Max: Left - W - 1.
- Height
- Description: Pixel height of source image to include in display.
- Min: 1
- Max: Left - H - 1.
Circular Display Information
Assumes pixels are 0 indexed, W = pixel width of source image, H = pixel height of source image.
- Left
- Description: Left hand side horizontal pixel offset in source image for what to use as center in display.
- Min: 0.
- Top
- Description: Top vertical pixel offset in source image for what to use as center in display.
- Min: 0.
- Max: H - 1.
- Radius
- Description: Pixel radius in source image to use in display.
- Min: 1.
- Max: No x,y satisfies
ceil[(x + Left)^2 + (y + Top)^2] = Radius^2
and is not in [0,W-1]x[0,H-1]
.
Member
A membership is the representation of an actor relevant to channel ownership. All channels are owned by a member, and a single member can own multiple channels simultaneously. For more information about what information and actions are associated with a membership, please read
https://joystream.gitbook.io/joystream-handbook/subsystems/membership#membership
Channels
A channel is a venue for announcing content, under some theme, over time by the same publisher. Channels live on the blockchain itself. All content is published under channels, and each channel is owned by a single member. Currently, one can assume that a single member can have an unlimited number of channels.
Channel Status
The status of a channel has two parts. Firstly, it's whether it is public or not. Publicness is under the control of the channel owner, and it just signals to compliant user experiences whether any content, or the channel itself, should be presented to users. A typical use case for this is when the channel is in some intermediate maintenance state. Second, is whether it's curated or not. Curated status is under the control of platform curators, and it just signals the exact same semantics as being non-public, the only difference is that it is forced by the curators, as compared to being optionally signalled by the owner.
Channel Creation
Channel creation is a blockchain transaction, and it must be signed by the controller account of the membership of the would-be owner of the channel. Executing the transaction will require paying a nominal fee from the same account.
When creating a channel, the following must be provided:
- Owner: The member to whom this channel will belong.
- Title: A human readable title to be displayed in Atlas.
- Description: A longer free text human readable description to be displayed in Atlas, cannot have any formatting, just raw text. Atlas applies formatting.
- Cover: URL and rectangular display information for cover, if present.
- Avatar: URL and circular display information for channel avatar, if present.
- Language: The primary language, if any, of the channel. If a language is defined, it will be one among predefined set of languages.
- Publicness: Publicness of channel.
Channel Editing
Channel creation is a blockchain transaction, and it must be signed by the controller account of the membership of owner of the channel. Executing the transaction will require paying a nominal fee from the same account.
All fields provided in the creation phase, with the exception of the unchangeable owner, can be edited in a single transaction.
Videos
Videos have two parts, metadata which lives on the blockchain itself, and the video media, which lives in secondary storage infrastructure. The Joystream system has its own built in storage system to which publishers can publish video media, but they are also free to store the media on any third party infrastructure which is reachable via HTTP. Currently, a single channel can have an unlimited number of videos, and the storage infrastructure also allows a single member to store an unlimited number of media files, however each file must be on more than X MB.
Categories
There exists a finite, but dynamic, set of content categories on the platform. Each video is assigned to exactly one such category. Each category has a unique human readable name, and a longer description of the semantics of the category. Only platform level curators can manage the set of currently available categories.
Publish Video
Publishing a video has two steps. The first step is two publish the video media on some infrastructure, and the second step is to publish the video metadata to the blockchain.
Publish Video Media
Video media that lives on non-Joystream infrastructure, then it is simply assumed that it is reachable via some HTTP URL.
Video media that is supposed to live on Joystream infrastructure is published as follows. The process has two steps:
- The first step is a blockchain transaction signed by the controlled account of the membership corresponding to the channel in question. This transaction includes a hash digest of the media to be uploaded, it causes the blockchain to automatically select a Joystream storage provider host which should receive the upload. This host will now accept an upload from the user, provided the file matches the hash digest in the original transaction.
- The second step involves the en user actually attempting to upload the file to the designated storage provider.
This process will result in unique identifier, called a data object id, which can be used publishing of the video metadata to the blockchain.
Publish Video Metadata
Publishing video metadata is a blockchain transaction, and it must be signed by the controller account of the membership of owner of the channel. Executing the transaction will require paying a nominal fee from the same account.
When publishing video metadata, the following must be provided:
- Channel: Channel within which video lives.
- Category: Category to which this video corresponds.
- Title: Display title.
- Description: A free text description, must not have any high level encoding.
- Duration: The number of seconds the video lasts.
- Preview MAX: URL and rectangular display information for biggest preview - used when loading in playback, if present. The aspect ratio of the rectangular display information must match aspect ratio of video media.
- Preview MID: URL and rectangular display information for biggest preview - used when showing video as primary search result, if present. The aspect ratio of the rectangular display information must match aspect ratio of video media.
- Preview MIN: URL and rectangular display information for biggest preview - used when showing video in smallest minified view on channels/scrolls, if present. The aspect ratio of the rectangular display information must match aspect ratio of video media.
- Language: The primary language, if any, of the video. If a language is defined, it will be one among predefined set of languages.
- Media: Describes underlying media asset of video, consists of:
- Pixel dimension.
- Byte size.
- Encoding: has to be one among a standardised set.
- Location: is either an arbitrary HTTP URL, if it lives on third party infrastructure, otherwise it is the data object id.
- Marketing: Whether or not Video contains marketing.
- PublishedBefore: If set, some date and time in the past when the content was originally published, outside of the platform.
- Publicness: Publicness of video
- Explicit: Whether the Video contains explicit material.
- License: Is either one among a standardised set of Creative Commons licenses, or some user provided free text licenses.
Edit Video Metadata
Editing video metadata is a blockchain transaction, and it must be signed by the controller account of the membership of owner of the channel. Executing the transaction will require paying a nominal fee from the same account.
All fields provided in the creation phase, with the exception of the channel, can be edited in a single transaction.
Product Constraints
- The publishing experience is part of Atlas itself, it is not a standalone product.
- No inter session state that is not part of blockchain or storage system.
- Assume the user does not necessarily have any funds, a browser extension for holding funds.
- The overwhelming majority of Atlas usage sessions will be in the form of consumers viewing content, therefore, all the complexity of wallets, funds, channel creation an associated on boarding, must be hidden away from these sessions.
- There must be systematic handling of
- loading states
- empty states
- error states
- transitions.
- Onboarding is required.
Personas
Jun
Jun has just learned about Joystream from a friend, but does not himself know anything about the project, or about crypto currency. He is intrigued at the prospect of earning some spending money and to build an audience on a new platform, so he is interested in trying to publish some private recordings of himself playing online Poker while commenting on strategy, trends and wider social issues.
Jun User Stories
- As Jun I would like to learn what steps are involved from start to finish, to create a channel and publish my first video on Joystream.
- As Jun I would like to get help getting my wallet installed.
- As Jun I would like to get help acquiring my initial funds to create a membership and channel.
- As Jun I would like to create my first channel.
- As Jun I would like to publish my first video.
Angela
Angela is a very experienced content creator. She already has a very well known crypto currency related account on YouTube, but she also publishes to Joystream due to the unpredictable banning of crypto content on that platform, and the fear of loosing her channel there at any time.
Angela User Stories
- As Angela I would like to see all my memberships and associated channels.
- As Angela I would like to see all videos published to a given channel.
- As Angela I would like to update the metadata associated with a channel.
- As Angela I would like to update the metadata associated with a given video.
- As Angela I would like to publish a large number of videos at once.