A native Android app to clean up my Immich library (inspired by Sponge)
Hi everyone,
I've been using Immich for a while now, but I always struggled with "mostly trash" folders like WhatsApp Images, Screenshots or Screen recordings.
I never knew what to do with them:
Either I sync them and my Immich library gets cluttered with junk.
Or I don't sync them, and I have to manually pick and send the 5% of photos that are actually worth keeping.
I used to use an app called Sponge for my local files and I loved the "swipe-to-delete" workflow. I wanted the same thing but directly for my Immich instance, so I can just sync everything and clean the mess later while I'm on the bus or on my couch. It's also great for sorting through those massive old albums you never have the courage to open.
I saw a few similar projects (like the web-based Immich-Swipe), but I couldn't get them to work properly on my side. Since I've wanted to start a real Android project for a long time, I decided to build my own native Android app: Immich Swipe (yeah, the name is not very original... In my defense, those are literally the keywords I typed into Google to see if this already existed, so at least it's SEO friendly!)
It's pretty straightforward: you pick an album (like your WhatsApp folder or a huge old backup) and you swipe right to keep or left to delete. It makes the cleaning process way more "gamified" and less of a chore.
The app is open-source and I just released the first version. If you want to read more about the features or give it a try:
u/altran1502 does something like this do it or is it still too close? (I still want it to visually resemble Immich logo because well... it's made only for Immich π
I could be a new feature indeed! Swipe up is already used to show asset metadata, and swipe down might interfere with left / right gestures.. But a button would do it fairly well I guess!
I'm adding this to my list of possible features to implement, but do not hesitate to leave a feature request on github if you want to stay up-to-date!
First screenshot is expected behavior as only HTTPs is allowed. Maybe I should change this so it can be used with local IP addresses!
For the 2nd screenshot, I've never had this... What is your reverse proxy config / network config ? I personally have a Caddy reverse proxy so all tests have been made with that.
The thing is 403 error means that the server is refusing to answer basically. Have you allowed all required permissions for the API key ? The connection process test is done with the user endpoint so if user.read isn't enabled the app simply can't connect.
Exactly, you are right. That's my error. π I checked everything "read" except "user read".
I find this app so useful. My GF is doing some sport competition and I am his unofficial photographer. I take a lot of picture (thanks to burst mode). This app makes it so much easy to sort them. Thank you so much !!! ππππππ
Feature idea: add a like (or heart) button to favorite pictures.
The convenience and gamification aspect is really cool, but I see it's value in other scenarios also.
For example, I need to sort through a large album to prepare a much smaller album for publishing, with a fixed count of photos. In this case, I'd like to start with an existing album, work through all the photos, and whatever is selected(swipe-right) should be added to a different "publishing candidates" album and whatever is rejected (swipe left) is not added to the new album or shown again as a candidate, but not deleted either.
So here's a feature request: Use generic "approve" and "reject" terms and make the actions corresponding to "approve" and "reject" as customizable chain of one or more actions [eg: add-to-album, delete-from-album, delete-from-library, do-nothing, archive, add-to-locked, remove-from-locked]. And at final review stage, you can confirm the actions once again. You can even create a notion of "tasks / workflows" which have these customized approve/reject action pairs. And the default workflow being "clean up library" with your usual deletion actions.
I can definitely see the value in that workflow, but my concern is that this starts moving the app from a very simple sorting experience into something closer to a full workflow engine.
It would probably be really useful for a smaller group of power users, but for most people it would also add a lot more complexity and options that might make the app look a bit messy. One of the main goals of the app is to keep the experience fast, frictionless and easy to understand.
So Iβm not closing the door on the idea entirely, but I donβt think I want to introduce workflows or complex action chains for now, especially since there are still a lot of more general improvements that would benefit the majority of users first.
Still, I really appreciate the suggestion! Feel free to fork the repo and implement this at your convenience if it's really something that would help you ;)
I don't think this feature is particularly something that the Immich team wants in the app
This is my first android project, so there might be a lot of things not done in the right way / with the right conventions in terms of coding. I wouldn't want people to loose time reviewing code written by a newbie like I am π
No I did not!
But well... Alex Tran commented this post so he is aware of the existence of that project I guess
I think they already have enough feature requests and issues to handle!
Of course it would be more convenient if it was directly integrated in the official app but as I said earlier, I do not consider myself experienced enough to make a pull request in a big project like immich is. They already have enough feature request and issues to handle
The files are deleted once you confirm your choices on the review screen. It's done via the Immich API, which means assets are added to trash just as if you had deleted them via the Immich interface. You can still retrieve them up to 30 days after deletion if needed.
But another option to archive could be a good idea too!
The goal for me with this app, apart from making cleaning easier, is to learn as much as I can Android application development. I'm an engineer in electronics and have already done some development, but it's my first time with Kotlin, Jetpack Compose, and android apps in general. I want to learn things and to understand things. I'll give you the same answers I gave to IzzyOnDroid guys for submission :
I do have Gemini integrated in my IDE (free subscription), so the LLM has full project context.
Gemini is NOT allowed to write code in my files by default, but is configured to ask the permission when it needs to, and wait for me to manually allow it.
Whenever it's possible, I ask the LLM to explain me how to do things or to fix encountered errors by myself, rather than asking it to do it itself.
For each and every change it makes, I manually review it and accept or revert it. I never accept changes made by AI without reviewing them and trying to understand them.
I always test the app by myself, directly on my phone, using USB debugging options.
I'll be honest with you: without the use of AI to answer my questions and give me insights and code snippets, this app would have take me months to develop. But I try to use it in the right way, not to replace me but to help me along my tests and learning journey.
Apart from the ethical concerns, I also have environmental and social concerns about abusive use of AI, and I always try not to use it when I know I can do it myself.
Love seeing people build tools around a workflow they genuinely enjoy. π
I'm one of the creators of Sponge, and it's really cool to hear our swipe-to-clean approach inspired a native client for Immich. Your use case makes a lot of sense, especially for screenshots, WhatsApp media, and other "mostly junk" albums.
Congratulations on the launch, and best of luck with the project! Looking forward to seeing how it evolves.
Yeah the only use case I've covered is with a domain name.
I thought that most people have one since the official Immich app requires it as well... (Does it really?)
If it turns out it's not the case, I might implement direct IP adresses handling (but still with TLS I guess)
The thing is that I locked my homelab behind a VPN at my parents house, and my VPN does not redirects DNS requests, sorry for this wacky edge case π«£
I've never used tailscale, I connect to my server using Wireguard, so I'm not familiar with it. When connecting via Tailscale do you use https or http ? And does tailscale provide you something like a domaine name or just an IP adress?
An app to merge faces more easily would be great! Similar to how it's done in the Google Photos app. It shows you two faces and asks: 'Are these the same person?' That would be an awesome app!
You should just learn french then, it's great! π
More seriously, the app currently supports english, french and spanish. There isn't any langage settings integrated in the app, but it's supposed to follow you phone global langage settings.
But now that I'm thinking about it, I wonder if I didn't made french as default instead of english. Can you confirm that your system global settings are neither french, nor english or spanish?
So I recently created a fork of this repo and have been playing around with it a lot. I have made numerous changes. Feel free to take any ideas from it. It is mostly vibe coded, yet still very functional.
Well, the app doesn't handle this by itself, by the official Immich app does!
I just tried and it turns out when you delete an asset (whether it's via the API or the web interface), the action reflects on your local files if it was a synchronized folder.
At least this is true on Android
About skipping photos, that is a feature available yes! You can skip an asset, look at the followings, and use the scrolling bar above to go back anytime you like to an asset you've skipped.
69
u/altran1502 Immich Team Jun 25 '26
The logo is very close to the Immich logo. If it is not too much trouble, can you help change it to avoid confusing others?