Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder

Overview

Safe Eyes

Release PyPI version Debian AUR Translation status Awesome Humane Tech Donate

Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder.

Visit the official site: http://slgobinath.github.io/SafeEyes/ for more details.

Safe Eyes command-line arguments

usage: safeeyes [-h] [-a | -d | -e | -q | -s | -t] [--debug] [--version]

Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you to
take breaks while you're working long hours at the computer.

optional arguments:
  -h, --help        show this help message and exit
  -a, --about       show the about dialog
  -d, --disable     disable the currently running safeeyes instance
  -e, --enable      enable the currently running safeeyes instance
  -q, --quit        quit the running safeeyes instance and exit
  -s, --settings    show the settings dialog
  -t, --take-break  take a break now
  --debug           start safeeyes in debug mode
  --status          print the status of running safeeyes instance and exit
  --version         show program's version number and exit

Installation guide

Safe Eyes is available in Ubuntu PPA, Arch AUR, Gentoo and Python PyPI. You can choose any installation source and install on any Linux system with Python 3.

Ubuntu, Linux Mint and other Ubuntu Derivatives

sudo add-apt-repository ppa:slgobinath/safeeyes
sudo apt update
sudo apt install safeeyes

Arch

yay -S safeeyes

Gentoo

sudo emerge -av x11-misc/safeeyes

Debian

sudo apt-get install safeeyes

Fedora

sudo dnf install libappindicator-gtk3 python3-psutil cairo-devel python3-devel gobject-introspection-devel cairo-gobject-devel
sudo pip3 install safeeyes
sudo gtk-update-icon-cache /usr/share/icons/hicolor

OpenSUSE Tumbleweed

sudo zypper refresh
sudo zypper install safeeyes

Other Linux & Run from source

Ensure to meet the following dependencies:

  • gir1.2-appindicator3-0.1
  • gir1.2-notify-0.7
  • libappindicator-gtk3
  • python3-psutil
  • xprintidle (optional)
  • wlrctl (wayland optional)

To install Safe Eyes:

sudo pip3 install safeeyes

After installation, restart your system to update the icons,

To run from source:

git clone https://github.com/slgobinath/SafeEyes.git
cd SafeEyes
python3 -m safeeyes

Safe Eyes installers install the required icons to /usr/share/icons/hicolor. When you run Safe Eyes from source without, some icons may not appear.

Install in Virtual Environment

Some Linux systems like Cent OS do not have matching dependencies available in their repository. In such systems, you can install and use Safe Eyes in a Python Virtual Environment. The following instruction was tested on Cent OS 7.

  1. Install the necessary dependencies

    sudo yum install python3-devel dbus dbus-devel cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel gobject-introspection-devel cairo-gobject-devel
  2. Create a virtual environment in your home folder

    mkdir ~/safeeyes
    cd ~/safeeyes/
    
    pip3 install virtualenv --user
    virtualenv --no-site-packages venv
    source venv/bin/activate
    pip3 install dbus-python safeeyes
  3. Start Safe Eyes from terminal

    cd ~/safeeyes & source venv/bin/activate
    python3 -m safeeyes

For more details, please check the issue: #329

Features

  • Remind you to take breaks with exercises to reduce RSI
  • Disable keyboard during breaks
  • Notification before and after breaks
  • Smart pause if system is idle
  • Multi-screen support
  • Customizable user interface
  • RPC API to control externally
  • Command-line arguments to control the running instance
  • Customizable using plug-ins

Third-party Plugins

Thirdparty plugins are available at another GitHub repository: safeeyes-plugins. More details about how to write your own plugin and how to install third-party plugin are available there.

License

GNU General Public License v3

IDE Support

Thanks to JetBrains for offering IDE support to develop this Open Source project.

