# Gramps Web Media import not matching checksums

**URL:** <https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990>\
**Category:** Gramps Web\
**Tags:** media-records, data-import, sync\_tool\
**Created:** [December 27, 2025, 6:59pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990 "2025-12-27T18:59:39Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [December 27, 2025, 6:59pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/1 "2025-12-27T18:59:39Z")

</div>

I have Gramps Web installed and running via the 1-click droplet on Digital Ocean. I cannot get my media to import via ZIP. It’s as if the files are not there: I can’t find them on the server, and no checksums match.

 ![Screenshot_20251227-124737](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/9/9686c4ab297c70591f912db8f2c21f614d0d5cf0.png)

I have run the Media Manager utilities and converted to relative paths, and most (not those 37 referenced above) have checksums. My import of the .gramps file was successful.

I can upload new images to the droplet and they show up on the server. However, when I try to replace an existing image with the same local copy, it tells me that there already exists a file with that checksum and refuses to upload.

I have a feeling that there is some kind of problem where the zip file upload creates a reference to the files, but does not actually upload the files. I’ve tried uploading differently sized zip files to the same effect.

Can someone advise? I’ve scoured these forums and found folks with similar problems, but have yet to find a solution. I’m not overly familiar with droplets or accessing config files therein, so if you can recognize my problem, go easy on me with explanations on how to fix it. I know how to shh in but I’ll need clear instructions on command syntax.

Thanks in advance!

Gramps 6.0.6  
Gramps Web API 3.6.0  
Gramps Web Frontend 25.12.0  
Gramps QL 0.4.0  
Sifts 1.1.1  
locale: en  
multi-tree: false  
task queue: true  
OCR: true  
chat: false

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [December 27, 2025, 7:28pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/2 "2025-12-27T19:28:07Z")

</div>

Hi,

can you confirm that you didn’t modify anything in the configuration of the 1-click app manually (in that case there is no need to share details about your setup).

You can provide the following information to help diagnose this:

- When you open one of the media objects in Gramps Web where you’re sure there is a checksum and the checksum is correct, and you use “replace file” to upload the file in Gramps Web, please report the detailed error message (if any) as well as
  - The response of the API call in the network tab of the browser dev tools (F12)
  - The log of your grampsweb container
  - The log of your celery container

The logs are obtained via

```python
cd /opt/grampsweb
docker compose logs --tail 100 grampsweb
docker compose logs --tail 100 grampsweb_celery

```

- When you upload a ZIP file, please provide
  - The error message
  - The log of your grampsweb container
  - The log of your celery container

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [December 29, 2025, 3:05pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/3 "2025-12-29T15:05:18Z")

</div>

Thanks for the response.

I did not modify anything in the 1-click app.

I deleted the entire tree and media objects and started over, re-importing the .gramps file an images.zip file. There is no error message when the .zip is loaded. It gives the green success error. But this is the status after uploading:  
540 Media Objects  
36 media objects with missing checksum  
539 media objects with missing file

Here is the grampsweb log:

`/opt/grampsweb# docker compose logs --tail 100 grampsweb`  
`grampsweb | self.execute(`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps/plugins/db/dbapi/sqlite.py”, line 138, in execute`  
`grampsweb | self.__cursor.execute(*args, **kwargs)`  
`grampsweb | sqlite3.OperationalError: database is locked`  
`grampsweb |`  
`grampsweb | (` **`main`** `.py:8): Gtk-CRITICAL **: 22:14:40.762: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | INFO [alembic.runtime.migration] Context impl SQLiteImpl.`  
`grampsweb | INFO [alembic.runtime.migration] Will assume non-transactional DDL.`  
`grampsweb | [2025-12-24 22:14:45 +0000] [10] [INFO] Starting gunicorn 23.0.0`  
`grampsweb | [2025-12-24 22:14:45 +0000] [10] [INFO] Listening at: ``http://0.0.0.0:5000`` (10)`  
`grampsweb | [2025-12-24 22:14:45 +0000] [10] [INFO] Using worker: sync`  
`grampsweb | [2025-12-24 22:14:45 +0000] [11] [INFO] Booting worker with pid: 11`  
`grampsweb | [2025-12-24 22:14:45 +0000] [12] [INFO] Booting worker with pid: 12`  
`grampsweb | [2025-12-24 22:14:45 +0000] [13] [INFO] Booting worker with pid: 13`  
`grampsweb |`  
`grampsweb | (gunicorn:11): Gtk-CRITICAL **: 22:14:52.715: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:12): Gtk-CRITICAL **: 22:14:52.758: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:13): Gtk-CRITICAL **: 22:14:52.883: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | [2025-12-26 18:07:19 +0000] [10] [ERROR] Worker (pid:12) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:07:19 +0000] [56] [INFO] Booting worker with pid: 56`  
`grampsweb |`  
`grampsweb | (gunicorn:56): Gtk-CRITICAL **: 18:07:21.839: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:08:36 +0000] [10] [ERROR] Worker (pid:13) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:08:36 +0000] [57] [INFO] Booting worker with pid: 57`  
`grampsweb |`  
`grampsweb | (gunicorn:57): Gtk-CRITICAL **: 18:08:38.442: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:09:00 +0000] [10] [ERROR] Worker (pid:57) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:09:00 +0000] [60] [INFO] Booting worker with pid: 60`  
`grampsweb |`  
`grampsweb | (gunicorn:60): Gtk-CRITICAL **: 18:09:03.643: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:22:12 +0000] [10] [ERROR] Worker (pid:11) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:22:12 +0000] [63] [INFO] Booting worker with pid: 63`  
`grampsweb |`  
`grampsweb | (gunicorn:63): Gtk-CRITICAL **: 18:22:14.208: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:22:16 +0000] [10] [ERROR] Worker (pid:56) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:22:16 +0000] [64] [INFO] Booting worker with pid: 64`  
`grampsweb |`  
`grampsweb | (gunicorn:64): Gtk-CRITICAL **: 18:22:18.755: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | Exception possibly due to cache backend.`  
`grampsweb | Traceback (most recent call last):`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/cache.py”, line 62, in make_cache_key_thumbnails`  
`grampsweb | obj = db_handle.get_media_from_handle(handle)`  
`grampsweb | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps/gen/db/generic.py”, line 1487, in get_media_from_handle`  
`grampsweb | return self._get_from_handle(MEDIA_KEY, Media, handle)`  
`grampsweb | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps/gen/db/generic.py”, line 1460, in _get_from_handle`  
`grampsweb | raise HandleError(f"Handle {handle} not found")`  
`grampsweb | gramps.gen.errors.HandleError: Handle deefd4c3a3447e2630d not found`  
`grampsweb |`  
`grampsweb | During handling of the above exception, another exception occurred:`  
`grampsweb |`  
`grampsweb | Traceback (most recent call last):`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/flask_caching/` **`init`** `.py”, line 374, in decorated_function`  
`grampsweb | cache_key = make_cache_key(*args, **kwargs)`  
`grampsweb | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/cache.py”, line 64, in make_cache_key_thumbnails`  
`grampsweb | abort_with_message(404, f"Handle {handle} not found")`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/util.py”, line 740, in abort_with_message`  
`grampsweb | raise exc`  
`grampsweb | werkzeug.exceptions.HTTPException: 404 Not Found: Handle deefd4c3a3447e2630d not found`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb |`  
`grampsweb | (` **`main`** `.py:7): Gtk-CRITICAL **: 14:34:25.834: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | INFO [alembic.runtime.migration] Context impl SQLiteImpl.`  
`grampsweb | INFO [alembic.runtime.migration] Will assume non-transactional DDL.`  
`grampsweb | [2025-12-29 14:34:30 +0000] [9] [INFO] Starting gunicorn 23.0.0`  
`grampsweb | [2025-12-29 14:34:30 +0000] [9] [INFO] Listening at: ``http://0.0.0.0:5000`` (9)`  
`grampsweb | [2025-12-29 14:34:30 +0000] [9] [INFO] Using worker: sync`  
`grampsweb | [2025-12-29 14:34:30 +0000] [10] [INFO] Booting worker with pid: 10`  
`grampsweb | [2025-12-29 14:34:31 +0000] [11] [INFO] Booting worker with pid: 11`  
`grampsweb | [2025-12-29 14:34:31 +0000] [12] [INFO] Booting worker with pid: 12`  
`grampsweb |`  
`grampsweb | (gunicorn:10): Gtk-CRITICAL **: 14:34:38.235: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:11): Gtk-CRITICAL **: 14:34:38.381: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:12): Gtk-CRITICAL **: 14:34:38.384: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`

And the celery log:  
`/opt/grampsweb# docker compose logs --tail 100 grampsweb_celery`  
`grampsweb_celery | [2025-12-29 14:32:19,491: INFO/ForkPoolWorker-1] Looking for invalid name format references`  
`grampsweb_celery | [2025-12-29 14:32:19,741: INFO/ForkPoolWorker-1] OK: no invalid name formats found found`  
`grampsweb_celery | [2025-12-29 14:32:19,747: INFO/ForkPoolWorker-1] Looking for broken family links`  
`grampsweb_celery | [2025-12-29 14:32:20,334: INFO/ForkPoolWorker-1] OK: no broken family links found`  
`grampsweb_celery | [2025-12-29 14:32:20,335: INFO/ForkPoolWorker-1] Looking for broken parent relationships`  
`grampsweb_celery | [2025-12-29 14:32:20,435: INFO/ForkPoolWorker-1] OK: no broken parent relationships found`  
`grampsweb_celery | [2025-12-29 14:32:20,435: INFO/ForkPoolWorker-1] Looking for empty families`  
`grampsweb_celery | [2025-12-29 14:32:20,450: INFO/ForkPoolWorker-1] OK: no empty families found`  
`grampsweb_celery | [2025-12-29 14:32:20,450: INFO/ForkPoolWorker-1] Looking for duplicate spouses`  
`grampsweb_celery | [2025-12-29 14:32:20,573: INFO/ForkPoolWorker-1] OK: no duplicate spouses found`  
`grampsweb_celery | [2025-12-29 14:32:20,575: INFO/ForkPoolWorker-1] Looking for Duplicated Gramps ID problems`  
`grampsweb_celery | [2025-12-29 14:32:20,784: INFO/ForkPoolWorker-1] Looking for event problems`  
`grampsweb_celery | [2025-12-29 14:32:20,961: INFO/ForkPoolWorker-1] OK: no event problems found`  
`grampsweb_celery | [2025-12-29 14:32:20,963: INFO/ForkPoolWorker-1] Looking for person reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,039: INFO/ForkPoolWorker-1] OK: no event problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,041: INFO/ForkPoolWorker-1] Looking for family reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,120: INFO/ForkPoolWorker-1] OK: no event problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,123: INFO/ForkPoolWorker-1] Looking for place reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,296: INFO/ForkPoolWorker-1] OK: no place reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,299: INFO/ForkPoolWorker-1] Looking for source reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,321: INFO/ForkPoolWorker-1] OK: no source reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,322: INFO/ForkPoolWorker-1] Looking for citation reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,500: INFO/ForkPoolWorker-1] OK: no citation reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,501: INFO/ForkPoolWorker-1] Looking for media object reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,662: INFO/ForkPoolWorker-1] OK: no media reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,664: INFO/ForkPoolWorker-1] Looking for repository reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,665: INFO/ForkPoolWorker-1] OK: no repository reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,666: INFO/ForkPoolWorker-1] Looking for note reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,818: INFO/ForkPoolWorker-1] OK: no note reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,820: INFO/ForkPoolWorker-1] Looking for tag reference problems`  
`grampsweb_celery | [2025-12-29 14:32:22,093: INFO/ForkPoolWorker-1] OK: no tag reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:22,094: INFO/ForkPoolWorker-1] Looking for media source reference problems`  
`grampsweb_celery | [2025-12-29 14:32:22,097: INFO/ForkPoolWorker-1] Looking for backlink reference problems`  
`grampsweb_celery | [2025-12-29 14:32:22,409: WARNING/ForkPoolWorker-1] No errors were found: the database has passed internal checks.`  
`grampsweb_celery | [2025-12-29 14:32:22,416: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.check_repair_database[caa5d772-bb4c-455b-9d7e-b2d4b46c2505] succeeded in 3.253950660000555s: {‘num_errors’: 0, ‘message’: ‘’}`  
`grampsweb_celery |`  
`grampsweb_celery | worker: Warm shutdown (MainProcess)`  
`grampsweb_celery |`  
`grampsweb_celery | (` **`main`** `.py:8): Gtk-CRITICAL **: 14:34:25.833: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb_celery | INFO [alembic.runtime.migration] Context impl SQLiteImpl.`  
`grampsweb_celery | INFO [alembic.runtime.migration] Will assume non-transactional DDL.`  
`grampsweb_celery |`  
`grampsweb_celery | (celery:1): Gtk-CRITICAL **: 14:34:34.040: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb_celery | /usr/local/lib/python3.11/dist-packages/celery/platforms.py:841: SecurityWarning: You’re running the worker with superuser privileges: this is`  
`grampsweb_celery | absolutely not recommended!`  
`grampsweb_celery |`  
`grampsweb_celery | Please specify a different user using the --uid option.`  
`grampsweb_celery |`  
`grampsweb_celery | User information: uid=0 euid=0 gid=0 egid=0`  
`grampsweb_celery |`  
`grampsweb_celery | warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(`  
`grampsweb_celery |`  
`grampsweb_celery | -------------- celery@df430b8b2f0a v5.6.0 (recovery)`  
`grampsweb_celery | — ***** -----`  
`grampsweb_celery | – ******* ---- Linux-5.15.0-164-generic-x86_64-with-glibc2.36 2025-12-29 14:34:35`  
`grampsweb_celery | - *** — * —`  
`grampsweb_celery | - ** ---------- [config]`  
`grampsweb_celery | - ** ---------- .> app: default:0x7f4bb67f7410 (.default.Loader)`  
`grampsweb_celery | - ** ---------- .> transport: redis://grampsweb_redis:6379/0`  
`grampsweb_celery | - ** ---------- .> results: redis://grampsweb_redis:6379/0`  
`grampsweb_celery | - *** — * — .> concurrency: 2 (prefork)`  
`grampsweb_celery | – ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)`  
`grampsweb_celery | — ***** -----`  
`grampsweb_celery | -------------- [queues]`  
`grampsweb_celery | .> celery exchange=celery(direct) key=celery`  
`grampsweb_celery |`  
`grampsweb_celery |`  
`grampsweb_celery | [tasks]`  
`grampsweb_celery | . gramps_webapi.api.tasks.check_repair_database`  
`grampsweb_celery | . gramps_webapi.api.tasks.delete_objects`  
`grampsweb_celery | . gramps_webapi.api.tasks.export_db`  
`grampsweb_celery | . gramps_webapi.api.tasks.export_media`  
`grampsweb_celery | . gramps_webapi.api.tasks.generate_report`  
`grampsweb_celery | . gramps_webapi.api.tasks.import_file`  
`grampsweb_celery | . gramps_webapi.api.tasks.import_media_archive`  
`grampsweb_celery | . gramps_webapi.api.tasks.media_ocr`  
`grampsweb_celery | . gramps_webapi.api.tasks.process_chat`  
`grampsweb_celery | . gramps_webapi.api.tasks.process_transactions`  
`grampsweb_celery | . gramps_webapi.api.tasks.search_reindex_full`  
`grampsweb_celery | . gramps_webapi.api.tasks.search_reindex_incremental`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_email_confirm_email`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_email_new_user`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_email_reset_password`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_telemetry_task`  
`grampsweb_celery | . gramps_webapi.api.tasks.update_search_indices_from_transaction`  
`grampsweb_celery | . gramps_webapi.api.tasks.upgrade_database_schema`  
`grampsweb_celery | . gramps_webapi.api.tasks.upgrade_undodb_schema`  
`grampsweb_celery |`  
`grampsweb_celery | [2025-12-29 14:34:36,279: INFO/MainProcess] Connected to redis://grampsweb_redis:6379/0`  
`grampsweb_celery | [2025-12-29 14:34:36,295: INFO/MainProcess] mingle: searching for neighbors`  
`grampsweb_celery | [2025-12-29 14:34:37,331: INFO/MainProcess] mingle: all alone`  
`grampsweb_celery | [2025-12-29 14:34:37,354: INFO/MainProcess] celery@df430b8b2f0a ready.`  
`grampsweb_celery | [2025-12-29 14:35:15,173: INFO/MainProcess] Task gramps_webapi.api.tasks.import_media_archive[3b124bb9-c163-461d-972a-5f9adf8bbae2] received`  
`grampsweb_celery | [2025-12-29 14:35:15,327: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_media_archive[3b124bb9-c163-461d-972a-5f9adf8bbae2] succeeded in 0.15281892300001232s: {‘missing’: 0, ‘uploaded’: 0, ‘failures’: 0}`  
`grampsweb_celery | [2025-12-29 14:35:27,807: INFO/MainProcess] Task gramps_webapi.api.tasks.delete_objects[1c098117-8b22-4627-a7ee-34017dff946c] received`  
`grampsweb_celery | [2025-12-29 14:40:16,677: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.delete_objects[1c098117-8b22-4627-a7ee-34017dff946c] succeeded in 288.868596468s: None`  
`grampsweb_celery | [2025-12-29 14:45:19,850: INFO/MainProcess] Task gramps_webapi.api.tasks.import_file[51170be8-bc58-490a-b948-58616aafe751] received`  
`grampsweb_celery | [2025-12-29 14:45:30,329: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_file[51170be8-bc58-490a-b948-58616aafe751] succeeded in 10.477624306999928s: None`  
`grampsweb_celery | [2025-12-29 14:46:01,795: INFO/MainProcess] Task gramps_webapi.api.tasks.import_media_archive[b56cde4b-2d41-4b28-ad0f-a2d0447eb364] received`  
`grampsweb_celery | [2025-12-29 14:46:03,435: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_media_archive[b56cde4b-2d41-4b28-ad0f-a2d0447eb364] succeeded in 1.638208058000032s: {‘missing’: 493, ‘uploaded’: 185, ‘failures’: 0}`

After that, I tried the replace file function.  
API response:  
Failed to load response data - Request content was evicted from inspector cache.

Error message:  
Error: Upload file has the same checksum as the existing media object.

Grampsweb log:  
`/opt/grampsweb# docker compose logs --tail 100 grampsweb`  
`grampsweb | INFO [alembic.runtime.migration] Context impl SQLiteImpl.`  
`grampsweb | INFO [alembic.runtime.migration] Will assume non-transactional DDL.`  
`grampsweb | [2025-12-24 22:14:45 +0000] [10] [INFO] Starting gunicorn 23.0.0`  
`grampsweb | [2025-12-24 22:14:45 +0000] [10] [INFO] Listening at: ``http://0.0.0.0:5000`` (10)`  
`grampsweb | [2025-12-24 22:14:45 +0000] [10] [INFO] Using worker: sync`  
`grampsweb | [2025-12-24 22:14:45 +0000] [11] [INFO] Booting worker with pid: 11`  
`grampsweb | [2025-12-24 22:14:45 +0000] [12] [INFO] Booting worker with pid: 12`  
`grampsweb | [2025-12-24 22:14:45 +0000] [13] [INFO] Booting worker with pid: 13`  
`grampsweb |`  
`grampsweb | (gunicorn:11): Gtk-CRITICAL **: 22:14:52.715: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:12): Gtk-CRITICAL **: 22:14:52.758: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:13): Gtk-CRITICAL **: 22:14:52.883: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | [2025-12-26 18:07:19 +0000] [10] [ERROR] Worker (pid:12) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:07:19 +0000] [56] [INFO] Booting worker with pid: 56`  
`grampsweb |`  
`grampsweb | (gunicorn:56): Gtk-CRITICAL **: 18:07:21.839: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:08:36 +0000] [10] [ERROR] Worker (pid:13) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:08:36 +0000] [57] [INFO] Booting worker with pid: 57`  
`grampsweb |`  
`grampsweb | (gunicorn:57): Gtk-CRITICAL **: 18:08:38.442: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:09:00 +0000] [10] [ERROR] Worker (pid:57) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:09:00 +0000] [60] [INFO] Booting worker with pid: 60`  
`grampsweb |`  
`grampsweb | (gunicorn:60): Gtk-CRITICAL **: 18:09:03.643: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:22:12 +0000] [10] [ERROR] Worker (pid:11) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:22:12 +0000] [63] [INFO] Booting worker with pid: 63`  
`grampsweb |`  
`grampsweb | (gunicorn:63): Gtk-CRITICAL **: 18:22:14.208: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | [2025-12-26 18:22:16 +0000] [10] [ERROR] Worker (pid:56) was sent SIGKILL! Perhaps out of memory?`  
`grampsweb | [2025-12-26 18:22:16 +0000] [64] [INFO] Booting worker with pid: 64`  
`grampsweb |`  
`grampsweb | (gunicorn:64): Gtk-CRITICAL **: 18:22:18.755: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | Exception possibly due to cache backend.`  
`grampsweb | Traceback (most recent call last):`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/cache.py”, line 62, in make_cache_key_thumbnails`  
`grampsweb | obj = db_handle.get_media_from_handle(handle)`  
`grampsweb | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps/gen/db/generic.py”, line 1487, in get_media_from_handle`  
`grampsweb | return self._get_from_handle(MEDIA_KEY, Media, handle)`  
`grampsweb | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps/gen/db/generic.py”, line 1460, in _get_from_handle`  
`grampsweb | raise HandleError(f"Handle {handle} not found")`  
`grampsweb | gramps.gen.errors.HandleError: Handle deefd4c3a3447e2630d not found`  
`grampsweb |`  
`grampsweb | During handling of the above exception, another exception occurred:`  
`grampsweb |`  
`grampsweb | Traceback (most recent call last):`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/flask_caching/` **`init`** `.py”, line 374, in decorated_function`  
`grampsweb | cache_key = make_cache_key(*args, **kwargs)`  
`grampsweb | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/cache.py”, line 64, in make_cache_key_thumbnails`  
`grampsweb | abort_with_message(404, f"Handle {handle} not found")`  
`grampsweb | File “/usr/local/lib/python3.11/dist-packages/gramps_webapi/api/util.py”, line 740, in abort_with_message`  
`grampsweb | raise exc`  
`grampsweb | werkzeug.exceptions.HTTPException: 404 Not Found: Handle deefd4c3a3447e2630d not found`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb |`  
`grampsweb | (` **`main`** `.py:7): Gtk-CRITICAL **: 14:34:25.834: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | INFO [alembic.runtime.migration] Context impl SQLiteImpl.`  
`grampsweb | INFO [alembic.runtime.migration] Will assume non-transactional DDL.`  
`grampsweb | [2025-12-29 14:34:30 +0000] [9] [INFO] Starting gunicorn 23.0.0`  
`grampsweb | [2025-12-29 14:34:30 +0000] [9] [INFO] Listening at: ``http://0.0.0.0:5000`` (9)`  
`grampsweb | [2025-12-29 14:34:30 +0000] [9] [INFO] Using worker: sync`  
`grampsweb | [2025-12-29 14:34:30 +0000] [10] [INFO] Booting worker with pid: 10`  
`grampsweb | [2025-12-29 14:34:31 +0000] [11] [INFO] Booting worker with pid: 11`  
`grampsweb | [2025-12-29 14:34:31 +0000] [12] [INFO] Booting worker with pid: 12`  
`grampsweb |`  
`grampsweb | (gunicorn:10): Gtk-CRITICAL **: 14:34:38.235: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:11): Gtk-CRITICAL **: 14:34:38.381: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb |`  
`grampsweb | (gunicorn:12): Gtk-CRITICAL **: 14:34:38.384: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`  
`grampsweb | ERROR:root:Error parsing list of recent DBs from file /root/gramps/recent-files-gramps.xml: no element found: line 1, column 0.`  
`grampsweb | This might indicate a damage to your files.`  
`grampsweb | If you’re sure there is no problem with other files, delete it, and restart Gramps.`

Celery log:  
`/opt/grampsweb# docker compose logs --tail 100 grampsweb_celery`  
`grampsweb_celery | [2025-12-29 14:32:19,491: INFO/ForkPoolWorker-1] Looking for invalid name format references`  
`grampsweb_celery | [2025-12-29 14:32:19,741: INFO/ForkPoolWorker-1] OK: no invalid name formats found found`  
`grampsweb_celery | [2025-12-29 14:32:19,747: INFO/ForkPoolWorker-1] Looking for broken family links`  
`grampsweb_celery | [2025-12-29 14:32:20,334: INFO/ForkPoolWorker-1] OK: no broken family links found`  
`grampsweb_celery | [2025-12-29 14:32:20,335: INFO/ForkPoolWorker-1] Looking for broken parent relationships`  
`grampsweb_celery | [2025-12-29 14:32:20,435: INFO/ForkPoolWorker-1] OK: no broken parent relationships found`  
`grampsweb_celery | [2025-12-29 14:32:20,435: INFO/ForkPoolWorker-1] Looking for empty families`  
`grampsweb_celery | [2025-12-29 14:32:20,450: INFO/ForkPoolWorker-1] OK: no empty families found`  
`grampsweb_celery | [2025-12-29 14:32:20,450: INFO/ForkPoolWorker-1] Looking for duplicate spouses`  
`grampsweb_celery | [2025-12-29 14:32:20,573: INFO/ForkPoolWorker-1] OK: no duplicate spouses found`  
`grampsweb_celery | [2025-12-29 14:32:20,575: INFO/ForkPoolWorker-1] Looking for Duplicated Gramps ID problems`  
`grampsweb_celery | [2025-12-29 14:32:20,784: INFO/ForkPoolWorker-1] Looking for event problems`  
`grampsweb_celery | [2025-12-29 14:32:20,961: INFO/ForkPoolWorker-1] OK: no event problems found`  
`grampsweb_celery | [2025-12-29 14:32:20,963: INFO/ForkPoolWorker-1] Looking for person reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,039: INFO/ForkPoolWorker-1] OK: no event problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,041: INFO/ForkPoolWorker-1] Looking for family reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,120: INFO/ForkPoolWorker-1] OK: no event problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,123: INFO/ForkPoolWorker-1] Looking for place reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,296: INFO/ForkPoolWorker-1] OK: no place reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,299: INFO/ForkPoolWorker-1] Looking for source reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,321: INFO/ForkPoolWorker-1] OK: no source reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,322: INFO/ForkPoolWorker-1] Looking for citation reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,500: INFO/ForkPoolWorker-1] OK: no citation reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,501: INFO/ForkPoolWorker-1] Looking for media object reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,662: INFO/ForkPoolWorker-1] OK: no media reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,664: INFO/ForkPoolWorker-1] Looking for repository reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,665: INFO/ForkPoolWorker-1] OK: no repository reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,666: INFO/ForkPoolWorker-1] Looking for note reference problems`  
`grampsweb_celery | [2025-12-29 14:32:21,818: INFO/ForkPoolWorker-1] OK: no note reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:21,820: INFO/ForkPoolWorker-1] Looking for tag reference problems`  
`grampsweb_celery | [2025-12-29 14:32:22,093: INFO/ForkPoolWorker-1] OK: no tag reference problems found`  
`grampsweb_celery | [2025-12-29 14:32:22,094: INFO/ForkPoolWorker-1] Looking for media source reference problems`  
`grampsweb_celery | [2025-12-29 14:32:22,097: INFO/ForkPoolWorker-1] Looking for backlink reference problems`  
`grampsweb_celery | [2025-12-29 14:32:22,409: WARNING/ForkPoolWorker-1] No errors were found: the database has passed internal checks.`  
`grampsweb_celery | [2025-12-29 14:32:22,416: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.check_repair_database[caa5d772-bb4c-455b-9d7e-b2d4b46c2505] succeeded in 3.253950660000555s: {‘num_errors’: 0, ‘message’: ‘’}`  
`grampsweb_celery |`  
`grampsweb_celery | worker: Warm shutdown (MainProcess)`  
`grampsweb_celery |`  
`grampsweb_celery | (` **`main`** `.py:8): Gtk-CRITICAL **: 14:34:25.833: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb_celery | INFO [alembic.runtime.migration] Context impl SQLiteImpl.`  
`grampsweb_celery | INFO [alembic.runtime.migration] Will assume non-transactional DDL.`  
`grampsweb_celery |`  
`grampsweb_celery | (celery:1): Gtk-CRITICAL **: 14:34:34.040: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed`  
`grampsweb_celery | /usr/local/lib/python3.11/dist-packages/celery/platforms.py:841: SecurityWarning: You’re running the worker with superuser privileges: this is`  
`grampsweb_celery | absolutely not recommended!`  
`grampsweb_celery |`  
`grampsweb_celery | Please specify a different user using the --uid option.`  
`grampsweb_celery |`  
`grampsweb_celery | User information: uid=0 euid=0 gid=0 egid=0`  
`grampsweb_celery |`  
`grampsweb_celery | warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(`  
`grampsweb_celery |`  
`grampsweb_celery | -------------- celery@df430b8b2f0a v5.6.0 (recovery)`  
`grampsweb_celery | — ***** -----`  
`grampsweb_celery | – ******* ---- Linux-5.15.0-164-generic-x86_64-with-glibc2.36 2025-12-29 14:34:35`  
`grampsweb_celery | - *** — * —`  
`grampsweb_celery | - ** ---------- [config]`  
`grampsweb_celery | - ** ---------- .> app: default:0x7f4bb67f7410 (.default.Loader)`  
`grampsweb_celery | - ** ---------- .> transport: redis://grampsweb_redis:6379/0`  
`grampsweb_celery | - ** ---------- .> results: redis://grampsweb_redis:6379/0`  
`grampsweb_celery | - *** — * — .> concurrency: 2 (prefork)`  
`grampsweb_celery | – ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)`  
`grampsweb_celery | — ***** -----`  
`grampsweb_celery | -------------- [queues]`  
`grampsweb_celery | .> celery exchange=celery(direct) key=celery`  
`grampsweb_celery |`  
`grampsweb_celery |`  
`grampsweb_celery | [tasks]`  
`grampsweb_celery | . gramps_webapi.api.tasks.check_repair_database`  
`grampsweb_celery | . gramps_webapi.api.tasks.delete_objects`  
`grampsweb_celery | . gramps_webapi.api.tasks.export_db`  
`grampsweb_celery | . gramps_webapi.api.tasks.export_media`  
`grampsweb_celery | . gramps_webapi.api.tasks.generate_report`  
`grampsweb_celery | . gramps_webapi.api.tasks.import_file`  
`grampsweb_celery | . gramps_webapi.api.tasks.import_media_archive`  
`grampsweb_celery | . gramps_webapi.api.tasks.media_ocr`  
`grampsweb_celery | . gramps_webapi.api.tasks.process_chat`  
`grampsweb_celery | . gramps_webapi.api.tasks.process_transactions`  
`grampsweb_celery | . gramps_webapi.api.tasks.search_reindex_full`  
`grampsweb_celery | . gramps_webapi.api.tasks.search_reindex_incremental`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_email_confirm_email`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_email_new_user`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_email_reset_password`  
`grampsweb_celery | . gramps_webapi.api.tasks.send_telemetry_task`  
`grampsweb_celery | . gramps_webapi.api.tasks.update_search_indices_from_transaction`  
`grampsweb_celery | . gramps_webapi.api.tasks.upgrade_database_schema`  
`grampsweb_celery | . gramps_webapi.api.tasks.upgrade_undodb_schema`  
`grampsweb_celery |`  
`grampsweb_celery | [2025-12-29 14:34:36,279: INFO/MainProcess] Connected to redis://grampsweb_redis:6379/0`  
`grampsweb_celery | [2025-12-29 14:34:36,295: INFO/MainProcess] mingle: searching for neighbors`  
`grampsweb_celery | [2025-12-29 14:34:37,331: INFO/MainProcess] mingle: all alone`  
`grampsweb_celery | [2025-12-29 14:34:37,354: INFO/MainProcess] celery@df430b8b2f0a ready.`  
`grampsweb_celery | [2025-12-29 14:35:15,173: INFO/MainProcess] Task gramps_webapi.api.tasks.import_media_archive[3b124bb9-c163-461d-972a-5f9adf8bbae2] received`  
`grampsweb_celery | [2025-12-29 14:35:15,327: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_media_archive[3b124bb9-c163-461d-972a-5f9adf8bbae2] succeeded in 0.15281892300001232s: {‘missing’: 0, ‘uploaded’: 0, ‘failures’: 0}`  
`grampsweb_celery | [2025-12-29 14:35:27,807: INFO/MainProcess] Task gramps_webapi.api.tasks.delete_objects[1c098117-8b22-4627-a7ee-34017dff946c] received`  
`grampsweb_celery | [2025-12-29 14:40:16,677: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.delete_objects[1c098117-8b22-4627-a7ee-34017dff946c] succeeded in 288.868596468s: None`  
`grampsweb_celery | [2025-12-29 14:45:19,850: INFO/MainProcess] Task gramps_webapi.api.tasks.import_file[51170be8-bc58-490a-b948-58616aafe751] received`  
`grampsweb_celery | [2025-12-29 14:45:30,329: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_file[51170be8-bc58-490a-b948-58616aafe751] succeeded in 10.477624306999928s: None`  
`grampsweb_celery | [2025-12-29 14:46:01,795: INFO/MainProcess] Task gramps_webapi.api.tasks.import_media_archive[b56cde4b-2d41-4b28-ad0f-a2d0447eb364] received`  
`grampsweb_celery | [2025-12-29 14:46:03,435: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_media_archive[b56cde4b-2d41-4b28-ad0f-a2d0447eb364] succeeded in 1.638208058000032s: {‘missing’: 493, ‘uploaded’: 185, ‘failures’: 0}`

I did notice that if I replace file with a media object that did not have a checksum (there were 36 of them for whatever reason, the file will load correctly. So that’s good!

I hope I’ve given you what you need. Thanks for the help!

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 6, 2026, 5:27pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/4 "2026-01-06T17:27:48Z")

</div>

@DavidMStraub I don’t want to bother, but is there anything in these logs that can help diagnose my problem?

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [January 6, 2026, 7:52pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/5 "2026-01-06T19:52:35Z")

</div>

Yes,

> `Worker (pid:13) was sent SIGKILL! Perhaps out of memory?`

This means you don’t have enough RAM on your server, so memory intensive tasks (likely including processing of media files) will fail.

How much RAM do you have?

See here for some config tweaks you can try to improve:

> **[Limit CPU & memory usage - Gramps Web](https://www.grampsweb.org/install_setup/cpu-limited/)**
>
> Open Source Genealogy

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 6, 2026, 7:56pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/6 "2026-01-06T19:56:54Z")

</div>

Thank you! I will give that a try!

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 7, 2026, 7:35pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/7 "2026-01-07T19:35:58Z")

