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
🍕 A small app with capabilities ordering food and listing them with pub/sub pattern

food-ordering A small app with capabilities ordering food and listing them. Prerequisites Docker Run Tests docker-compose run --rm web ./manage.py tes

Muhammet Mücahit 1 Jan 14, 2022
A OBS service to package a published repository into a tar.gz file

OBS Source Service obs-service-publish_tar obs-service-publish_tar will create a archive.tar[.tar compression] archive containing the published repo

Erico Mendonca 1 Feb 16, 2022
A simple wrapper for joy library

Joy CodeGround A simple wrapper for joy library to render joy sketches in browser using vs code, (or in other words, for those who are allergic to Jup

rijfas 9 Sep 08, 2022
A Python feed reader library.

reader is a Python feed reader library. It aims to allow writing feed reader applications without any business code, and without enforcing a dependenc

266 Dec 30, 2022
Demo of connecting Rasa with Zalo

Demo of connecting Rasa with Zalo

6 Jul 25, 2022
In this project we will implement AirBnB clone using console

AirBnB Clone In this project we will implement AirBnB clone using console. Usage The shell should work like this

Nandweza Allan 1 Feb 07, 2022
✔️ Create to-do lists to easily manage your ideas and work.

Todo List + Add task + Remove task + List completed task + List not completed task + Set clock task time + View task statistics by date Changelog v 1.

Abbas Ataei 30 Nov 28, 2022
A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python

A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python

Windel Bouwman 277 Dec 26, 2022
An open-source Python project series where beginners can contribute and practice coding.

Python Mini Projects A collection of easy Python small projects to help you improve your programming skills. Table Of Contents Aim Of The Project Cont

Leah Nguyen 491 Jan 04, 2023
TinyBar - Tiny MacOS menu bar utility to track price dynamics for assets on TinyMan.org

📃 About A simple MacOS menu bar app to display current coins from most popular

Al 8 Dec 23, 2022
A script to generate NFT art living on the Solana blockchain.

NFT Generator This script generates NFT art based on its desired traits with their specific rarities. It has been used to generate the full collection

Rude Golems 24 Oct 08, 2022
Have an idea for a Python package? Register the name on PyPI 💡

Register Package Names on PyPI Have an idea for a Python package? Thought of a great name? Register it on PyPI, before someone else does! A tool that

Alex Ioannides 1 Jul 15, 2022
Бэкапалка таблиц mysql 8 через брокер сообщений nats

nats-mysql-tables-backup Бэкап таблиц mysql 8 через брокер сообщений nats (проверено и работает в ubuntu 20.04, при наличии python 3.8) ПРИМЕРЫ: Ниже

Constantine 1 Dec 13, 2021
An-7 tool for python

***An-7 tool - Anonime-X Team*** An-x Menu : SPAM Android web malware interpreter Spam Tools : scampages letters mailers smtpcrack wpbrute shell Andro

Hamza Anonime 8 Nov 18, 2021
BloodCheck enables Red and Blue Teams to manage multiple Neo4j databases and run Cypher queries against a BloodHound dataset.

BloodCheck BloodCheck enables Red and Blue Teams to manage multiple Neo4j databases and run Cypher queries against a BloodHound dataset. Installation

Mr B0b 16 Nov 05, 2021
使用京东cookie一键生成所有退会链接

JDMemberCloseLinks 本项目旨在使用京东cookie一键生成所有退会链接

hyzaw 68 Jun 10, 2022
Library support get vocabulary from MEM

Features: Support scraping the courses in MEM to take the vocabulary Translate the words to your own language Get the IPA for the English course Insta

Joseph Quang 4 Aug 13, 2022
Create or join a private chatroom without any third-party middlemen in less than 30 seconds, available through an AES encrypted password protected link.

PY-CHAT Create or join a private chatroom without any third-party middlemen in less than 30 seconds, available through an AES encrypted password prote

1 Nov 24, 2021
Easytile blender - Simple Blender 2.83 addon for tiling meshes easily

easytile_blender Dead simple, barebones Blender (2.83) addon for placing meshes as tiles. Installation In Blender, go to Edit Preferences Add-ons

Sam Gibson 6 Jul 19, 2022
A simple watcher for the XTZ/kUSD pool on Quipuswap

Kolibri Quipuswap Watcher This repo holds the source code for the QuipuBot bot deployed to the #quipuswap-updates channel in the Kolibri Discord Setup

Hover Labs 1 Nov 18, 2021