Index by title
v1.5.1
v1.5.0
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.0
v1.1.1
v1.1.0
v1.0.0
v2.2.2
v2.2.1
v2.2.0
v2.1.2
v2.1.1
v2.1.0
v2.0.1
v2.0.0
v3.4.7
v3.4.5
v3.4.4
v3.4.2
v3.4.1
v3.4.0
v3.3.0
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.0
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v4.0.1
v4.0.0
If your source provides a JSON response, you will want to use the "api" element that contains a JSON Object.
All keys and elements are case sensitive.
Currently, weyd only processes torrents from an API source, so "is_torrent" must be true. In the future, weyd will be able to process direct downloads from an API source; for this, you would set "is_direct" to true.
The elements of the JSON Object are:
-
"path_to_array" - String (optional) - If the source provides a JSON Document, then you need to tell weyd where to find the array that contains the links. If the source provides an array of JSON Objects, then you must omit this.
-
"path_title" - String (required) - This points to the element in the JSON Object that contains the title or filename (that contains the title). The value of this element from the source must map to the actual show/movie title and contain the year/season & episode so weyd can validate that this link matches the search criteria.
-
"path_size" - String (required) - The size element should contain an integer or long of the filesize. If the source JSON doesn't provide the filesize, then you may point it to an invalid/missing element. The filesize is used to sort links properly; this should be included, if possible.
-
"path_seeders" - String (required) - Some APIs return the number of seeders directly in an element, if that's the case then this should be the key of that element. Some APIs return this as a nested JSON Object. In those instances, you should put {} between the nested keys
- If the seeders are nested in the source JSON as { "swarm": { "seeders": 3 } }, then "path_seeders" would contain "swarm{}seeders"
-
"path_magnet" - String (optional) - This points to a properly formatted magnet. If the source JSON does not contain the magnet, but contains the hash instead, you should omit this and use "path_hash". The hash will be extracted from the magnet, and the hash is what is sent to the Debrid service.
-
"path_hash" - String (optional) - If "path_magnet" is omited, then this is required. This is the hash of the torrent info for the link.
-
"path_torrent" - String (optional) - This is not implemented yet, but has been requested and will be used in the future. If the source does not return a hash, but instead returns a URL to a .torrent file, then this will tell weyd where to look for the .torrent file. weyd will extract the info hash from the file. All URLs must be HTTPS, contain a FQDN, and the target must use a Valid SSL Certificate issued by a Trusted CA.
-
"token" - JSON Object (optional - not implemented yet) - The presence of this JSON Object indicates that a token must be obtained from the API Endpoint and contains instructions on creating/obtaining the token.
Examples
Source returns an array of JSON Objects
[
{
"name": "The name of the file - 2020",
"size": 1234961182,
"seeders": 3,
"hash": "9a128abc02e872ff871add827165"
},
{
"name": "The name of the file - 2020",
"size": 2334961182,
"seeders": 1,
"hash": "871add8271659a128abc02e872ff"
}
]
{
"api": {
"path_title": "name",
"path_size": "size",
"path_seeders": "seeders",
"path_hash": "hash"
}
}
Source returns a JSON Document
{
"results": [
{
"file_name": "The name of the file - 2020",
"file_size": 1234961182,
"number_seeders": 3,
"magnet": "magnet:?xt=urn:btih:4873f340feabb89d1ec8c2347120250e"
},
{
"file_name": "The name of the file - 2020",
"file_size": 2334961182,
"number_seeders": 1,
"magnet": "magnet:?xt=urn:btih:0cea4783a322f3690d2947152f106bff"
}
]
}
{
"api": {
"path_to_array": "results",
"path_title": "file_name",
"path_size": "file_size",
"path_seeders": "number_seeders",
"path_magnet": "magnet"
}
}
Source returns a link to .torrent instead of a hash
[
{
"name": "The name of the file - 2020",
"size": 1234961182,
"seeders": 3,
"torrent": "https://website.com/torrent?id=12345"
},
{
"name": "The name of the file - 2020",
"size": 2334961182,
"seeders": 1,
"torrent": "https://website.com/torrent?id=54321"
}
]
{
"api": {
"path_title": "name",
"path_size": "size",
"path_seeders": "seeders",
"path_torrent": "torrent"
}
}
v0.9.x
v0.8.x
v0.7.x
v06.x
v0.5.x
Latest - v4.0.1
Previous Versions
How to build your scraper
Use this format to search for links inside an actual web page.
I recommend that you open the search results in a browser first so you can visually see what you're looking for. Then you can open the URL in something like Postman and find the actual elements containing the data.
weyd uses Jsoup to find elements on the page, but there are some additions I added to the directives for certain situations. If you find that your source needs additional functionality, please submit a ticket or ask on Discord or Telegram.
First, weyd needs to know if this is a source with torrents ("is_torrent": true) or direct downloads ("is_direct": true). Each source can only extract one type, so if you happen to set both to true, weyd will only look for torrent information. If a source does contain both types of links, you should create 2 source JSON files.
Locate links on the page
Now that you have told weyd what page(s) contains the link(s), you need to tell weyd where on the page to find them.
-
"links_container_path" - String (required) - This is a Jsoup selector to get an array of elements that contain links. The smaller you can make this array, the faster your source will be scraped. weyd will need to analyze each and every element in this array. If a page only has 1 link on it (drill-down), then it is best to make this point to the exact HTML element.
- If a page contains many links that are all in <div class="links"><ul><li><div class="link">, then you would probably set this to "div.links div.link" or "div.links > ul > li > div.link" and Jsoup will extract all of the links into an array.
- If a page only contains one link, then it will speed up the process by targeting the actual link. For example, if the link is in <div id="actuallink">, then you would tell Jsoup to look in "div#actuallink", and it will only find one item.
Once we have an array of potential link data, we need to tell weyd how to extract the data we need.
-
"magnet_path" - String (required - if is_torrent) - The Jsoup selector to locate either the magnet or the hash within the "links_container_path".
-
"magnet_path_attr" - String (required) - The attribute containing the magnet or the path.
- This may equal |hash| if the HTML element contains the hash. If the hash is stored in an attribute, you will need to add the attribute to the "magnet_path" (see Jsoup Selector documentation).
- If the magnet is the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the magnet (href for example).
-
"link_path" - String (required - if is_direct) - The Jsoup selector to locate the direct download link.
-
"link_path_attr" - String (required) - The attribute containing the link to the direct download
- If the link is inside the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the magnet. If it is an href pointing to a relative path on this domain, you will need to use "abs:href".
-
"title_path" - String (required) - The Jsoup selector to locate the title of what we're searching. This must match the title of the Show or Movie and contain the Season/Episode information or Year.
- If the Title isn't contained in the "links_container_path", then you can put / in front of the Jsoup directive. For example, if this is a drill_down, and you wanted to extract the title from the <title> HTML element, then you would use "/title".
- If this can also contain the quality info, it will be helpful with the next parts.
-
"title_path_attr" - String (required) - The attribute containing the title.
- If the title is in the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the title. For example, if the title is found at <div class="title" fulltitle="Title of the item being searched 720p">Title of the item being searched</div>, and you would like to pull the "fulltitle" attribute, you would use "fulltitle".
-
"info_path" - String (required) - This is what is displayed in weyd on the links page. If you prefer display something other than the filename in weyd, you can use this.
- If you wish to use the title, then this should contain |title_path|
- If the "info_path" is located outside the "links_container_path", then you can place / before the Jsoup directive.
-
"info_path_attr" - String (required) - The HTML attribute containing the info to be displayed in weyd's links page.
- If "info_path" contains |title_path| then this should be an empty string.
- If the info is in the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the info.
-
"quality_path" - String (required) - Jsoup directive to locate a string containing the Quality (720p, 4k, etc).
- If the "title_path" contains this information, you can use |title_path|
- If the link_path" contains this information, you can use |link_path|
-
"quality_path_attr" - String (required) - The HTML attribute containing the text string to be used to match the Quality (720p, 4k, etc).
- If "quality_path" contains |title_path| or |link_path| then this should be an empty string.
- If the quality string is in the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the quality string.
-
"filesize_path" - String (required) - The Jsoup selector to find the filesize. If the page doesn't have the filesize, this is still required, but can point to a non-numeric string on the page.
- If the size string contains MB or GB, then the size will be calculated. If not, you must use "filesize_units"
-
"filesize_path_attr" - String (required) - The attribute containing the filesize.
- If the filesize is in the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the filesize.
- if "filesize_path" will return an array of elements, and you want to use the second element in the array, use |next_sibling|
-
"filesize_units" - String (optional) - If the page doesn't have MB or GB, you can place that in this element to force weyd to calculate the filesize correctly.
-
"seeders_path" - String (required if is_torrent) - Jsoup selector to find the string with the number of seeders. This can point to a non-numeric string on the page if you don't want to pull the seeders from the page.
-
"seeders_path_attr" - String (required) - The attribute containing the seeders.
- If seeders is in the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the seeders.
-
"link_regex" - String (optional - only for is_direct) - To use a regular expression to locate the link instead of "link_path", this will apply that RegEx against the array items in "links_container_path"
-
"title_split_string" - JSON Object (optional) - There may be sources that don't present the "title_path" in a standard format. This is a string that will be used to split out the actual Title to be compared against the Show or Movie.
-
"string_format" - String (required) - If the Title presented by the source is "weyd Season 1 Episode 2" instead of "weyd S01E02", you would put "Season %02d Episode %02d" in this element and weyd can correctly match the Title "weyd".
-
"replacement" - Array of String (required) - The replacement values for "string_format"
- "season_int"
- "episode_int"
More Pages
-
"more_pages_indicator" - String (required) - If the source can have multiple pages for a search result, this is the string that indicates there are more pages to find.
- This can be raw HTML. For example, if the "More Pages" is located in the HTML source as <li class="morepages">Next</li>, then that can be the contents of this. This uses Java's String functions to find a match in the entire page, so be specific or you could end up looping through a source indefinitely.
- You can use {ASSUMENEXT} to indicate that there should always be more pages.
- weyd will continue to attempt to pull the next page until the next page is the exact same URL as the current one.
-
"next_page_path" - String (optional - required if more_pages_indicator) - Jsoup selector to the HTML element containing a link to the next page.
-
"next_page_attr" - String (optional - required if more_pages_indicator) - The HTML attribute containing the URL to the next page.
- If URL to the next page is in the text attribute of the HTML element, this should be an empty string.
- Otherwise, this should contain the attribute name containing the URL of to the next page. If the URL is in the href, and it is a relative path on the same domain, you must use "abs:href".
Deprecated but required
These directives are deprecated, but they currently must be included in the JSON. Just leave them blank or use |title_path|
-
"details_path" - String (required) - May contain a Jsoup path or |title_path| to use what was already used for title.
-
"details_path_attr" - String (required) - Should be an empty string.
Jsoup Documentation
The Primary JSON is used to direct weyd to the location of each Source JSON.
The layout is fairly simple and consists of arrays of URLs in elements labeled 1-10. Each URL must be a complete URL pointing to a HTTPS location accessible by weyd. The location must have a valid SSL certificate, and the best way to validate that is to open the URL in a browser on the same network as your device. If the location loads a JSON document without any Security Warnings, then weyd should have no trouble caching that document.
There are 3 directives that are not yet implemented, but it may be a good idea to add them now so that if/when they are, your JSON is in compliance. If that feature is never implemented, then their existence will not interfere with the JSON processing. They are:
- "serial_no" : Integer - An incrementing integer indicating the version/serial number of your package.
- "weyd_min" : String - The minimum weyd version required for your package (formatted v#.#.#).
- "weyd_max" : String - The maximum weyd version that supports your package (formatted v#.#.#).
Each Source JSON must be grouped in an array with a label 1-10. You are not required to have values for each label (1-10), but any label other outside of that range will be ignored.
When weyd loads your package, it will retrieve and cache each document pointed to in the array, so they do not need to be accessible after the Scraper JSON has been loaded.
When scraping, weyd will process each group in order queuing the sources based on the max # threads set in Settings -> Link Resolving. If you wanted to tell weyd to process sources that contain a specific quality of video first, you would place them in #1, and then the remainder would be #2-#10. For example, if there are 5 sources that contain a specific type of quality that you want retrieved quickly, then you would place those 5 Source JSON URLs in #1 and set the max # threads in weyd to 5. weyd will then process those 5 and won't move on to the next group (#2-#10) until at least one of those sources has completed.
Notes
- The Primary JSON and Source JSONs do not need in the same domain.
- All URLs must be HTTPS and have valid SSL certificates issued by recognized CAs
- All JSON must be valid JSON documents. There are many online validators you can use to plug in your JSON and see if it's valid.
- Only JSON arrays with a key of 1-10 will be processed, and each array item must be a single String element.
Example
{
"serial_no": 1,
"weyd_min": "v1.0.2",
"weyd_max": "v1.2.3",
"1" : [
"https://json.location.local/json1",
"https://json.location.local/json2",
"https://json.location.local/json3"
],
"3" : [
"https://json.location.local/json4",
"https://json.location.local/json5",
"https://json.location.local/json6"
],
"5" : [
"https://json.location.local/json7",
"https://json.location.local/json8",
"https://json.location.local/json9"
],
"10" : [
"https://json.location.local/json10",
"https://json.location.local/json11",
"https://json.location.local/json12"
]
}
Scraping is done in-app based on a script created from JSON directives.
There are two parts to the script.
- The Primary JSON that defines the location and priority of each Source JSON.
- The Source SON that tells weyd how to extract information from the source.
Both of these must be accessible to weyd using HTTPS (SSL) from the device. They can be stored on a local computer/server, but the SSL Certificate must be valid. To make sure that they are accessible, it's best to open the link in a browser on your computer and make sure you don't get any Security Warnings/Errors.
You are free to use a URL shortener to make it easier to input the Scraper URL into weyd.
JSON packages are only loaded when the user adds/changes the Scraper URL, manually clicks Sync in the app, or restores Settings that contain the URL. Therefore, a custom JSON package could be placed on a temporary web server long enough for weyd to cache the scripts.
If, when creating your scraper JSON, you need weyd to have additional features to pull the information from a source, feel free to open a ticket here or reach out to us on Discord or Telegram.
The common keys required for all sources are:
-
"name" - String - The name of the source presented in weyd's links page
-
"language" - Array of String - This is not currently processed by weyd, but was put here based on other scraper packages using this. It will be used in the future, so it would be wise to add it now. Once implemented, weyd will use the ISO standard language codes.
-
"domains" - Array of String - This is not currently processed by weyd, but in the future it will be used to substitute into the "base_url" domain name to search backups in case the primary domain is down. These should just be FQDN without https and without port numbers.
-
"base_url" - String - The base URL that is prepended to search requests. This must be HTTPS and must contain a FQDN to a server with a valid SSL certificate issued by a trusted CA.
-
"search_url_format_episode" - JSON Object - This must be present even if the source being scraped does not contain TV shows.
-
"string_format" - String - Contains a Java String.format() template for String replacement. If the source being scraped does not contain TV shows, or you don't want weyd to search for TV shows, then leave this an empty string.
-
"replacement" - Array of String - This must contain equal number of items as the "string_format" contains for replacement. Each item must be in the same order as they will be replaced, and they must be the correct data type.
- Possible values:
-
"title" - Replaced by "The Title Exactly How It Is" - Spaces get replaced with + to URL encode
-
"title_lower" - Replaced by "the title lowercase with spaces" - Spaces get replaced with + to URL encode
-
"title_lower_dash" - Replaced by "the-title-lowercase-with-dashes-for-spaces"
-
"year_text" - Replaced by the String version of year - "2001"
-
"year_int" - Replaced by the Integer of year - 2015
-
"season_text" - Replaced by the String version of season - "1", "15"
-
"season_int" - Replaced by the Integer version of season - 1, 5, 20
-
"episode_text" - Replaced by the String version of episode - "3", "12"
-
"episode_int" - Replaced by the Integer version of episode - 2, 4, 8
-
"search_url_format_movie" - JSON Object - This must be present even if the source being scraped does not contain Movies.
-
"string_format" - String - Contains a Java String.format() template for String replacement. If the source being scraped does not contain Movies, or you don't want weyd to search for Movies, then leave this an empty string.
-
"replacement" - Array of String - This must contain equal number of items as the "string_format" contains for replacement. Each item must be in the same order as they will be replaced, and they must be the correct data type.
- Possible values:
-
"title" - Replaced by "The Title Exactly How It Is" - Spaces get replaced with + to URL encode
-
"title_lower" - Replaced by "the title lowercase with spaces" - Spaces get replaced with + to URL encode
-
"title_lower_dash" - Replaced by "the-title-lowercase-with-dashes-for-spaces"
-
"year_text" - Replaced by the String version of year - "2001"
-
"year_int" - Replaced by the Integer of year - 2015
-
search_url_format_season_pack" - JSON Object (optional - only available if "is_torrent":true) - The presence of this JSON Object indicates that this source can be searched for Series Packs. Be careful with this option because it will slow down the searching of your script. It's best to limit this to API sources and HTML sources that have "links_on_first_page": true.
-
"string_format" - String - Contains a Java String.format() template for String replacement. Use only 1 %s in the position where weyd will insert various combinations of the title for searching Series Packs. Do not include any %d for year, season, or episode.
-
"replacement" - Array of String - This must contain equal number of items as the "string_format" contains for replacement. Each item must be in the same order as they will be replaced, and they must be the correct data type. The last %s will be used by weyd to insert various combinations of the title for searching Series Packs. Do not include any year, season, or episode replacements.
- Possible values:
-
"title" - Replaced by "The Title Exactly How It Is" - Spaces get replaced with + to URL encode
-
"title_lower" - Replaced by "the title lowercase with spaces" - Spaces get replaced with + to URL encode
-
"title_lower_dash" - Replaced by "the-title-lowercase-with-dashes-for-spaces"
-
"is_torrent" - Boolean - Does this source contain torrents (If this is true, then "is_direct" is ignored).
-
"is_direct" - Boolean - Does this source contain direct downloads.
-
"name_delete_filter" - Array of String - An array of String and each String will be removed from the scraped title.
Example
{
"name": "weyd",
"language": ["en"],
"domains": ["weyd.app"],
"base_url": "https://weyd.app",
"search_url_format_episode": {
"string_format": "/search?query=%s+s%02de%02d&type=tv",
"replacement": [
"title_lower",
"season_int",
"episode_int"
]
},
"search_url_format_movie": {
"string_format": "/search?query=%s+%04d&&type=movie",
"replacement": [
"title_lower",
"year_int"
]
},
"search_url_format_season_pack": {
"string_format": "/%.1s/%s",
"replacement": [
"title_lower"
]
},
"is_torrent": true,
"is_direct": false
}
Source types
There are two types of sources, and each has a different layout. A source can either be an API that returns JSON, or it can be a HTML based website.
Regardless of which type you're trying to access, all URLs must be HTTPS to a FQDN with a valid SSL certificate. You will not be able to use raw IPs or weyd cannot access the links.
To distinguish a source as API, you must include a JSON Object with the key "api"
{
"api": {
"key": "value",
"key": "value",
"key": "value"
}
}
If this key ("api") exists, all other directives finding values on the page will be ignored.
Without the "api" key, the default is to handle this as a HTML based website.
Enhancements
- Scroll down for seasons indicator
- Stop scraping when playing starts or leave links page
- Enable AutoPlay. Settings->Link resolving
- Release notes added
Bug Fixes
- API scraper wasn't checking if Debrid active
- API scraper fix size from bytes
- Better precision on filesize
Enhancements
- VLC External Player
- MX Player External Player
- Rename Up Next to Continue Watching in Movies
- Add Watchlist listing to TV and Movies
- Add Collection Listing to TV and Movies (based on preferences in Trakt)
Bug Fixes
- Next Episode not working with seasons released all at once
- Darken description text background in TV and Movies
- Add to Watchlist was erroring out without knowing
Enhancements
Bug Fixes
- Better control to stop scraping when canceled
- Trakt watchlist registered incorrectly
- Crash when opening TV show with no release date
Enhancements
Bug Fixes
- Fix sort order for TV Watchlist
Enhancements
Bug Fixes
Enhancements
- Scroll back on TV and Movie list quicker
- Autoplay when search finished even if link count not met
- Support for Scraper Source
Bug Fixes
- Sort Movie collection alphabetically
- TV Up Next not showing in progress episodes
- Check New Episodes not registering episodes released today
- Delay update banner image while scrolling
- Aired vs Airs on Episode Air Date
- Don't show "null" as Air Date
Enhancements
- Status bar for links
- Long press for links
- Link filtering (see Settings - Link Filtering)
- Link sorting - 2 levels (see Settings - Link resolving)
Bug Fixes
- Could not select to resume playing movie or episode
- Watch progress for movies not updating
Enhancements
- Complete UI overhaul
- Database restructure
Bug Fixes
Enhancements
- Add support for release channels
Bug Fixes
- Adult filter on search
- Exo marking items watched twice
- Scraper not imported if user backs out quickly
- Crashes when no show artwork
- Player controls stuck on screen in Exo
Enhancements
- Audio track selection in Exo
- Subtitles (embedded) selection in Exo
Bug Fixes
- Autoplay not firing when Max Delay is set
- Attempt to fix crash at startup
- Autoplay firing twice (after playing a video and coming back to links)
- Attempting to play non-cached torrent crashes app
Enhancements
- Backup and Restore Settings
- Settings
- Default subtitles on/off in Exo
- Min % to mark complete
- Clear local Watchlist & Collection
- Clear TV & Movie Cache
- Kill App
- Kill & Restart
Bug Fixes
- Incorrect file size in scrapers
Enhancements
- Browse/Play/Delete Real-Debrid Download Links
- Premiumize Support
Bug Fixes
- Movies long time to load
- Movie runtime not updating first time
- Returning to search doesn't select last item
Enhancements
- Autoplay Next Episode
- Settings
- Min % watched to track progress
Bug Fixes
- Load next episode when different season doesn't load correct season
- More error checking when verifying PM cache status
- Auto app update not firing the first time
Enhancements
- Updated Exoplayer
- Settings
- Exoplayer - Enable SW codecs
- Exoplayer - Prefer SW Codecs
- Exoplayer - Don't resize screen to fit video
Bug Fixes
- Refresh scrapers on restore settings
Maintenance update
Enhancements
- Play random episodes
- General UI enhancements
- Settings/Preferences
- Clear local watched history
- Refresh TMDb genre listings
- TV Listing - Combine/Separate Watchlist and Collection
- Movies Listing - Combine/Separate Watchlist and Collection
- Hide unaired episodes when viewing a TV show
- Real-Debrid - Don't check for cached content
- Premiumize - Don't check for cached content
- Hide non-cached content
Bug Fixes
- Exoplayer - error loading/playing video marked it watched
- With Auto Next, crashes when backed out too quickly
- Auto play link still plays even after backing out
- Sources are still being scraped even if no account has been added
Enhancements
- Authorize/Deauthorize devices on your account
Bug Fixes
- Exoplayer - bug when changing subtitle track
- Non-cached items counting toward filtered links
Enhancements
- Max thread count for scrapers
- Actors on Movie Details
Bug Fixes
- App crash when checking cache of Blu-ray content
Enhancements
- Alert when scraper JSON is bad or missing
Bug Fixes
Enhancements
Bug Fixes
Enhancements
- Action Menus (Long Click)
- Movie Listing
- Tv Listing
- Search Results
- Debrid Cloud
- Resume playback on Cloud items
Bug Fixes
- Backup & Restore fails sometimes
- Crash when open Accounts & RD is down
- Total Video length shows on some devices on some videos
- Remove from Watchlist/Collection not updating local
- Incorrect filename from RD using external player
- Reset Progress on Episode not working as expected
Enhancements
Bug Fixes
- Backup & Restore setting was disabled
Enhancements
- Remove duplicates during scraping
- Proactive measure to reduce load on Debrid providers
Bug Fixes
Enhancements
- Custom Trakt Lists
- Settings
- Premiumize - Use stream optimized links
- Force watch episodes if Trakt can't mark watched
- Offline mode for when Trakt is down
- Improvements in Season Pack search
Bug Fixes
- Crash checking RD Cache on some titles on Android 7.1 devices
- Season watched indicator odd behavior
- HTTP Timeout not being obeyed
- Play from Cloud not showing debrid service in Exo
Enhancements
- Settings
- Max # of Trakt Lists to import
- Hide unsupported Links
- Missing Image image for Actors
- Add season/episode to title sent to player
- Add To List only shows lists without item
- Orion Integration
- Obey Trakt's Hide features
- Strip spaces from URLs
- Debrid priority for Direct Links
Bug Fixes
- Unable to import large numbers of Trakt Lists
- Missing launcher icon on some Fire devices
- Watch Progress not tracked correctly for Debrid Season Pack
- Add to list.. not showing on TV Action Menu
Enhancements
- Settings
- Trakt collect on watch
- Episode refresh frequency
- Trakt - Add to history on Save to Cloud
- Continue link search after link selection
- Auto select non-filtered links
- Play trailers with desired internal/external player in Settings
Bug Fixes
- Crash when backing out of Details screen too quickly
- Disregard empty seasons
- Trakt error getting next episode
- +/- not updated in Video Details
- Hide unsupported links only works on Orion
- Restore settings messes up Trakt auth
- Autoplay doesn't work when results come in too quickly
- Fix missing/skipped seasons at TMDb
Enhancements
- Add country of origin to title search
- Batch cache check with debrid
- Alldebrid Support
- Settings
- Timezone offset for calculating air dates
Bug Fixes
- Inconsistent display of filesize and bitrate
Enhancements
- End of Public Beta
- Settings
- Trakt Up Next sort options
Bug Fixes
- Alldebrid not playing properly
- Crashes when pushed out of memory by Android
Enhancements
- Touchscreen Support
- Get Air Time (if Trakt Enabled) for today's episodes
- Settings
- Number of threads when checking new episodes
- Trakt - Hide from Up Next until episode airs
Bug Fixes
- Menu loses focus when separate Trakt TV & Movie Pages
- Background not set when resuming app
- History still sent on Random if user selects no
- Selected Season indicator inconsistent
Bug Fixes
- Invalid API response from Orion
Enhancements
- Trakt Scrobbling
- Improved handling of PM Cloud
Bug Fixes
- Fixes to Up Next processing
Enhancements
- Double back press required to exit
- Increase Max # Links for Autoplay
- External Subtitles
Bug Fixes
- Scrobble processing for Movies when watching Trailer
- Scrobble not always marking complete
- Scrobble recording Movies instead of TV
- Orion Episode Search was inaccurate
Enhancements
- Settings
- Trakt - Record Cloud playback
- Better handling of progress of PM playback
- Click Debrid icon in Exoplayer for Details
- Audio Track Details
Bug Fixes
- Scrobble issue tracking item not in Watchlist/Collection
- Trailers Fix
- Crash while scrolling Cloud during a refresh
Enhancements
- Database Optimizations
- Settings
- Hide title and year under posters
- Logos from FanArt.tv
Bug Fixes
- Hide Un-aired Episodes shows episodes with no air date
- Fix Trailers
Enhancements
- Improved loading of Trailers
- Settings
- App & Data
- Collect all TV Actors
- Min Percent to collect Actor
- Actor Bio Page
- Row of Actors on TV Page
Bug Fixes
- Movies Action Menu - Trakt Progress broken
- Some users lose auths when updating
Enhancements
- Update Expolayer from v2.12.2 to v2.15.0
- General UI Enhancements
Bug Fixes
- Crash opening some titles' Detail Page
- Phantom authorizations
Enhancements
- Exoplayer Customizations
- Upgrade to v2.15.1
- Subtitle Customization
- Audio Passthrough
- Volume Boost
- Show Time Remaining
- Custom Seek Step Values
- Resize Video - Fill/Stretch
- Search Alternate Titles
- Add/Edit/Remove Trakt Rating
Bug Fixes
- Player controls leaving ghost image
- Formatting multiple title on TV or Movie
- Force Watched Episodes not removed when Episode removed from TMDb
- Samples videos not properly filtered out
- Trailers Buffering
Enhancements
Bug Fixes
- Time left display not reliable
- PM Cache Check issues
Enhancements
- Performance Increases
- Kodi
- Update Exoplayer to v2.16.1
- Enable tunneling video in Exo
- Increase compile SDK to Android 12
- Settings
- Hide links containing phrases
- Redesign Link Resolve Action Menu
- Enable Play With...
- Trailers for Seasons
Bug Fixes
- Crash in Android 7.1 when searching
- Player controls not hiding when Scrobbling
Enhancements
Bug Fixes
- Downgrade Exo to v2.16.0 - fix crash and sync
Enhancements
- Trakt Calendars
- My Calendar
- Viewing History
- New Shows
- New Premieres
- New Movies
- Update Exoplayer to v2.17.0
Bug Fixes
Code maintenance version number increment
Enhancements
- Update Exoplayer to v2.17.1
- Improved Trailers Handling
Bug Fixes
- Orion crash
- Premiumize Transfers not populating
Enhancements
- Recommended Movies and Shows
- Subtitle Background Transparency
Enhancements
- Upgrade Exoplayer to v2.18.1
- Touch Improvements
- Orion - Switch to Device Auth
Enhancements
- Changes to PM Cache Check
- General UI Enhancements
Bug Fixes
- TV & Movies Categories Not Loading More Results
Enhancements
- Changes to PM Cache Check
- Multiple Trakt Profiles
- Settings
- Use device clock for timezone - default on
Bug Fixes
- Save/Restore Settings not always getting everything
Enhancements
- Improved Debrid Processing
- Update Jsoup
Bug Fixes
Bug Fixes
- Problem authorizing Orion
Enhancements
- Update Exo to v2.18.2
- Performance improvements
Bug Fixes
Enhancements
- Update Exo to v2.18.7
- Performance improvements
Bug Fixes
Enhancements
- Migrate from Exoplayer to Androidx Media3
- Update Software Codecs
Bug Fixes
Enhancements
- Update Media3 v1.2.0
- Trakt Profile Selector on Main Menu
- Performance improvements
Bug Fixes
- Filters broken when no runtime provided
Enhancements
- Update Media3 v1.2.1
- Performance improvements
Bug Fixes
Enhancements
Bug Fixes
Enhancements
- Performance Improvements
- Better scrobble with Cloud Services
Bug Fixes
- Scrobble not removed with reset progress / mark unwatched
Enhancements
Bug Fixes
- Subtitles Menu not reflecting disabled selection
Enhancements
Bug Fixes
Reminder
- Issues/problems from Ignore Cache Status will not receive support
Enhancements
Bug Fixes
- Fix that EasyDebrid was only for Lifetime
Version bump
Enhancements
-
Long Press Back for Settings - Everywhere
- Be advised some settings will not affect current activity
-
Add Sync Now to Trakt Profile Menu
-
Additional features for OffCloud
-
Additional Features for EasyDebrid
-
Improved method for selecting Debrid Priority
Bug Fixes
- Torbox Play From Cloud crashes
Reminder
- "Debrid service returned an error." will not receive support
Enhancements
Bug Fixes
- Season pack sometimes pulls wrong episode
Reminder
- "Debrid service returned an error." will not receive support
Enhancements
Bug Fixes
- Fix addic7ed subtitles crash player
Reminder
"Debrid service returned an error." will not receive support
Enhancements
- Complete rewrite of the App
Reminder
"Debrid service returned an error." will not receive support
Enhancements
-
Update Media3 to v1.10.0
-
Update dependencies
-
Update database engine
Bug Fixes
-
Incorrect defaults on some user settings
-
Movie Play Button not visible when only Orion is used
-
Selecting external subtitles resets audio track selection
Reminder
"Debrid service returned an error." will not receive support