</div>

I have 2GB RAM on the server, per the install instructions.

I have edited the docker-compose.yml and reduced the workers to 1.

GUNICORN\_NUM\_WORKERS: 1 and command: celery -A gramps\_webapi.celery worker --loglevel=INFO --concurrency=1

I then rebuilt the droplet (I think!) with these commands:  
docker compose down --remove-orphans  
docker compose up -d

It looked like it ran successfully, but uploads still aren’t working. The logs are different, though:

/opt/grampsweb# docker compose logs --tail 100 grampsweb  
grampsweb |  
grampsweb | ( **main**.py:8): Gtk-CRITICAL \*\*: 19:09:55.798: gtk\_icon\_theme\_get\_for\_screen: assertion ‘GDK\_IS\_SCREEN (screen)’ failed  
grampsweb | INFO [alembic.runtime.migration] Context impl SQLiteImpl.  
grampsweb | INFO [alembic.runtime.migration] Will assume non-transactional DDL.  
grampsweb | [2026-01-07 19:10:00 +0000] [10] [INFO] Starting gunicorn 23.0.0  
grampsweb | [2026-01-07 19:10:00 +0000] [10] [INFO] Listening at: [http://0.0.0.0:5000](http://0.0.0.0:5000) (10)  
grampsweb | [2026-01-07 19:10:00 +0000] [10] [INFO] Using worker: sync  
grampsweb | [2026-01-07 19:10:00 +0000] [11] [INFO] Booting worker with pid: 11  
grampsweb |  
grampsweb | (gunicorn:11): Gtk-CRITICAL \*\*: 19:10:03.823: gtk\_icon\_theme\_get\_for\_screen: assertion ‘GDK\_IS\_SCREEN (screen)’ failed

/opt/grampsweb# docker compose logs --tail 100 grampsweb\_celery  
grampsweb\_celery |  
grampsweb\_celery | ( **main**.py:8): Gtk-CRITICAL \*\*: 19:09:56.009: gtk\_icon\_theme\_get\_for\_screen: assertion ‘GDK\_IS\_SCREEN (screen)’ failed  
grampsweb\_celery | INFO [alembic.runtime.migration] Context impl SQLiteImpl.  
grampsweb\_celery | INFO [alembic.runtime.migration] Will assume non-transactional DDL.  
grampsweb\_celery |  
grampsweb\_celery | (celery:1): Gtk-CRITICAL \*\*: 19:10:04.383: gtk\_icon\_theme\_get\_for\_screen: assertion ‘GDK\_IS\_SCREEN (screen)’ failed  
grampsweb\_celery | /usr/local/lib/python3.11/dist-packages/celery/platforms.py:841: SecurityWarning: You’re running the worker with superuser privileges: this is  
grampsweb\_celery | absolutely not recommended!  
grampsweb\_celery |  
grampsweb\_celery | Please specify a different user using the --uid option.  
grampsweb\_celery |  
grampsweb\_celery | User information: uid=0 euid=0 gid=0 egid=0  
grampsweb\_celery |  
grampsweb\_celery | warnings.warn(SecurityWarning(ROOT\_DISCOURAGED.format(  
grampsweb\_celery |  
grampsweb\_celery | -------------- celery@d757cccc9da9 v5.6.0 (recovery)  
grampsweb\_celery | — \*\*\*\*\* -----  
grampsweb\_celery | – \*\*\*\*\*\*\* ---- Linux-5.15.0-164-generic-x86\_64-with-glibc2.36 2026-01-07 19:10:05  
grampsweb\_celery | - \*\*\* — \* —  
grampsweb\_celery | - \*\* ---------- [config]  
grampsweb\_celery | - \*\* ---------- .\> app: default:0x7f9e161d40d0 (.default.Loader)  
grampsweb\_celery | - \*\* ---------- .\> transport: redis://grampsweb\_redis:6379/0  
grampsweb\_celery | - \*\* ---------- .\> results: redis://grampsweb\_redis:6379/0  
grampsweb\_celery | - \*\*\* — \* — .\> concurrency: 1 (prefork)  
grampsweb\_celery | – \*\*\*\*\*\*\* ---- .\> task events: OFF (enable -E to monitor tasks in this worker)  
grampsweb\_celery | — \*\*\*\*\* -----  
grampsweb\_celery | -------------- [queues]  
grampsweb\_celery | .\> celery exchange=celery(direct) key=celery  
grampsweb\_celery |  
grampsweb\_celery |  
grampsweb\_celery | [tasks]  
grampsweb\_celery | . gramps\_webapi.api.tasks.check\_repair\_database  
grampsweb\_celery | . gramps\_webapi.api.tasks.delete\_objects  
grampsweb\_celery | . gramps\_webapi.api.tasks.export\_db  
grampsweb\_celery | . gramps\_webapi.api.tasks.export\_media  
grampsweb\_celery | . gramps\_webapi.api.tasks.generate\_report  
grampsweb\_celery | . gramps\_webapi.api.tasks.import\_file  
grampsweb\_celery | . gramps\_webapi.api.tasks.import\_media\_archive  
grampsweb\_celery | . gramps\_webapi.api.tasks.media\_ocr  
grampsweb\_celery | . gramps\_webapi.api.tasks.process\_chat  
grampsweb\_celery | . gramps\_webapi.api.tasks.process\_transactions  
grampsweb\_celery | . gramps\_webapi.api.tasks.search\_reindex\_full  
grampsweb\_celery | . gramps\_webapi.api.tasks.search\_reindex\_incremental  
grampsweb\_celery | . gramps\_webapi.api.tasks.send\_email\_confirm\_email  
grampsweb\_celery | . gramps\_webapi.api.tasks.send\_email\_new\_user  
grampsweb\_celery | . gramps\_webapi.api.tasks.send\_email\_reset\_password  
grampsweb\_celery | . gramps\_webapi.api.tasks.send\_telemetry\_task  
grampsweb\_celery | . gramps\_webapi.api.tasks.update\_search\_indices\_from\_transaction  
grampsweb\_celery | . gramps\_webapi.api.tasks.upgrade\_database\_schema  
grampsweb\_celery | . gramps\_webapi.api.tasks.upgrade\_undodb\_schema  
grampsweb\_celery |  
grampsweb\_celery | [2026-01-07 19:10:05,612: INFO/MainProcess] Connected to redis://grampsweb\_redis:6379/0  
grampsweb\_celery | [2026-01-07 19:10:05,616: INFO/MainProcess] mingle: searching for neighbors  
grampsweb\_celery | [2026-01-07 19:10:06,628: INFO/MainProcess] mingle: all alone  
grampsweb\_celery | [2026-01-07 19:10:06,644: INFO/MainProcess] celery@d757cccc9da9 ready.  
grampsweb\_celery | [2026-01-07 19:10:35,763: INFO/MainProcess] Task gramps\_webapi.api.tasks.import\_media\_archive[a773f1cc-0e08-456c-9eab-a1972f350656] received  
grampsweb\_celery | [2026-01-07 19:10:36,080: INFO/ForkPoolWorker-1] Task gramps\_webapi.api.tasks.import\_media\_archive[a773f1cc-0e08-456c-9eab-a1972f350656] succeeded in 0.31460663897451013s: {‘missing’: 493, ‘uploaded’: 2, ‘failures’: 0}  
grampsweb\_celery | [2026-01-07 19:11:24,507: INFO/MainProcess] Task gramps\_webapi.api.tasks.import\_media\_archive[db33404d-3bc1-4bca-acb8-82f305495f24] received  
grampsweb\_celery | [2026-01-07 19:11:25,600: INFO/ForkPoolWorker-1] Task gramps\_webapi.api.tasks.import\_media\_archive[db33404d-3bc1-4bca-acb8-82f305495f24] succeeded in 1.0913475309498608s: {‘missing’: 493, ‘uploaded’: 185, ‘failures’: 0}

I tried 2 uploads. One with 2 images in the zip and one with 185 images in it.

Any suggestions for moving forward?

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 15, 2026, 7:53pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/8 "2026-01-15T19:53:20Z")

</div>

@DavidMStraub Sorry to ping you, but hopefully the new log will help you diagnose what might be going on?

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [January 15, 2026, 8:17pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/9 "2026-01-15T20:17:39Z")

</div>

```python
 grampsweb_celery | [2026-01-07 19:11:25,600: INFO/ForkPoolWorker-1] Task gramps_webapi.api.tasks.import_media_archive[db33404d-3bc1-4bca-acb8-82f305495f24] succeeded in 1.0913475309498608s: {‘missing’: 493, ‘uploaded’: 185, ‘failures’: 0}

```

This looks like it worked.

If you still can’t see them, something about your docker volume configuration is wrong. Please share your YAML.

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 16, 2026, 6:20pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/10 "2026-01-16T18:20:44Z")

</div>

@DavidMStraub Thanks for working with me on this.

```python
services:
grampsweb: &grampsweb
container_name: grampsweb
image: 

restart: always
env_file: /root/letsencrypt.env
environment: &grampsweb-env
VIRTUAL_PORT: “5000”
GRAMPSWEB_TREE: Gramps Web
GUNICORN_NUM_WORKERS: 1
GRAMPSWEB_CELERY_CONFIG__broker_url: “redis://grampsweb_redis:6379/0”
GRAMPSWEB_CELERY_CONFIG__result_backend: “redis://grampsweb_redis:6379/0”
GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1
depends_on:
- grampsweb_redis
volumes:
- gramps_users:/app/users # persist user database
- gramps_index:/app/indexdir # persist search index
- gramps_thumb_cache:/app/thumbnail_cache # persist thumbnails
- gramps_cache:/app/cache # persist export and report caches
- gramps_secret:/app/secret # persist flask secret
- gramps_db:/root/.gramps/grampsdb # persist Gramps database
- /root/gramps_media:/app/media # persist media files
- gramps_tmp:/tmp
networks:
- proxy-tier
- default

grampsweb_celery:
<<: *grampsweb # YAML merge key copying the entire grampsweb service config
container_name: grampsweb_celery
depends_on:
- grampsweb
- grampsweb_redis
environment:
<<: *grampsweb-env # YAML merge key copying the grampsweb environment config
# overriding let’s encrypt variables since celery is not exposed
VIRTUAL_PORT: “”
VIRTUAL_HOST: “”
LETSENCRYPT_HOST: “”
LETSENCRYPT_EMAIL: “”
command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=1

grampsweb_redis:
image: 

container_name: grampsweb_redis
restart: always

proxy:
image: docker.io/nginxproxy/nginx-proxy
container_name: nginx-proxy
restart: always
ports:
- “80:80”
- “443:443”
environment:
ENABLE_IPV6: “true”
volumes:
- ./nginx_proxy.conf:/etc/nginx/conf.d/my_proxy.conf:ro
- conf:/etc/nginx/conf.d
- dhparam:/etc/nginx/dhparam
- certs:/etc/nginx/certs:ro
- vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- proxy-tier

acme-companion:
image: docker.io/nginxproxy/acme-companion
container_name: nginx-proxy-acme
restart: always
environment:
NGINX_PROXY_CONTAINER: nginx-proxy
volumes:
- certs:/etc/nginx/certs:rw
- vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy-tier
depends_on:
- proxy

volumes:
acme:
certs:
conf:
dhparam:
vhost.d:
html:
gramps_users:
gramps_index:
gramps_thumb_cache:
gramps_cache:
gramps_secret:
gramps_db:
gramps_tmp:

networks:
proxy-tier:

```

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [January 17, 2026, 8:37am UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/11 "2026-01-17T08:37:37Z")

</div>

The whitespace disappeared… apart from that I don’t see anything wrong. Anything showing up in /root/media? Would be worth `exec`-ing into the two containers (celery and grampsweb), touching a file in `/app/media`, and checking if it’s visible from the other container.

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 18, 2026, 10:55pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/12 "2026-01-18T22:55:58Z")

</div>

@DavidMStraub I’m not entirely sure how to do that. I can access the Digital Ocean console, which may not be the correct way to do what you are asking. Regardless, there are no files that I can see in root/media and none in /opt/grampsweb/media.

I’m afraid I don’t fully understand what are you are asking me to do. I don’t understand the “touching a file from the containers” part. It sounds like a permissions error?

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [January 19, 2026, 7:51am UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/13 "2026-01-19T07:51:41Z")

</div>

```python
cd /opt/grampsweb

```

```python
docker compose grampsweb bash
touch /app/media/test-grampsweb.txt
ls -l /app/media

```

```python
docker compose grampsweb_celery bash
touch /app/media/test-celery.txt
ls -l /app/media

```

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 20, 2026, 2:02pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/14 "2026-01-20T14:02:49Z")

