Browse Source

remove docs files and workflow [no ci]

pull/1379/head
Jason Dove 2 years ago
parent
commit
5486dcdcab
  1. 21
      .github/workflows/docs.yml
  2. 25
      docs/development.md
  3. BIN
      docs/images/add-selection-to-collection.png
  4. BIN
      docs/images/add-to-collection-dialog.png
  5. 6
      docs/images/bugsnag.svg
  6. BIN
      docs/images/channels-custom-channels-source.png
  7. BIN
      docs/images/channels-guide-data-set-provider.png
  8. BIN
      docs/images/channels-xmltv-custom-url-dropdown.png
  9. BIN
      docs/images/channels-xmltv-custom-url.png
  10. BIN
      docs/images/emby-api-key.png
  11. BIN
      docs/images/emby-create-api-key-button.png
  12. BIN
      docs/images/emby-libraries-synchronize-switch.png
  13. BIN
      docs/images/emby-media-source-edit-libaries-icon.png
  14. BIN
      docs/images/emby-media-source-edit-path-replacements-icon.png
  15. BIN
      docs/images/emby-media-source-path-replacements.png
  16. BIN
      docs/images/ersatztv-square-logo.png
  17. BIN
      docs/images/ersatztv.png
  18. BIN
      docs/images/etv-m3u-xmltv-links.png
  19. BIN
      docs/images/favicon-32x32.png
  20. BIN
      docs/images/filler-preset-pad-to-30-with-commercials.png
  21. BIN
      docs/images/filler-preset-trailers-pre-roll.png
  22. BIN
      docs/images/jellyfin-add-tuner-device.png
  23. BIN
      docs/images/jellyfin-add-tv-guide-data-provider.png
  24. BIN
      docs/images/jellyfin-api-key.png
  25. BIN
      docs/images/jellyfin-create-api-key-button.png
  26. BIN
      docs/images/jellyfin-libraries-synchronize-switch.png
  27. BIN
      docs/images/jellyfin-live-tv-tuner-setup.png
  28. BIN
      docs/images/jellyfin-media-source-edit-libaries-icon.png
  29. BIN
      docs/images/jellyfin-media-source-edit-path-replacements-icon.png
  30. BIN
      docs/images/jellyfin-media-source-path-replacements.png
  31. BIN
      docs/images/jellyfin-xmltv-settings.png
  32. BIN
      docs/images/local-libraries-edit-icon.png
  33. BIN
      docs/images/plex-dvr-manual-address.png
  34. BIN
      docs/images/plex-dvr-xmltv-guide.png
  35. BIN
      docs/images/plex-libraries-synchronize-switch.png
  36. BIN
      docs/images/plex-live-tv-stream.png
  37. BIN
      docs/images/plex-media-source-edit-libaries-icon.png
  38. BIN
      docs/images/plex-media-source-edit-path-replacements-icon.png
  39. BIN
      docs/images/plex-media-source-path-replacements.png
  40. BIN
      docs/images/poster-selection-button.png
  41. BIN
      docs/images/sample-schedule-247-balanced-shows-1.png
  42. BIN
      docs/images/sample-schedule-247-balanced-shows-2.png
  43. BIN
      docs/images/sample-schedule-247-show-every-30-minutes-with-filler.png
  44. BIN
      docs/images/sample-schedule-247-show.png
  45. BIN
      docs/images/sample-schedule-247-shows-with-filler-1.png
  46. BIN
      docs/images/sample-schedule-247-shows-with-filler-2.png
  47. BIN
      docs/images/schedules-edit-schedule-items.png
  48. BIN
      docs/images/search-box.png
  49. BIN
      docs/images/shows-add-local-library-path.png
  50. BIN
      docs/images/tivimate-epg-url.png
  51. BIN
      docs/images/tivimate-playlist-url.png
  52. BIN
      docs/images/trakt-list-search.png
  53. BIN
      docs/images/unraid-docker-ersatz-branches.png
  54. BIN
      docs/images/unraid-docker-ersatz-hwtranscoding.png
  55. BIN
      docs/images/unraid-docker-install-ersatz.png
  56. BIN
      docs/images/unraid-install-community-apps.png
  57. BIN
      docs/images/unraid-path-to-configuration-data.png
  58. BIN
      docs/images/unraid-path-to-media-share.png
  59. 15
      docs/index.md
  60. 14
      docs/stylesheets/extra.css
  61. 13
      docs/thanks.md
  62. 199
      docs/user-guide/add-media-items.md
  63. 103
      docs/user-guide/configure-clients.md
  64. 115
      docs/user-guide/create-channels.md
  65. 65
      docs/user-guide/create-collections.md
  66. 38
      docs/user-guide/filler.md
  67. 115
      docs/user-guide/install.md
  68. 177
      docs/user-guide/local-libraries.md
  69. 31
      docs/user-guide/sample-schedules.md
  70. 201
      docs/user-guide/search.md

21
.github/workflows/docs.yml

