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:

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"
  }
}
[
  {
    "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.

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.

Once we have an array of potential link data, we need to tell weyd how to extract the data we need.

More Pages

Deprecated but required

These directives are deprecated, but they currently must be included in the JSON. Just leave them blank or use |title_path|

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:

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

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.

  1. The Primary JSON that defines the location and priority of each Source JSON.
  2. 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:

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

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Maintenance update


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Code maintenance version number increment


Enhancements

Bug Fixes


Enhancements


Enhancements


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Bug Fixes


Enhancements

Bug Fixes



Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes


Enhancements

Bug Fixes

Reminder


Enhancements

Bug Fixes


Version bump


Enhancements

Bug Fixes

Reminder


Enhancements

Bug Fixes

Reminder


Enhancements

Bug Fixes

Reminder

"Debrid service returned an error." will not receive support


Enhancements

Reminder

"Debrid service returned an error." will not receive support


Enhancements

Bug Fixes

Reminder

"Debrid service returned an error." will not receive support