Automatically skip sponsor segments in YouTube videos playing on Apple TV.

Overview

iSponsorBlockTV

Skip sponsor segments in YouTube videos playing on an Apple TV.

This project is written in asycronous python and should be pretty quick.

Installation

Docker

WIP

From source

You need to install python first, and to make it available in your PATH. After, clone the repo. Then you need to download the dependencies with pip: python3 -m pip install -r requirements.txt Lastly, run main.py

Setup

You need to retrieve airplay keys to be able to connect to the Apple TV. (It will be made simpler in the future) For now, use atvremote, a script included in pyatv:

  1. atvremote scan
  2. atvremote pair --protocol airplay --id identifier you got on the previous step

Get YouTube api key

Edit config.json.template and save it as config.json

Usage

Run iSponsorBLockTV in the same network as the Apple TV.

It connect to the Apple TV, watch its activity and skip any sponsor segment using the SponsorBlock API.

The last 5 videos' segments are cached to limit the number on queries on SponsorBlock and YouTube.

To exit press ENTER

Libraries used

  • pyatv Used to connect to the Apple TV
  • [asyncio] and [aiohttp]
  • [async_lru]
  • [json]

Contributing

  1. Fork it (https://github.com/dmunozv04/iSponsorBlockTV/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

License

GNU GPLv3

Comments
  • Docker Installation Newb Issue

    Docker Installation Newb Issue

    Hi, I am new to this world and just got a synology NAS with basically everything setup in docker. This sounds like a dream come true but I can't get past the installation steps.

    I create the empty config.json file on my NAS. SSH in and run this:

    docker run --rm -it \
    --network=host \
    -v /volume1/docker/isponsorblocktv/config.json:/app/config.json \
    ghcr.io/dmunozv04/isponsorblocktv \
    --setup
    

    Which gives me this error:

    You are running in docker, you have to mount the config file.
    Please check the README.md for more information.
    Traceback (most recent call last):
      File "/app/main.py", line 3, in <module>
        helpers.app_start()
      File "/app/iSponsorBlockTV/helpers.py", line 29, in app_start
        config = load_config(args.file)
      File "/app/iSponsorBlockTV/helpers.py", line 18, in load_config
        return config
    UnboundLocalError: local variable 'config' referenced before assignment
    

    Any help/suggestions would be appreciated here. thanks.

    bug 
    opened by theprinceofspace 24
  • New Apple Tv not found when running setup

    New Apple Tv not found when running setup

    I got a new apple tv and when I run the setup it isn't found, no identifier or airplay credentials are added to config.json. I deleted all and tried a fresh install but that also didnt work.

    I run this docker run --rm -it
    --network=host
    -v /volume1/docker/isponsorblocktv/config.json:/app/config.json
    -e PUID=0
    -e PGID=0
    -e iSPBTV_docker=
    ghcr.io/dmunozv04/isponsorblocktv
    --setup

    in terminal I see Found 0 Apple TV(s) in config.json. Add more? (y/n) y I hit y but it just asks for my API key next.

    output looks like this:

    {"apikey": "6...", "skip_categories": ["sponsor", "selfpromo", "exclusive_access", "interaction"]}

    with none of the

    "atvs": [{"identifier": "D261...", "airplay_credentials"

    I also tried installing docker on my mac but get the same output. On the Apple TV settings Airplay is on and Allow Access is set to Same Network. All devices are on the same network.

    Must be missing something here but I am out of ideas.

    If there is another way to get the identifier and airplay credentials I am happy to update the config file manually. Open to options here.

    bug 
    opened by theprinceofspace 17
  • Docker Installation error

    Docker Installation error

    Before opening an issue make sure that there are no duplicates and that you are on the latest version. When I run the Docker command to install I get this error when trying to add my Apple TV to the config.json in the new docker setup procedure.

    Found Living Room. Do you want to add it? (y/n) y Traceback (most recent call last): File "/opt/venv/lib/python3.10/site-packages/pyatv/support/init.py", line 33, in error_handler return await func(*args, **kwargs) File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/airplay/auth/hap.py", line 43, in start_pairing await self.http.post("/pair-pin-start", headers=_AIRPLAY_HEADERS) File "/opt/venv/lib/python3.10/site-packages/pyatv/support/http.py", line 359, in post return await self.send_and_receive( File "/opt/venv/lib/python3.10/site-packages/pyatv/support/http.py", line 412, in send_and_receive raise exceptions.HttpError( pyatv.exceptions.HttpError: HTTP/1.1 method POST failed with code 400: Bad Request

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/app/create_config.py", line 105, in main() File "/app/create_config.py", line 64, in main loop.run_until_complete(task) File "/usr/local/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/app/create_config.py", line 42, in find_atvs await pairing.begin() File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/airplay/pairing.py", line 62, in begin return await error_handler( File "/opt/venv/lib/python3.10/site-packages/pyatv/support/init.py", line 41, in error_handler raise fallback(str(ex)) from ex pyatv.exceptions.PairingError: HTTP/1.1 method POST failed with code 400: Bad Request Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x7fb37a81f0>

    --

    To Reproduce Docker command that I ran: docker run --rm -it
    --network=host
    --entrypoint /opt/venv/bin/python3
    -v /home/pi/config.json:/app/config.json
    ghcr.io/dmunozv04/isponsorblocktv
    /app/create_config.py

    Expected behavior Adding the Apple TV correctly to the config.json file.

    Screenshots If applicable, add screenshots to help explain your problem.

    iSponsorBlockTV server (please complete the following information):

    • OS: Docker on Pi 64 headless
    • Python version [e.g. 3.7] (no need to fill if running on docker

    Apple TV (please complete the following information):

    • Device: Latest Apple TV 4K
    • OS: 15.4

    Additional context Add any other context about the problem here.

    bug 
    opened by dogotcat05 12
  • Docker Container fails after working briefly

    Docker Container fails after working briefly

    Hey, so everything has been working perfectly for awhile and all of a sudden it gives me this error in the logs. It also will say "cant find video id" at first, then pull the skip content. After a few hours of uptime I get this:

    Reconnecting to Apple TV

    Discovering devices on network...

    Connecting to 192.168.1.7

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-8916' coro=<process_playstatus() done, defined at /app/iSponsorBlockTV/main.py:58> exception=AttributeError("'NoneType' object has no attribute 'identifier'")>

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 61, in process_playstatus

    logging.debug("App playing is:" + str(atv.metadata.app.identifier))
    

    AttributeError: 'NoneType' object has no attribute 'identifier'

    Push updater started

    Reconnecting to Apple TV

    Discovering devices on network...

    Connecting to 192.168.1.7

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-8965' coro=<process_playstatus() done, defined at /app/iSponsorBlockTV/main.py:58> exception=AttributeError("'NoneType' object has no attribute 'identifier'")>

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 61, in process_playstatus

    logging.debug("App playing is:" + str(atv.metadata.app.identifier))
    

    AttributeError: 'NoneType' object has no attribute 'identifier'

    Push updater started

    Reconnecting to Apple TV

    Discovering devices on network...

    Connecting to 192.168.1.7

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-9014' coro=<process_playstatus() done, defined at /app/iSponsorBlockTV/main.py:58> exception=AttributeError("'NoneType' object has no attribute 'identifier'")>

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 61, in process_playstatus

    logging.debug("App playing is:" + str(atv.metadata.app.identifier))
    

    AttributeError: 'NoneType' object has no attribute 'identifier'

    Push updater started

    Reconnecting to Apple TV

    Discovering devices on network...

    Connecting to 192.168.1.7

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-9069' coro=<process_playstatus() done, defined at /app/iSponsorBlockTV/main.py:58> exception=AttributeError("'NoneType' object has no attribute 'identifier'")>

    Push updater started

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 61, in process_playstatus

    logging.debug("App playing is:" + str(atv.metadata.app.identifier))
    

    AttributeError: 'NoneType' object has no attribute 'identifier'

    Reconnecting to Apple TV

    Discovering devices on network...

    No device found, will retry

    Reconnecting to Apple TV

    Discovering devices on network...

    Connecting to 192.168.1.7

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-9134' coro=<process_playstatus() done, defined at /app/iSponsorBlockTV/main.py:58> exception=AttributeError("'NoneType' object has no attribute 'identifier'")>

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 61, in process_playstatus

    logging.debug("App playing is:" + str(atv.metadata.app.identifier))
    

    AttributeError: 'NoneType' object has no attribute 'identifier'

    Push updater started

    Reconnecting to Apple TV

    Discovering devices on network...

    Connecting to 192.168.1.56

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-1' coro=<loop_atv() done, defined at /app/iSponsorBlockTV/main.py:117> exception=TimeoutError()>

    Traceback (most recent call last):

    File "/usr/local/lib/python3.10/asyncio/locks.py", line 390, in acquire

    await fut
    

    asyncio.exceptions.CancelledError

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "/usr/local/lib/python3.10/asyncio/tasks.py", line 456, in wait_for

    return fut.result()
    

    asyncio.exceptions.CancelledError

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 134, in loop_atv

    atv = await connect_atv(event_loop, identifier, airplay_credentials)
    

    File "/app/iSponsorBlockTV/main.py", line 114, in connect_atv

    return await pyatv.connect(config, loop)
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/init.py", line 135, in connect

    await atv.connect()
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/core/facade.py", line 575, in connect

    if await setup_data.connect():
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/airplay/init.py", line 269, in _connect_rc

    await mrp_connect()
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/mrp/init.py", line 934, in _connect

    await protocol.start()
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/mrp/protocol.py", line 161, in start

    await self.send_and_receive(messages.get_keyboard_session())
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/mrp/protocol.py", line 259, in send_and_receive

    return await self._receive(identifier, timeout)
    

    File "/opt/venv/lib/python3.10/site-packages/pyatv/protocols/mrp/protocol.py", line 271, in _receive

    await asyncio.wait_for(semaphore.acquire(), timeout)
    

    File "/usr/local/lib/python3.10/asyncio/tasks.py", line 458, in wait_for

    raise exceptions.TimeoutError() from exc
    

    asyncio.exceptions.TimeoutError

    ERROR:asyncio:Task exception was never retrieved

    future: <Task finished name='Task-9222' coro=<process_playstatus() done, defined at /app/iSponsorBlockTV/main.py:58> exception=AttributeError("'NoneType' object has no attribute 'identifier'")>

    Traceback (most recent call last):

    File "/app/iSponsorBlockTV/main.py", line 61, in process_playstatus

    logging.debug("App playing is:" + str(atv.metadata.app.identifier))
    

    AttributeError: 'NoneType' object has no attribute 'identifier'

    bug 
    opened by ghstzch 10
  • JSONDecodeError when running main.py

    JSONDecodeError when running main.py

    Hello, I have followed all setup instructions; Installed dependencies, grabbed Identifier and credentials and filled in config.json. When running "python3 main.py" I get the following error. I have checked for issues in config.json and all looks ok. My knowledge of python is very limited so I am hoping you have an easy answer.

    Thank You. Cool project, looking forward to the Docker deployment!

    Traceback (most recent call last): File "main.py", line 134, in atv_config, apikey, categories = load_config() File "main.py", line 130, in load_config config = json.load(f) File "/usr/lib/python3.8/json/init.py", line 293, in load return loads(fp.read(), File "/usr/lib/python3.8/json/init.py", line 357, in loads return _default_decoder.decode(s) File "/usr/lib/python3.8/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Invalid control character at: line 4 column 347 (char 363)

    bug 
    opened by Flute7 6
  • SSL error in data received

    SSL error in data received

    Hi, great work, just super excited to see this in action. It seems my setup is detecting sponsor segments, but I'm getting an error. Hopefully this is helpful:

    SSL error in data received protocol: <asyncio.sslproto.SSLProtocol object at 0x10e95eac8> transport: <_SelectorSocketTransport fd=11 read=polling write=<idle, bufsize=0>> Traceback (most recent call last): File "/Users/username/.pyenv/versions/3.7.3/lib/python3.7/asyncio/sslproto.py", line 526, in data_received ssldata, appdata = self._sslpipe.feed_ssldata(data) File "/Users/username/.pyenv/versions/3.7.3/lib/python3.7/asyncio/sslproto.py", line 207, in feed_ssldata self._sslobj.unwrap() File "/Users/username/.pyenv/versions/3.7.3/lib/python3.7/ssl.py", line 767, in unwrap return self._sslobj.shutdown() ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)

    For what it's worth, from my searching around, I found "SSL error in data received" popping up for others in a separate project here https://github.com/matrix-org/pantalaimon/issues/10#issuecomment-490605510. Not sure if what they're saying there about python 3.8 is helpful, but thought I might share that.

    To Reproduce Steps to reproduce the behavior:

    1. Run main.py after ensuring dependencies are available and adding credentials, yt api key, and atv identifier to config.json
    2. Pick some new L*nus tech tips video as that youtuber seems to be pretty much all sponsor (matter of fact, SponsorBlock has a new feature that labels the latest video of his as "entirely [sponsor] category"
    3. See error (any time a sponsor segment is reached on the ATV)

    Expected behavior Segment skipped

    Screenshots N/A

    iSponsorBlockTV server (please complete the following information):

    • OS: macOS 11.4
    • Python version 3.7

    Apple TV (please complete the following information):

    • Device: Apple TV 4k 2nd gen
    • OS: tvOS 15.3

    Additional context N/A

    bug 
    opened by chansonnier 5
  • stale app identifier, skips not restricted to app.identifier ==

    stale app identifier, skips not restricted to app.identifier == "com.google.ios.youtube"

    I get attempted ad skips when using the non-YouTube apps on the Apple TV.

    For instance, when watching FBI S04E14 Pride and Prejudice in the Apple TV's "Computers" app, the script searched YouTube and found 4jwUXV4QaTw (which is a YouTube video on FBI body language analysis,) and executed both of the skips despite not watching YouTube.

    I see in the source: playstatus.device_state == playstatus.device_state.Playing and app.identifier == "com.google.ios.youtube" which seems like it should prevent that, so now I'm wondering if the app identifier is stale.

    When I originally launched the script, I was in the YouTube app, but later switched to other apps. I haven't tested to verify, but I have noticed behavior possibly consistent with the identifier being cached at launch, and not updated. For instance, I think I've noticed the script continues to not work if the Apple TV isn't in the YouTube app at script launch.

    bug 
    opened by sejmann 4
  • Docker full support

    Docker full support

    Docker currently works but it isn't perfect. List of issues (saving this here for future me)

    • [x] Armv7 isn't supported

    • [x] #8

    • [x] Docker doesn't print any logs

    enhancement 
    opened by dmunozv04 4
  • Error with cache import

    Error with cache import

    Traceback (most recent call last): File "/Users/test/Downloads/iSponsorBlockTV-main/main.py", line 5, in from cache import AsyncTTL ModuleNotFoundError: No module named 'cache'

    Any ideas? I think dependencies are installed correctly from requirements.txt and API key is saved in .json file.

    EDIT: requirements.txt still lists async_lru as dependency instead of async-ttl. I installed async-ttl manually with "pip install async-ttl", but I get the same error still. All other dependencies seem to be installed. No idea what the module cache error is. Thanks

    opened by PencilNotPen 4
  • Sponsor segment not skipped after manually seeking

    Sponsor segment not skipped after manually seeking

    As the title says, the sponsor segment is not currently being skipped if you fast-forward or rewind a video.

    Steps to reproduce:

    1. Play a video on YouTube
    2. Skip forward or rewind the video.
    3. Ad will not be skipped
    question 
    opened by CraftyCorvid 2
  • Print errors if present when calling YouTube API

    Print errors if present when calling YouTube API

    All of my API calls were showing as errors in the Google console. Printing them helps with troubleshooting.

    Some examples:

    {'code': 403, 'message': 'The request cannot be completed because you have exceeded your <a href="/youtube/v3/getting-started#quota">quota</a>.', 'errors': [{'message': 'The request cannot be completed because you have exceeded your <a href="/youtube/v3/getting-started#quota">quota</a>.', 'domain': 'youtube.quota', 'reason': 'quotaExceeded'}]}
    
    {'code': 403, 'message': 'Requests to this API youtube method youtube.api.v3.V3DataSearchService.List are blocked.', 'errors': [{'message': 'Requests to this API youtube method youtube.api.v3.V3DataSearchService.List are blocked.', 'domain': 'global', 'reason': 'forbidden'}], 'status': 'PERMISSION_DENIED', 'details': [{'@type': 'type.googleapis.com/google.rpc.ErrorInfo', 'reason': 'API_KEY_SERVICE_BLOCKED', 'domain': 'googleapis.com', 'metadata': {'service': 'youtube.googleapis.com', 'consumer': 'projects/XXXXXXXXXX'}}]}
    
    opened by geneccx 0
  • "Please move the program to the correct path"

    Installing on MacOS.

    The wget produces the wrong file name, but after renaming it to iSponsorBlockTV, following the rest of the script I get to

    ./iSponsorBlockTV --macos_install

    This gives me:

    Please move the program to the correct path: /Users/<me>/iSponsorBlockTVopeing now on finder...

    Note the typo and lack of space.

    The instruction seems to be to move the file to where it already is.

    To Reproduce Steps to reproduce the behavior:

    1. Follow the instructions provided, except after the wget step, rename the file.

    Note also that the Mac doesn't by default have wget installed. Suggest instructions for using say curl.

    Expected behavior The installer should run.

    bug 
    opened by gisborne 1
  • SSL

    SSL

    Hi!

    Docker run in NAS:

    DEBUG:pyatv.core.protocol:Dispatching message with type 4 to <bound method PlayerStateManager._handle_set_state of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0x7f4bb4936d10>> DEBUG:pyatv.auth.hap_channel:Sending data (Encrypted=200072c79fc370115f795734f7e04b797d6aced895e865da4a74a432df46d781564d0c90e737a5f8039fa300229ef94d86ac) DEBUG:root:App playing is:com.google.ios.youtube DEBUG:pyatv.core.protocol:Dispatching message with type UpdatedState.Playing to <bound method FacadePower._playing_changed of <pyatv.core.facade.FacadePower object at 0x7f4bb4936980>> DEBUG:root:Playstatus update Media type: Unknown Device state: Playing Repeat: Off Shuffle: Off DEBUG:root:App playing is:com.google.ios.youtube DEBUG:asyncio:<asyncio.sslproto.SSLProtocol object at 0x7f4bb4937fa0>: SSL error in data received Traceback (most recent call last): File "/usr/local/lib/python3.10/asyncio/sslproto.py", line 534, in data_received ssldata, appdata = self._sslpipe.feed_ssldata(data) File "/usr/local/lib/python3.10/asyncio/sslproto.py", line 206, in feed_ssldata self._sslobj.unwrap() File "/usr/local/lib/python3.10/ssl.py", line 979, in unwrap return self._sslobj.shutdown() ssl.SSLError: [SSL: APPLICATION_DATA_AFTER_CLOSE_NOTIFY] application data after close notify (_ssl.c:2672)

    bug 
    opened by Striker72rus 0
  • Failure to Launch - not sure if it is a bug

    Failure to Launch - not sure if it is a bug

    Hi there - I see this error while attempting to launch the plist:

    launchctl load ~/Library/LaunchAgents/com.dmunozv04.iSponsorBlockTV.plist

    Error:

    Load failed: 5: Input/output error Try running launchctl bootstrap as root for richer errors.

    Has anyone else run into this error?

    Thanks!

    bug 
    opened by c0d3-n00b 0
  • Identifying ATV on network fails

    Identifying ATV on network fails

    Installed via Docker on MacOS. Using pyatv, I found my ATV identifier: 04:4B:ED:99:FB:XX

    I then used pyatv to find the airplay_credentials: d6683fd0d2bdfca0926bfd5366b4f07191a9566fb8da04f3c03e90e76f544fc3:3a870e73c4621966cb3dadada32cc8d7e5c777f38efb9fe523118b79f699c413:36323839413335382d343336312d343945392d414442332d454241333046303144424239:39386336373835632d666330332d343463352d386561362d3337626639306637656162XX

    I've updated the config.json file with these two inputs, but after restarting the docker, this is the logs I see:

    Discovering devices on network...
    No device found, will retry
    Reconnecting to Apple TV
    Discovering devices on network...
    
    bug 
    opened by benklinger 3
  • Hmm doesnt seem to work here

    Hmm doesnt seem to work here

    Hey,

    it doesn't seem to skip anything i tested it with 10+ videos from LTT

    {"atvs": [{"identifier": "58:D3:49:CC:0E:25", "airplay_credentials": "63ab822772c306fd1623811ac0a3a99a1c....."}, {"identifier": "EC:A9:07:14:61:60", "airplay_credentials": "d641c673b0c2021b36933b7c0357e7d....."}, {"identifier": "40:CB:C0:B2:DE:D1", "airplay_credentials": "0b0117987330c8ac69c2047b679cd71...."}], "apikey": "AIzaSyAkexkdL....", "skip_categories": ["sponsor,", "selfpromo,", "exclusive_access,", "interaction,", "poi_highlight,", "intro,", "outro,", "preview,", "filler,", "music_offtopic"]}

    Anything i could do to help?

    bug 
    opened by joeblack2k 2
Releases(v0.1)
Owner
David
David
Donatus Prince 6 Feb 25, 2022
About A python based Apple Quicktime protocol,you can record audio and video from real iOS devices

介绍 本应用程序使用 python 实现,可以通过 USB 连接 iOS 设备进行屏幕共享 高帧率(30〜60fps) 高画质 低延迟(<200ms) 非侵入性 支持多设备并行 Mac OSX 安装 python >=3.7 brew install libusb pkg-config 如需使用 g

YueC 124 Nov 30, 2022
Bad Apple printed out on the console with Python!

bad-apple Bad Apple printed out on the console with Python! Preface A word of disclaimer, while the final code is somewhat original, this project is a

CalvinLoke 186 Dec 1, 2022
🍏 Make Thinc faster on macOS by calling into Apple's native Accelerate library

?? Make Thinc faster on macOS by calling into Apple's native Accelerate library

Explosion 81 Nov 26, 2022
Process RunGap output file of a workout and load data into Apple Numbers Spreadsheet and my website with API calls

BSD 3-Clause License Copyright (c) 2020, Mike Bromberek All rights reserved. ProcessWorkout Exercise data is exported in JSON format to iCloud using

Mike Bromberek 1 Jan 3, 2022
Singularity Containers on Apple M1 (ARM64)

Singularity Containers on Apple M1 (ARM64) This is a repository containing a ready-to-use environment for singularity in arm64 (M1). It has been prepa

Manuel Parra 4 Nov 14, 2022
The repository for my video "Playing MINECRAFT with a WEBCAM"

This is the official repo for my video "Playing MINECRAFT with a WEBCAM" on YouTube Original video can be found here: https://youtu.be/701TPxL0Skg Red

Rishabh 27 Jun 7, 2022
Code for the manim-generated scenes used in 3blue1brown videos

This project contains the code used to generate the explanatory math videos found on 3Blue1Brown. This almost entirely consists of scenes generated us

Grant Sanderson 4.1k Jan 2, 2023
A repository containing an introduction to Panel made to be support videos and talks.

?? Awesome Panel - Introduction to Panel THIS REPO IS WORK IN PROGRESS. PRE-ALPHA Panel is a very powerful framework for exploratory data analysis and

Marc Skov Madsen 51 Nov 17, 2022
Test to grab m3u from YouTube live.

YouTube_to_m3u https://raw.githubusercontent.com/benmoose39/YouTube_to_m3u/main/youtube.m3u Updated m3u links of YouTube live channels, auto-updated e

null 136 Jan 6, 2023
Insert a Spotify Playlist, Get a list of YouTube URLs from it.

spotbee This is a module that spits out YouTube URLs from Spotify Playlist URLs Why use this? It is asynchronous which makes it compatible to use with

Nishant Sapkota 10 Apr 6, 2022
Allows you to purge all reply comments left by a user on a YouTube channel or video.

YouTube Spammer Purge Allows you to purge all reply comments left by a user on a YouTube channel or video. Purpose Recently, there has been a massive

null 4.3k Jan 9, 2023
Youtube Channel Website

Videos-By-Sanjeevi Youtube Channel Website YouTube Channel Website Features: Free Hosting using GitHub Pages and open-source code base in GitHub. It c

Sanjeevi Subramani 5 Mar 26, 2022
A Bot that adds YouTube views to your video of choice

YoutubeViews Free Youtube viewer bot A Bot that adds YouTube views to your video of choice Installation git clone https://github.com/davdtheemonk/Yout

ProbablyX 5 Dec 6, 2022
Learning objective: Use React.js, Axios, and CSS to build a responsive YouTube clone app

Learning objective: Use React.js, Axios, and CSS to build a responsive YouTube clone app to search for YouTube videos, channels, playlists, and live events via wrapper around Google YouTube API.

Dillon 0 May 3, 2022
Streamlit apps done following data professor's course on YouTube

streamlit-twelve-apps Streamlit apps done following data professor's course on YouTube Español Curso de apps de data science hecho por Data Professor

Federico Bravin 1 Jan 10, 2022
A script to automatically update bot status at GitHub as well as in Telegram channel.

A simple & short repository to show your bot's status in your GitHub README.md file as well as in you channel.

Jainam Oswal 55 Dec 13, 2022
Quick script for automatically extracting syscall numbers for an OS

Syscalls-Extractor Quick script for automatically extracting syscall numbers for an OS $ python3 .\syscalls-extractor.py --help usage: syscalls-extrac

m0rv4i 54 Feb 10, 2022
This script is written with Python for selling steam community items automatically.

SteamCommunityItemAutoSell Description This script is written with Python for selling steam community items automatically. Install git clone https://g

null 14 Oct 26, 2022