@ -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 |
@ -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 |
||||
``` |
Before Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 249 KiB |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 178 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 510 KiB |
Before Width: | Height: | Size: 268 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 14 KiB |
@ -1,15 +0,0 @@
@@ -1,15 +0,0 @@
|
||||
 |
||||
|
||||
**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) |
@ -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; |
||||
} |
@ -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. |
@ -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: |
||||
|
||||
 |
||||
|
||||
In the `Path` field, enter the path where your media files of the appropriate kind are stored: |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
### 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 |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
## 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. |
||||
|
||||
 |
||||
|
||||
Give the API Key a name like `ErsatzTV` and click `Ok`. The API key is then displayed. |
||||
|
||||
 |
||||
|
||||
##### 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. |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
### 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 |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
## 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. |
||||
|
||||
 |
||||
|
||||
Give the API Key a name like `ErsatzTV` and click `Ok`. The API key is then displayed. |
||||
|
||||
 |
||||
|
||||
##### 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. |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
### 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 |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
@ -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. |
||||
|
||||
 |
||||
|
||||
## 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` |
||||
|
||||
 |
||||
|
||||
### 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` |
||||
|
||||
 |
||||
|
||||
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: |
||||
|
||||
 |
||||
|
||||
For `Tuner Type` select `M3U Tuner`, for `File or URL` enter the `M3U` url from ErsatzTV (see [required urls](#required-urls)), and click `Save`. |
||||
|
||||
 |
||||
|
||||
### Add TV Guide Data |
||||
|
||||
From the Admin Dashboard in Jellyfin, click `Live TV` and `+` to add a tv guide data provider and select `XMLTV`. |
||||
|
||||
 |
||||
|
||||
Enter the `XMLTV` url from ErsatzTV (see [required urls](#required-urls)) and click `Save`. |
||||
|
||||
 |
||||
|
||||
## 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)). |
||||
|
||||
 |
||||
|
||||
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)). |
||||
|
||||
 |
||||
|
||||
## 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` |
||||
|
||||
 |
@ -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: |
||||
|
||||
 |
||||
|
||||
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. |
@ -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: |
||||
|
||||
 |
||||
|
||||
Then, add to a collection by clicking the `Add To Collection` button at the top of the page. |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
### 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. |
||||
|
||||
 |
||||
|
||||
### 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) |
@ -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. |
||||
|
||||
 |
||||
|
||||
### 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. |
||||
|
||||
 |
||||
|
@ -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 |
||||
``` |
||||
|
||||
 |
||||
|
||||
2. Click on the `Apps` tab in UnRAID, search for `ersatztv`, and click the `install` button. |
||||
|
||||
 |
||||
|
||||
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) |
||||
|
||||
 |
||||
`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 |
||||
|
||||
 |
||||
|
||||
5. Add another path for each media share |
||||
|
||||
 |
||||
|
||||
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. |
||||
|
||||
 |
||||
|
||||
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` |
@ -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` |
@ -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 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 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 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| |
||||
:--:| |
||||
| |
@ -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 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` |