Skip to content
Browse SharePoint tutorials

Build a Netflix-style video library in SharePoint

Turn a SharePoint document library into a card-style video library with thumbnails, descriptions, likes, and Watch Now, Share, and Edit Details buttons, using JSON view formatting.

On this page
  1. Overview
  2. Before you begin
  3. 1. Create the library
  4. 2. Add the built-in columns to the view
  5. 3. Create the custom columns
  6. 4. Add your videos and details
  7. 5. Create the All Videos view
  8. 6. Apply the JSON
  9. 7. Try the card buttons
  10. Organize and secure your videos
  11. Troubleshooting

A SharePoint document library can store training videos perfectly well, but the default view is a plain file list. With a few columns and a block of JSON, the same library can display each video as a large card with a thumbnail, title, description, and buttons.

You keep everything a document library already offers, including sharing and permissions. No Power Apps or custom code are involved. View formatting does not change the data in list items; it only changes how they are displayed.

The finished view looks like this:

Finished video library with large thumbnails, titles, descriptions, like and dislike counts, and Watch Now, Share, and Edit Details buttons

Before you begin

Have these ready:

1. Create the library

  1. On the site, go to Site contents and select New > Document library, then choose a blank library.
  2. Name it, for example Video Library.
  3. Clear Show in site navigation if you would rather add the link later.
  4. Select Create.

Create library dialog with the name Video Library and Show in site navigation cleared

2. Add the built-in columns to the view

The JSON reads several built-in columns, so they need to be in the view.

  1. Hide Modified and Modified By if you do not want them in your editing view.
  2. Open the view menu and select Edit current view.
  3. Under Columns, select Title and Created By.
  4. Select OK.

Edit view page lists columns with checkboxes, with Created By and Title selected

Created By matters more than it looks. The Edit Details button in the JSON compares the current user with the file’s creator, so it needs that column to appear.

3. Create the custom columns

Use Add column in the library to create these five columns. Enter the names exactly as shown, because the JSON refers to them by name.

Column nameTypeSettings
Video DescriptionMultiple lines of textDefaults
DateDate and timeInclude Time set to No. Friendly format is optional
LikePerson or GroupShow profile photos on, Allow multiple selections on, Allow selection of Groups off
DislikePerson or GroupSame settings as Like
ThumbnailImageDefaults

Create a column pane for Video Description with type Multiple lines of text

Create a column pane for a date column with Include Time set to No

Create a column pane for Like with Show profile photos and Allow multiple selections turned on

Create a column pane for Thumbnail with type Image

Check the internal column names

The JSON uses each column’s internal name, not its display name. It expects VideoDescription, Date, Like, Dislike, and Thumbnail.

Spaces are where this usually goes wrong. Microsoft’s documentation notes that a name with a space can be stored as _x0020_, such as Video_x0020_Description, so confirm the name before you apply the JSON:

  1. Open Library settings > More library settings.
  2. Under Columns, select Video Description.
  3. Look at the end of the page address for the value after Field=.

If the value is not VideoDescription, find every [$VideoDescription] in the JSON and replace it with your value, such as [$Video_x0020_Description]. Repeat the check for any other column if a value does not appear on the cards.

4. Add your videos and details

  1. Upload your videos to the library.
  2. Select Edit in grid view.
  3. Fill in Title, Video Description, and Date for each video. Leave Like and Dislike blank, since the buttons fill those in.
  4. Double-click the Thumbnail cell, select your image, and upload it.
  5. When you finish, exit grid view. Make sure your edits are saved.

Library in grid view with values filled in for the first video and generated previews in the Thumbnail column

Upload Image dialog with a thumbnail file ready to upload

Until you upload an image, the Thumbnail column in the grid can show a generated preview of the file, but the card doesn’t use that preview. Upload an image for every video: a card without one shows a broken-image icon where the thumbnail would be.

5. Create the All Videos view

Keep the default All Documents view as your editing view, and create a second view for the cards.

  1. Open the view menu and select Create new view.
  2. Set View name to All Videos.
  3. Under Show as, select List.
  4. Select Make this a public view so that others can use it, then select Create.

Create view dialog with the name All Videos, List selected, and Make this a public view checked

The new view starts with the same columns as the view you were on, so it looks identical until you format it. Confirm that every column from Steps 2 and 3 is in All Videos.

6. Apply the JSON

  1. With All Videos open, open the view menu and select Format current view.
  2. Select Advanced mode.
  3. Delete the starter text in the box.
  4. Open video-library-view.json, copy all of it, and paste it into the box.
  5. Select Preview to check the layout.
  6. Select Save, then refresh the page.