</div>

@DavidMStraub I had to add the exec command to the docker compose line to get it to work. I think that was correct.  
Here’s the results, they seem positive to me:

`root@gramps:/opt/grampsweb# docker compose exec grampsweb bash`  
`root@0711805e0e1e:/app# touch /app/media/test-grampsweb.txt`  
`root@0711805e0e1e:/app# ls -l /app/media`  
`total 37204`  
`-rw-r–r-- 1 root root 1054442 Jan 5 19:38 1157d7a2d317aede5928f6a4f372c32a.jpg`  
`-rw-r–r-- 1 root root 716000 Dec 29 15:12 1bd0853ebfc9071fa1e1b60fffa9287c.jpg`  
`-rw-r–r-- 1 root root 656656 Dec 29 15:09 1ce52c938a389f4365093a0e0bdcea31.jpg`  
`-rw-r–r-- 1 root root 678070 Dec 29 15:10 1f2261d0847747d42737ecc13ab18cfd.jpg`  
`-rw-r–r-- 1 root root 210382 Dec 24 22:31 21dd29588ddd9e39080db07205892914.jpg`  
`-rw-r–r-- 1 root root 539608 Dec 29 17:46 25bca189cf13aa5a6cce9a7b147d55a1.jpg`  
`-rw-r–r-- 1 root root 246880 Dec 29 15:08 3ba1b10b3d7019aef2eb455ecd3f7b6d.jpg`  
`-rw-r–r-- 1 root root 99429 Dec 29 15:58 3be9c7a0622585c73da7e70659e3ef96.pdf`  
`-rw-r–r-- 1 root root 2209846 Dec 26 18:46 4dfa2f83181ac86f1654f45270171afd.jpg`  
`-rw-r–r-- 1 root root 1162443 Dec 29 17:37 61bcec57c41ad31b7f06687e7f52027a.png`  
`-rw-r–r-- 1 root root 257823 Dec 29 14:52 6b133fa45d43d09a23df78ed6ca9fde1.jpg`  
`-rw-r–r-- 1 root root 202030 Dec 29 16:00 82561e96932f3a9f6835066f2a346ecc.pdf`  
`-rw-r–r-- 1 root root 15337418 Dec 29 15:53 84bcaca166f9a575df81968fb23a6a94.pdf`  
`-rw-r–r-- 1 root root 795968 Jan 5 19:31 8c7ce353bb320a9c57dea0592ac41091.jpg`  
`-rw-r–r-- 1 root root 595376 Dec 29 16:32 8f03231f9d76140b77c85aa9cf65d36c.pdf`  
`-rw-r–r-- 1 root root 537837 Dec 29 15:11 9608f5a2c799308f5f97531cedc3dea1.jpg`  
`-rw-r–r-- 1 root root 241407 Dec 29 17:17 991187b3f19b3ba1037af10f905e25f8.jpg`  
`-rw-r–r-- 1 root root 1495270 Dec 29 16:25 a0c131a7dcb7bd33ec850dad7facaacc.jpg`  
`-rw-r–r-- 1 root root 979658 Jan 5 19:12 b41e0f74d66fcb3e5a3f9ac62d93f5d5.jpg`  
`-rw-r–r-- 1 root root 803888 Dec 29 15:09 c0aca41d8cd99d23097fe4af7bff6a46.jpg`  
`-rw-r–r-- 1 root root 432272 Dec 29 16:39 c877c8bb1682ea06df319e7b5a5e5198.pdf`  
`-rw-r–r-- 1 root root 222984 Dec 29 17:11 f4c1e821b2cd1a047dfc5adc470645e4.jpg`  
`-rw-r–r-- 1 root root 367755 Dec 29 16:09 fc21b510e9423787552138172b2d52c5.pdf`  
`-rw-r–r-- 1 root root 671049 Dec 29 15:12 fd50456a2bffe9ac2d85be1690410467.jpg`  
`-rw-r–r-- 1 root root 7530191 Dec 24 17:18 ‘Julian & Cecilia Wedding.jpg’`  
`-rw-r–r-- 1 root root 0 Jan 20 13:58 test-celery.txt`  
`-rw-r–r-- 1 root root 0 Jan 20 14:00 test-grampsweb.txt`

