{"id":30694135,"url":"https://github.com/danterolle/tilf","last_synced_at":"2025-09-02T06:04:10.381Z","repository":{"id":309088672,"uuid":"1034533752","full_name":"danterolle/tilf","owner":"danterolle","description":"Tilf (Tiny Elf) is a free, simple yet powerful pixel art editor built with PySide6. It’s designed for creating sprites, icons, and small 2D assets with essential drawing tools, live preview, undo/redo, export options and more.","archived":false,"fork":false,"pushed_at":"2025-08-19T16:19:13.000Z","size":8082,"stargazers_count":337,"open_issues_count":6,"forks_count":12,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-19T17:36:34.562Z","etag":null,"topics":["cross-platform","crossplatform","debian","desktop-app","drag-and-drop","drawing","free-software","gnu-linux","graphics","gui","linux","macos","open-source","pixel-art","pyside6","python","qt6","sprites","tiles","windows"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danterolle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-08T14:43:46.000Z","updated_at":"2025-08-19T17:29:16.000Z","dependencies_parsed_at":"2025-08-09T20:16:34.539Z","dependency_job_id":"92d25edf-5431-4c2c-a8ff-14c1a67201b5","html_url":"https://github.com/danterolle/tilf","commit_stats":null,"previous_names":["danterolle/tilf"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/danterolle/tilf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danterolle%2Ftilf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danterolle%2Ftilf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danterolle%2Ftilf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danterolle%2Ftilf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danterolle","download_url":"https://codeload.github.com/danterolle/tilf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danterolle%2Ftilf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273238762,"owners_count":25069762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross-platform","crossplatform","debian","desktop-app","drag-and-drop","drawing","free-software","gnu-linux","graphics","gui","linux","macos","open-source","pixel-art","pyside6","python","qt6","sprites","tiles","windows"],"created_at":"2025-09-02T06:02:19.124Z","updated_at":"2025-09-02T06:04:10.367Z","avatar_url":"https://github.com/danterolle.png","language":"Python","readme":"# Tilf — Pixel Art Editor\n\n![GitHub last commit](https://img.shields.io/github/last-commit/danterolle/tilf)\n![GitHub Release](https://img.shields.io/github/v/release/danterolle/tilf)\n![GitHub License](https://img.shields.io/github/license/danterolle/tilf)\n![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/danterolle/tilf/total)\n![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/danterolle/tilf)\n\nTilf (Tiny Elf) is a simple yet powerful pixel art editor built with PySide6.\nIt’s designed for creating sprites, icons, and small 2D assets with essential drawing tools, live preview, undo/redo, export options and much more. Check [features](#features).\n\nThere are several Pixel Art Editors that do the same things and even much more (animations, etc...), \nbut many require an account registration or the insertion of an e-mail or have a certain business model.\n\nI'm _not_ interested in all that; my goal is to be able to create sprites freely, with (almost) zero dependencies, \nzero setup time, zero installations:\n\nTilf starts and I begin to draw what I want.\n\nIt runs on Windows, MacOS and GNU/Linux.\n\nDownload the latest release from the [releases page](https://github.com/danterolle/tilf/releases).\n\n**Windows 11** -\u003e [Download](https://github.com/danterolle/tilf/releases/download/v0.2/tilf_0.2-Windows.exe)\n![Tilf on Windows](./screenshots/windows.png \"Windows\")\n**MacOS 15.6** -\u003e [Download](https://github.com/danterolle/tilf/releases/download/v0.2/tilf_0.2-MacOS.zip)\n![Tilf on MacOS](./screenshots/macos.png \"MacOS\")\n**GNU/Linux (ParrotOS 6.4)** -\u003e [Download](https://github.com/danterolle/tilf/releases/download/v0.2/tilf_0.2-Linux.tar.xz)\n![Tilf on GNU/Linux](./screenshots/linux.png \"GNU/Linux\")\n\nI’m aware that the code quality isn’t great.\nI didn’t prioritize it when writing this.\nThis project was something I put together during my spare time, and a lot of it could be written much better. \nThere's definitely room for improvement, so I'm more than happy to accept PRs from anyone willing to contribute.\n\n#### Why doesn't this tool have many commits?\n\nBecause I mainly used it for learning and personal purposes. \nPublish it as an Open Source project might be interesting for others as well.\n\n## Table of Contents\n\n- [Goals](#goals)\n- [Features](#features)\n- [Requirements](#requirements)\n- [Build on MacOS and GNU/Linux](#build-on-macos-and-gnulinux)\n- [About Windows](#about-windows)\n  - [Run from source](#run-from-source)\n  - [Build executable .exe](#build-executable-exe)\n- [Keyboard Shortcuts for file operations](#keyboard-shortcuts-for-file-operations)\n- [Save and Auto-Save](#save-and-auto-save)\n- [Tips and Known Limits](#tips-and-known-limits)\n- [Troubleshooting - Work In Progress](#troubleshooting---work-in-progress)\n  - [ModuleNotFoundError: No module named 'PySide6'](#modulenotfounderror-no-module-named-pyside6)\n- [Contributing](#contributing)\n- [License](#license)\n- [Contact](#contact)\n\n## Goals\n\n- Single executable (cross-platform)\n- No accounts, no emails or registrations required\n- Completely free/open source with all features unlocked\n- Focused on small sprites and assets\n- Works offline without internet connection. No online platforms.\n- Almost zero dependencies: Python standard library + PySide6\n- Zero installation or setup time needed\n\n## Features\n\n- Drawing tools:\n  - Pencil\n  - Eraser\n  - Fill (bucket)\n  - Eyedropper\n  - Rectangle (stroke)\n  - Ellipse (stroke)\n- Canvas:\n  - New image with custom dimensions\n  - Zoom 1–50x (mouse wheel or slider)\n  - Editable background color (alpha supported)\n  - Optional grid with customizable color\n  - Clear canvas\n- Workflow:\n  - Undo/Redo with history up to 50 states\n  - Drag \u0026 drop images to open\n  - Real-time preview in a side dock (you can move it wherever you want)\n- Import/Export:\n  - Open PNG, JPEG/JPG, BMP\n  - Export to PNG (with or without transparency), JPEG/JPG, BMP \n\n### Handy details:\n\n  - Hold Shift while drawing rectangles/ellipses to constrain to squares/circles\n  - Grid is shown when zoom (cell size) is at least 4\n  - Clicking a pixel with the foreground color switches to drawing with the background color. Otherwise, the foreground color is used. Holding down Alt or Option forces the use of the background color.\n\n## Requirements\n\n- Python 3, virtualenv\n- OS: Windows, MacOS or GNULinux\n- Dependencies:\n  - PySide6\n  - PyInstaller\n\nI did not use uv or poetry for this project; \nI don't think it is necessary to introduce a tool of that kind for a project that is, all things considered, simple.\n\n## Build on MacOS and GNU/Linux\n\n1) Clone the repository:\n\n```\ngit clone https://github.com/danterolle/tilf.git \u0026\u0026 cd tilf\n```\n\n2) This project has a [Makefile](https://github.com/danterolle/tilf/blob/main/Makefile) \nthat automates all the necessary build and cleanup operations for Tilf (for MacOS and GNU/Linux only), so we just need to run:\n\n```\nmake\n```\n\n3) The executable will be in the `dist` folder.\n\n```\n./tilf\n```\n\nEnjoy!\n\n## About Windows\n\n### Run from source\n\n1) Clone the repository by using Git Bash:\n\n```\ngit clone https://github.com/danterolle/tilf.git\n```\n```\ncd tilf\n```\n\n2) Create a virtual environment:\n\n```\npy.exe -m venv env\n```\n\n3) Activate the virtual environment:\n\n```\n./env/Scripts/activate\n```\n\n4) Install the dependencies:\n\n```\npip install pyside6 pyinstaller pillow\n```\n\nNote: \n\n5) And finally, run the application:\n\n```\npy.exe ./main.py\n```\n\n### Build executable .exe\n\n1) Clone the repository by using Git Bash:\n\n```\ngit clone https://github.com/danterolle/tilf.git\n```\n```\ncd tilf\n```\n\n```\n./env/Scripts/activate\n```\n\n2) Install the dependencies:\n```\npip install pyside6 pyinstaller pillow\n```\n\n3) Run PyInstaller:\n\n```\npyinstaller --name tilf --onefile --windowed --icon assets/icon.icns --add-data assets:assets --add-data style.qss:. main.py\n```\n\n4) The executable will be in the `dist` folder.\n\n```\n./tilf\n```\n\n## Keyboard Shortcuts for file operations\n\n- File:\n  - New: Ctrl+N\n  - Open: Ctrl+O\n  - Save: Ctrl+S\n- Edit:\n  - Undo: Ctrl+Z\n  - Redo: Ctrl+Y\n- Tools:\n  - Pencil: B\n  - Eraser: E\n  - Bucket: G\n  - Eyedropper: I\n  - Rectangle: R\n  - Ellipse: C\n  - Use the background color: hold Alt/Option\n- Shapes:\n  - Constrain to square/circle: hold Shift\n\n## Save and Auto-Save\n\n- Export formats:\n  - PNG: optionally keep transparency.\n  - JPEG/JPG, BMP: no transparency.\n\nOn close, if there are unsaved changes, a recovery *.png* is automatically saved into a **tilf_autosaves**\nfolder next to the startup script, with a timestamped filename.\n\n## Tips and Known Limits\n\n- [Undo/Redo history is capped at 50 states to limit memory usage](https://github.com/danterolle/tilf/blob/main/pixel_canvas.py#L31).\n- Large flood fills may take longer on big images.\n- The grid appears when zoom (cell size) is at least 4.\n- Very large images may impact performance; Remember: *Tilf targets compact pixel art and sprites*.\n\n## Troubleshooting - Work In Progress\n\n### ModuleNotFoundError: No module named 'PySide6'\n\nEnsure your virtualenv is active and run: pip install pyside6\n\n## Contributing\n\n- Open issues for bugs or feature requests.\n- For PRs, please keep the code style consistent and explain changes clearly.\n- Feature ideas are welcome (e.g. advanced fills, selections, layers). Thank you!\n\n## License\n\nGPL v3.0, see the LICENSE file for details.\n\n## Contact\n\n- Developer: Dario 'danterolle' Camonita\n- E-mail: danterolle@catania.linux.it\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanterolle%2Ftilf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanterolle%2Ftilf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanterolle%2Ftilf/lists"}