• We've made some quality of life improvements to the Trading Post. More info here.

InventoryDifferent - a system for managing, tracking, selling, and showing off your collection

This is an amazing bit of work! I've been setting it up and playing with it this evening and it works almost perfectly. I've put in one bug report and a few feature suggestions on the GitHub repo, but they're very minor.. I'm looking forward to cataloging my collection with this!
I have fixed the refresh issue after adding a new device. I know it used to work, so I must have broken it along the way.

Working on the barcode scanner improvements you brought up now. I thought there was a better way of decoding Apple serial numbers, but it turns out it's not super easy. EveryMac must have a crazy system in place to do their lookups, but even EveryMac.com failed with many of my serial numbers. I think my lookup is pretty hit or miss, but it will at least attempt to identify the model if you scan a serial number not already tied to a device. Regardless, if it misses finding an existing saved device, it will allow you to add a blank device with the serial number pre-filled, or if it thinks it knows the device's model, it will profile with the values from the template.

The other improvements may have to wait. I'm a week away from going on a 3 week trip overseas, so I'll have little time to tackle things and I don't want to start something big and potentially break something right before going MIA for 3 weeks.

Appreciate the feedback! Keep the ideas coming!
 
Amazing work! I have a few other ideas that I’m trying to think of the best way of describing so will log a request when I’ve got the thoughts sorted in my mind
 
Amazing work! I have a few other ideas that I’m trying to think of the best way of describing so will log a request when I’ve got the thoughts sorted in my mind
Added basic photo editing (rotation and cropping) in a non-destructive way. Note that the way I do it (for performance reasons), cropping or rotating will create another version on disk so that I don't have to manipulate the image in realtime, but I also keep the original in case you accidentally crop something out and want to go back to the original.
 
Image rotation bug is now fixed. Turned out to be an issue with images that have rotation data in the EXIF data. the module I am using discards additional rotations beyond the first (in this case, the EXIF rotation is applied first). rotations should be stored and reflected properly. I also added a screen when you take a photo from the iOS app, it will allow you to rotate or crop before saving.

Also, saw your bug report about deleted devices still showing in the GraphQL. You can either filter out soft deleted devices in your graphql query (" devices(where: { deleted: { equals: false } }) {" ), or if you really don't want the devices, the web interface has a "Trash" that holds devices so you can restore or permanently delete them (and their media). I was worried someone would accidentally delete a device where the only storage for the images was in the system, so wanted to add some friction to permanent deletion.

Finally, on the iOS swipe bug on the image viewer, that's been a thorn in my side. Turns out, making an image viewer on iOS that supports swiping between images while also allowing pinch to zoom and pan is pretty hard (at least it has been for me). If anyone knows of an iOS module or library that offers this, as well as loading from a remote server, let me know! I made the decision that I need pinch to zoom because I often need to zoom in on logic boards to look at things. You can swipe to advance between images, but you need to do it off the image (in the black area above or below the image).

Thanks for all this feedback! It's incredibly valuable and is showcasing things that I no longer notice because I've been using it a certain way as I've built it.

As a note, though, I will be going on a 3 week trip where I may have limited or no access to the internet, and probably won't have much time to work on things, so there may be limited updates for a bit starting this weekend.
 
You’ve done some amazing work there @wottle, you’ve earned some time away! I can’t promise you won’t come back to 100 feature requests though! 😅
 
Can someone explain how I can install this on windows or ubuntu linux? My only mac runs system 6-7...
It’s meant to be run in docker containers. So you’ll want to install Docker Desktop for Windows. https://medium.com/@piyushkashyap04...mpose-on-windows-linux-and-macos-a022cf82ac0b

Then you’d use the ‘docker compose up’ command in the command line to launch the containers. I can try to look into making platform specific scripts that could make this easier. It just might be a while as I’m going out of the country for a few weeks.
 
You’ve done some amazing work there @wottle, you’ve earned some time away! I can’t promise you won’t come back to 100 feature requests though! 😅

Keep them coming. And any bugs you find! I do want to get the existing features rock solid before I go too far into new significant features. Although maybe I’ll spend some time making a reusable, open source image viewer for iOS.
 
It’s meant to be run in docker containers. So you’ll want to install Docker Desktop for Windows. https://medium.com/@piyushkashyap04...mpose-on-windows-linux-and-macos-a022cf82ac0b

