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
Python Create Your Own Tool Series

Python Create Your Own Tool Series Hey there! This is an additional Github repository that contains the final product files for each video in my Youtu

Joe Helle 21 Dec 02, 2022
Graveyard is an attempt at open-source reimplementation of DraciDoupe.cz

Graveyard: Place for Dead (and Undead) Graveyard is an attempt at open-source reimplementation of DraciDoupe.cz (referred to as DDCZ in this text). De

DraciDoupe.cz 5 Mar 17, 2022
Stop ask your soraka to ult you, just ult yourself

Lollo's auto-ultimate script Are you tired of your low elo friend who can't ult you with soraka when you ask for it? Use Useless Support and just ult

9 Oct 20, 2022
Python-Kite: Simple python code to make kite pattern

Python-Kite Simple python code to make kite pattern. Getting Started These instr

Anoint 0 Mar 22, 2022
A simple program to recolour simple png icon-like pictures with just one colour + transparent or white background. Resulting images all have transparent background and a new colour.

A simple program to recolour simple png icon-like pictures with just one colour + transparent or white background. Resulting images all have transparent background and a new colour.

Anna Tůmová 0 Jan 30, 2022
📽 Streamlit application powered by a PyScaffold project setup

streamlit-demo Streamlit application powered by a PyScaffold project setup. Work in progress: The idea of this repo is to demonstrate how to package a

PyScaffold 2 Oct 10, 2022
Beacon Object File (BOF) to obtain a usable TGT for the current user.

Beacon Object File (BOF) to obtain a usable TGT for the current user.

Connor McGarr 109 Dec 25, 2022
Reload all Blender add-on modules

Reload-Addon This add-on creates a list of the modules that the add-on selected in the drop-down menu contains and reloads them with the keyboard shor

2 Dec 02, 2021
Schemdule is a tiny tool using script as schema to schedule one day and remind you to do something during a day.

Schemdule is a tiny tool using script as schema to schedule one day and remind you to do something during a day. Platform Python Install Use pip: pip

StardustDL 4 Sep 13, 2021
Multitrack exporter for OP-Z

Underbridge for OP-Z Multitrack exporter Description Exports patterns and projects individual audio tracks to seperate folders for use in your DAW. Py

Thomas Herrmann 71 Dec 25, 2022
A collection of python exercises to help your learning path!

How to use Step 1: run this command git clone https://github.com/TechPenguineer/Python-Exercises.git Step 2: Run this command cd Python-Exercises You

Tech Penguin 5 Aug 05, 2021
Ronin - Create Fud Meterpreter Payload To Hack Windows 11

Ronin - Create Fud Meterpreter Payload To Hack Windows 11

Dj4w3d H4mm4di 6 May 09, 2022
Prophet is a tool to discover resources detailed for cloud migration, cloud backup and disaster recovery

Prophet is a tool to discover resources detailed for cloud migration, cloud backup and disaster recovery

22 May 31, 2022
⚡KiCad library containing footprints and symbols for inductive analog keyboard switches

Inductive Analog Switches This library contains footprints and symbols for inductive analog keyboard switches for use with the Texas Instruments LDC13

Elias Sjögreen 3 Jun 30, 2022
A Blender addon for VSE that auto-adjusts video strip's length, if speed effect is applied.

Blender VSE Speed Adjust Addon When using Video Sequence Editor in Blender, the speed effect strip doesn't auto-adjusts clip length when changing its

Arpit Srivastava 2 Jan 18, 2022
Syntax highlighting for yarn.lock and bun.lockb files

Yarn.lock Syntax Highlighting Syntax highlighting for yarn.lock and bun.lockb files Installation Plugin is not publushed yet on Package Control, to in

Alexander Kuznetsov 4 Jul 06, 2022
The fetch of the delegator list and the input of the epoch nonce need to be done independently

raffle The fetch of the delegator list and the input of the epoch nonce need to be done independently. Get the list of delegators at the epoch change.

1 Dec 15, 2021
E5自动续期

AutoApi v6.3 (2021-2-18) ———— E5自动续期 AutoApi系列: AutoApi(v1.0) 、 AutoApiSecret(v2.0) 、 AutoApiSR(v3.0) 、 AutoApiS(v4.0) 、 AutoApiP(v5.0) 说明 E5自动续期程序,但是

34 Feb 20, 2021
A Gura parser implementation for Python

Gura parser This repository contains the implementation of a Gura format parser in Python. Installation pip install gura-parser Usage import gura gur

JWare Solutions 19 Jan 25, 2022
Python with the scientific stack, compiled to WebAssembly.

Pyodide may be used in any context where you want to run Python inside a web browser.

9.5k Jan 09, 2023