`exit`  
`root@gramps:/opt/grampsweb# docker compose exec grampsweb_celery bash`  
`root@d757cccc9da9:/app# touch /app/media/test-celery.txt`  
`root@d757cccc9da9:/app# ls -l /app/media`  
`total 37204`  
`-rw-r–r-- 1 root root 1054442 Jan 5 19:38 1157d7a2d317aede5928f6a4f372c32a.jpg`  
`-rw-r–r-- 1 root root 716000 Dec 29 15:12 1bd0853ebfc9071fa1e1b60fffa9287c.jpg`  
`-rw-r–r-- 1 root root 656656 Dec 29 15:09 1ce52c938a389f4365093a0e0bdcea31.jpg`  
`-rw-r–r-- 1 root root 678070 Dec 29 15:10 1f2261d0847747d42737ecc13ab18cfd.jpg`  
`-rw-r–r-- 1 root root 210382 Dec 24 22:31 21dd29588ddd9e39080db07205892914.jpg`  
`-rw-r–r-- 1 root root 539608 Dec 29 17:46 25bca189cf13aa5a6cce9a7b147d55a1.jpg`  
`-rw-r–r-- 1 root root 246880 Dec 29 15:08 3ba1b10b3d7019aef2eb455ecd3f7b6d.jpg`  
`-rw-r–r-- 1 root root 99429 Dec 29 15:58 3be9c7a0622585c73da7e70659e3ef96.pdf`  
`-rw-r–r-- 1 root root 2209846 Dec 26 18:46 4dfa2f83181ac86f1654f45270171afd.jpg`  
`-rw-r–r-- 1 root root 1162443 Dec 29 17:37 61bcec57c41ad31b7f06687e7f52027a.png`  
`-rw-r–r-- 1 root root 257823 Dec 29 14:52 6b133fa45d43d09a23df78ed6ca9fde1.jpg`  
`-rw-r–r-- 1 root root 202030 Dec 29 16:00 82561e96932f3a9f6835066f2a346ecc.pdf`  
`-rw-r–r-- 1 root root 15337418 Dec 29 15:53 84bcaca166f9a575df81968fb23a6a94.pdf`  
`-rw-r–r-- 1 root root 795968 Jan 5 19:31 8c7ce353bb320a9c57dea0592ac41091.jpg`  
`-rw-r–r-- 1 root root 595376 Dec 29 16:32 8f03231f9d76140b77c85aa9cf65d36c.pdf`  
`-rw-r–r-- 1 root root 537837 Dec 29 15:11 9608f5a2c799308f5f97531cedc3dea1.jpg`  
`-rw-r–r-- 1 root root 241407 Dec 29 17:17 991187b3f19b3ba1037af10f905e25f8.jpg`  
`-rw-r–r-- 1 root root 1495270 Dec 29 16:25 a0c131a7dcb7bd33ec850dad7facaacc.jpg`  
`-rw-r–r-- 1 root root 979658 Jan 5 19:12 b41e0f74d66fcb3e5a3f9ac62d93f5d5.jpg`  
`-rw-r–r-- 1 root root 803888 Dec 29 15:09 c0aca41d8cd99d23097fe4af7bff6a46.jpg`  
`-rw-r–r-- 1 root root 432272 Dec 29 16:39 c877c8bb1682ea06df319e7b5a5e5198.pdf`  
`-rw-r–r-- 1 root root 222984 Dec 29 17:11 f4c1e821b2cd1a047dfc5adc470645e4.jpg`  
`-rw-r–r-- 1 root root 367755 Dec 29 16:09 fc21b510e9423787552138172b2d52c5.pdf`  
`-rw-r–r-- 1 root root 671049 Dec 29 15:12 fd50456a2bffe9ac2d85be1690410467.jpg`  
`-rw-r–r-- 1 root root 7530191 Dec 24 17:18 ‘Julian & Cecilia Wedding.jpg’`  
`-rw-r–r-- 1 root root 0 Jan 20 13:58 test-celery.txt`  
`-rw-r–r-- 1 root root 0 Jan 20 13:53 test-grampsweb.txt`