@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
name: Publish docs via GitHub Pages
on:
push:
branches:
- main
paths:
- docs/**
- mkdocs.yml
jobs:
build:
name: Deploy docs
runs-on: ubuntu-latest
steps:
- name: Checkout master
uses: actions/checkout@v3
- name: Deploy docs
uses: mhausenblas/mkdocs-deploy-gh-pages@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CUSTOM_DOMAIN: ersatztv.org

25
docs/development.md

@ -1,25 +0,0 @@ @@ -1,25 +0,0 @@
## Development
### Requirements
- [.NET 5.0](https://dotnet.microsoft.com/download)
- [ffmpeg and ffprobe](https://ffmpeg.org/download.html)
### Run server
```shell
cd ErsatzTV
dotnet run
```
### Run tests
```shell
dotnet test
```
### Cleanup code
```shell
./scripts/cleanup-code.sh
```

BIN
docs/images/add-selection-to-collection.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

BIN
docs/images/add-to-collection-dialog.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

6
docs/images/bugsnag.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.2 KiB

BIN
docs/images/channels-custom-channels-source.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/images/channels-guide-data-set-provider.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/images/channels-xmltv-custom-url-dropdown.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/images/channels-xmltv-custom-url.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

BIN
docs/images/emby-api-key.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
docs/images/emby-create-api-key-button.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

BIN
docs/images/emby-libraries-synchronize-switch.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/images/emby-media-source-edit-libaries-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

BIN
docs/images/emby-media-source-edit-path-replacements-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

BIN
docs/images/emby-media-source-path-replacements.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/images/ersatztv-square-logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
docs/images/ersatztv.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

BIN
docs/images/etv-m3u-xmltv-links.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/images/favicon-32x32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

BIN
docs/images/filler-preset-pad-to-30-with-commercials.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/images/filler-preset-trailers-pre-roll.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

BIN
docs/images/jellyfin-add-tuner-device.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

BIN
docs/images/jellyfin-add-tv-guide-data-provider.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

BIN
docs/images/jellyfin-api-key.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/images/jellyfin-create-api-key-button.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
docs/images/jellyfin-libraries-synchronize-switch.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/images/jellyfin-live-tv-tuner-setup.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

BIN
docs/images/jellyfin-media-source-edit-libaries-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

BIN
docs/images/jellyfin-media-source-edit-path-replacements-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

BIN
docs/images/jellyfin-media-source-path-replacements.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/images/jellyfin-xmltv-settings.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

BIN
docs/images/local-libraries-edit-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/images/plex-dvr-manual-address.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

BIN
docs/images/plex-dvr-xmltv-guide.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/images/plex-libraries-synchronize-switch.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/images/plex-live-tv-stream.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

BIN
docs/images/plex-media-source-edit-libaries-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

BIN
docs/images/plex-media-source-edit-path-replacements-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

BIN
docs/images/plex-media-source-path-replacements.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/images/poster-selection-button.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

BIN
docs/images/sample-schedule-247-balanced-shows-1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

BIN
docs/images/sample-schedule-247-balanced-shows-2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

BIN
docs/images/sample-schedule-247-show-every-30-minutes-with-filler.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

BIN
docs/images/sample-schedule-247-show.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

BIN
docs/images/sample-schedule-247-shows-with-filler-1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

BIN
docs/images/sample-schedule-247-shows-with-filler-2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

BIN
docs/images/schedules-edit-schedule-items.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

BIN
docs/images/search-box.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

BIN
docs/images/shows-add-local-library-path.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

BIN
docs/images/tivimate-epg-url.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

BIN
docs/images/tivimate-playlist-url.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

BIN
docs/images/trakt-list-search.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

BIN
docs/images/unraid-docker-ersatz-branches.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

BIN
docs/images/unraid-docker-ersatz-hwtranscoding.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

BIN
docs/images/unraid-docker-install-ersatz.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

BIN
docs/images/unraid-install-community-apps.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

BIN
docs/images/unraid-path-to-configuration-data.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/images/unraid-path-to-media-share.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

15
docs/index.md

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
![ErsatzTV](images/ersatztv.png)
**ErsatzTV** is beta software for configuring and streaming custom live channels using your media library. The software may be unstable and is under active development.
Want to join the community or have a question? Join us on [Discord](https://discord.gg/hHaJm3yGy6).
Want to say thanks? Consider [sponsorship on GitHub](https://github.com/sponsors/jasongdove) or [one-time donations on PayPal](https://www.paypal.me/jasongdove).
# Quick Start
1. [Install ErsatzTV](user-guide/install.md)
2. [Add Media Items](user-guide/add-media-items.md)
3. [Create Collections](user-guide/create-collections.md)
4. [Create Channels](user-guide/create-channels.md)
5. [Configure Clients](user-guide/configure-clients.md)

14
docs/stylesheets/extra.css

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
:root {
--md-primary-fg-color: #121212;
}
[data-md-color-scheme="slate"] {
--md-default-bg-color: #272727;
--md-typeset-a-color: #00a0a0;
--md-accent-fg-color: #00c0c0;
--md-default-fg-color--light: #ffffff;
--md-code-bg-color: #1f1f1f;
--md-footer-bg-color: #1f1f1f;
--md-footer-bg-color--dark: #121212;
}

13
docs/thanks.md

@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
[<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png" alt="JetBrains" width="128"/>](https://www.jetbrains.com)
Thank you to [JetBrains](https://www.jetbrains.com) for providing free licenses to their awesome tools, including:
- [Rider](https://www.jetbrains.com/rider)
- [DataGrip](https://www.jetbrains.com/datagrip)
<br />
<br />
[<img src="../images/bugsnag.svg" alt="Bugsnag" width="256"/>](https://www.bugsnag.com)
Thank you to [Bugsnag](https://www.bugsnag.com) for providing a free license to their app health monitoring software.

199
docs/user-guide/add-media-items.md

@ -1,199 +0,0 @@ @@ -1,199 +0,0 @@
ErsatzTV needs to know about your media items in order to create channels.
Four library kinds are currently supported: [Local](#local-libraries), [Plex](#plex-libraries), [Jellyfin](#jellyfin-libraries) and [Emby](#emby-libraries).
ErsatzTV supports a subset of media kinds when synchronizing from media servers, i.e. [Plex](#plex-libraries), [Jellyfin](#jellyfin-libraries) and [Emby](#emby-libraries) only support `Movies` and `Shows`.
[Local Libraries](#local-libraries) support all media kinds: `Movies`, `Shows`, `Music Videos`, `Other Videos` and `Songs`.
## Local Libraries
Local libraries provide a way to schedule media directly from folders; no media server is necessary.
### Metadata
With local libraries, ErsatzTV will read metadata from [NFO files](https://kodi.wiki/view/NFO_files), falling back to a *minimal* amount of metadata if NFO files are not found.
### Add Libraries
ErsatzTV provides four local libraries by default, one for each supported media kind: `Movies`, `Shows`, `Music Videos`, `Other Videos` and `Songs`.
Additional libraries can be added under `Media Sources` > `Local`.
### Add Media Items
To add media items to a local library under `Media Sources` > `Local`, click the edit button for the library:
![Local Libraries Edit Icon](../images/local-libraries-edit-icon.png)
In the `Path` field, enter the path where your media files of the appropriate kind are stored:
![Add Local Library Path](../images/shows-add-local-library-path.png)
Finally, click `Add Path`.
When you have added all of your media paths, click `Save Changes` and ErsatzTV will scan and import your media items.
## Plex Libraries
Plex libraries provide a way to synchronize your media (metadata) from Plex to ErsatzTV.
This synchronization process is one-way: changes made within Plex are synchronized to ErsatzTV.
ErsatzTV will never make any modifications to your Plex configuration or media.
### Metadata
With Plex libraries, Plex provides all metadata.
### Add Media Items
#### Sign In
To add media items from Plex, under `Media Sources` > `Plex` click the `Sign in to Plex` button and sign in with your Plex account.
#### Synchronize Libraries
After signing in, select which libraries you would like to synchronize from Plex to ErsatzTV by clicking the `Edit Libraries` button for the desired Plex server.
![Plex Edit Libraries Icon](../images/plex-media-source-edit-libaries-icon.png)
In the libraries listing, click the `Synchronize` switch for all libraries you would like to synchronize from Plex to ErsatzTV, and click the `Save Changes` button to start the synchronization process.
![Plex Libraries Synchronize Switch](../images/plex-libraries-synchronize-switch.png)
### Streaming From Disk
Media items are streamed from Plex media sources by default. Instead, if you would like to stream from disk, ErsatzTV will check for media items using the same path that Plex uses to play the media item.
There are two ways to make this work:
1. Ensure ErsatzTV has access to exactly the same shares and mounts as Plex
2. Configure path replacements to tell ErsatzTV where it should look on its file system for a given Plex folder
Option 1 is recommended as it will "just work" without any further configuration.
To configure path replacements for a Plex media source, click the `Edit Path Replacements` button in the
![Plex Edit Path Replacements Icon](../images/plex-media-source-edit-path-replacements-icon.png)
Click `Add Path Replacement` to add a new path replacement, and enter the `Plex Path` along with the equivalent `Local Path` for ErsatzTV.
Click `Save Changes` after you have created all needed path replacements.
![Plex Path Replacements](../images/plex-media-source-path-replacements.png)
## Jellyfin Libraries
Jellyfin libraries provide a way to synchronize your media (metadata) from Jellyfin to ErsatzTV. This synchronization process is one-way: changes made within Jellyfin are synchronized to ErsatzTV. ErsatzTV will never make any modifications to your Jellyfin configuration or media.
### Metadata
With Jellyfin libraries, Jellyfin provides all metadata.
### Add Media Items
#### Connect to Server
Connecting to a Jellyfin server requires two settings: the server address and an api key.
##### Server Address
The server address is the address that you type in your web browser to access your Jellyfin server.
##### API Key
To create a Jellyfin API Key, from the `Admin / Dashboard` in Jellyfin, select `Advanced / API Keys` and click the `+` button near the top.
![Jellyfin Create API Key Button](../images/jellyfin-create-api-key-button.png)
Give the API Key a name like `ErsatzTV` and click `Ok`. The API key is then displayed.
![Jellyfin API Key](../images/jellyfin-api-key.png)
##### Configuration
Finally, in ErsatzTV, under `Media Sources` > `Jellyfin` click the `Connect Jellyfin` button, enter the `Address` and `Api Key` and click `Save Changes` to connect to your Jellyfin server.
#### Synchronize Libraries
After connecting, select which libraries you would like to synchronize from Jellyfin to ErsatzTV by clicking the `Edit Libraries` button for the desired Jellyfin server.
![Jellyfin Edit Libraries Icon](../images/jellyfin-media-source-edit-libaries-icon.png)
In the libraries listing, click the `Synchronize` switch for all libraries you would like to synchronize from Jellyfin to ErsatzTV, and click the `Save Changes` button to start the synchronization process.
![Jellyfin Libraries Synchronize Switch](../images/jellyfin-libraries-synchronize-switch.png)
### Streaming From Disk
Media items are streamed from Jellyfin media sources by default. Instead, if you would like to stream from disk, ErsatzTV will check for media items using the same path that Jellyfin uses to play the media item.
There are two ways to make this work:
1. Ensure ErsatzTV has access to exactly the same shares and mounts as Jellyfin
2. Configure path replacements to tell ErsatzTV where it should look on its file system for a given Jellyfin folder
Option 1 is recommended as it will "just work" without any further configuration.
To configure path replacements for a Jellyfin media source, click the `Edit Path Replacements` button in the
![Jellyfin Edit Path Replacements Icon](../images/jellyfin-media-source-edit-path-replacements-icon.png)
Click `Add Path Replacement` to add a new path replacement, and enter the `Jellyfin Path` along with the equivalent `Local Path` for ErsatzTV.
Click `Save Changes` after you have created all needed path replacements.
![Jellyfin Path Replacements](../images/jellyfin-media-source-path-replacements.png)
## Emby Libraries
Emby libraries provide a way to synchronize your media (metadata) from Emby to ErsatzTV. This synchronization process is one-way: changes made within Emby are synchronized to ErsatzTV. ErsatzTV will never make any modifications to your Emby configuration or media.
### Metadata
With Emby libraries, Emby provides all metadata.
### Add Media Items
#### Connect to Server
Connecting to a Emby server requires two settings: the server address and an api key.
##### Server Address
The server address is the address that you type in your web browser to access your Emby server.
##### API Key
To create a Emby API Key, from the `Admin / Manage Emby Server` in Emby, select `Advanced / API Keys` and click the `+ New Api Key` button near the top.
![Emby Create API Key Button](../images/emby-create-api-key-button.png)
Give the API Key a name like `ErsatzTV` and click `Ok`. The API key is then displayed.
![Emby API Key](../images/emby-api-key.png)
##### Configuration
Finally, in ErsatzTV, under `Media Sources` > `Emby` click the `Connect Emby` button, enter the `Address` and `Api Key` and click `Save Changes` to connect to your Emby server.
#### Synchronize Libraries
After connecting, select which libraries you would like to synchronize from Emby to ErsatzTV by clicking the `Edit Libraries` button for the desired Emby server.
![Emby Edit Libraries Icon](../images/emby-media-source-edit-libaries-icon.png)
In the libraries listing, click the `Synchronize` switch for all libraries you would like to synchronize from Emby to ErsatzTV, and click the `Save Changes` button to start the synchronization process.
![Emby Libraries Synchronize Switch](../images/emby-libraries-synchronize-switch.png)
### Streaming From Disk
Media items are streamed from Emby media sources by default. Instead, if you would like to stream from disk, ErsatzTV will check for media items using the same path that Emby uses to play the media item.
There are two ways to make this work:
1. Ensure ErsatzTV has access to exactly the same shares and mounts as Emby
2. Configure path replacements to tell ErsatzTV where it should look on its file system for a given Emby folder
Option 1 is recommended as it will "just work" without any further configuration.
To configure path replacements for a Emby media source, click the `Edit Path Replacements` button in the
![Emby Edit Path Replacements Icon](../images/emby-media-source-edit-path-replacements-icon.png)
Click `Add Path Replacement` to add a new path replacement, and enter the `Emby Path` along with the equivalent `Local Path` for ErsatzTV.
Click `Save Changes` after you have created all needed path replacements.
![Emby Path Replacements](../images/emby-media-source-path-replacements.png)

103
docs/user-guide/configure-clients.md

@ -1,103 +0,0 @@ @@ -1,103 +0,0 @@
## Required Urls
For all clients, the `M3U` and/or the `XMLTV` urls are needed and can be copied from the top right of the ErsatzTV UI.
![ErsatzTV M3U and XMLTV Links](../images/etv-m3u-xmltv-links.png)
## Supported Clients
- [Plex](#plex)
- [Jellyfin](#jellyfin)
- [TiviMate](#tivimate)
- [Channels DVR Server](#channels-dvr-server)
## Plex
A [Plex Pass](https://www.plex.tv/plex-pass/) is required for ErsatzTV to work with Plex.
The only channel streaming mode supported directly by Plex clients is `MPEG-TS`.
### Add DVR
From Plex Settings, click `Live TV & DVR` and `Set Up Plex DVR` to add a new DVR.
If ErsatzTV is not automatically detected
* Click to `enter its network address manually`
* Enter ErsatzTV's IP address and port, like `192.168.1.100:8409` (use your server IP, not necessarily 192.168.1.100)
* Click `Connect`
![Plex DVR Manual Address](../images/plex-dvr-manual-address.png)
### Add XMLTV
Click `Continue` on the channel listing, then
* Click `Have an XMLTV guide on your server? Click here to use that instead.`
* Enter the `XMLTV` url from ErsatzTV (see [required urls](#required-urls)) and click `Continue`
![Plex DVR XMLTV Guide](../images/plex-dvr-xmltv-guide.png)
Make any desired changes to the channels, then click `Continue` to complete DVR setup.
## Jellyfin
Jellyfin requires two steps to configure Live TV:
- [Add Tuner Device](#add-tuner-device)
- [Add TV Guide Data](#add-tv-guide-data)
### Add Tuner Device
From the Admin Dashboard in Jellyfin, click `Live TV` and `+` to add a new tuner device:
![Jellyfin Add Tuner Device](../images/jellyfin-add-tuner-device.png)
For `Tuner Type` select `M3U Tuner`, for `File or URL` enter the `M3U` url from ErsatzTV (see [required urls](#required-urls)), and click `Save`.
![Jellyfin Live TV Tuner Setup](../images/jellyfin-live-tv-tuner-setup.png)
### Add TV Guide Data
From the Admin Dashboard in Jellyfin, click `Live TV` and `+` to add a tv guide data provider and select `XMLTV`.
![Jellyfin Add TV Guide Data Provider](../images/jellyfin-add-tv-guide-data-provider.png)
Enter the `XMLTV` url from ErsatzTV (see [required urls](#required-urls)) and click `Save`.
![Jellyfin XMLTV Settings](../images/jellyfin-xmltv-settings.png)
## TiviMate
### Add Playlist
Start by adding a playlist under `Settings` > `Playlists` > `Add playlist`.
The playlist type is `M3U Playlist` and the url is the `M3U` url from ErsatzTV (see [required urls](#required-urls)).
![TiviMate Playlist URL](../images/tivimate-playlist-url.png)
Change the playlist name if desired, and leave `TV playlist` selected.
### Add EPG
The EPG url should be automatically detected by TiviMate, but can be manually entered as the `XMLTV` url from ErsatzTV (see [required urls](#required-urls)).
![TiviMate EPG URL](../images/tivimate-epg-url.png)
## Channels DVR Server
[Channels Plus](https://getchannels.com/plus/) is required for ErsatzTV to work with Channels (via Channels DVR Server).
### Add Custom Channel Source
In Channels DVR Server Settings, click `Add Source` and select `Custom Channels`.
- Give your custom channel source a name
- Select `MPEG-TS` as the stream format
- Enter the `M3U` url from ErsatzTV (see [required urls](#required-urls)) as the Source
- Select `Refresh URL daily`
- Set a stream limit if desired (not required)
- Enter the `XMLTV` url from ErsatzTV (see [required urls](#required-urls)) as the XMLTV Guide Data
- Select a refresh interval based on how often you expect to make changes to playouts
- Click `Save`
![Channels Custom Channel Source](../images/channels-custom-channels-source.png)

115
docs/user-guide/create-channels.md

@ -1,115 +0,0 @@ @@ -1,115 +0,0 @@
## Create Channel
Create a Channel by navigating to the `Channels` page and clicking `Add Channel`.
### Channel Number
Channel numbers can be whole numbers or can contain one decimal, like `500` or `500.5`.
### Streaming Mode
Four streaming modes are currently supported. Ideally one of the two primary streaming modes should be used; secondary streaming modes are only needed in some edge cases.
#### Primary Streaming Modes
The two primary streaming modes are `HLS Segmenter` (HTTP Live Streaming Segmenter) and `MPEG-TS` (Transport Stream).
* `HLS Segmenter` transcodes content, supports watermarks and offers the best performance at program boundaries
* `MPEG-TS` is a light wrapper over the `HLS Segmenter` streaming mode and provides support for clients that require an HDHomeRun tuner
#### Secondary Streaming Modes
The two secondary streaming modes are `HLS Direct` (HTTP Live Streaming Direct) and `MPEG-TS (Legacy)` (Legacy Transport Stream).
* `HLS Direct` does not transcode content and can perform better on low power systems, but does not support watermarks and some clients will have issues at program boundaries
* `MPEG-TS (Legacy)` transcodes content and supports watermarks, though some clients will have issues at program boundaries. This mode will be removed with a future release.
### FFmpeg Profile
FFmpeg Profiles are collections of transcoding settings that are applied to all content on a channel.
The default FFmpeg Profile is probably "good enough" for initial testing.
### Logo
Channel logos can be added using the `Upload Logo` button and the logos will display in most client program guides.
## Create Schedule
Schedules are used to control the playback order of media items on a channel.
Create a Schedule by navigating to the `Schedules` page, clicking `Add Schedule` and giving your schedule a name, and selecting the appropriate settings:
* `Keep Multi-Part Episodes Together`: This only applies to shuffled schedule items, and will try to intelligently group multi-part episodes (i.e. `s05e02 - whatever part 1` and `s05e03 - whatever part 2`) so they are always scheduled together and always play in the correct order.
* `Treat Collections As Shows`: This only applies when `Keep Multi-Part Episodes Together` is enabled, and will try to group multi-part episodes across shows within the collection (i.e. crossover episodes like `Show 1 - s03e04 - Whatever Part 1` and `Show 2 - s01e07 - Whatever Part 2`).
* `Shuffle Schedule Items`: This shuffles the order of schedule items when building a playout, and is mostly used on channels with a mix of shows that require unique schedule item settings per show. Note that this disables fixed start times and flood mode.
* `Random Start Point`: This starts each schedule item at a random place within the collection.
### Schedule Items
Schedules contain an ordered list of items (collections), and will play back one or more items from each collection before advancing to the next schedule item.
Edit the new schedule's items by clicking the `Edit Schedule Items` button for the schedule:
![Schedules Edit Schedule Items Button](../images/schedules-edit-schedule-items.png)
Add a new item to the schedule by clicking `Add Schedule Item` and configure as desired.
#### Start Type
Items with a `Dynamic` start type will start immediately after the preceding schedule item, while a `Fixed` start type requires a start time.
#### Collection Type
Schedule items can contain the following collection types:
- `Collection`: Select a collection that you have created manually.
- `Television Show`: Select an entire television show.
- `Television Season`: Select a specific season of a television show.
- `Artist`: Select all music videos for a specific artist.
- `Multi Collection`: Select all collections within a multi-collection.
- `Smart Collection`: Select all items that match a saved search query.
#### Collection
Based on the selected collection type, select the desired collection.
#### Playback Order
Select the desired playback order for media items within the selected collection:
- `Chronological`: Items are ordered by release date, then by season and episode number.
- `Random`: Items are randomly ordered and may contain repeats.
- `Shuffle`: Items are randomly ordered and no item will be played a second time until every item from the collection has been played once.
- `Shuffle In Order`: Items are grouped (episodes by show, music videos by artist, one group for all movies), the group contents are sorted chronologically, and the groups are shuffled together while maintaining their individual chronological ordering.
#### Playout Mode
Select how you want this schedule item to behave every time it is selected for playback.
- `One`: Play one media item from the collection before advancing to the next schedule item.
- `Multiple`: Play the specified `Multiple Count` of media items from the collection before advancing to the next schedule item.
- `Duration`: Play the maximum number of complete media items that will fit in the specified `Playout Duration`
- `Flood`: Play media items from the collection either forever or until the next schedule item's start time, if one exists.
Click `Save Changes` to save all changes made to the schedule's items.
#### Tail Mode (Duration)
Select how you want this duration schedule item to behave when no more complete media items will fit in the specified `Playout Duration`:
- `(none)`: Immediately advance to the next schedule item
- `Offline`: Show the ETV offline image for the remainder of the `Playout Duration`
- `Filler`: Fill the remainder of the `Playout Duration` with the specified collection, followed by the ETV offline image if needed
#### Guide Mode
Select how you want this schedule item to behave in the channel guide:
- `Normal`: show all scheduled items in the channel guide
- `Filler`: hide all scheduled items from the channel guide, and extend the end time for the previous item in the guide
## Create Playout
Playouts assign a schedule to a channel and individually track the ordered playback of collection items.
If a schedule is used in multiple playouts (channels), the channels may not have the same content playing at the same time.
To create a Playout, navigate to the `Playouts` page and click the `Add Playout` button. Then, select the appropriate channel and schedule, and click `Add Playout` to save.

65
docs/user-guide/create-collections.md

@ -1,65 +0,0 @@ @@ -1,65 +0,0 @@
## Collection Types
ErsatzTV does not schedule individual media items; only collections of items can be scheduled. There are three (3) collection types:
- `Collection`: contains manually-added items
- `Smart Collection`: contains items from search results or imported Trakt Lists, and updates dynamically
- `Multi Collection`: contains other Collections and Smart Collections.
### Collections
Collections are created manually by adding individual media items to it. There is no restriction on media type. A collection can contain a single media type, eg. movies or any combination of media types.
The items to be added can be found by browsing your libraries or by using ErsatzTV's powerful [Search](../search) feature. An empty collection can be created under `Lists` > `Collections` > `Add Collection`.
To create a collection, find the media items you would like to include and select them by clicking the selection button in the top left of the poster:
![Poster Selection Button](../images/poster-selection-button.png)
Then, add to a collection by clicking the `Add To Collection` button at the top of the page.
![Add Selection To Collection](../images/add-selection-to-collection.png)
In the `Add To Collection` dialog, either select an existing collection for the items, or enter a new collection name to create a collection and add all of the selected items in a single step.
![Add To Collection Dialog](../images/add-to-collection-dialog.png)
### Smart Collections
Smart Collections are created by saving searches or saving imported Trakt Lists.
#### From Searches
To create a smart collection, type a search query in the search box and press enter.
If the result shown meets your expectations, save as a Smart Collection by clicking the `Save As` button.
If it doesn't meet your expectations, refine the search query until it does and then save.
#### From Imported Trakt Lists
To import a Trakt List, navigate to the `Lists` > `Trakt Lists` page and click the `Add Trakt List` button. Trakt lists can be imported by url or by `user/list`.
- To re-download a Trakt List, simply add it again. There is no need to delete.
- Unmatched item details are written to the log.
- Trakt Lists can only be scheduled after being saved as a Smart Collection.
To see matching items from an imported Trakt list, click the search button on the row of the Trakt List.
![Trakt List Search](../images/trakt-list-search.png)
### Multi Collections
Multi Collections contain other Collections and/or Smart Collections. The primary purpose of these are to enable the scheduling of sets of Media Items in a controlled manner.
Here we are referring to Movie Boxsets, e.g. X-Men Collection, Star Trek Collection and Before... Collection as well as related movies and tv show groups such as Arrowverse, MARVEL Cinematic Universe, Worlds of DC and Battlestar Galactica (Reboot).
To Add a Multi Collection
- Navigate to `Lists` > `Collections` and click the `Add Multi Collection` button
- Give the Multi Collection a name
- Add collections and/or smart collections as required and click `Add Multi Collection` to save
---
Big Buck Bunny: (c) copyright 2008, Blender Foundation / [www.bigbuckbunny.org](https://www.bigbuckbunny.org)
Sintel: © copyright Blender Foundation | [www.sintel.org](https://www.sintel.org)
Tears of Steel: (CC) Blender Foundation | [mango.blender.org](https://mango.blender.org)

38
docs/user-guide/filler.md

@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
Filler is content that is used to fill otherwise unscheduled gaps, and to pad primary content to a desired time.
## Filler Kinds
There are a number of filler kinds supported by ErsatzTV:
- `Pre-roll`: filler that plays before each media item
- `Mid-roll`: filler that plays between chapters within each media item
- `Post-roll`: filler that plays after each media item
- `Tail`: filler that plays after all media items/filler and before the next schedule item
- `Fallback`: filler that is looped and cut as needed to fill any remaining gaps
## Filler Modes
`Pre-roll`, `mid-roll`, and `post-roll` filler support the following modes:
- `Count`: play a specific number of filler items from the collection
- `Duration`: play as many complete filler items that will fit in the specified duration
- `Pad`: after all other filler has been added, pad using additional filler until the wall clock minutes are a multiple of the selected number
## Filler Presets
To add filler to a schedule, a filler preset must first be created under `Lists` > `Filler Presets`.
Once a filler preset is created, it can be attached to any number of schedule items in the schedule items editor.
### Sample Preset: Trailers Pre-Roll
This preset will play exactly three items from the `All Trailers` smart collection before each media item.
![Trailers Pre-Roll](../images/filler-preset-trailers-pre-roll.png)
### Sample Preset: Pad To 30 Minutes With Commercials
This preset will pad each media item to 30 minutes using items from the `Short Commercials` smart collection.
Because `mid-roll` is selected as the filler kind, the filler will be approximately evenly distributed between chapters.
![Pad To 30 With Commercials](../images/filler-preset-pad-to-30-with-commercials.png)

115
docs/user-guide/install.md

@ -1,115 +0,0 @@ @@ -1,115 +0,0 @@
ErsatzTV is available as Docker images and as pre-built binary packages for Windows (x64), MacOS (x64, arm64) and Linux (x64, arm64, arm).
## Docker Images
<a href="https://hub.docker.com/r/jasongdove/ersatztv"><img alt="Docker Pull Count" src="https://img.shields.io/docker/pulls/jasongdove/ersatztv"></a>
### Latest Release Tags
Base (software transcoding): `jasongdove/ersatztv:latest`
Nvidia hardware-accelerated transcoding: `jasongdove/ersatztv:latest-nvidia`
VAAPI (Intel, AMD) hardware-accelerated transcoding: `jasongdove/ersatztv:latest-vaapi`
### Development Tags
Development tags update much more frequently, but have the potential to be less stable than releases.
Base (software transcoding): `jasongdove/ersatztv:develop`
Nvidia hardware-accelerated transcoding: `jasongdove/ersatztv:develop-nvidia`
VAAPI (Intel, AMD) hardware-accelerated transcoding: `jasongdove/ersatztv:develop-vaapi`
### Docker
1\. Download the latest container image
```
docker pull jasongdove/ersatztv
```
2\. Create a directory to store configuration data
```
mkdir /path/to/config
```
3\. Create and run a container
```
docker run -d \
--name ersatztv \
-e TZ=America/Chicago \
-p 8409:8409 \
-v /path/to/config:/root/.local/share/ersatztv \
-v /path/to/local/media:/path/to/local/media:ro \
--restart unless-stopped \
jasongdove/ersatztv
```
### Unraid Docker
1. Install the Commuinity Applications plugin by pasting the following URL in the Plugins / Install Plugin section of UnRAID
```
https://raw.githubusercontent.com/Squidly271/community.applications/master/plugins/community.applications.plg
```
![Community Applications Install](../images/unraid-install-community-apps.png)
2. Click on the `Apps` tab in UnRAID, search for `ersatztv`, and click the `install` button.
![Search Community Applications ErsatzTV](../images/unraid-docker-install-ersatz.png)
3. Choose an appropriate branch (Use `vaapi` for video acceleration for AMD GPUs and Intel CPUs with QuickSync, use `nvidia` for video acceleration for nVidia GPUs)
![ErsatzTV Docker branches](../images/unraid-docker-ersatz-branches.png)
`VAAPI` and `nVidia` branches are for hardware acceleration. See [latest release tags](install.md#latest-release-tags)
4. Map your path to ErsatzTV configuration data
![Media Mapping](../images/unraid-path-to-configuration-data.png)
5. Add another path for each media share
![Media Mapping](../images/unraid-path-to-media-share.png)
6. **OPTIONAL** In advanced view, add extra parameters for video acceleration. **NOTE** The [nVidia-Driver plugin](https://forums.unraid.net/topic/98978-plugin-nvidia-driver/) must be installed prior to this step.
![Adding video acceleration options](../images/unraid-docker-ersatz-hwtranscoding.png)
7. Open your browser to `http://[docker-ip]:8409` (First run may take a few minutes to be available.)
## Development Builds
Development builds for all supported architectures can be found on the [develop release](https://github.com/ErsatzTV/ErsatzTV/releases/tag/develop).
As with the docker development tags, the development builds are updated with every push to the main branch and have the potential to be less stable than releases.
## Windows
### Manual Installation
1. Create a folder `ersatztv` at your preferred install location.
2. Download and extract the [latest release from GitHub](https://github.com/ErsatzTV/ErsatzTV/releases) to the `ersatztv` folder.
3. Run `ErsatzTV-Windows.exe`
4. Use the tray menu to open the UI, view logs or exit
## MacOS
### Manual Installation
1. Download the .dmg from the [latest release from GitHub](https://github.com/ErsatzTV/ErsatzTV/releases)
2. Open the .dmg and drag `ErsatzTV` to the `Applications` folder
3. Double-click the `ErsatzTV` application
4. Use the tray menu to open the UI, view logs or exit
## Linux
### Manual Installation
1. Create a folder `ersatztv` at your preferred install location.
2. Download and extract the [latest release from GitHub](https://github.com/ErsatzTV/ErsatzTV/releases) to the `ersatztv` folder.
3. Run `ErsatzTV`
4. Open your browser to `http://[server-ip]:8409`

177
docs/user-guide/local-libraries.md

@ -1,177 +0,0 @@ @@ -1,177 +0,0 @@
## Movies
### Folder Layout
The `Movies` library requires movie subfolders. The following is a (non-exhaustive) list of valid locations for movies:
- `Movie (1999)\Movie (1999).mkv`
- `Movie\Movie.mkv`
### NFO Metadata
Each movie folder may contain a `movie.nfo` file, or an NFO file with exactly the same name as the movie, except for the `.nfo` extension. See [Kodi Wiki](https://kodi.wiki/view/NFO_files/Movies) for more information.
ErsatzTV will read the following fields from the movie NFO:
- Title
- Sort Title
- Outline
- Year
- MPAA
- Premiered
- Plot
- Genre(s)
- Tag(s)
- Studio(s)
- Actor(s)
- Credit(s)
- Director(s)
- Unique Id(s)
### Movie Fallback Metadata
When no movie NFO is found, the movie metadata will only contain a title and a year, both parsed from the movie file name. Example:
- `Movie (1999).mkv`
## Shows
### Folder Layout
The `Shows` library requires show and season subfolders. The following is a (non-exhaustive) list of valid locations for episodes:
- `Show (1999)\Season 01\Show - S01E01.mp4`
- `Show\Season 1\Show - s1e1.mp4`
- `Show\Season 1\Episode 1\Show - s1e1.mp4`
### Show NFO Metadata
Each show folder may contain a `tvshow.nfo` file. See [Kodi Wiki](https://kodi.wiki/view/NFO_files/TV_shows#TV_Show) for more information.
ErsatzTV will read the following fields from the show NFO:
- Title
- Year
- Premiered
- Plot
- Genre(s)
- Tag(s)
- Studio(s)
### Show Fallback Metadata
When no show NFO is found, the show metadata will only contain the title and an optional year, both parsed from the episode file name.
Examples:
- `Title`
- `Title (1999)`
### Season Metadata
The season number is parsed from the season subfolder.
Examples:
- `Season 01`
- `Season 1`
### Episode NFO Metadata
Each episode may have a corresponding NFO file with exactly the same name, except for the `.nfo` extension. See [Kodi Wiki](https://kodi.wiki/view/NFO_files/TV_shows#Episodes) for more information.
ErsatzTV will read the following fields from the episode NFO:
- Title
- Episode
- Aired
- Plot
### Episode Fallback Metadata
When no episode NFO is found, the episode metadata will only contain the title and the episode number, both parsed from the episode file name.
Examples:
- `Title - s01e04.mkv`
- `Title - S1E4.mkv`
## Music Videos
### Folder Layout
The `Music Videos` library requires artist subfolders. The following is a (non-exhaustive) list of valid locations for music videos:
- `Artist\Album\Track.mp4`
- `Artist\Track\Track.mp4`
- `Artist\Track.mp4`
### Artist NFO Metadata
Each artist subfolder may contain an `artist.nfo` file. See [Kodi Wiki](https://kodi.wiki/view/NFO_files/Music#Artists) for more information.
ErsatzTV will read the following fields from the artist NFO:
- Name
- Disambiguation
- Biography
- Genre(s)
- Style(s)
- Mood(s)
### Artist Fallback Metadata
When no artist NFO is found, the artist metadata will only contain a name, which will be the exact name of the artist subfolder.
## Other Videos
### Folder Layout
The `Other Videos` library has no folder requirements, but folders can be a useful source of metadata.
### NFO Metadata
Each other video may have a corresponding NFO file with exactly the same name, except for the `.nfo` extension. The NFO must use the movie format. See [Kodi Wiki](https://kodi.wiki/view/NFO_files/Movies) for more information.
ErsatzTV will read the following fields from the other video NFO:
- Title
- Sort Title
- Outline
- Year
- MPAA
- Premiered
- Plot
- Genre(s)
- Tag(s)
- Studio(s)
- Actor(s)
- Credit(s)
- Director(s)
- Unique Id(s)
### Other Video Fallback Metadata
Other videos will have a tag added to their metadata for every containing folder, including the top-level folder. As an example, consider adding a commercials folder with the following files:
- `Commercials\1990\Cars\1990 Car Commercial 1.mkv`
- `Commercials\1992\Cars\1992 Car Commercial 1.mkv`
Your other video library will then have two media items with the following metadata:
1. title: `1990 Car Commercial 1`, tags: `Commercials`, `1990`, `Cars`
2. title: `1992 Car Commercial 1`, tags: `Commercials`, `1992`, `Cars`
## Songs
### Folder Layout
The `Songs` library has no folder requirements, but folders can be a useful source of metadata.
### Songs Metadata
Songs will have basic metadata pulled from embedded tags (artist, album, title).
### Songs Fallback Metadata
Songs will have a tag added to their metadata for every containing folder, including the top-level folder. As an example, consider adding a songs folder with the following files:
- `Rock\Awesome Band\Awesome Album\01 Track 1.flac`
- `Rock\Awesome Band\Better Album\05 Track 5.flac`
Your songs library will then have two media items with the following metadata:
1. title: `01 Track 1`, tags: `Rock`, `Awesome Band`, `Awesome Album`
2. title: `05 Track 5`, tags: `Rock`, `Awesome Band`, `Better Album`

31
docs/user-guide/sample-schedules.md

@ -1,31 +0,0 @@ @@ -1,31 +0,0 @@
## 24/7 Show
This schedule will play a single show 24/7, chronologically, repeating forever with no gaps
Schedule Item 1|
:--:|
![24/7 Show](../images/sample-schedule-247-show.png)|
## 24/7 Balanced Shows
This schedule will play multiple shows in a specific order, each playing chronologically, repeating forever with no gaps
Schedule Item 1 | Schedule Item 2
:--:|:--:
![24/7 Balanced Shows 1](../images/sample-schedule-247-balanced-shows-1.png) | ![24/7 Balanced Shows 2](../images/sample-schedule-247-balanced-shows-2.png)
## 24/7 Shows with Filler
This schedule will play multiple shows, in a mixed order, each playing chronologically, repeating forever with up to 5 minutes of filler between each episode
Schedule Item 1 | Schedule Item 2
:--:|:--:
![24/7 Shows With Filler 1](../images/sample-schedule-247-shows-with-filler-1.png) | ![24/7 Shows With Filler 2](../images/sample-schedule-247-shows-with-filler-2.png)
## 24/7 Show Every 30 Minutes with Filler
This schedule will play a single show 24/7, shuffled, repeating forever and will pad the end of each show to a full 30 minutes with filler content
Schedule Item 1|
:--:|
![24/7 Show Every 30 Minutes with Filler](../images/sample-schedule-247-show-every-30-minutes-with-filler.png)|

201
docs/user-guide/search.md

@ -1,201 +0,0 @@ @@ -1,201 +0,0 @@
## Search Box
Movies, Shows, Episodes, Artists and Music Videos can be searched using the search box next to the ErsatzTV logo.
![Search Box](../images/search-box.png)
## Search Fields
The `title` field of all media types is searched by default if no other field is specified.
### Movies
The following fields are available for searching movies:
- `title`: The movie title
- `genre`: The movie genre
- `tag`: The movie tag (not available with Plex metadata)
- `plot`: The movie plot
- `studio`: The movie studio
- `actor`: An actor from the movie
- `director`: A director from the movie
- `writer`: A writer from the movie
- `library_name`: The name of the library that contains the movie
- `content_rating`: The movie content rating (case-sensitive)
- `language`: The movie audio stream language
- `release_date`: The movie release date (YYYYMMDD)
- `added_date`: The date the movie was added to ErsatzTV (YYYYMMDD)
- `minutes`: The rounded-up whole number duration of the movie in minutes
- `height`: The movie height
- `width`: The movie width
- `video_codec`: The video codec
- `video_bit_depth`: The number of bits in the movie's pixel format
- `video_dynamic_range`: The movie's dynamic range (`sdr` or `hdr`)
- `type`: Always `movie`
### Shows
The following fields are available for searching shows:
- `title`: The show title
- `genre`: The show genre
- `tag`: The show tag (not available with Plex metadata)
- `plot`: The show plot
- `studio`: The show studio
- `actor`: An actor from the show
- `library_name`: The name of the library that contains the show
- `content_rating`: The show content rating (case-sensitive)
- `language`: The show audio stream language
- `release_date`: The show release date (YYYYMMDD)
- `added_date`: The date the show was added to ErsatzTV (YYYYMMDD)
- `type`: Always `show`
### Seasons
The following fields are available for searching seasons:
- `title`: The season title
- `library_name`: The name of the library that contains the season
- `season_number`: The season number
- `show_title`: The title of the show that contains the season
- `show_genre`: The genre of the show that contains the season
- `show_tag`: The tag of the show that contains the season
- `type`: Always `season`
### Episodes
The following fields are available for searching episodes:
- `title`: The episode title
- `plot`: The episode plot
- `director`: A director from the episode
- `writer`: A writer from the episode
- `library_name`: The name of the library that contains the episode
- `language`: The episode audio stream language
- `release_date`: The episode release date (YYYYMMDD)
- `added_date`: The date the episode was added to ErsatzTV (YYYYMMDD)
- `minutes`: The rounded-up whole number duration of the episode in minutes
- `height`: The episode height
- `width`: The episode width
- `season_number`: The episode season number
- `episode_number`: The episode number
- `show_title`: The title of the show that contains the episode
- `show_genre`: The genre of the show that contains the episode
- `show_tag`: The tag of the show that contains the episode
- `video_codec`: The video codec
- `video_bit_depth`: The number of bits in the episode's pixel format
- `video_dynamic_range`: The episode's dynamic range (`sdr` or `hdr`)
- `type`: Always `episode`
### Artists
The following fields are available for searching artists:
- `title`: The artist name
- `genre`: The artist genre
- `style`: The artist style
- `mood`: The artist mood
- `added_date`: The date the artist was added to ErsatzTV (YYYYMMDD)
- `library_name`: The name of the library that contains the artist
- `type`: Always `artist`
### Music Videos
The following fields are available for searching music videos:
- `title`: The music video title
- `artist`: The music video artist
- `album`: The music video album
- `genre`: The music video genre
- `library_name`: The name of the library that contains the music video
- `language`: The music video audio stream language
- `release_date`: The music video release date (YYYYMMDD)
- `added_date`: The date the music video was added to ErsatzTV (YYYYMMDD)
- `minutes`: The rounded-up whole number duration of the music video in minutes
- `height`: The music video height
- `width`: The music video width
- `video_codec`: The video codec
- `video_bit_depth`: The number of bits in the music video's pixel format
- `video_dynamic_range`: The music video's dynamic range (`sdr` or `hdr`)
- `type`: Always `music_video`
### Other Videos
The following fields are available for searching other videos:
- `title`: The NFO title or the filename of the video (without extension)
- `genre`: The video genre
- `tag`: The video tag
- `plot`: The video plot
- `studio`: The video studio
- `actor`: An actor from the video
- `director`: A director from the video
- `writer`: A writer from the video
- `library_name`: The name of the library that contains the video
- `content_rating`: The video content rating (case-sensitive)
- `language`: The video audio stream language
- `release_date`: The video release date (YYYYMMDD)
- `added_date`: The date the video was added to ErsatzTV (YYYYMMDD)
- `minutes`: The rounded-up whole number duration of the video in minutes
- `height`: The video height
- `width`: The video width
- `video_codec`: The video codec
- `video_bit_depth`: The number of bits in the other video's pixel format
- `video_dynamic_range`: The other video's dynamic range (`sdr` or `hdr`)
- `type`: Always `other_video`
### Songs
The following fields are available for searching songs:
- `title`: The song title, or the filename of the song (without extension)
- `album`: The song album
- `artist`: The song/track artist
- `album_artist`: The album artist
- `genre`: The song genre
- `tag`: All of the song's parent folders
- `minutes`: the rounded-up whole number duration of the song in minutes
- `added_date`: The date the song was added to ErsatzTV (YYYYMMDD)
- `type`: Always `song`
## Special Search Fields
- `released_inthelast`: For any media type that supports `release_date`, `released_inthelast` takes a number and a unit (days, weeks, months, years) and returns items released between the specified time ago and now
- `released_notinthelast`: For any media type that supports `release_date`, `released_notinthelast` takes a number and a unit (days, weeks, months, years) and returns items released before the specified time ago
- `released_onthisday`: For any media type that supports `release_date`, `released_onthisday` takes any value (ignored) and will return items released on this month number and day number in previous years
- `added_inthelast`: For any media type that supports `added_date`, `added_inthelast` takes a number and a unit (days, weeks, months, years) and returns items added to ErsatzTV between the specified time ago and now
- `added_notinthelast`: For any media type that supports `added_date`, `added_notinthelast` takes a number and a unit (days, weeks, months, years) and returns items added to ErsatzTV before the specified time ago
## Sample Searches
### Christmas
`plot:christmas`
### Christmas without Horror
`plot:christmas NOT genre:horror`
### 1970's Movies
`type:movie AND release_date:197*`
### 1970's-1980's Comedies
`genre:comedy AND (release_date:197* OR release_date:198*)`
### Lush Music (Artists)
`mood:lush`
### Episodes from the past week
`type:episode AND released_inthelast:"1 week"`
### Episodes older than the past week
`type:episode AND released_notinthelast:"1 week"`
### Episodes released on this day
`type:episode AND released_onthisday:1`
Loading…
Cancel
Save