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
Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.

This readme will introduce you to Carteblanche and walk you through an example app, please refer to carteblanche-django-starter for the full example p

Eric Neuman 42 May 28, 2021
The blancmange curve can be visually built up out of triangle wave functions if the infinite sum is approximated by finite sums of the first few terms.

Blancmange-curve The blancmange curve can be visually built up out of triangle wave functions if the infinite sum is approximated by finite sums of th

Shankar Mahadevan L 1 Nov 30, 2021
mypy plugin for PynamoDB

pynamodb-mypy A plugin for mypy which gives it deeper understanding of PynamoDB (beyond what's possible through type stubs). Usage Add it to the plugi

1 Oct 21, 2022
A funny alarm clock I made in python

Wacky-Alarm-Clock Basically, I kept forgetting to take my medications, so I thought it would be a fun project to code my own alarm clock and make it r

1 Nov 18, 2021
Script that creates graphical representations of Julia an Mandelbrot sets.

Julia and Mandelbrot Picture Maker This simple functions create simple plots of the Julia and Mandelbrot sets. The Julia set require the important par

Juan Riera Gomez 1 Jan 10, 2022
Skull shaped MOSFET cells for the Efabless's 130nm process

SkullFET Skull shaped MOSFET cells for the Efabless's 130nm process List of cells Inverter Copyright (C) 2021 Uri Shaked

Wokwi 3 Dec 14, 2022
A Blender addon to enable reloading linked libraries from UI.

library_reload_linked_libraries A Blender addon to enable reloading linked libraries from UI.

3 Nov 27, 2022
Cash in on Expressed Barcode Tags (EBTs) from NGS Sequencing Data with Python

Cash in on Expressed Barcode Tags (EBTs) from NGS Sequencing Data with Python Cashier is a tool developed by Russell Durrett for the analysis and extr

3 Sep 11, 2022
Utility to play with ADCS, allows to request tickets and collect information about related objects

certi Utility to play with ADCS, allows to request tickets and collect information about related objects. Basically, it's the impacket copy of Certify

Eloy 185 Dec 29, 2022
An AI-powered device to stop people from stealing my packages.

Package Theft Prevention Device An AI-powered device to stop people from stealing my packages. Installation To install on a raspberry pi, clone the re

rydercalmdown 157 Nov 24, 2022
Ronin - Create Fud Meterpreter Payload To Hack Windows 11

Ronin - Create Fud Meterpreter Payload To Hack Windows 11

Dj4w3d H4mm4di 6 May 09, 2022
[CVPR 2020] Rethinking Class-Balanced Methods for Long-Tailed Visual Recognition from a Domain Adaptation Perspective

Rethinking Class-Balanced Methods for Long-Tailed Visual Recognition from a Domain Adaptation Perspective [Arxiv] This is PyTorch implementation of th

Abdullah Jamal 22 Nov 19, 2022
SimBiber - A tool for simplifying bibtex with official info

SimBiber: A tool for simplifying bibtex with official info. We often need to sim

336 Jan 02, 2023
Minecraft Multi-Server Pinger Discord Embed

Minecraft Network Pinger Minecraft Multi-Server Pinger Discord Embed What does this bot do? It sends an embed and uses mcsrvstat API and checks if the

YungHub 2 Jan 05, 2022
A free website that keeps the people informed about housing and evictions.

Eviction Tracker Currently helping verify detainer warrant data for middle Tennessee - via Middle TN DSA - Red Door Collective Features Presents data

Red Door Collective 7 Dec 14, 2022
script to analyze EQ decay using python

pyq_decay script to analyze EQ decay using python PyQ Decay ver 1.0 A pythonic script to analyze EQ aftershock decay using method of Omori (1894), Mog

1 Nov 04, 2021
This is a backport of the BaseExceptionGroup and ExceptionGroup classes from Python 3.11.

This is a backport of the BaseExceptionGroup and ExceptionGroup classes from Python 3.11. It contains the following: The exceptiongroup.BaseExceptionG

Alex Grönholm 19 Dec 15, 2022
An improved version of the common ˙pacman -S˙

BetterPacmanLook An improved version of the common pacman -S. Installation I know that this is probably one of the worst solutions and i will be worki

1 Nov 06, 2021
Hydralit package is a wrapping and template project to combine multiple independant Streamlit applications into a multi-page application.

Hydralit The Hydralit package is a wrapping and template project to combine multiple independant (or somewhat dependant) Streamlit applications into a

Jackson Storm 108 Jan 08, 2023
Tethered downgrade 64-bit iDevices vulnerable to checkm8

ra1nstorm Tethered downgrade 64-bit iDevices vulnerable to checkm8 Since the purpose of this tool is to tethered downgrade a device, after restoring p

mini_exploit 65 Nov 08, 2022