However, I think that these files may be things I have manually added. I know ‘Julian & Cecilia Wedding.jpg’ is.

What does this tell you?

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [January 20, 2026, 2:20pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/15 "2026-01-20T14:20:28Z")

</div>

Thanks.

It shows that the docker volume configuration is fine and the directory is writeable. Good! C

All those files in there with MD5 file name are files created by Gramps Web. Can you confirm you have a couple of images/PDFs that show correctly in the web interface?

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 20, 2026, 2:32pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/16 "2026-01-20T14:32:54Z")

</div>

Yes There are some that show up, but only the ones that I have added manually.

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 20, 2026, 2:39pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/17 "2026-01-20T14:39:25Z")

</div>

Here’s an interesting thing, though.

Items I have added do not show up in the thumbnail view under Object Lists:

Notice the bottom left item, “Julian & Cecilia Wedding”

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/f/ffc121c2c55478bbd2dc59f3dab2fc6437a419ff.png)

Once I click into the record, it shows up:

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/2/22d4d23e8cb0e5131b332ce6cbdd76b3a33577d2.jpeg)

I believe this particular image record existed in my original import into GrampsWeb from Gramps, but it had no checksum, so I was able to “replace” with the file, but the behavior occurs with items I have added after the initial import.

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 23, 2026, 2:19pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/18 "2026-01-23T14:19:31Z")

