diff --git a/docs/assets/add-media-source.png b/docs/assets/add-media-source.png new file mode 100755 index 000000000..b3969f7ef Binary files /dev/null and b/docs/assets/add-media-source.png differ diff --git a/docs/assets/channel-properties.png b/docs/assets/channel-properties.png new file mode 100755 index 000000000..9b388f4b4 Binary files /dev/null and b/docs/assets/channel-properties.png differ diff --git a/docs/assets/channels-new.png b/docs/assets/channels-new.png new file mode 100755 index 000000000..cc62b1558 Binary files /dev/null and b/docs/assets/channels-new.png differ diff --git a/docs/assets/flex-filler-content.png b/docs/assets/flex-filler-content.png new file mode 100755 index 000000000..369b48692 Binary files /dev/null and b/docs/assets/flex-filler-content.png differ diff --git a/docs/assets/new-plex-server-manual.png b/docs/assets/new-plex-server-manual.png new file mode 100755 index 000000000..18a7cfde5 Binary files /dev/null and b/docs/assets/new-plex-server-manual.png differ diff --git a/docs/assets/programming-additem.png b/docs/assets/programming-additem.png new file mode 100755 index 000000000..d547b6fbe Binary files /dev/null and b/docs/assets/programming-additem.png differ diff --git a/docs/assets/programming-addmedia-library.png b/docs/assets/programming-addmedia-library.png new file mode 100755 index 000000000..89743c8ec Binary files /dev/null and b/docs/assets/programming-addmedia-library.png differ diff --git a/docs/assets/programming-addmedia.png b/docs/assets/programming-addmedia.png new file mode 100755 index 000000000..d9df74678 Binary files /dev/null and b/docs/assets/programming-addmedia.png differ diff --git a/docs/assets/programming-addshow.png b/docs/assets/programming-addshow.png new file mode 100755 index 000000000..b930bb195 Binary files /dev/null and b/docs/assets/programming-addshow.png differ diff --git a/docs/assets/programming-blockshuffle-noloop.png b/docs/assets/programming-blockshuffle-noloop.png new file mode 100755 index 000000000..7eeef7f89 Binary files /dev/null and b/docs/assets/programming-blockshuffle-noloop.png differ diff --git a/docs/assets/programming-blockshuffle.png b/docs/assets/programming-blockshuffle.png new file mode 100755 index 000000000..cd7659156 Binary files /dev/null and b/docs/assets/programming-blockshuffle.png differ diff --git a/docs/assets/programming-expandmenu.png b/docs/assets/programming-expandmenu.png new file mode 100755 index 000000000..d94771448 Binary files /dev/null and b/docs/assets/programming-expandmenu.png differ diff --git a/docs/assets/programming-mediaadded.png b/docs/assets/programming-mediaadded.png new file mode 100755 index 000000000..c8dab8084 Binary files /dev/null and b/docs/assets/programming-mediaadded.png differ diff --git a/docs/assets/programming-shuffle.png b/docs/assets/programming-shuffle.png new file mode 100755 index 000000000..ebb4f2d1c Binary files /dev/null and b/docs/assets/programming-shuffle.png differ diff --git a/docs/assets/scheduling-tools-random_slots.png b/docs/assets/scheduling-tools-random_slots.png new file mode 100755 index 000000000..501cb4083 Binary files /dev/null and b/docs/assets/scheduling-tools-random_slots.png differ diff --git a/docs/assets/scheduling-tools-random_slots_example.png b/docs/assets/scheduling-tools-random_slots_example.png new file mode 100755 index 000000000..a80083a6f Binary files /dev/null and b/docs/assets/scheduling-tools-random_slots_example.png differ diff --git a/docs/assets/scheduling-tools-random_slots_example_weighted.png b/docs/assets/scheduling-tools-random_slots_example_weighted.png new file mode 100755 index 000000000..430b2cb57 Binary files /dev/null and b/docs/assets/scheduling-tools-random_slots_example_weighted.png differ diff --git a/docs/assets/scheduling-tools-random_slots_preview.png b/docs/assets/scheduling-tools-random_slots_preview.png new file mode 100755 index 000000000..2f9d530cc Binary files /dev/null and b/docs/assets/scheduling-tools-random_slots_preview.png differ diff --git a/docs/assets/scheduling-tools-random_slots_preview_weighted.png b/docs/assets/scheduling-tools-random_slots_preview_weighted.png new file mode 100755 index 000000000..aa82e68c2 Binary files /dev/null and b/docs/assets/scheduling-tools-random_slots_preview_weighted.png differ diff --git a/docs/assets/scheduling-tools-time_slots.png b/docs/assets/scheduling-tools-time_slots.png new file mode 100755 index 000000000..bcbe3d466 Binary files /dev/null and b/docs/assets/scheduling-tools-time_slots.png differ diff --git a/docs/assets/scheduling-tools-time_slots_example.png b/docs/assets/scheduling-tools-time_slots_example.png new file mode 100755 index 000000000..fa8c2cf8d Binary files /dev/null and b/docs/assets/scheduling-tools-time_slots_example.png differ diff --git a/docs/assets/scheduling-tools-time_slots_exampleflex.png b/docs/assets/scheduling-tools-time_slots_exampleflex.png new file mode 100755 index 000000000..3250a27e2 Binary files /dev/null and b/docs/assets/scheduling-tools-time_slots_exampleflex.png differ diff --git a/docs/assets/scheduling-tools-time_slots_preview.png b/docs/assets/scheduling-tools-time_slots_preview.png new file mode 100755 index 000000000..1c2e0cce2 Binary files /dev/null and b/docs/assets/scheduling-tools-time_slots_preview.png differ diff --git a/docs/assets/scheduling-tools-time_slots_previewflex.png b/docs/assets/scheduling-tools-time_slots_previewflex.png new file mode 100755 index 000000000..5d9e45997 Binary files /dev/null and b/docs/assets/scheduling-tools-time_slots_previewflex.png differ diff --git a/docs/assets/setup-finish.png b/docs/assets/setup-finish.png new file mode 100755 index 000000000..406ec41e9 Binary files /dev/null and b/docs/assets/setup-finish.png differ diff --git a/docs/configure/channels/epg.md b/docs/configure/channels/epg.md new file mode 100644 index 000000000..b10e72ad1 --- /dev/null +++ b/docs/configure/channels/epg.md @@ -0,0 +1,3 @@ +# EPG + +TBD \ No newline at end of file diff --git a/docs/configure/channels/flex.md b/docs/configure/channels/flex.md new file mode 100644 index 000000000..4949fe3ad --- /dev/null +++ b/docs/configure/channels/flex.md @@ -0,0 +1,9 @@ +# Flex + +Flex is an optional block of time that is used to separate two episodes of television. One reason to use Flex time is to create commercial breaks after each episode to simulate traditional television. + +There are a few ways to create Flex time such as Time Slots. When you have Flex time but no Filler Content configured, the Channel Fallback shown in the screenshot below will be used. You can optionally select the upload button to choose your own custom fallback image. + +Please see the [Filler Lists page](/configure/library/filler) for details on creating your first list. + +![Flex filler content](/assets/flex-filler-content.png) \ No newline at end of file diff --git a/docs/configure/channels/index.md b/docs/configure/channels/index.md index a3c35c63e..fcd7e215f 100644 --- a/docs/configure/channels/index.md +++ b/docs/configure/channels/index.md @@ -1 +1,9 @@ # Channels + +This page will display a brief overview of your channels. + +Click the "NEW" button to be brought to the [New Channel Properties](/configure/channels/properties) page. + +![Creating a new channel](/assets/channels-new.png) + +Once you have created your first channel, head over to [Programming](/configure/programming) to start adding episodes. \ No newline at end of file diff --git a/docs/configure/channels/properties.md b/docs/configure/channels/properties.md new file mode 100644 index 000000000..4dd605aef --- /dev/null +++ b/docs/configure/channels/properties.md @@ -0,0 +1,9 @@ +# Properties + +Choose a channel a name. Optionally, you can also add a thumbnail by uploading an image. This will be the logo visible within your Plex/Jellyfin channel guide. Transparent .png files are supported. + +On-Demand will allow your channels to behave similar to streaming services, where the watch states will only progress while you're actively viewing the channel. This is disabled by default, which means by default channels will behave similar to traditional televison where watch states will progress without you actively viewing the channel. + +![Channel properties](/assets/channel-properties.png) + +Click the ["FLEX" tab](/configure/channels/flex) if you'd like to configure optional filler content to play in-between episodes. \ No newline at end of file diff --git a/docs/configure/flex.md b/docs/configure/flex.md deleted file mode 100644 index 611041422..000000000 --- a/docs/configure/flex.md +++ /dev/null @@ -1 +0,0 @@ -# Flex diff --git a/docs/configure/library/custom-shows.md b/docs/configure/library/custom-shows.md new file mode 100644 index 000000000..73561ed07 --- /dev/null +++ b/docs/configure/library/custom-shows.md @@ -0,0 +1,3 @@ +# Custom Shows + +Placeholder diff --git a/docs/configure/library/filler.md b/docs/configure/library/filler.md new file mode 100644 index 000000000..80ccf2fdd --- /dev/null +++ b/docs/configure/library/filler.md @@ -0,0 +1,3 @@ +# Filler + +Placeholder diff --git a/docs/configure/library/index.md b/docs/configure/library/index.md new file mode 100644 index 000000000..b29029850 --- /dev/null +++ b/docs/configure/library/index.md @@ -0,0 +1 @@ +# Library diff --git a/docs/configure/programming.md b/docs/configure/programming.md index d808b3563..8b239fbbd 100644 --- a/docs/configure/programming.md +++ b/docs/configure/programming.md @@ -1 +1,51 @@ # Programming + +After creating a new channel, you will be presented with a blank Programming page. + +Select "ADD MEDIA". + +![Adding media to a channel](/assets/programming-addmedia.png) + +Select the library you'd like to pull media from. + +![Selecting library](/assets/programming-addmedia-library.png) + +Add all of the shows you'd like this channel to include. + +If you'd like to add all episodes from a show, select "ADD SERIES". + +If you'd only like to include specific seasons, expand the show by selecting the carrot on the left and select "ADD ALL" on each season you'd like to include. + +If you'd like to add specific episodes but not the entire season, expand the season by selecting the carrot on the left and select "ADD EPISODE". + +![Select show](/assets/programming-addshow.png) + +Expand the menu on the right to view a summary of your changes. + +![Expand menu](/assets/programming-expandmenu.png) + +Select "ADD ITEMS" to save your changes. + +![Add item](/assets/programming-additem.png) + +By default, your episode ordering will be alphabetical (by show name) and in the proper season order. In this example, we have two shows and the first show will play in its entirety progressing from specials through all seasons, and only then will the next show start playing. + +![Media added](/assets/programming-mediaadded.png) + +If we instead wanted this similar to what we'd see on traditional television, select "SORT" and choose either Block Shuffle or Cyclic Shuffle. + +![Shuffle](/assets/programming-shuffle.png) + +Block Shuffle will play a specific number of episodes from a show, proceed to the next show, play that same number of episodes, proceed to the next show, etc. + +By default, when a show completes airing, it will be absent from your schedule until all of the remaining shows complete airing, where the schedule will then be repeated. This means that as you reach the end of your schedule, it may be dominated by one or two shows that have a longer runtime or more episodes than others. + +To get around this, select "Make perfect schedule loop". This will attempt to have all shows complete airing at the same time. + +![Block shuffle](/assets/programming-blockshuffle.png) + +Please note the perfect schedule loop option does not currently support larger channels. If you see the below error, your channel has too many episodes to use this feature. In this case, the "Loop Short Programs" option can be used. + +![Block shuffle loop error](/assets/programming-blockshuffle-noloop.png) + +Cyclic Shuffle will alternate between shows while attempting to preserve the episode sequence. So in this example, it will play S00E01 from show 1, then play S00E01-E02 from show 2, then S01E01-E02 from show 1, then S01E01 from show 2, etc. Compared to Block Schedule, Cyclic Shuffle is randomized, so it will not always display the same number of episodes from a show. Cyclic Shuffle also does not support any features to create even blocks, so the end of your schedule will likely be dominated by a few shows with larger episode counts and runtime. \ No newline at end of file diff --git a/docs/configure/scheduling-tools/balance.md b/docs/configure/scheduling-tools/balance.md new file mode 100644 index 000000000..7cb7de02c --- /dev/null +++ b/docs/configure/scheduling-tools/balance.md @@ -0,0 +1,3 @@ +# Balance + +TBD \ No newline at end of file diff --git a/docs/configure/scheduling-tools/consolidate.md b/docs/configure/scheduling-tools/consolidate.md new file mode 100644 index 000000000..e84475ef2 --- /dev/null +++ b/docs/configure/scheduling-tools/consolidate.md @@ -0,0 +1,3 @@ +# Consolidate + +TBD \ No newline at end of file diff --git a/docs/configure/scheduling-tools/index.md b/docs/configure/scheduling-tools/index.md new file mode 100644 index 000000000..b7cf00519 --- /dev/null +++ b/docs/configure/scheduling-tools/index.md @@ -0,0 +1,13 @@ +# Scheduling Tools + +Tunarr offers a range of tools for scheduling your content. + +[Time Slots](/configure/scheduling-tools/time-slots) are the best option to most closely mimic traditional television but can be a bit laborious to configure. + +[Random Slots](/configure/scheduling-tools/random-slots) accomplishes the same as Time Slots, but requires much less work to setup due to randomizing when each show is aired. + +[Balance](/configure/scheduling-tools/balance) let's you pick the weight for your shows to air some shows more frequently than others. + +[Replicate](/configure/scheduling-tools/replicate) will create copies of the same schedule and play them in sequence. This typically is not needed as Tunarr already handles replaying a schedule once complete. + +[Consolidate](/configure/scheduling-tools/consolidate) merges contiguous match flex and redirect blocks into singular spans. \ No newline at end of file diff --git a/docs/configure/scheduling-tools/random-slots.md b/docs/configure/scheduling-tools/random-slots.md new file mode 100644 index 000000000..dcf20a946 --- /dev/null +++ b/docs/configure/scheduling-tools/random-slots.md @@ -0,0 +1,23 @@ +# Random Slots + +Random Slots allow you to schedule specific shows to run during randomized time slots. + +To schedule Random Slots for your channel programming, select "TOOLS", then "Random Slots". + +![Random Slots](/assets/scheduling-tools-random_slots.png) + +In this example, we want both "Yu-Gi-Oh! Duel Monsters" and "Batman Beyond" to air in 30 minute blocks. We have Pad Times set to 00:00 and 00:30, so the episodes will always try to air right at those times by using [Flex](/configure/channels/flex) to fill the empty time. + +![Random Slots example](/assets/scheduling-tools-random_slots_example.png) + +See below for an example of our current schedule. Note that due to the schedule starting at 4:43pm, the first episode will finish airing at 5:05pm, so a larger-than-normal amount of Flex time will be used to get the schedule back on track to have things air at 00:00 and 00:30. After the first airing, we see things normalized with a more appropriate 8-10 minutes of Flex after each episode. + +![Random Slots preview](/assets/scheduling-tools-random_slots_preview.png) + +In this example, one of our shows has far more episodes than the other but by default the episode Distribution is Uniform so the shows will be ordered with equal priority. If we instead wanted "Yu-Gi-Oh! Duel Monsters" to air 70% of the time, and "Batman Beyond" to air 30% of the time, we would set Distribution to Weighted and adjust the sliders. + +![Random Slots example with weighting](/assets/scheduling-tools-random_slots_example_weighted.png) + +See below for an example of our schedule now that "Yu-Gi-Oh! Duel Monsters" is Weighted to air 70% of the time. + +![Random Slots preview with weighting](/assets/scheduling-tools-random_slots_preview_weighted.png) \ No newline at end of file diff --git a/docs/configure/scheduling-tools/replicate.md b/docs/configure/scheduling-tools/replicate.md new file mode 100644 index 000000000..4a8d686bd --- /dev/null +++ b/docs/configure/scheduling-tools/replicate.md @@ -0,0 +1,3 @@ +# Replicate + +TBD \ No newline at end of file diff --git a/docs/configure/scheduling-tools/time-slots.md b/docs/configure/scheduling-tools/time-slots.md new file mode 100644 index 000000000..15debed0f --- /dev/null +++ b/docs/configure/scheduling-tools/time-slots.md @@ -0,0 +1,23 @@ +# Time Slots + +Time Slots allow you to schedule specific shows to run at specific time slots each day or week. + +To schedule Time Slots for your channel programming, select "TOOLS", then "Time Slots". + +![Time Slots](/assets/scheduling-tools-time_slots.png) + +In this example, we want "Yu-Gi-Oh! Duel Monsters" to always air at 10am each day, followed by "Batman Beyond" at 10:30am each day. We also want [Flex](/configure/channels/flex) to fill the time in-between episodes using the Pad Times option, so that episodes always air right at 10am and 10:30am. We have allowed 5 minutes of lateness, so if an episode runs over the 30 minute time slot by 5 minutes or less, the next shows episode will still play no later than 10:35am. + +![Time Slots example](/assets/scheduling-tools-time_slots_example.png) + +See below for an example of our current schedule. Please note that as we have only selected two time slots for the entire day, "Batman Beyond" being our last scheduled show will continue airing until the following day at 10am when the next scheduled episode of "Yu-Gi-Oh! Duel Monsters" is set to air. + +![Time Slots preview](/assets/scheduling-tools-time_slots_preview.png) + +If we instead wanted to air these two episodes, then have the channel play Flex content until the next episode of "Yu-Gi-Oh! Duel Monsters" the following day at 10am, we would simply add Flex after "Batman Beyond". + +![Time Slots example with flex](/assets/scheduling-tools-time_slots_exampleflex.png) + +See below for an example of our schedule now that we have Flex after our two episodes air. Now it will alternate Show 1 Day 1, Show 2 Day 1, Show 1 Day 2, Show 2 Day 2, etc. + +![Time Slots preview with flex](/assets/scheduling-tools-time_slots_previewflex.png) \ No newline at end of file diff --git a/docs/configure/scheduling/index.md b/docs/configure/scheduling/index.md deleted file mode 100644 index 1dab3b619..000000000 --- a/docs/configure/scheduling/index.md +++ /dev/null @@ -1 +0,0 @@ -# Scheduling diff --git a/docs/configure/scheduling/random-slots.md b/docs/configure/scheduling/random-slots.md deleted file mode 100644 index 1dab3b619..000000000 --- a/docs/configure/scheduling/random-slots.md +++ /dev/null @@ -1 +0,0 @@ -# Scheduling diff --git a/docs/configure/scheduling/time-slots.md b/docs/configure/scheduling/time-slots.md deleted file mode 100644 index 1dab3b619..000000000 --- a/docs/configure/scheduling/time-slots.md +++ /dev/null @@ -1 +0,0 @@ -# Scheduling diff --git a/docs/configure/scheduling/tools.md b/docs/configure/scheduling/tools.md deleted file mode 100644 index ededc4c66..000000000 --- a/docs/configure/scheduling/tools.md +++ /dev/null @@ -1 +0,0 @@ -# Scheduling Tools diff --git a/docs/getting-started/setup.md b/docs/getting-started/setup.md index 01a6f24a8..66c3db2c4 100644 --- a/docs/getting-started/setup.md +++ b/docs/getting-started/setup.md @@ -26,6 +26,8 @@ services: # runtime: nvidia environment: - LOG_LEVEL=${TUNARR_LOG_LEVEL:-INFO} + # Uncomment if you'd like to adjust default config path + # - TUNARR_DATABASE_PATH=/your/path/tunarr # volumes: # The host path is relative to the location of the compose file # This can also use an absolute path. @@ -73,11 +75,15 @@ docker run \ Upon first launching Tunarr, you will see the Welcome page with a few required setup steps. -![Welcome Page No Plex](../assets/welcome_page_not_connected.png) +![Welcome Page Plex-Jellyfin](../assets/add-media-source.png) ### Media Sources -Currently, Tunarr supports Plex and Jellyfin as media sources. In order to add programming to your channels, you must connect at least media source. Each media source acts as a metadata source for your programming, and optionally, the streaming source. Click the "Connect Plex" button to start Plex authentication and add your first Plex server to Tunarr. +Currently, Tunarr supports Plex and Jellyfin as media sources. In order to add programming to your channels, you must connect at least one media source. Each media source acts as a metadata source for your programming, and optionally, the streaming source. + +Click the "Add" button, followed by your source. For Plex, you can choose Auto to perform automatic web authentication. Alternatively, you can select Manual, input your URL (http://serverIP:32400) and [Access Token](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/). Unless you have a specific reason for doing so, leave Auto-Update Guide and Auto-Update Channels unchecked. If communication with your server is successful, you should see a green checkmark cloud icon next to your server URL. + +![Manual Plex server](../assets/new-plex-server-manual.png) !!! info @@ -85,10 +91,16 @@ Currently, Tunarr supports Plex and Jellyfin as media sources. In order to add p ### FFMPEG -Tunarr also requires [FFMPEG](https://ffmpeg.org/). FFMPEG is used to normalize channel video / audio streams for seamless playback, interleave your "flex" content, and more. Tunarr defaults to looking for the FFMPEG executable at `/usr/bin/ffmpeg`. If no executable is found, you can change the path in the FFMPEG settings page. +Tunarr also requires [FFMPEG](https://ffmpeg.org/). FFMPEG is used to normalize channel video / audio streams for seamless playback, interleave your "flex" content, and more. Tunarr defaults to looking for the FFMPEG executable at `/usr/bin/ffmpeg`. If no executable is found, you can change the path in the FFMPEG settings page. + +Please note that FFMPEG is built into the Docker image, so Docker users should not need to make any adjustments to this page. ![Welcome Page With FFMPEG](../assets/welcome_page_ffmpeg_installed.png) +Click "FINISH" and you will be brought to the new channel page to [create your first channel](/configure/channels/properties). + +![Finish](../assets/setup-finish.png) + ``` ``` diff --git a/mkdocs.yml b/mkdocs.yml index c5f26cee4..895353ab2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -43,14 +43,22 @@ nav: - Configure: - Channels: - configure/channels/index.md + - Properties: configure/channels/properties.md + - Flex: configure/channels/flex.md + - EPG: configure/channels/epg.md - Transcoding: configure/channels/transcoding.md - Programming: configure/programming.md - - Scheduling: - - configure/scheduling/index.md - - Tools: configure/scheduling/tools.md - - Time Slots: configure/scheduling/time-slots.md - - Random Slots: configure/scheduling/random-slots.md - - Flex: configure/flex.md + - Scheduling Tools: + - configure/scheduling-tools/index.md + - Time Slots: configure/scheduling-tools/time-slots.md + - Random Slots: configure/scheduling-tools/random-slots.md + - Balance: configure/scheduling-tools/balance.md + - Replicate: configure/scheduling-tools/replicate.md + - Consolidate: configure/scheduling-tools/consolidate.md + - Library: + - configure/library/index.md + - Filler: configure/library/filler.md + - Custom Shows: configure/library/custom-shows.md - System: configure/system.md - Clients: - configure/clients/index.md