-
Notifications
You must be signed in to change notification settings - Fork 3
Themes
Prism supports fully custom themes (skins) for its built-in windows. This page covers everything you need to build, package, and distribute your own Prism theme.
The following community-maintained themes are available for popular Kodi skins. Install via Prism β Tools β Theme Manager β Install Theme β Web Location.
| Theme | Kodi Skin | Repository |
|---|---|---|
| prism.theme.az | Artic Zephyr | github.com/Goldenfreddy0703/prism.theme.az |
| prism.theme.auramod | AuraMod | github.com/Goldenfreddy0703/prism.theme.auramod |
| prism.theme.ah2 | Artic Horizon 2 | github.com/Goldenfreddy0703/prism.theme.ah2 |
| prism.theme.af | Artic Fuse | github.com/Goldenfreddy0703/prism.theme.af |
| prism.theme.af2 | Artic Fuse 2 | github.com/Goldenfreddy0703/prism.theme.af2 |
| prism.theme.af3 | Artic Fuse 3 | github.com/Goldenfreddy0703/prism.theme.af3 |
Community themes skin most Prism windows (SmartPlay, scraping, source select, resolving, provider manager, and more). Windows not included in a theme fall back to the Prism Default skin. Themes for Artic Horizon 2 and Artic Fuse 3 do not include custom_providers.xml and will use the default for that window.
To create a theme for Prism, you must first create the correct folder structure in your theme's root:
.
βββ resources
βββ skins
βββ Default
| βββ 1080i
| | βββ configure_provider_package.xml
| | βββ download_manager.xml
| | βββ filter_select.xml
| | βββ get_sources.xml
| | βββ manual_caching.xml
| | βββ persistent_background.xml
| | βββ playing_next.xml
| | βββ provider_packages.xml
| | βββ resolver.xml
| | βββ sort_select.xml
| | βββ source_select.xml
| | βββ still_watching.xml
| βββ media // <-- Optional if no custom images will be needed
βββ meta.jsonProbably the simplest way to get this structure into your theme is to copy the folder for Prism's base "Prism Default" theme.
Any .xml files that you won't be theming are optional, and any missing ones will use the "Prism Default" version of the window.
With the notable exception of not being able to create your own skin includes for use inside of Prism's windows (a base Kodi limitation imposed on addon-created windows), most any technique, information, or parameters outlined in the Skinning Manual should be applicable in any of the following windows as well.
If you intend to include extra files/media with your theme, you can access the files by utilizing the skin.dir window property and appending the remaining file structure as it appears in your zip package.
Here is an example path to background.jpg in the optional media folder that is at the top level of the theme's zip package:
<texture background="true">$INFO[Window().Property(skin.dir)]/media/background.jpg</texture>
Prism provides information to the themes through the window properties outlined below:
| Property | Description |
|---|---|
prism.fanart |
Path to Prism's fanart image |
prism.logo |
Path to Prism's icon image |
settings.color |
The current color code set by the user in Prism's settings |
skin.dir |
Path to the currently installed theme folder (your theme) |
test.pattern |
Path to a test pattern that can be helpful when aligning items in the window |
texture.white |
Path to a plain white image for use in diffusing/overlays |
The following properties (which may potentially be unfilled) are available to all windows except provider_packages.xml:
Prism is built around Simkl as its primary database. An item.ids.* property is exposed for every metadata id available on the item (internally, any info field ending in _id), so the exact set present depends on the item and its catalog (movie/tv/anime).
| Property | Description |
|---|---|
item.ids.simkl_id |
Simkl ID (primary identifier) |
item.ids.tmdb_id |
TMDb ID |
item.ids.tvdb_id |
TVDB ID |
item.ids.imdb_id |
IMDb ID |
item.ids.mal_id |
MyAnimeList ID |
item.ids.anidb_id |
AniDB ID |
item.ids.anilist_id |
AniList ID |
item.ids.kitsu_id |
Kitsu ID |
item.ids.simkl_show_id |
Parent show Simkl ID (present on season/episode items) |
item.ids.simkl_season_id |
Season row ID (present on episode items) |
| Property | Description |
|---|---|
item.art.banner |
URL to banner image |
item.art.characterart |
URL to characterart image |
item.art.characterart[1-20] |
URL to extra characterart images, 1-20 |
item.art.clearart |
URL to clearart image |
item.art.clearlogo |
URL to clearlogo image |
item.art.discart |
URL to discart image |
item.art.fanart |
URL to fanart image |
item.art.fanart[1-20] |
URL to extra fanart images, 1-20 |
item.art.landscape |
URL to landscape image |
item.art.poster |
URL to poster image |
item.art.poster[1-10] |
URL to extra poster images, 1-10 |
item.art.thumb |
URL to thumbnail image |
For properties that can have multiple artworks, like for fanart, use item.art.fanart1, item.art.fanart2, item.art.fanart3, etc...
| Property | Description |
|---|---|
item.info.aliases |
List of alternative titles |
item.info.aired |
The entire airdate/premiere, formatted as mm/dd/yyyy
|
item.info.aired.day |
The dd portion of the airdate/premiere |
item.info.aired.month |
The mm portion of the airdate/premiere |
item.info.aired.year |
The yyyy portion of the airdate/premiere |
item.info.director |
Director |
item.info.duration |
Duration in seconds |
item.info.duration.hours |
Hour portion of the duration |
item.info.duration.minutes |
Minutes portion of the duration |
item.info.episode |
Episode number |
item.info.genre |
List of applicable genres |
item.info.imdbnumber |
IMDb ID |
item.info.title |
Title |
item.info.mediatype |
"movie" for movies, "episode" for episodes |
item.info.mpaa |
MPAA rating |
item.info.originaltitle |
Original title |
item.info.playcount |
How many times the item has been played locally |
item.info.plot |
Short plot outline |
item.info.premiered |
The entire premiere date, formatted as mm/dd/yyyy
|
item.info.tagline |
Tagline |
item.info.trailer |
URL to YouTube trailer |
item.info.rating |
Rating out of 10 |
item.info.season |
Season number |
item.info.sortepisode |
Episode number |
item.info.sortseason |
Season number |
item.info.sorttitle |
Episode title |
item.info.tvshowtitle |
TV show title |
item.info.year |
Year of release |
All of the preceding common properties can be retrieved using $INFO[Window().Property(...)].
The following properties (which may potentially be unfilled) are available to the get_sources.xml window:
| Property | Description |
|---|---|
1080p_sources |
Count of playable 1080p sources |
4k_sources |
Count of playable 4k sources |
720p_sources |
Count of playable 720p sources |
cached_torrents |
Total count of all playable torrent sources |
cloud_sources |
Total count of all cloud sources |
hosters_sources |
Total count of all hosters sources |
process_started |
a boolean value to identify that all setup for scraping has completed |
progress |
Percentage of elapsed time in reference to the timeout for scraping |
remaining_providers_count |
Count of all remaining providers |
remaining_providers_list |
Pipe-separated list of remaining provider names |
SD_sources |
Count of playable SD sources |
total_torrents |
Total count of all torrent sources |
The following property (which may potentially be unfilled) is available to the persistent_background.xml window:
| Property | Description |
|---|---|
notification_text |
Text indicating the current step in scraping/playback |
The following properties (which may potentially be unfilled) are available to the sources inside the source_select.xml window:
| Property | Description |
|---|---|
debrid_provider |
Cloud service provider of the identified source |
info |
Extra information about the identified source |
language |
Expected language of the identified source |
provider |
Provider of the identified source |
quality |
Resolution of the identified source |
release_title |
Release title (filename) of the identified source |
size |
Estimated file size of the identified source |
sourcec |
File locker of an identified Hoster source |
type |
Source type (Torrent/Hoster/Cloud) |
The following properties (which may potentially be unfilled) are available to the resolver.xml window:
| Property | Description |
|---|---|
debrid_provider |
Cloud service provider of the identified source |
source_info |
Extra information about the identified source |
source_provider |
Provider of the identified source |
source_resolution |
Resolution of the identified source |
release_title |
Release title (filename) of the identified source |
Each window has a set of IDs that must be included in the layout for the window to function correctly. They can be hidden using <visible>false</visible>, or by using a conditional visibility statement, but must be present, or the window will either not launch or not function correctly, or both.
provider_packages.xml
| ID | Control Type | Control Description |
|---|---|---|
| 1000 | list |
Provider List |
| 2000 | grouplist |
Package Options |
get_sources.xml
| ID | Control Type | Control Description |
|---|---|---|
| 2000 | list |
Remaining Providers List |
playing_next.xml
| ID | Control Type | Control Description |
|---|---|---|
| 3001 | button |
Play |
| 3002 | button |
Close |
| 3003 | button |
Cancel |
| 3014 | progress |
Progress Bar |
source_select.xml
| ID | Control Type | Control Description |
|---|---|---|
| 1000 | list |
Source List |
still_watching.xml
| ID | Control Type | Control Description |
|---|---|---|
| 3001 | button |
Play |
| 3002 | button |
Close |
| 3003 | button |
Cancel |
| 3014 | progress |
Progress Bar |
Tip: The base "Prism Default" skin's
.xmlfiles are the authoritative reference for control IDs. When in doubt, copy a window from the default skin and re-theme it rather than building from scratch.
Located in the "skins" folder of your theme must be a file named meta.json, which contains the following lines:
{
"skin_name": "Your Theme Name",
"version": "1.0.0",
"author": "Your Name"
}This file tells Prism the necessary information about your theme, as well as allowing Prism to automatically check for theme updates, as long as the theme was installed from a URL.
One of the easiest ways to distribute Prism themes is to host them on GitHub. If the root of your GitHub repository is the root of your theme directory, then the installation link will be of the form:
https://www.github.com/YOUR_USERNAME/YOUR_REPOSITORY/zipball/YOUR_BRANCH
The final YOUR_BRANCH placeholder will typically be main, but can be used with different branches to distribute multiple versions (testing, different skin support, etc.) of your theme.
If you opt to distribute your theme "manually", by packaging it into a .zip file yourself, ensure that the root of the .zip file matches the structure shown at the very top of this page, without being nested inside of a top-level "parent" folder.