Awesome
CastBlock
Skip sponsor segments and ads in YouTube videos playing on a Chromecast.
This project is inspired by CastBlock by stephen304. It was rewritten in Crystal and uses the HTTP API exposed by go-chromecast to be less CPU intensive.
The impact of CastBlock on the CPU should be almost zero, and only a few dozen of Mo on the memory.
Installation
Docker
docker pull erdnaxeli/castblock:latest
# Run CastBlock in foreground. Add -d after "run" to run it in background.
docker run --rm --network host erdnaxeli/castblock
The docker image supports amd64, arm and arm64 architectures. In particular it should run on all raspberry pi. If not, please open an issue :)
The amd64 and arm64 images are based on Alpine and weigh only 20Mo, but due to a missing cross compilation target the arm images use Debian and weights 47Mo.
Docker Compose
version: '3.3'
services:
castblock:
network_mode: host
image: erdnaxeli/castblock
environment:
# Full list of categories https://wiki.sponsor.ajay.app/w/Types#Category
- CATEGORIES=sponsor,selfpromo
# - DEBUG=false # Optional
# - OFFSET=2 # Optional
# - MUTE_ADS=true # Optional
# - SKIP_ADS=true # Optional
# - MERGE_THRESHOLD=2 # Optional
Most environment variables are optional as can be seen, more info on what they do can be found in the available options section.
From source
You need to install go-chromecast first, and to make it available in your PATH.
Then you need a working Crystal environment and run shards build --release
.
The binary is in ./bin/castblock
.
Usage
Run CastBlock in the same network as the Chromecast.
It will detect all Chromecast, watch their activity and skip any sponsor segment using the SponsorBlock API.
New devices are detected every 30s. Segments shorter that 5s cannot be skipped. The last 20 videos' segments are cached to limit the number on queries on SponsorBlock.
If you have any issue, please run CastBlock with the --debug
flag, try to reproduce your problem and past the output in the issue.
You can use the flag with docker too like this: docker run --rm --network host erdnaxeli/castblock --debug
.
Available options
--debug
: run the app with the debug logs.--sponsorblock-server
: specify the SponsorBlock server to use. Useful if you host one yourself.--offset
: set an offset to use before the end of the segment, in seconds. An offset of 2 means that it will seek 2s before the end of the segmend.--category
: specify the category of segments to skip. It can be repeated to specify many categories. Default to "sponsor".--merge-threshold
: The maximum number of seconds between segments to be merged. Adjust this value to skip multiple adjacent segments that don't overlap.--mute-ads
: enable auto mute during native YouTube ads. These are different from in-video sponsors, and are typically blocked by browser extension ad blockers.--skip-ads
: enable auto skip during native YouTube ads. These are different from in-video sponsors, and are typically blocked by browser extension ad blockers.
All options can also be read from the environment variables:
DEBUG=true
SPONSORBLOCK_SERVER=https://sponsor.ajay.app
OFFSET=1
CATEGORIES=sponsor,interaction
MUTE_ADS=true
SKIP_ADS=true
MERGE_THRESHOLD=1
Contributing
- Fork it (https://github.com/erdnaxeli/castblock/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Contributors
- erdnaxeli - creator and maintainer
- stephen304 - contributor and ad blocking enthusiast