Comments
  • Safe Eyes 2.0.0

    Safe Eyes 2.0.0

    Hi, I am pleased to announce that Safe Eyes 2.0.0 is almost ready. However, I just need to confirm that merging it to master branch will not affect the build packages for Debian, Gentoo, and others (if there are any).

    @hartwork and @anarcat could you please confirm this?

    Also, I have changed the translation technique. Earlier I used JSON files but now I have switched to formal translation files. It requires all the existing translations to be updated to the new format. Some existing literals are removed and some new literals are added to the translation.

    I kindly expect your contribution on translating Safe Eyes 2.0.0, updating the document and testing before releasing the final version. You can test Safe Eyes 2.0.0 by following these steps:

    1. git clone https://github.com/slgobinath/SafeEyes.git

    2. cd SafeEyes

    3. git checkout safeeyes-2.0.0

    4. Build the translation file using the following command:

    msgfmt -o safeeyes/config/locale/en_US/LC_MESSAGES/safeeyes.mo safeeyes/config/locale/en_US/LC_MESSAGES/safeeyes.po
    
    1. python3 -m safeeyes

    Translations cannot be done via Weblate until I merge the changes to master branch. So please send your commits to the safeeyes-2.0.0 branch. I left the previous JSON files for reference but they will be removed before releasing the final version.

    What is new in Safe Eyes 2.0.0:

    • Completely new architecture

    • Features are implemented as plugins

    • Plugins become more powerful

      • Plugins can have their own settings and the cool thing is: Safe Eyes automatically creates the respective Settings dialog.
      • Plugins can have their own dependencies
      • Plugins can control Safe Eyes or just display a text content in the break screen (Respective flow control methods are defined)
      • For more details, have a look at the existing plugins and the partially completed README document
      • Users can create their own plugins. I am thinking about maintaining a directory/separate repo for custom plugins depending on the requirement.
    • Users can manually start a break

    • Persist the internal state

    • All most all the configurations can be done via GUI

    One more feature is pending to implement. Since the Tray Icon is implemented as plugins, it can be disabled by the user which prevents access to Settings Dialog. I let users disable it considering the Gnome 3 guidelines. However, I will implement an alternative way to launch the Settings dialog without using the Tray Icon. For the moment, stay away from disabling Tray Icon and in case if you have sone so, reset the settings by removing the ~/.config/safeeyes folder.

    If you have any suggestions, please do let me know.

    safe eyes

    help wanted discussion 
    opened by slgobinath 22
  • Health Statistics: include daily screen time?

    Health Statistics: include daily screen time?

    @slgobinath what do you think of including daily screen time to the health statistics plugin and maybe some information when desired daily screen time has been exceeded? 😗

    feature 
    opened by orschiro 18
  • credit me idle time

    credit me idle time

    instead of suspending time tracking, safeeyes should credit me time that i am idle at the computer.

    example: i'm due for a pause, safeeyes tells me so but postpone it. a few minutes later, i actually step away from the computer for 10 minutes. safeeyes consider that "idle time" so it stops tracking time. when i come back, safeeyes wakes up and sends me a warning after 5 minutes because I postponed the last break.

    it should have counted my time away and if it was long enough to count as a break, count it as such.

    opened by anarcat 17
  • Moving away from /opt

    Moving away from /opt

    Hi there!

    Are there plans to get SafeEyes out of /opt towards pip/setuptools or /usr/local? It would make SafeEyes a much better citizen with regard to packaging on Linux and would allow turning away from the current

    sudo tar -xzvf safeeyes.tar.gz -C /
    

    recommendation as well, which I find a bit scary to be honest :) I'm happy to team up on that matter.

    Best, Sebastian

    PS: There's a Gentoo ebuild in the making at https://cgit.gentoo.org/proj/betagarden.git/tree/x11-misc/safeeyes.

    opened by hartwork 17
  • Media Plugin: Button images have disappeared

    Media Plugin: Button images have disappeared

    screenshot 2019-01-22 10 30 24

    For Ubuntu 16.04.5, buttons are not "enough visible". Tooltips come, but no images. I just updated through apt-get (2.0.8)

    Originally posted by @stdedos in https://github.com/slgobinath/SafeEyes/pull/295#issuecomment-456313148

    bug confirmed 
    opened by stdedos 16
  • Unstable on Ubuntu 18.04

    Unstable on Ubuntu 18.04

    Hi, I recently updated my OS from Ubuntu 17.10 to 18.04. But I found that the safeeyes isn't stable. Sometimes it keeps getting to the status of "Disabled until restart", and then it will restart itself. It is repeating this procedure while I'm typing here. Apparently this hasn't affected it's function, but watching it switching on and off is quite annoying.

    Is there any information I should provide you?

    And I've got another question. Is it possible to remove the tray icon since it's unnecessary? 'Cause with the plugin of Ubuntu on, it will be displayed even if it's necessary. Is it possible to make it a choice like the Variety by Peter Levi has done? Thanks.

    opened by peter-jerry-ye 16
  • Add the manual rest function

    Add the manual rest function

    I am not sure whether there is a such function in the current version, but I cannot find it. Sometimes I cannot stop my work right at the given time, so I am wondering whether you can add a button for manual break. In that way, I can take a break whenever I want. Thanks a lot. By the way, I am Chinese. If you want to add the Chinese translation, I can help. : )

    feature 
    opened by zypangpang 16
  • MAJOR BUG: Platform files missing

    MAJOR BUG: Platform files missing

    I just upgraded to 2.1.1 and now all the platform files are missing. The problem is this commit https://github.com/slgobinath/SafeEyes/commit/12b2b0b2a4bd4bdda20d55fea4a45096651460be. Although initialize_platform() would be run for a new install, it isn't run on upgrade from an older version when config files are already present.

    bug confirmed 
    opened by AdamPS 15
  • Do not base interface language on LC_TIME

    Do not base interface language on LC_TIME

    https://github.com/slgobinath/SafeEyes/blob/ee078e5f3bbce4df4927dc4b4d813131d1f2b6b4/safeeyes/Utility.py#L100

    I've got maybe non-standard locale settings since I'm from Poland but I prefer to have interface in English. So I have LANG/LANGUAGE set to en_US.utf8/en_US but I set "LC_CTYPE=pl_PL.utf8 LC_COLLATE=pl_PL.utf8" in my dot files. In default settings generated by the system (/etc/default/locale) I see also LC_TIME set to pl_PL.utf8 so I can change that but actually I prefer having 24h clock instead of AM/PM.

    So I'd like to ask for possibility to:

    1. Base the interface language used on LANG/LC_MESSAGES instead of LC_TIME
    2. Advanced option would be to split locale: having one for time and one for interface/messages (maybe this option is not even needed since correctly installed locale should be respecting LC_TIME override)

    Best regards Andrzej

    PS. If you agree that such modification make sense (to me it does - since MESSAGES seems to be more specific to tell what kind of language I want to see in the interface) then it looks to me like the following patch achieves both points:

    --- Utility-orig.py	2018-01-15 11:56:09.990407876 +0100
    +++ Utility.py	2018-01-15 12:02:31.688636092 +0100
    @@ -91,13 +91,13 @@
             GLib.idle_add(target_function)
     
     
    -def system_locale():
    +def system_locale(category=locale.LC_MESSAGES):
         """
         Return the system locale. If not available, return en_US.UTF-8.
         """
         try:
             locale.setlocale(locale.LC_ALL, '')
    -        sys_locale = locale.getlocale(locale.LC_TIME)[0]
    +        sys_locale = locale.getlocale(category)[0]
             if not sys_locale:
                 sys_locale = 'en_US.UTF-8'
             return sys_locale
    @@ -110,7 +110,7 @@
         """
         Format time based on the system time.
         """
    -    sys_locale = system_locale()
    +    sys_locale = system_locale(locale.LC_TIME)
         return babel.dates.format_time(time, format='short', locale=sys_locale)
    
    bug confirmed 
    opened by aostruszka 15
  • Major Bug: Version 2.1.1 doesn't work on Ubunto 20.04

    Major Bug: Version 2.1.1 doesn't work on Ubunto 20.04

    I was using 2.0.9 which has been a great product, ubunto showed me the update and I clicked install, update was successful but on next restart it wasn't starting at all. I tried many things and didn't work, I downloaded the source of 2.0.9 and installed again that stable version.

    bug duplicate confirmed 
    opened by reni11111 14
  • Feature request: Do not disturb while on battery (optional)

    Feature request: Do not disturb while on battery (optional)

    Hi, I'm using the tool on a laptop connected to an external monitor and it works great. But once I'm out of office, I do not spend much continues time in front of a laptop. Breaks come "naturally" (as I move) and SafeEyes distributes me unnecessary in between. Even worse, the tool might interrupt me at wrong time (during meetings, presentations etc).

    Please add an option which would allow me disable breaks if laptop is running on batteries. You can probably create this option in "do not disturb" plugin or create an another similar plugin.

    Thank you!

    feature in progress 
    opened by blshkv 13
  • Looking for new maintainer

    Looking for new maintainer

    Happy New Year to the Safe Eyes Community!

    I created Safe Eyes for my own needs and published it FOSS years ago. I'm happy to see the impact Safe Eyes make and like to see it grows further. However, I'm unable to find enough time to spend on Safe Eyes due to some other projects, family, and a demanding job.

    Though I want to add new features and take this project to the next level (Safe Eyes 3 has been a dream project for a long period) I couldn't find enough time. Therefore, I am looking for new maintainers willing to take over Safe Eyes and keep it active. I'm happy to share my thoughts and contribute whenever I get some time but it would be beneficial for the project if someone with new ideas and energy can take over Safe Eyes.

    Safe Eyes users don't have to worry. It doesn't mean I'm gonna archive the repo. If I couldn't find any new maintainers I will still maintain this repo but like the past few years, the project may not receive a lot of new features.

    help wanted discussion 
    opened by slgobinath 1
  • Add a command-line argument to force a long break

    Add a command-line argument to force a long break

    Right now, there's a command-line argument to immediately take a break: "safeeyes -t".

    However it's impossible to trigger a specific type of break, so you randomly get either a short or a long break.

    Is it possible to implement a command-line argument, so I can force a long break like "safeeyes -tl"?

    I have two use cases:

    1. I'd like to have long breaks at specific times, for example each hour at xx:45 for 15 minutes. I could create a Cron job to trigger the command at that time. However, this requires me to trigger a specific break.

    2. I'd like to define a global hotkey for taking long breaks. For me it's easier to voluntarily push a hotkey in order to take a break while procrastinating, than to do it by navigating the mouse to the Safe Eyes menu. Maybe it's because it's faster via hotkey, so my brain cannot intervene.

    Thank you very much for your consideration and especially for creating such a great piece of software.

    feature 
    opened by Noracsa2000 0
  • Don't detect AFK while any media is playing

    Don't detect AFK while any media is playing

    Is your feature request related to a problem? Please describe. I have observed this a lot of times now, and now raising an issue about it because it's important. Whenever I watch a YouTube Video or any other media file, I usually (and most people) don't use the mouse and keyboard and just listen/watch that media. And because of this, the software detects as we are AFK and pauses itself which eventually postpones the break, if this happens, what's the point of this break reminder app?

    Describe the solution you'd like I think it must not be a hard problem to solve, we just need to detect if any media file is playing and stop the detection of AFK.

    feature 
    opened by prakhartiwari0 0
  • Is croniter an optional dependency?

    Is croniter an optional dependency?

    Describe the bug

    In the AUR package, python-croniter is listed as an optional dependency. However, in setup.py, croniter is listed in the requires array.

    As a result, when Arch users try to run SafeEyes, they will encounter the situation as described in this comment.

    pkg_resources.DistributionNotFound: The 'croniter' distribution was not found and is required by safeeyes

    If it is required for the program to run, then python-croniter should be moved to the depends array in the PKGBUILD.

    If it is optional, then the Python setup script has to be tweaked. (I am not sure but perhaps it's extras_require?)

    bug 
    opened by antermin 0
  • Can't connect to display

    Can't connect to display ":0"

    The bug Since a few weeks, safeeyes fails to start due to some missing X authorization:

    $ safeeyes
    [...]
    Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'Authorization required, but no authorization protocol specified\n'
    

    To Reproduce Steps to reproduce the behavior:

    Open Gnome with Wayland launch safeeyes

    Instead, trying to launch it from startx, it worked without error.

    Expected behavior Should work also on Gnome with Wayland.

    Desktop:

    • OS: Arch
    • Desktop Env: 43.2
    • Version: safeeyes-git from AUR (2.1.4.r3.g9123562-1)

    Debug Log Run the Safe Eyes using safeeyes --debug command attach the ~/safeeyes.log` file.

    2022-12-10 17:07:08,289 [DEBUG]:[MainThread] Initialize the platform
    2022-12-10 17:07:08,306 [INFO]:[MainThread] Starting Safe Eyes
    Traceback (most recent call last):
      File "/usr/bin/safeeyes", line 33, in <module>
        sys.exit(load_entry_point('safeeyes==2.1.4', 'console_scripts', 'safeeyes')())
      File "/usr/lib/python3.10/site-packages/safeeyes/__main__.py", line 150, in main
        safe_eyes = SafeEyes(system_locale, config)
      File "/usr/lib/python3.10/site-packages/safeeyes/safeeyes.py", line 84, in __init__
        self.break_screen = BreakScreen(
      File "/usr/lib/python3.10/site-packages/safeeyes/ui/break_screen.py", line 47, in __init__
        self.display = Display()
      File "/usr/lib/python3.10/site-packages/Xlib/display.py", line 89, in __init__
        self.display = _BaseDisplay(display)
      File "/usr/lib/python3.10/site-packages/Xlib/display.py", line 71, in __init__
        protocol_display.Display.__init__(self, *args, **keys)
      File "/usr/lib/python3.10/site-packages/Xlib/protocol/display.py", line 166, in __init__
        raise error.DisplayConnectionError(self.display_name, r.reason)
    Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'Authorization required, but no authorization protocol specified\n'
    

    Workaround

    I managed to temporarily solve authorizing my own user to run X things:

    xhost +SI:localuser:#$(id -u)
    
    bug 
    opened by ilario 2
  • [2.1.4] PyPI release tarballs contain compiled .pyc files?

    [2.1.4] PyPI release tarballs contain compiled .pyc files?

    Describe the bug Hi @slgobinath, it has been brought to my attention that the SafeEyes PyPI tarballs contain some compiled .pyc files. I believe that is an accident and likely points to some problem in the process of making these files. What do you think? Best, Sebastian

    To Reproduce

    # wget -O- https://files.pythonhosted.org/packages/1d/e8/221f5afdb7aba8524496906e1fc7d58bd75fb7cf0b3036392cffcd632eda/safeeyes-2.1.4.tar.gz 2>/dev/null | tar tz | grep '\.pyc$' | sort
    safeeyes-2.1.4/safeeyes/plugins/audiblealert/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/audiblealert/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/breakscreen/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/donotdisturb/__pycache__/dependency_checker.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/donotdisturb/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/donotdisturb/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/donotdisturb/__pycache__/validator.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/healthstats/__pycache__/dependency_checker.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/healthstats/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/healthstats/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/healthstats/__pycache__/validator.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/mediacontrol/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/mediacontrol/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/notification/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/notification/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/rpcserver/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/rpcserver/__pycache__/validator.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/screensaver/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/screensaver/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/smartpause/__pycache__/dependency_checker.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/smartpause/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/smartpause/__pycache__/plugin.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/smartpause/__pycache__/validator.cpython-38.pyc
    safeeyes-2.1.4/safeeyes/plugins/trayicon/__pycache__/plugin.cpython-310.pyc
    safeeyes-2.1.4/safeeyes/plugins/trayicon/__pycache__/plugin.cpython-38.pyc
    

    Expected behavior No .pyc in source tarballs.

    Desktop (please complete the following information):

    • OS: n/a
    • Desktop Env: n/a
    • Version: 2.1.4 + earlier releases

    Debug Log n/a

    Screenshots n/a

    bug 
    opened by hartwork 7
Releases(v2.1.4)
Owner
Gobinath
An open source enthusiastic spending his free time on developing crazy stuff
Gobinath
Yet another retry utility in Python

Yet another retry utility in Python, avereno being the Malagasy word for retry.

Haute École d'Informatique de Madagascar 4 Nov 2, 2021
A simple tool that updates your pubspec.yaml file, of a Flutter project, without altering the structure of your file.

A simple tool that updates your pubspec.yaml file, of a Flutter project, without altering the structure of your file.

null 3 Dec 10, 2021
A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use that mirror

Kali Mirror Finder Using Single Python File A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use tha

MrSingh 6 Dec 12, 2022
jsoooooooon derulo - Make sure your 'jason derulo' is featured as the first part of your json data

jsonderulo Make sure your 'jason derulo' is featured as the first part of your json data Install: # python pip install jsonderulo poetry add jsonderul

jesse 3 Sep 13, 2021
Simple code to generate a password for your account!

Password-Generator Simple code to generate a password for your account! Password Generator for passwords for your accounts or anything else! This code

DEEM 1 Jun 5, 2022
This utility lets you draw using your laptop's touchpad on Linux.

FingerPaint This utility lets you draw using your laptop's touchpad on Linux. Pressing any key or clicking the touchpad will finish the drawing

Wazzaps 95 Dec 17, 2022
Install, run, and update apps without root and only in your home directory

Qube Apps Install, run, and update apps in the private storage of a Qube Building instrutions

Micah Lee 26 Dec 27, 2022
Install, run, and update apps without root and only in your home directory

Qube Apps Install, run, and update apps in the private storage of a Qube. Build and install in Qubes Get the code: git clone https://github.com/micahf

Micah Lee 26 Dec 27, 2022
Make your functions return something meaningful, typed, and safe!

Make your functions return something meaningful, typed, and safe! Features Brings functional programming to Python land Provides a bunch of primitives

dry-python 2.6k Jan 9, 2023
Conveniently measures the time of your loops, contexts and functions.

Conveniently measures the time of your loops, contexts and functions.

Maciej J Mikulski 79 Nov 15, 2022
This python program will display all SSID usernames and SSID passwords you once connected to your laptop

Windows-Wifi-password-extractor This python program will display all SSID usernames and SSID passwords you once connected to your laptop How to run th

Bhaskar Pal 3 Apr 26, 2022
A script copies movie and TV files to your GD drive, or create Hard Link in a seperate dir, in Emby-happy struct.

torcp A script copies movie and TV files to your GD drive, or create Hard Link in a seperate dir, in Emby-happy struct. Usage: python3 torcp.py -h Exa

ccf2012 105 Dec 22, 2022
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

Jon Crall 638 Dec 13, 2022
Quickly edit your slack posts.

Lightning Edit Quickly edit your Slack posts. Heavily inspired by @KhushrajRathod's LightningDelete. Usage: Note: Before anything, be sure to head ove

null 14 Nov 19, 2021
Manage your exceptions in Python like a PRO

A linter to manage all your python exceptions and try/except blocks (limited only for those who like dinosaurs).

Guilherme Latrova 353 Dec 31, 2022
Set of utilities for exporting/controlling your robot in Blender

Blender Robotics Utils This repository contains utilities for exporting/controlling your robot in Blender Maintainers This repository is maintained by

Robotology 33 Nov 30, 2022
A small utility that sorts your files.

FileSorter A small utility that sorts your files. TODO: Scan directory to find files(thanks @corruptmemry for this!) Split extensions to determine fil

null 2 Jun 16, 2022
Give you a better view of your Docker registry disk usage.

registry-du Give you a better view of your Docker registry disk usage. This small tool will analysis your Docker registry(vanilla or Harbor both work)

Nova Kwok 16 Jan 7, 2023
This code renames subtitle file names to your video files names, so you don't need to rename them manually.

Rename Subtitle This code renames your subtitle file names to your video file names so you don't need to do it manually Note: It only works for series

Mostafa Kazemi 4 Sep 12, 2021