Then you’d use the ‘docker compose up’ command in the command line to launch the containers. I can try to look into making platform specific scripts that could make this easier. It just might be a while as I’m going out of the country for a few weeks.
Unfortunant. My laptop isn't compatible with arm64...

Gonna try amd64. Thank you very much wottle!
 
Keep them coming. And any bugs you find! I do want to get the existing features rock solid before I go too far into new significant features. Although maybe I’ll spend some time making a reusable, open source image viewer for iOS.

Yep sensible to work on a solid foundation rather than add features that just compound existing issues.
 
Yep sensible to work on a solid foundation rather than add features that just compound existing issues.
OK, spent a bit of time playing around with the swipe issues I previously struggled with on the image viewer. And I think I've got it working pretty well. I improved the pinch to zoom to originate under the center of the pinch gesture (vs just zooming from the center of the image). Same for double tapping to zoom. And you can now swipe to switch images when not zoomed in. When zoomed in, you can pan with one finger, and when you hit the right or left edge, it you try to pull from that edge above a certain amount, it will go to the next / previous image.
 
Thanks @wottle for the inventory system!

FYI, I’ve moved my collection from my wiki (https://ferronato.eu/dokuwiki/doku.php?id=start) to ID2 (https://collection.ferronato.eu/).
A few remarks/feedback items that might help:

QR Code Resolution: The encoded URL in the QR code currently only works when scanned from the App. It would be great if it could resolve directly in the browser—making it easier for friends to view info pages on their own.

Sorting: An option to sort by "Last Added" would be very helpful, especially when adding new devices in bulk.

Legacy/Lightweight Web Interface: An HTTP/non-JS fallback page for browsing the catalogue from a legacy Mac. Though since you have a nice API layer, I realise anyone could build a custom project for this!

OCR Serial Scanning: Capturing serial numbers via OCR would be cool, though it might not be fully reliable given that numbers are often molded into plastic.

Multi-currency: Support for multiple currencies—or at least the Euro (€)!

Thanks again for this super useful tool!
 
Thanks @wottle for the inventory system!

FYI, I’ve moved my collection from my wiki (https://ferronato.eu/dokuwiki/doku.php?id=start) to ID2 (https://collection.ferronato.eu/).
A few remarks/feedback items that might help:

QR Code Resolution: The encoded URL in the QR code currently only works when scanned from the App. It would be great if it could resolve directly in the browser—making it easier for friends to view info pages on their own.

Sorting: An option to sort by "Last Added" would be very helpful, especially when adding new devices in bulk.

Legacy/Lightweight Web Interface: An HTTP/non-JS fallback page for browsing the catalogue from a legacy Mac. Though since you have a nice API layer, I realise anyone could build a custom project for this!

OCR Serial Scanning: Capturing serial numbers via OCR would be cool, though it might not be fully reliable given that numbers are often molded into plastic.

Multi-currency: Support for multiple currencies—or at least the Euro (€)!

Thanks again for this super useful tool!
Hey, glad you're finding it useful! Love seeing your collection!

Do you have the latest? I've put in some work to address some items and enhancements from @Durosity so the latest version has some nice improvements.

A few notes on your feedback:

QR Code Resolution — the QR codes actually do encode a plain web URL ({your_server}/devices/{id}), not an app-specific scheme. The catch is that the URL comes from whatever server address you configured in the iOS app settings, which might be an internal/LAN address rather than your public domain. If you update the server URL in the app to your public URL (collection.ferronato.eu), newly generated QR codes should work directly in any browser. Worth trying! If there's a strong case for needing the QR code to use a different domain than the domain used to connect in iOS, I could make it another setting.

Sort by Last Added — That's not currently supported. There is a "Date Acquired" sort (the date you physically acquired the device), but not a "date entered into the system" sort. Typically, the date acquired defaults to the date of entry, but I definitely understand when migrating a collection that won't be the case. I can add that.

Legacy/Lightweight Web Interface — I did consider this, so it could be browsed on legacy devices. You're right that the GraphQL API is fully open. Would love to see what the community could build! I might add this to the back log and see if I could come up with a VERY simple version, as its own docker image so it would be optional. Everything being done server side would change how it's built, but I suspect it would be pretty light weight on the server. Are you thinking view-only? Doing updates via forms would likely be a lot of work, but a browse only website would probably be pretty easy.

OCR Serial Scanning — not currently supported. The scanner does live barcode/QR detection, but reading serials molded into plastic via OCR is genuinely tricky (font inconsistency, low contrast, odd angles). I actually tried to build something in a side project for doing Serial number matching on eBay listings (trying to compile an exhaustive mapping between serial numbers and devices) and the success rate is terribly low. Of course, it's harder because I'm just looking at all the listing images and trying to see if there is a serial number in the image, which is where I have the most false positives. I'll have to think about a better way to do this before considering adding it.

Multi-currency — already supported! On the web, set LANGUAGE=de (or fr/es) in your docker-compose.yml to get € automatically, or set CURRENCY=EUR independently if you want English UI with euros. On iOS there's a dedicated currency picker in iOS Settings → Apps → InventoryDifferent → Currency (USD, EUR, GBP, CAD, AUD, JPY, and more) — completely separate from the language setting. Do you want me to see about adding an Italian language option? I would use Claude for the translations, so it's not much effort on my part, although I'd want some confirmation that the translations are correct.

Thanks for the detailed feedback — this is exactly the kind of thing that makes the project better.
 
I was sure you were leveraging AI too; you're on Claude, I'm on ChatGPT (former Codex) ;)

QR code: I'm 100% sure I saw the IP and port of the API layer the first time I tried it; now it's fine. So despite the hiccup, maybe it was me, I'm glad it's working as expected.

Sort by Last Added: thanks.

Legacy/Lightweight Web Interface: I'll add it to my long list of pending projects :). If you get started first, let me know. And yes, I was actually considering a read-only collection.

OCR Serial Scanning: agreed.

Multi-currency: I can't get it to work. The images are :latest, the .env file has CURRENCY=EUR, but even after docker compose up -d --build --force-recreate, it keeps showing the '$' symbol. The version shown on the web page is v3.0.0. The Docker images in Docker Hub are 8h old ... so it should be it.

Italian translation: I work in an English-language environment, so ID2 in English is fine for me — that said, I'm happy to help refine the Italian translation if that's useful.

Best

Should we stay here or move to DM, or the git hub repo?
 
I was sure you were leveraging AI too; you're on Claude, I'm on ChatGPT (former Codex) ;)

