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 collection of modern themes for Tkinter TTK

ttkbootstrap A collection of modern flat themes inspired by Bootstrap. Also includes TTK Creator which allows you to easily create and use your own th

Israel Dryer 827 Jan 04, 2023
Albert launcher extension for rolling dice.

dice-roll-albert-ext Extension for rolling dice in Albert launcher Installation Locate the modules directory in the Python extension data directory. T

Jonah Lawrence 1 Nov 18, 2021
Async timeit - Async version of python's timeit

Async Timeit Replica of default python timeit module with small changes to allow

Raghava G Dhanya 3 Apr 13, 2022
Render reMarkable documents to PDF

rmrl: reMarkable Rendering Library rmrl is a Python library for rendering reMarkable documents to PDF files. It takes the original PDF document and th

Robert Schroll 95 Dec 25, 2022
《practical python programming》的中文翻译

欢迎光临 大约 25 年前,当我第一次学习 Python 时,发现 Python 竟然可以被高效地应用到各种混乱的工作项目上,我立即被震惊了。15 年前,我自己也将这种乐趣教授给别人。教学的结果就是本课程——一门实用的学习 Python的课程。

编程人 125 Dec 17, 2022
Rufus port to linux, writed on Python3

Rufus-for-Linux Rufus port to linux, writed on Python3 Программа будет иметь тот же интерфейс что и оригинал, и тот же функционал. Программа создается

6 Jan 07, 2022
Drug Discovery App Using Lipinski's Rule-of-Five.

Drug Discovery App A Drug Discovery App Using Lipinski's Rule-of-Five. TAPIWA CHAMBOKO 🚀 About Me I'm a full stack developer experienced in deploying

tapiwa chamboko 3 Nov 08, 2022
Statistics Calculator module for all types of Stats calculations.

Statistics-Calculator This Calculator user the formulas and methods to find the statistical values listed. Statistics Calculator module for all types

2 May 29, 2022
Voldemort's Python import helper

importmagician Voldemort's Python import helper pip install importmagician Import from uninstalled Python directories Say you have a directory (relat

Zhengyang Feng 4 Mar 09, 2022
Improving the Transferability of Adversarial Examples with Resized-Diverse-Inputs, Diversity-Ensemble and Region Fitting

Improving the Transferability of Adversarial Examples with Resized-Diverse-Inputs, Diversity-Ensemble and Region Fitting

Junhua Zou 7 Oct 20, 2022
A synchronous, single-threaded interface for starting processes on Linux

A synchronous, single-threaded interface for starting processes on Linux

Spencer Baugh 27 Jan 28, 2022
A simple API to upload notes or files to KBFS

This API can be used to upload either secure notes or files to a secure KeybaseFS folder.

Dakota Brown 1 Oct 08, 2021
PwnDatas-DB-Project(PDDP)

PwnDatas-DB-Project PwnDatas-DB-Project(PDDP) 安裝依賴: pip3 install pymediawiki 使用: cd /opt git https://github.com/JustYoomoon/PwnDatas-DB-Project.git c

21 Jul 16, 2021
Helps to arrange nodes

Relax brush for nodes, helps to arrange nodes easier.

336 Dec 15, 2022
Cross-platform MachO/ObjC Static binary analysis tool & library. class-dump + otool + lipo + more

ktool Static Mach-O binary metadata analysis tool / information dumper pip3 install k2l Development is currently taking place on the @python3.10 branc

Kritanta 301 Dec 28, 2022
Functional collections extension functions for Python

pyfuncol pyfuncol Installation Usage API Documentation Compatibility Contributing License A Python functional collections library. It extends collecti

Andrea Veneziano 32 Nov 16, 2022
Calibre Libgen Non-fiction / Sci-tech store plugin

CalibreLibgenSci A Libgen Non-Fiction/Sci-tech store plugin for Calibre Installation Download the latest zip file release from here Open Calibre Navig

IDDQD 9 Dec 27, 2022
fast_bss_eval is a fast implementation of the bss_eval metrics for the evaluation of blind source separation.

fast_bss_eval Do you have a zillion BSS audio files to process and it is taking days ? Is your simulation never ending ? Fear no more! fast_bss_eval i

Robin Scheibler 99 Dec 13, 2022
Gives criticality score for an open source project

Open Source Project Criticality Score (Beta) This project is maintained by members of the Securing Critical Projects WG. Goals Generate a criticality

Open Source Security Foundation (OpenSSF) 1.1k Dec 23, 2022
A shim for the typeshed changes in mypy 0.900

types-all A shim for the typeshed changes in mypy 0.900 installation pip install types-all why --install-types is annoying, this installs all the thin

Anthony Sottile 28 Oct 20, 2022