Submission: immich plugin

Gilles Caulier caulier.gilles at gmail.com
Wed Oct 21 08:01:30 BST 2026


Hi Christian,

See the files in bugzilla about this topic:

https://bugs.kde.org/show_bug.cgi?id=502592
https://bugs.kde.org/show_bug.cgi?id=503893

Best regards

Gilles Caulier

Le lun. 19 oct. 2026 à 04:26, Gilles Caulier <caulier.gilles at gmail.com> a
écrit :

> Hi Christian,
>
> after to run the Immich Export, digiKam crash at end of the session:
>
> Thread 1 "digikam" received signal SIGSEGV, Segmentation fault.
> 0x0000fffff3dd44e0 in QShortcutMap::removeShortcut(int, QObject*,
> QKeySequence const&) () from /opt/qt6/lib/libQt6Gui.so.6
> (gdb) bt
> #0  0x0000fffff3dd44e0 in QShortcutMap::removeShortcut(int, QObject*,
> QKeySequence const&) () at /opt/qt6/lib/libQt6Gui.so.6
> #1  0x0000fffff441be58 in QWidget::releaseShortcut(int) () at
> /opt/qt6/lib/libQt6Widgets.so.6
> #2  0x0000fffff4560c18 in QLabelPrivate::clearContents() () at
> /opt/qt6/lib/libQt6Widgets.so.6
> #3  0x0000fffff4560ca8 in QLabel::~QLabel() () at
> /opt/qt6/lib/libQt6Widgets.so.6
> #4  0x0000fffff4560d38 in QLabel::~QLabel() () at
> /opt/qt6/lib/libQt6Widgets.so.6
> #5  0x0000fffff32a2664 in QObjectPrivate::deleteChildren() () at
> /opt/qt6/lib/libQt6Core.so.6
> #6  0x0000fffff442fef0 in QWidget::~QWidget() () at
> /opt/qt6/lib/libQt6Widgets.so.6
> #7  0x0000ffff8cbf1e70 in
> DigikamGenericImmichPlugin::ImmichWindow::~ImmichWindow
> (this=0xaaaaca7f7db0)
>    at /home/gilles/Devel/immich-digikam/plugin/immichwindow.cpp:805
> #8  0x0000ffff8cbf1e9c in
> DigikamGenericImmichPlugin::ImmichWindow::~ImmichWindow
> (this=0xaaaaca7f7db0)
>    at /home/gilles/Devel/immich-digikam/plugin/immichwindow.cpp:805
> #9  0x0000ffff8cbc3248 in
> DigikamGenericImmichPlugin::ImmichPlugin::~ImmichPlugin
> (this=0xaaaac283c020)
>    at /home/gilles/Devel/immich-digikam/plugin/immichplugin.cpp:37
> #10 0x0000ffff8cbc32ac in
> DigikamGenericImmichPlugin::ImmichPlugin::~ImmichPlugin
> (this=0xaaaac283c020)
>    at /home/gilles/Devel/immich-digikam/plugin/immichplugin.cpp:39
> #11 0x0000fffff356056c in
> QLibraryPrivate::unload(QLibraryPrivate::UnloadFlag) () at
> /opt/qt6/lib/libQt6Core.so.6
> #12 0x0000fffff3560948 in (anonymous
> namespace)::qlibraryCleanup_dtor_class_::~qlibraryCleanup_dtor_class_()
> () at /opt/qt6/lib/libQt6Core.so.6
> #13 0x0000fffff2c2aca0 in __cxa_finalize (d=0xfffff37e0000) at
> ./stdlib/cxa_finalize.c:97
> #14 0x0000fffff3186800 [PAC] in __do_global_dtors_aux () at
> /opt/qt6/lib/libQt6Core.so.6
> #15 0x0000fffff7fbeda8 [PAC] in _dl_call_fini
> (closure_map=closure_map at entry=0xfffff7ff0020) at ./elf/dl-call_fini.c:43
> #16 0x0000fffff7fc2b78 [PAC] in _dl_fini () at ./elf/dl-fini.c:120
> #17 0x0000fffff2c2b30c [PAC] in __run_exit_handlers
>    (status=0, listp=0xfffff2db0588 <__exit_funcs>,
> run_list_atexit=run_list_atexit at entry=true, run_dtors=run_dtors at entry
> =true)
>    at ./stdlib/exit.c:118
> #18 0x0000fffff2c2b400 [PAC] in __GI_exit (status=<optimized out>) at
> ./stdlib/exit.c:148
> #19 0x0000fffff2c12f20 [PAC] in __libc_start_call_main
>    (main=main at entry=0xaaaaaaaa4ba8 <main(int, char**)>, argc=argc at entry=1,
> argv=argv at entry=0xffffffffe8a8)
>    at ../sysdeps/nptl/libc_start_call_main.h:83
> #20 0x0000fffff2c1305c [PAC] in __libc_start_main_impl
>    (main=0xaaaaaaaa4ba8 <main(int, char**)>, argc=1, argv=0xffffffffe8a8,
> init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, sta
> ck_end=<optimized out>) at ../csu/libc-start.c:360
> #21 0x0000aaaaaaaa4ab0 [PAC] in _start ()
> (gdb)
>
> Notes : i run the Import function, and the GUI layout looks better... I
> don't have an Immich local web service to test. I just run the dialog and
> close it.
>
> Best regards
>
> Gilles Caulier
>
> Le lun. 19 oct. 2026 à 22:27, Gilles Caulier <caulier.gilles at gmail.com> a
> écrit :
>
>> Hi Christian,
>>
>> There is no problem to compile this code under Linux (here arm64):
>>
>>
>> https://www.flickr.com/photos/185465119@N02/55600062161/in/dateposted-public/
>>
>> A first look to the GUI revelate some improvements to do :
>>
>> - the layout is broken on the top/left.
>> - I don't understand the interface, how to start, and how to do it. A
>> better mapping of the widget can help the users to quickly drive the tool.
>> - The thumbnails : you don't use the cache mechanism from digiKam. Looks
>> like HEIF is not rendered, where digiKam supports it very well.
>> - No action button, Hel, close, upload, etc, typically on the bottom of
>> the dialog.
>>
>> I look quickly at the code improvements that can be done a lot, as
>> private classes C++ objects can be hidden. There is a cpp file more than
>> 100Kb. The cpp must be separated by feature to help in the code
>> maintenance. Look how i do with the 3rd party Gmicqt plugin that i wrap in
>> this repository:
>>
>> https://github.com/cgilles/digikam-gmic-qt/tree/master/src/bqm
>>
>> It's usual to limit the cpp file size to 10-20 Kb when it's possible. .h
>> cannot be cut in small parts.
>>
>> I recommend also to pass the open source static analyzers, as cppcheck or
>> clazy. Look at the scripts here :
>>
>> https://github.com/cgilles/digikam-gmic-qt/tree/master/src/reports
>>
>> My best regards
>>
>> Gilles Caulier
>>
>> Le lun. 19 oct. 2026 à 21:57, Gilles Caulier <caulier.gilles at gmail.com>
>> a écrit :
>>
>>> Hi Christian,
>>>
>>> Thanks for your work. Please add me in your project in the github
>>> repository, i will review the code and give you some guidance
>>>
>>> My account : https://github.com/cgilles
>>>
>>> I will check out the code and look to compile. When all will be fine, We
>>> can plan to include it in the digiKam bundles as the G'MIC-qt plugin for ex.
>>>
>>> Best regards
>>>
>>> Gilles Caulier
>>>
>>> Le lun. 19 oct. 2026 à 19:42, Christian McHugh <mmchugh at silverapple.eu>
>>> a écrit :
>>>
>>>> Hello everyone,
>>>>
>>>> I have been writing a generic plugin that connects digiKam to a
>>>> self-hosted Immich server, and before taking it further I wanted to ask
>>>> whether the project would be interested in it as an in-tree web-service
>>>> plugin, alongside Piwigo and the others.
>>>>
>>>> While vibe coded, it is working software and was made to allow my
>>>> family
>>>> to more easily access and edit their photos through Immich. The
>>>> repository is at https://github.com/mchugh19/immich-digikam/tree/main
>>>> and it currently provides:
>>>>
>>>> - Import of an album or a tag's contents into a local folder.
>>>> - Export of the digiKam selection to the Immich library or album.
>>>> - Metadata round-tripping through XMP sidecars (tags, rating, caption,
>>>> GPS), which one mechanism both applications read and write. Metadata
>>>> edited on either side is synced onto the existing Immich asset rather
>>>> than re-uploaded.
>>>> - Edited files are recognized as new versions of photos already in
>>>> Immich (by name, capture time, dimensions and a pixel comparison) and
>>>> can replace the old copy as the primary of a stack, or overwrite it,
>>>> instead of accumulating duplicates.
>>>> - It is developed and tested against Immich 3.3.3 and digiKam 9.1, and
>>>> it has unit tests for its pure logic plus contract tests against a stub
>>>> server.
>>>>
>>>> I use it against my own server, and I am prepared to help maintain it,
>>>> including following Immich API changes.
>>>>
>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/digikam-devel/attachments/20261021/e27155ea/attachment-0001.htm>


More information about the Digikam-devel mailing list