QR code: I'm 100% sure I saw the IP and port of the API layer the first time I tried it; now it's fine. So despite the hiccup, maybe it was me, I'm glad it's working as expected.

Sort by Last Added: thanks.

Legacy/Lightweight Web Interface: I'll add it to my long list of pending projects :). If you get started first, let me know. And yes, I was actually considering a read-only collection.

OCR Serial Scanning: agreed.

Multi-currency: I can't get it to work. The images are :latest, the .env file has CURRENCY=EUR, but even after docker compose up -d --build --force-recreate, it keeps showing the '$' symbol. The version shown on the web page is v3.0.0. The Docker images in Docker Hub are 8h old ... so it should be it.

Italian translation: I work in an English-language environment, so ID2 in English is fine for me — that said, I'm happy to help refine the Italian translation if that's useful.

Best

Should we stay here or move to DM, or the git hub repo?
Here is fine. I did see your issues in GitHub, so I'll chip away at them as I have time. It's "get the kids back to college" time, so might be a while before I can.

The CURRENCY variable wasn't being passed into the web container in older versions of the compose file — it only existed in .env but wasn't wired through. You'll need to add one line to your docker-compose file's web service environment section:

CURRENCY: ${CURRENCY:-USD}

So it looks like:

web:
environment:
LANGUAGE: ${LANGUAGE:-en}
CURRENCY: ${CURRENCY:-USD} # add this line
...

Then re-run docker compose up -d and your CURRENCY=EUR from .env will take effect. This is fixed in the next release — updated compose files will include it automatically. e.g.

1786382940773.png

Also, you can control the setting in iOS if you're using the app in Settings -> Apps -> InventoryDifferent
 
Thanks for looking into this.

I was wondering why you don't share the same configuration file in the container's volume so that it's sufficient to restart the container if a configuration is updated.

ciao
 
About AI generated images:
  • if in the photo section of a single device, when I set "Skip - text description only2, the AI Image reports "400 Unknown parameter: 'response_format'."
  • If I add the reference image, it takes forever to return a "Connection error." In my experience, the time it takes an AI API service can vary a lot; async calls often solve the issue
  • if done from the configuration page, it quickly (almost instantaneously) returns "Done" but no image is found
I have the impression that there is not a unique place where the call to the AI API is managed.
 
Back
Top