Format view pane in advanced mode with the starter JSON, and Preview and Save buttons at the bottom

Thumbnails and the Edit Details button may be missing in the preview. Save and refresh the page before you judge the result.

7. Try the card buttons

Each button uses a built-in row action:

ButtonWhat it doesWho sees it
Watch NowOpens the file, the same as selecting it in a normal viewEveryone who can open the view
ShareOpens the sharing dialogEveryone who can open the view
Edit DetailsOpens the file’s properties in edit modeOnly the person who created the file
Like / DislikeAdds or removes your name from that column. Selecting one removes you from the otherEveryone who can open the view, but it saves only for people who can edit items

Selecting Like or Dislike updates its counter and fills in the thumb icon:

A card with one dislike recorded, shown by a filled icon and a count of 1

Title, date, and description can also be edited directly on the card by hovering over them, for people with edit permission.

Three things are worth knowing before you share the library:

  • Like and Dislike change the file’s item. They use setValue to update the item. Microsoft documents edit permission as a requirement for inline editing; treat Like and Dislike the same way and test with a read-only account. People with the Read level can view and download but not update items, so expect their selections not to be saved.
  • Think before you widen access for likes. Contribute or Edit would let viewers like videos, but it also lets them update and delete items and documents. They could change any video’s details, add or remove other people’s names in Like and Dislike, or replace and delete files. If viewers should only watch, keep them at Read and accept that only contributors can like. If everyone can edit, treat the counts as informal feedback, not a secure vote.
  • Edit Details is limited to the creator. To show it to everyone with access, remove the display line from that button’s style section in the JSON. To edit other people’s videos without changing the JSON, use the All Documents view. Hiding the button doesn’t secure anything: anyone who can edit items can still edit the details from the file’s menu or another view.

Organize and secure your videos

Formatting is only the display layer, so the usual SharePoint options still apply:

  • Group videos into playlists. Add a Choice column, assign each video a value, and create a filtered view for each value. Formatting is set per view, so apply the JSON to each new view.
  • Limit access. A view does not restrict anyone from the underlying files. Use library or file permissions to control who can open a video.
  • Choose a structure. A library per app, per audience, or per department all work. Separate sites can simplify permissions.
  • Watch your storage. Videos are large. Each file has a 250 GB upload limit, and each site can hold up to 25 TB, but all of it counts against your organization’s total storage.

Troubleshooting

SymptomLikely causeWhat to do
A value is missing from every cardThe internal name differs, or the column is not in the viewCheck the name after Field=, update the JSON, and confirm the column is in All Videos
Description is blank but filled in on the fileThe column was stored as Video_x0020_DescriptionReplace [$VideoDescription] as described in Step 3
Thumbnails are blank in the previewThe preview has not loaded themSave the view and refresh the page
A card shows a broken-image icon, or an uploaded thumbnail doesn’t appear, after refreshingNo image uploaded, or the image link isn’t returned in your libraryUpload an image. If an uploaded image still doesn’t show, change the image src as shown below
Edit Details is missingYou did not create that file, or Created By is not in the viewAdd Created By to the view, or edit from All Documents
Like or Dislike does nothingThe user cannot edit the itemCheck the user’s permission on the library
Column headers and checkboxes have disappearedThe JSON hides them on purposeSwitch to All Documents to select or sort files

The JSON reads the Thumbnail column with getThumbnailImage, which is how Microsoft’s reference shows an image column in formatting. The reference also notes that, as of July 2024, only the fileName property of an image field has a value. The image’s serverRelativeUrl property isn’t documented, but it may still return the image’s address in your library. If an uploaded thumbnail doesn’t appear, try replacing the src line with this one:

"src": "[$Thumbnail.serverRelativeUrl]",

If you’d rather not upload thumbnails, the same reference documents @thumbnail values, which show the file’s own preview in a document library, for example "src": "@thumbnail.500x281". Previews exist only for supported file types, so check them with your videos. This replaces the uploaded image on every card. The JSON in this tutorial doesn’t switch to the preview only for videos without an uploaded thumbnail.

To change the card’s look, edit the JSON. For example, the thumbnail’s width value sets the image size, and max-width stops it growing wider than the space available. If you change the width, change the two numbers in getThumbnailImage to match. Check the view at the screen sizes your viewers use.

Companion video

Video: How to Create a Netflix-Style Video Library in SharePoint Using JSON

If the player is blocked on your network, open the video on YouTube.

Need help applying this to your own setup? Read about consulting.