3.7 KiB
sponsorblock-mirror
This is a Rust-based mirror of the SponsorBlock API.
It also uses sb-mirror for mirroring the CSV dumps via rsync.
Instances
- sponsorblock.kavin.rocks - 🇩🇪 (main instance)
- sponsorblock.gleesh.net - 🇩🇪
- sb.theairplan.com - 🇺🇸
Feel free to add your instance to this list by making a pull request.
You can also configure Piped-Backend to use your mirror by changing the SPONSORBLOCK_SERVERS
configuration value.
Compatibility
This implementation does not implement the full SponsorBlock server API. It supports hash-based queries to /api/skipSegments/<hash>
, with optional categories
parameter, and queries to /api/skipSegments
with required videoID
and optional categories
parameters.
The browser extension works with only the hash-based query endpoint, but other clients, such as the one in ReVanced, require the video ID endpoint, and additionally query /api/userInfo
and /api/isUserVip
. Right now there are stub implementations for these. ReVanced had not yet been verified as compatible.
Building
To make a local release build, use cargo build --release
. This will produce a binary in target/release/sponsorblock-mirror
.
To make a Docker container, you need to do a BuildKit Docker build, not a normal Docker build. Make sure you have buildx
available in your Docker, and run:
docker buildx build --load -t 1337kavin/sponsorblock-mirror .
Using with Docker Compose
To run the server under Docker Compose, run:
docker compose up
This starts the API server, a database, and a mirroring service to download the SponsorBlock data from the sponsorblock.kavin.rocks
mirror and keep it up to date.
The API will be available on http://localhost:8000
. For example, you can try http://localhost:8000/api/skipSegments/aabf
or http://localhost:8000/api/skipSegments?videoID=eQ_8F4nzyiw
. It will take a few minutes at least for the database to download and import, so these will not return data on the first run.
Troubleshooting
-
If the linker complains about a missing
-lpq
, make sure you have the PostgresQL development libraries, which may be in alibpq-dev
package or your distribution's equivalent. -
If Docker complains that
the --mount option requires BuildKit
, make sure you are building withdocker buildx build
and notdocker build
. -
If
docker compose
complains like this:ERROR: The Compose file './docker-compose.yml' is invalid because: Unsupported config option for volumes: 'postgres_data' Unsupported config option for services: 'sb-mirror'
then you are using an old version of
docker compose
which does not fully support the Compose Specification and requires a 'version' key to differentiate the file from a V1 compose file. Try appendingversion: "3"
to the file. -
On the first run of
docker compose
, even after the database files are downloaded, you may see errors likecould not open file "/mirror/sponsorTimes.csv" for reading: Permission denied
. Assuming the permissions on the.csv
files are actually set to be world-readable, you might be able to fix this by stopping and restartingdocker compose
. -
To access the PosgresQL database directly, you can
docker exec -ti postgres-sb-mirror bash -c 'psql $POSTGRES_DB $POSTGRES_USER'
. -
Requests for videos not in the database are forwarded to
https://sponsor.ajay.app/
, which may be down or malfunctioning. A response of the stringInternal Server Error
is likely to be from there, rather than from this application.