5 ms·
Show HN: I built an offline, open‑source desktop Pixel Art Editor in Python
It requires no registration, no installation, and no configuration. Just run it on any computer and start drawing freely.
- rvnx 1y agoVery nice to see that this project is hand-crafted and not AI-generated like 99% of the submissions here So, congrats on your release.
- danterolle 1y agoThanks! Although I had to use it for some things (like the logo, for example, and I’m not a "graphic guy"), in the end, since it’s a simple project by design, I didn’t mind, and the result isn’t bad at all.
- llbbdd 1y agoGenuinely why do you care?
- SanitaryThinkin 1y agoThis may not be entirely the right metaphor but I kinda see it as the difference between fast food, a top rated restaurant, and home made cooking —with fast food being AI. Generic, does the job, not the highest quality, bleak, fast repetitious output
- robertlagrant 1y agoWhile I agree, because I like writing code, I do wonder if this is how assembly writers felt when automated compilation started to take off.
- dvfjsdhgfv 1y agoI don't want to be Captain Obvious, but it wasn't like there was a long era of assembly computing, and then it was stopped being used as higher-level languages took over. To put thing in perspective, Fortran was invented in 1954, Lisp 4 years later. In the following decades, the assembly language was being used along in various ways. And it is still being used in certain applications.
- robertlagrant 1y agoYeah, I wasn't saying anything things suddenly dying out.
- wiseowise 1y agoIt literally doesn't matter, if your product sucks. Only end result for the user matters.
- SkyeCA 1y agoIt matters to me. If it doesn't matter to you? That's fine and you are fully entitled to that view. Asking tech people not to care more about the software they use than the average person seems pointless though.
- itsoktocry 1y ago>not the highest quality I bet AI writes better code than 80% of developers out there. But all developers think they are in the 20%.
- hombre_fatal 1y agoBecause we are a forum of craftspeople. The Show HN system is a good faith system for showing something that you built and can presumably engage with us about what you built. We want to engage with the person who engineered the thing, not someone who is just going to pipe our feedback into an LLM and see what pops out. Just like I'd consider it deceptive if it turned out that HN populated the comments with an LLM. I want to engage with humans using their own brain. That said, I would also consider it acceptable if you mentioned that your Show HN was vibe-coded if it were. But consider the vibe shift (pun) that would happen. We'd be curious about your vibe-code workflow and the experience of vibe-coding it if it was impressive, not necessarily curious about the thing the LLM built because that part isn't necessarily interesting anymore. Finally, it's inevitable that these lines will quickly blur over time as AI becomes increasingly centerpiece in our lives. But in this transitionary phase so far, it kinda feels like you've been actually playing on a bot server in Quake 3 when you catch yourself admiring something that you thought the OP made: it's not rewarding to realize you're just stomping bots that you thought were human.
- ofrzeta 1y agoWhen I clicked I already thought about the comments that ask "is this vibe coded". So I kind of asked myself that question. As someone who manually codes as well as experiments with AI-assisted coding I ask myself what attitude we should develop towards AI-assisted coding in the long run. Right now on HN it almost seems like "AI shaming" at work. If you post a project that's a result of using AI you can expect a lot of critique around here. While I understand that to a certain extent I guess we also need to overcome that sentiment. After all we don't blame people using IDEs, code completion or other tools that have become the norm.
- globular-toast 1y agoIf I can tell something is "vibe coded", that means it's bad. It doesn't matter what tools people use as long as the output is good. Vibe coding smells include: 1. Tons of pointless comments outlining trivial low-level behaviour, 2. No understanding of abstraction levels, 3. No real architecture at all, 4. Not DRY, no helper functions or inconsistent use of said functions across project, 5. Way too many lines of code. None of these are shaming for use of any particular tool, they are just shaming the output.
- ofrzeta 1y agoOk, let's better not talk about "vibe coding" because we don't really have definition of what it means. "Historically" it means "just letting the AI code without looking at its output" while I often see people that are more diligently using AI using it kind of tongue in cheek. My mistake using the expression in the latter way.
- latexr 1y ago> After all we don't blame people using IDEs, code completion or other tools that have become the norm. Because those don’t have the same issues. It’s not like IDEs, LSPs, and other tools were the target of warranted criticism and then we stopped. Rather, they never received this kind of backlash in the first place. No IDE has ever caused millions of people absolutely unrelated to it to have to ration water. https://archive.ph/20250731222011/https://m.economictimes.com/news/international/us/texas-ai-data-centers-water-usage-texas-ai-centers-guzzle-463-million-gallons-now-residents-are-asked-to-cut-back-on-showers-ai-news/articleshow/122983253.cms https://archive.ph/20250731222011/https://m.economictimes.co... To use an exaggerated analogy, it’s like saying “people are complaining about arsenic being added to food but we need to overcome that sentiment, after all we don’t blame people adding salt and pepper which have become the norm”.
- vnhrmth 1y agoIt's really odd now that we look for more human code rather than AI Generated code, and I think this is going to be increasing in every form of data that's out there.
- mouse_ 1y agoCongratulations! What made you decide to go with PySlide6?
- danterolle 1y agoI already have some experience with Python/PySide6, and I was mainly interested in having a working prototype as soon as possible (I’m experimenting with SDL3 and animating squares isn’t exactly thrilling!). Plus, Qt widgets integrate very well with Python, it is so easy to create a section, especially when the documentation is well written, that helps a lot. Also, with PyInstaller, the build process for each platform is fairly straightforward (although for customized icons, there are a few extra steps to take). There are some downsides of course (like the bundle size, for example), but that's not a problem, the core idea is: double-click on Tilf and start drawing right away.
- synergy20 1y agowhy not just the default tk widgets, might be much less of external dependencies?
- danterolle 1y agoI simply never used it, nor did I ever feel the need. I moved on from Tkinter to PySide6.
- ethan_smith 1y agoPySide6 is a solid choice for Python desktop apps - Qt's rendering capabilities make it ideal for pixel-perfect graphics manipulation while avoiding the performance issues that can plague Tkinter or the dependency complexities of wxPython.
- zamadatix 1y agoI like that it really is simply built and packaged, I'm sure it was fun to hack away at. There's something about gluing together a million packages which sucks the fun out of tinkering (for me, at least).
- danterolle 1y agoThat’s also why the project was built from scratch. The only real dependency of the project is PySide6. The icons don’t come from any package. PyInstaller is used solely for bundling purposes. As outlined in the README.md, running Tilf requires nothing more than an installed version of Python (3).
- hug 1y agoGreat project! I have one very silly question... Why is the elf logo not pixel art? :)
- danterolle 1y agoI’m not a graphic designer guy, I wouldn’t know where to start, but maybe in the future I could use Tilf to draw the logo! My highest artistic expression, for now, will probably be redrawing some Earthbound characters to experiment with SDL3.
- zoba 1y agoI recently discovered and have been fairly happy with PixelLab - an AI pixel art generator. I feel like they have a ways to go in features and UX, but it shows promise.
- kookamamie 1y agoWhy, of all names possible, you thought TILF was the best one?
- runjake 1y agoIt’s “Tilf” not TILF, and means Tiny Elf, per the docs. Why? What’s the problem with it?
- BriggyDwiggs42 1y agoMilf, dilf, etc
- bitwize 1y agoWait till you see the image editor named after a kind of BDSM bottom.
- SkyeCA 1y agoI'm a big fan of software/services with silly, often sexually adjacent names. Take this for example: https://vore.website https://vore.website Any guesses what this is? Spoiler: it's an RSS reader.
- johnisgood 1y agoI did not make the association. Is something wrong with me?
- vorticalbox 1y agoTile I’d Like to Fill.
- danterolle 1y agoThere’s no specific reason, I just liked the idea of a little elf/goblin having the freedom to draw whatever they wanted. At first, I wanted to call this project "Folletto" (in Italian, that means elf), but then I thought it would be better to keep an extremely simple name: a tiny elf who picks up his pencil and starts drawing. Tiny Elf.
- HelloUsername 1y ago> There are several Pixel Art Editors that do the same things and even much more, but many require an account registration or the insertion of an e-mail or have a certain business model. https://libresprite.github.io/ https://libresprite.github.io/
- smartmic 1y agoI'll throw my favourite into the ring, mtPaint: https://mtpaint.sourceforge.net/ https://mtpaint.sourceforge.net/
- HelloUsername 1y agoLooks very nice, too bad no macOS :(
- 3036e4 1y agoLatest Aseprite is still available with free (as in beer) source code to compile, even if it is a bit heavy on the dependencies these days, including requiring that you install a special fork of Skia iirc. I paid for it to get the pre-compiled binaries for Windows, but on Linux and OSX I always compiled it myself anyway. On FreeBSD, that is my desktop OS of choice now, I use the ancient open source version of Aseprite since that is what is most convenient to install (from the port). Maybe I should try Libresprite instead. For my programmer art I also use old (Autodesk) Animator (in DOSBox) a lot. It is small and runs anywhere. Perfect for doodling on my phone, with some configuration to add various on-screen buttons in DOSBox. Small enough (less than 1 MB) that the entire application plus all configuration and saved working files can go into every source code repository where I want to edit some pixel art. https://github.com/AnimatorPro https://github.com/AnimatorPro Also have VGA Paint 386 installed in DOSBox everywhere. Have not used it much, but it seems good (probably more interesting for those that want something closer to a Deluxe Paint clone). https://www.bttr-software.de/products/vp386/ https://www.bttr-software.de/products/vp386/ Then there is https://orama-interactive.itch.io/pixelorama https://orama-interactive.itch.io/pixelorama that is open source and seems to improve at a good pace. I just never took the time to look very close. Going to have a look at Tilf as well, to see if it is not too much work to get it to run in FreeBSD. Not being an expert in drawing anything, it helps to have many tools and switch between, as all tend to have something they do better (or easier) than the other ones.
- bitwize 1y agoMuch "an app can be a home-cooked meal" energy here. Write a program to scratch an itch. Good to see that spirit still alive.
- danterolle 1y agoThank you!
- apprentice7 1y agoI share this sentiment. I like that OP is not afraid to say that the code quality might be not the best. In the end, for projects that are made for fun and out of curiosity, it doesn't matter that much (at least in the early stages). If it becomes popular though, you can always just refactor and improve the important parts.
- renegat0x0 1y agoPlease provide github topics (tags) for the project. It may boost your project discoverability. I often use it with github search to find interesting projects in "topic".
- danterolle 1y agoDone. Thanks!
- deleted 1y ago[deleted]
- rudolftheone 1y agoRelated: I know that many people use AI image generators to make pixel art, and recently I've stumbled upon a great tool to make a proper pixelart based on AI generated input see https://github.com/jenissimo/unfake.js https://github.com/jenissimo/unfake.js and live demo on https://jenissimo.itch.io/unfaker https://jenissimo.itch.io/unfaker (disclaimer: I don't know the author, just thought I'd share as I find it amazing)
- mclau157 1y agoWhich AI pixel art generator?
- rudolftheone 1y agoAny: flux or SD produce good results with a proper LoRA.
- lardbgard 1y agoHehe no ai
- SkyeCA 1y agoAwesome program OP, I downloaded it on my Mac and it Just Works(TM). One helpful feature would be to shift an entire row/column of pixels down X rows/columns. Perhaps if I get time I'll submit a PR for it.
- danterolle 1y agoThank you, and thanks for the suggestion. I’m open to any changes or proposals that might help improve this project, so I’ll gladly accept them!
- JKCalhoun 1y agoThe Pencil appears to put down the foreground color, the Eraser appears to clear to the background color. Working at the pixel level, it is extremely useful to be able to "toggle" a pixel without switching tools. MacPaint (for example) would use the foreground color if you click on a pixel whose color is not the foreground color. If you start your Pencil drawing (click) on a pixel that is the foreground color, the Pencil draws with the background color instead. Also, a modifier (like the Option key), is a nice way to also specify the background color for the pencil (regardless of the initial pixel clicked on).
- danterolle 1y agoThese seem like great suggestions. I think I’ll implement them! Thank you so much! Actually, I'm not referring to you but if all these suggestions were opened as issues, it would be easier for me to write a "thank you note" for each one lol
- JKCalhoun 1y agoSorry. Too lazy to open an issue. But also, thanks are not necessary. :-)
- danterolle 1y agoI think I've implemented it correctly (if I got it right): https://github.com/danterolle/tilf/commit/f7ef6d2fa37b5659fba94be9dc3bbdf28951e886 https://github.com/danterolle/tilf/commit/f7ef6d2fa37b5659fb... Thanks again!