Desktop Cat: Qt Overlay
Project description
Desktop Cat: QT Overlay 🐱
I made a cute little animated cat 🐈 for your desktop.
It's a lightweight Python + Qt app — no borders, and you can drag it around easily.
Shows static first frame for 5 seconds, then plays GIF animation once, then loops back to static.
If you like it, maybe I'll share an AnimeGirl version next time~ 😉
LLM Chat, Reminders, GitHub Integration & Tracking Activity
🚀 Quick start
Pick whichever is easiest — the cat runs on Windows, macOS and Linux.
Option A — prebuilt binary (no Python needed)
Download the build for your OS from the latest release, then run it:
| OS | File | How to run |
|---|---|---|
| Windows | mycat-<version>-windows-x64.exe |
double-click it |
| macOS | mycat-<version>-macos-arm64.zip |
unzip, then open mycat.app |
Builds for every release live on the Releases page.
Option B — pip (Windows / macOS / Linux, Python ≥ 3.10)
pip install mycat
mycat
On Linux also install the Qt platform plugin once:
sudo apt install -y libxcb-cursor0
For keystroke/click counts in the activity diary (never which keys), install
the optional extra: pip install mycat[basic]. Without it the diary still
records cursor path — only the counts need it.
Upgrade or remove later with pip install -U mycat / pip uninstall mycat.
Option C — from source
git clone https://github.com/yumiaura/myCat
cd myCat
pip install .
mycat # or, without installing: python3 mycat/main.py
✨ Features
- Animated overlay 🐱 — a frameless, always-on-top, draggable cat. Right-click for the menu (switch char, quit).
- Reminder 🛩️ — set a message and a time (one-shot or daily) and the cat flies a little banner plane across the top of your screen. Right-click → Reminder… to set the message, direction, plane and color.
- Chat (Ollama) 💬 — talk to the cat through a local Ollama model, no account or API key needed (see below).
💬 Chat with the cat (Ollama)
The cat can chat using a model served locally by Ollama — everything stays on your machine, no API key required.
- Install Ollama and pull a model:
ollama pull llama3.1
- Launch mycat, then right-click the cat → Ollama…
- Set the host/port (default
localhost:11434), click Load models, pick one, hit Test, then Save and tick LLM enabled. - Right-click → Chat to start talking. 🐾
🎮 Usage & options
Run mycat (or python3 mycat/main.py from source) and customise it with command-line options.
--image, -i <path> 🖼️ — use a custom ZIP archive (containing one GIF) instead of the default cat:
mycat --image ~/my-custom-cat.zip
A char ZIP must contain exactly one .gif: its first frame is the static pose, then the GIF plays once and returns to that frame. Images larger than 300×500 are scaled down automatically.
--pos <x> <y> 📍 — start at a specific screen position (otherwise the cat appears bottom-right and remembers where you last dragged it):
mycat --pos 960 540 # center of a 1920x1080 screen
--wait <seconds> ⏱️ — how long to hold the static first frame before the animation plays.
--debug 🐞 — verbose per-frame logging.
Controls
- Left-drag the cat to move it.
- Right-click the cat for the menu (Chars, Reminder…, Ollama…, Chat, Quit).
- Quit from the menu or with Ctrl+C in the terminal.
The cat remembers its position and selected char between sessions in ~/.config/mycat/config.ini.
🎬 Make your own cat GIF
# Install ImageMagick
sudo apt install imagemagick
# Build an animated GIF from a sprite sheet
convert cat.png -crop 50%x100% +repage -set delay '200,100' -loop 0 cat.gif
# Package it as a char ZIP
zip cat.zip cat.gif
Drop the resulting ZIP next to the others and pick it from the right-click Chars menu.
🐳 Docker
Run the cat in a container with GUI forwarding to your host's X server.
Prerequisites: Docker, and an X server on the host (Xorg on Linux, VcXsrv on Windows, XQuartz on macOS).
# Linux
xhost +local:docker
docker compose up --build
# Windows (VcXsrv running, network clients allowed)
docker compose -f docker-compose.windows.yml up
# macOS (XQuartz running, network clients allowed)
docker compose -f docker-compose.mac.yml up
🔧 Troubleshooting
Cat appears in a black box / transparency doesn't work 🫥
- On X11 transparency needs a compositor. mycat falls back to clipping the window to the cat's outline when none is running, so this is rare; if you still see a box, enable display compositing (XFCE: Window Manager Tweaks → Compositor) or run a compositor such as
picom.
Window doesn't stay on top / doesn't show in the taskbar 📌
- Some window managers override "always on top" — restart the desktop session or check the WM settings.
Custom char doesn't load ❌
- The ZIP must contain exactly one valid
.gif. Check the path and that the file isn't corrupted.
Position not saving 💾
- Make sure
~/.config/mycat/exists and is writable; the config file is~/.config/mycat/config.ini.
Windows / launch issues 🪟
- Need Python ≥ 3.10 (
python --version) for the pip install, or just use the prebuilt.exe. - From the repo you can also launch with
run.bat(Windows) orrun.sh(Linux/macOS). - Verify PySide6:
python -c "import PySide6; print('PySide6 OK')".
Permission errors 🔒
- On Linux prefer a user install over
sudo(pip install --user mycat).
🤝 Getting help
- Search the GitHub Issues for similar problems.
- Read CONTRIBUTING.md for development setup.
- Open a new issue with your OS, desktop environment, Python version and any terminal errors.
License
Thank you for reading to the end! 😸🐾
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mycat-0.1.9.tar.gz.
File metadata
- Download URL: mycat-0.1.9.tar.gz
- Upload date:
- Size: 2.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c1107a59bf9deca1fb48ebbddb7e0492d7a88fd20abdbcda922aa38c6ad3ddd
|
|
| MD5 |
ebbf3ac5cafb9f7eb8cbcc3ac6fdf109
|
|
| BLAKE2b-256 |
e2644c9f19ec0f382a19d9702531935c8e180a61c40827a046049edceb4ba482
|
Provenance
The following attestation bundles were made for mycat-0.1.9.tar.gz:
Publisher:
publish.yml on yumiaura/myCat
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mycat-0.1.9.tar.gz -
Subject digest:
1c1107a59bf9deca1fb48ebbddb7e0492d7a88fd20abdbcda922aa38c6ad3ddd - Sigstore transparency entry: 2085098389
- Sigstore integration time:
-
Permalink:
yumiaura/myCat@9f75d9e237fd6ba40722e8c41c7ecf1c165cf64b -
Branch / Tag:
refs/tags/0.1.9 - Owner: https://github.com/yumiaura
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f75d9e237fd6ba40722e8c41c7ecf1c165cf64b -
Trigger Event:
push
-
Statement type:
File details
Details for the file mycat-0.1.9-py3-none-any.whl.
File metadata
- Download URL: mycat-0.1.9-py3-none-any.whl
- Upload date:
- Size: 2.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
068d3e85c4260af2d0f1eee18fee19f4883de6b0a10ee5fd960993270fdd7218
|
|
| MD5 |
02e63dcde0bed8c05eb3c99b9a1b4c1f
|
|
| BLAKE2b-256 |
1c83dd2058117cb53423626bf5a65e17ad459681b4e6b54ebe46ef1b75af1dad
|
Provenance
The following attestation bundles were made for mycat-0.1.9-py3-none-any.whl:
Publisher:
publish.yml on yumiaura/myCat
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mycat-0.1.9-py3-none-any.whl -
Subject digest:
068d3e85c4260af2d0f1eee18fee19f4883de6b0a10ee5fd960993270fdd7218 - Sigstore transparency entry: 2085098397
- Sigstore integration time:
-
Permalink:
yumiaura/myCat@9f75d9e237fd6ba40722e8c41c7ecf1c165cf64b -
Branch / Tag:
refs/tags/0.1.9 - Owner: https://github.com/yumiaura
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f75d9e237fd6ba40722e8c41c7ecf1c165cf64b -
Trigger Event:
push
-
Statement type: