“Resources that are not attached to any note will be automatically deleted in accordance to the Note History settings”, according to https:// joplinapp . org /help/apps/attachments
“If a resource is associated with any note, is_associated is 1, it it’s not is_associated is 0. From the moment is_associated is 0, a timer starts and after x days the resource is deleted”, as described in https:// discourse . joplinapp . org /t/is-there-a-way-to-force-joplin-to-run-the-unused-resources-cleanup/3758/23
When one clips a web-page or its fragment using Web Clipper, some irrelevant ad banners (pictures) end up in the newly created note. One then manually deletes such pictures, usually a few per note.
Do such attachments (pictures), no longer associated with any note, still get automatically deleted someday, if Note History feature is disabled, and therefore a cleanup routine that deletes old notes from the Note History may not be required to run?
No. I've always had history turned off and still have images floating around that have been there for years. I have to delete them manually and clipping a Web page with dozens of images can make for a fairly tedious task. Delete image, scroll to next one, delete that, repeat.
From local testing, resources do seem to be automatically deleted when note history is disabled (though as per @HarSel's comment perhaps there's a bug that causes them not to be deleted in some cases).
The amount of time they're kept still seems to be based on the Keep note history for (days) setting (even when note history is off).
Summary of testing:
Started Joplin 2.14.9 (dev mode)
Created a note
Attached an image
Disabled note history
Set "keep note history for (days)" to 1
Copied the resource ID (eb1119675151422eb060c62ed84c8bc1)
Closed Joplin
Re-opened Joplin
Opened the development tools and searched for ResourceService::deleteOrphanResources
Waited about 30 seconds
Saw ResourceService::deleteOrphanResources with no resources
Closed Joplin
Set the system date/time to Jan 30 2024 @ 2:40 PM (several weeks in the future)
DANGER: Avoid doing this if Joplin syncs to anything or has notes you care about — Joplin seems to use timestamps for sync, so this may lead to sync issues/data loss.
Deleted the resource from the note and closed Joplin
Set the date to February 29th and re-opened Joplin
Opened the development tools and searched for ResourceService::deleteOrphanResources
Waited roughly 30 seconds
Saw ResourceService::deleteOrphanResources: eb1119675151422eb060c62ed84c8bc1 in the log
Checked "Note attachments" for the resource (it's gone!)
As such, setting Keep note history for (days) to 1 and disabling note history should delete unlinked attachments after roughly one day.
Just before resources are deleted, a line starting with ResourceService::deleteOrphanResources: should be added to the log that includes which resources were deleted.
Observe that the code references the revisionService.ttlDays setting (which seems to have a minimum value of 1, despite being changeable to 0 in settings).
Whenever I add a new device (phone/tablet etc.) there are 3 images that get created as part of the new "Welcome" notebook on that device. These get synced to the target even if the "Welcome" notebook was deleted before the sync. History on my PC (and the mobile) is always disabled yet these 3 images are permanent until I go in via "Note Attachments" and delete them manually. History setting makes no difference, those are never removed automatically nor are images I myself attached to notes and then deleted the notes. Images seem to remain until I do an export-uninstall-delete-install-import cycle. Could partly explain why I have only 2600 notes but must fetch 35,000 resources when I sync a new device for the first time.
I have tried this both ways, setting history to 1 day with history on and the same with history off. Images are still there weeks later no matter the setting. I have to do an export-import routine every month to keep the clutter under control.
One possibility is that Joplin deletes resources locally then re-downloads them from the sync target.
Checking the log[1] for lines starting with ResourceService::deleteOrphanResources: (then followed by a resource ID) could help show whether Joplin is trying to delete resources at all.
~/.config/joplin-desktop/log.txt on Linux and MacOS, I think C:\Users\UserName\.config\joplin-desktop\log.txt on Windows. ↩︎
I searched the %userprofile%\.config\joplin-desktop\log.txt for “ResourceService::deleteOrphanResources”.
It seems it is indeed irrelevant whether “Enable note history” checkbox is turned on or off, because I have always had it turned off.
Indeed, what matters is the value of “Keep note history for (days)”.
When I set it from “90” (default value) to “0”, upon next launch Joplin detected 600+ orphaned resources and deleted them.
As I have been using Joplin for less than 90 days, no orphaned resources were deleted via “ResourceService::deleteOrphanResources” procedure until I lowered the threshold - there had been many identical empty log entries:
I first set it back to the 90 day default and waited a few days. I identified 6 files I could be sure were orphans (2 each of AllClients.png, SubNotebooks.png and WebClipper.png) and reset the history back down to 1 day. After 48 hours I checked again and they were still there so I set history back down to zero and waited two days until a few minutes ago. Those files are still there.
Perhaps these are considered "system" files and are thus untouchable or the note history length has no effect. Since I have never, in years and years, seen these orphaned resources automatically deleted I assumed the "Keep note history" to be a less than effective method of reducing the clutter and relied upon the manual method of exporting everything, wiping all traces of Joplin everywhere, importing everything and re-syncing 8 devices, a job that usually takes a few days.