I
Immich•3mo ago
Moonlight

How to detect new image arriving to trigger my own pipeline?

Hi, I just setup the server on my own ubuntu laptop to test it out and I have been trying to figure out how to detect the arrival of a new image with the Immich API but I do not think that's possible? It looks like all asset queries require an ID? I saw there are external libraries scan but I want to do the opposite, scan the immich library itself for me to use it in my own python pipeline. Please let me know if I'm missing something! Thanks again for such an amazing app!
14 Replies
Immich
Immich•3mo ago
:wave: Hey @Moonlight, Thanks for reaching out to us. Please carefully read this message and follow the recommended actions. This will help us be more effective in our support effort and leave more time for building Immich :immich:. References - Container Logs: docker compose logs docs - Container Status: docker ps -a docs - Reverse Proxy: https://immich.app/docs/administration/reverse-proxy - Code Formatting https://support.discord.com/hc/en-us/articles/210298617-Markdown-Text-101-Chat-Formatting-Bold-Italic-Underline#h_01GY0DAKGXDEHE263BCAYEGFJA Checklist I have... 1. :blue_square: verified I'm on the latest release(note that mobile app releases may take some time). 2. :blue_square: read applicable release notes. 3. :blue_square: reviewed the FAQs for known issues. 4. :blue_square: reviewed Github for known issues. 5. :blue_square: tried accessing Immich via local ip (without a custom reverse proxy). 6. :blue_square: uploaded the relevant information (see below). 7. :blue_square: tried an incognito window, disabled extensions, cleared mobile app cache, logged out and back in, different browsers, etc. as applicable (an item can be marked as "complete" by reacting with the appropriate number) Information In order to be able to effectively help you, we need you to provide clear information to show what the problem is. The exact details needed vary per case, but here is a list of things to consider: - Your docker-compose.yml and .env files. - Logs from all the containers and their status (see above). - All the troubleshooting steps you've tried so far. - Any recent changes you've made to Immich or your system. - Details about your system (both software/OS and hardware). - Details about your storage (filesystems, type of disks, output of commands like fdisk -l and df -h). - The version of the Immich server, mobile app, and other relevant pieces. - Any other information that you think might be relevant. Please paste files and logs with proper code formatting, and especially avoid blurry screenshots. Without the right information we can't work out what the problem is. Help us help you ;) If this ticket can be closed you can use the /close command, and re-open it later if needed.
bo0tzz
bo0tzz•3mo ago
It's not really documented, but there are websocket events for new uploads If you don't need it live, you can use the /search/metadata with a filter on createdAfter
Moonlight
MoonlightOP•3mo ago
Live would be incredible ! I've never heard of websockets until today so lemme check how to grab those ! Is there any code, tutorial I should look for in particular?
NoMachine
NoMachine•3mo ago
you could use inotifywait to detect changes on the FS ( https://linux.die.net/man/1/inotifywait )
bo0tzz
bo0tzz•3mo ago
There's no Immich specific documentation or guides for this We use socket.io so using their client is probably the easiest Here's how we connect from the web client https://github.com/immich-app/immich/blob/main/web/src/lib/stores/websocket.ts#L32-L38 The format of the messages isn't documented either, so I'd say just connect and set it up to debug log everything that comes through, then mess around in Immich to have it generate some messages
Moonlight
MoonlightOP•3mo ago
Trying to connect to the socket but no success: Here's my simple python script:
import socketio

sio = socketio.Client(logger=True, engineio_logger=True)

IMMICH_WS_URL = "http://10.0.0.164:2283"

try:
sio.connect(IMMICH_WS_URL, transports=["websocket"], socketio_path="/socket.io/")
print("āœ… Connected to Immich WebSocket")
except Exception as e:
print("āŒ WebSocket Connection Failed:", e)
import socketio

sio = socketio.Client(logger=True, engineio_logger=True)

IMMICH_WS_URL = "http://10.0.0.164:2283"

try:
sio.connect(IMMICH_WS_URL, transports=["websocket"], socketio_path="/socket.io/")
print("āœ… Connected to Immich WebSocket")
except Exception as e:
print("āŒ WebSocket Connection Failed:", e)
Which returns:
Attempting WebSocket connection to ws://10.0.0.164:2283/socket.io/?transport=websocket&EIO=4
:x: WebSocket Connection Failed: Connection error
Attempting WebSocket connection to ws://10.0.0.164:2283/socket.io/?transport=websocket&EIO=4
:x: WebSocket Connection Failed: Connection error
I've checked with curl and wscat as well and it doesn't seem to connect to it?
bo0tzz
bo0tzz•3mo ago
The path is wrong And you'll probably also need auth; I think on the web client that's automatically included in the cookie
Moonlight
MoonlightOP•3mo ago
Ah my bad yes it's ws not http Yeah I was wondering, using the API key would auth?
bo0tzz
bo0tzz•3mo ago
That too, but I meant the path, not the URL I'm not actually sure how we handle auth on the websocket, trying to figure that out now
Moonlight
MoonlightOP•3mo ago
Cause I tried
(.env) poro@poro-P65-P67RGRERA:~/recipe-flow$ npx wscat -c "ws://10.0.0.164:2283/socket.io/?EIO=4&transport=websocket" -H "Authorization: Bearer <my-api-key>"
error: socket hang up
(.env) poro@poro-P65-P67RGRERA:~/recipe-flow$ npx wscat -c "ws://10.0.0.164:2283/socket.io/?EIO=4&transport=websocket" -H "Authorization: Bearer <my-api-key>"
error: socket hang up
Ah you mean /api/socket.io yeah I fully missed that
(.env) poro@poro-P65-P67RGRERA:~/recipe-flow$ python3 test_socket.py
Attempting WebSocket connection to ws://10.0.0.164:2283/api/socket.io/?transport=websocket&EIO=4
WebSocket connection accepted with {'sid': 'uDQqb1wcR_bMlvHeAAAG', 'upgrades': [], 'pingInterval': 25000, 'pingTimeout': 20000, 'maxPayload': 1000000}
Engine.IO connection established
Sending packet MESSAGE data 0{}
Received packet MESSAGE data 0{"sid":"t0f54-CROVZ3dIQkAAAH"}
Namespace / is connected
āœ… Connected to Immich WebSocket
(.env) poro@poro-P65-P67RGRERA:~/recipe-flow$ python3 test_socket.py
Attempting WebSocket connection to ws://10.0.0.164:2283/api/socket.io/?transport=websocket&EIO=4
WebSocket connection accepted with {'sid': 'uDQqb1wcR_bMlvHeAAAG', 'upgrades': [], 'pingInterval': 25000, 'pingTimeout': 20000, 'maxPayload': 1000000}
Engine.IO connection established
Sending packet MESSAGE data 0{}
Received packet MESSAGE data 0{"sid":"t0f54-CROVZ3dIQkAAAH"}
Namespace / is connected
āœ… Connected to Immich WebSocket
AMAZING Looks like I didn't need to auth, I just updated the path to /api/socket.io/
bo0tzz
bo0tzz•3mo ago
Interesting šŸ¤” I believe you can connect without authenticating but won't actually receive anything And you'll want to add an x-api-key header with the api key
Moonlight
MoonlightOP•3mo ago
Yes ! The docker logs immich_server show unauthorized access when I don't use it and just Connect + Disconnect when I do so I expect it's fine ! Thxxxxxxxxx
Tempest
Tempest•3mo ago
This is very interesting. Would assets added or removed from albums be noted here as well? Does the debug log need to be on info or would everything come through without changing logging levels?
bo0tzz
bo0tzz•3mo ago
I don't think there's album events at the moment, but they should be easy enough to add immich-server log level has no effect on websocket messages

Did you find this page helpful?