</div>

@DavidMStraub What’s the next troubleshooting step here?

---

<div class="post-metadata">

**Author:** ![DavidMStraub](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/davidmstraub/32/7_2.png) [@DavidMStraub](https://gramps.discourse.group/u/DavidMStraub)\
**Post date:** [January 23, 2026, 8:14pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/19 "2026-01-23T20:14:24Z")

</div>

This is all very confusing, and honestly I have no idea what you mean with

> I believe this particular image record existed in my original import into GrampsWeb from Gramps, but it had no checksum, so I was able to “replace” with the file, but the behavior occurs with items I have added after the initial import.

Your logs show you delete stuff, import stuff again, then upload media, but I still haven’t understood what the actual problem is. Uploading the ZIP, replacing actual files?

I suggest to go slowly, one by one.

Take a given state of your Gramps database. Please don’t reimport, delete, or do other bulk edits of your database while we are debugging, because it’s confusing. Please report:

- Complete version info
- Current state of “Media file status” in settings
- Go to export and export all media files in Gramps Web. Please report how many files the resulting ZIP file contains.

If there are any errors in this process, please check

- the grampsweb container logs
- the celery logs
- the browser network tab

and then please **only** share the log entries that are related to the error (that is, occurred at the same time as the error happened).

---

<div class="post-metadata">

**Author:** ![woynowski](https://avatars.discourse-cdn.com/v4/letter/w/3ab097/32.png) [@woynowski](https://gramps.discourse.group/u/woynowski)\
**Post date:** [January 23, 2026, 9:32pm UTC](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990/20 "2026-01-23T21:32:19Z")

</div>

@DavidMStraub

> [@DavidMStraub](#):
>
> I still haven’t understood what the actual problem is. Uploading the ZIP, replacing actual files?

The problem is uploading a ZIP. it doesn’t process the files.

A secondary problem is that when I try to manually replacing the files through the web interface, ityields an error that says the replacement file has the same checksum as the media object and cannot be replaced.

Sorry about the length of the logs. I was having a hard time parsing them. I have tried several times to re-import the files while attempting to troubleshoot myself.

Is there a way I can wipe the logs and start over? I feel that would make them easier to parse.

[Next page](https://gramps.discourse.group/t/gramps-web-media-import-not-matching-checksums/8990.md?page=2)
