No description
Find a file
2022-10-30 17:59:17 +00:00
.github Build application outside docker for ci. 2022-10-25 10:19:41 +01:00
migrations Add index for videoID. 2022-10-30 17:59:17 +00:00
src Add index for videoID. 2022-10-30 17:59:17 +00:00
.dockerignore Add files to deploy on docker-compose. 2022-10-22 21:43:13 +01:00
.env Initial commit. 2022-10-22 13:28:40 +01:00
.gitignore Initial commit. 2022-10-22 13:28:40 +01:00
Cargo.lock Update Rust crate serde_json to 1.0.87 2022-10-23 22:07:28 +00:00
Cargo.toml Update Rust crate serde_json to 1.0.87 2022-10-23 22:07:28 +00:00
diesel.toml Initial commit. 2022-10-22 13:28:40 +01:00
docker-compose.yml Rollback on transaction failure, and run postgres as root. 2022-10-30 16:06:31 +00:00
Dockerfile Install ca-certificates package. 2022-10-23 17:56:19 +01:00
Dockerfile.ci Build application outside docker for ci. 2022-10-25 10:19:41 +01:00
LICENSE Initial commit 2022-10-22 13:30:03 +01:00
README.md Remove probably outdated permission-related tip 2022-10-30 13:14:31 -04:00
renovate.json Update renovate config. 2022-10-23 21:24:49 +01:00
Rocket.toml Add cors for official instance. 2022-10-25 10:13:34 +01:00

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

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 a libpq-dev package or your distribution's equivalent.

  • If Docker complains that the --mount option requires BuildKit, make sure you are building with docker buildx build and not docker 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 appending version: "3" to the file.

  • 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 string Internal Server Error is likely to be from there, rather than from this application.