-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
feat: original-sized previews for non-web-friendly images #14446
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
f2b631a
to
54b91b4
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the PR! I mostly looked at the server code, where I think it needs some more polishing.
Re: caching, this also affects the case where the user zooms in and no extracted image exists, right? It will load the preview again.
076d59d
to
a7a9b4d
Compare
a7a9b4d
to
34592b3
Compare
any more comments from maintainers to get this merged, so that I can continue with previews of other images? |
@eligao no rush here |
I think we should wait until we're done with hot fixes for the current release. |
For a DNG image with a resolution of 5376x3956 and 41.3MiB in size, the following variants are generated using the default settings:
These generated variants seem larger than expected and don't match the configured settings, with the preview and original being identical. It's also strange that the resolution has slightly changed. |
nice catch, the file sizes are indeed wrong, let me fix that and add checks to tests. |
Hi again @eligao! We've been talking about the PR and think there are a few changes it'll need for it to be merge-able.
|
ebcfe9c
to
e22a123
Compare
8d43411
to
4cee0c7
Compare
Just a heads up that I will be away for the next two weeks and won't be able to test this until I'm back. But feel free to continue working on it! I'm happy for it to be merged once the bugs are fixed and someone can confirm that it works as expected. |
Hey @eligao, just checking in! Were you able to take a look at the issues raised above? Is there anything I can do to help bring this PR to the finish line? |
@mertalev thanks for checking in, sorry I've been busy recently but I still remember this PR. Let me update the branch and see if I can fix the small issues you mentioned above :) |
@mertalev I've updated the branch and did some small fixes and tests:
|
Nice! I'll do some testing with it tomorrow and see if we can get this merged :) |
@mertalev just checking in, any further suggestions for this PR? 👀 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR works as expected, tested on web with embedded preview enabled and disabled and format set to WebP and JPEG. Disabling the full-size feature and regenerating deletes both the file and the DB entry. Requesting a full-size image where there is none redirects to the preview and uses the cached preview (tested on Chrome).
I made two tweaks to the PR:
|
@mertalev thanks for the tweaks :)
|
@danieldietzler any more suggestions before we can get this merged? 👀 |
We're planning to include it in 1.131.0, just needs testing from @alextran1502 |
…#14446) * feat(server): extract full-size previews from RAW images * feat(web): load fullsize preview for RAW images when zoomed in * refactor: tweaks for code review * refactor: rename "converted" preview/assets to "fullsize" * feat(web/server): fullsize preview for non-web-friendly images * feat: tweaks for code review * feat(server): require ASSET_DOWNLOAD premission for fullsize previews * test: fix types and interfaces * chore: gen open-api * feat(server): keep only essential exif in fullsize preview * chore: regen openapi * test: revert unnecessary timeout * feat: move full-size preview config to standalone entry * feat(i18n): update en texts * fix: don't return fullsizePath when disabled * test: full-size previews * test(web): full-size previews * chore: make open-api * feat(server): redirect to preview/original URL when fullsize thumbnail not available * fix(server): delete fullsize preview image on thumbnail regen after fullsize preview turned off * refactor(server): AssetRepository.deleteFiles with Kysely * fix(server): type of MediaRepository.writeExif * minor simplification * minor styling changes and condensed wording * simplify * chore: reuild open-api * test(server): fix media.service tests * test(web): fix photo-viewer test * fix(server): use fullsize image when requested * fix file path extension * formatting * use fullsize when zooming back out or when "display original photos" is enabled * simplify condition --------- Co-authored-by: mertalev <[email protected]>
…#14446) * feat(server): extract full-size previews from RAW images * feat(web): load fullsize preview for RAW images when zoomed in * refactor: tweaks for code review * refactor: rename "converted" preview/assets to "fullsize" * feat(web/server): fullsize preview for non-web-friendly images * feat: tweaks for code review * feat(server): require ASSET_DOWNLOAD premission for fullsize previews * test: fix types and interfaces * chore: gen open-api * feat(server): keep only essential exif in fullsize preview * chore: regen openapi * test: revert unnecessary timeout * feat: move full-size preview config to standalone entry * feat(i18n): update en texts * fix: don't return fullsizePath when disabled * test: full-size previews * test(web): full-size previews * chore: make open-api * feat(server): redirect to preview/original URL when fullsize thumbnail not available * fix(server): delete fullsize preview image on thumbnail regen after fullsize preview turned off * refactor(server): AssetRepository.deleteFiles with Kysely * fix(server): type of MediaRepository.writeExif * minor simplification * minor styling changes and condensed wording * simplify * chore: reuild open-api * test(server): fix media.service tests * test(web): fix photo-viewer test * fix(server): use fullsize image when requested * fix file path extension * formatting * use fullsize when zooming back out or when "display original photos" is enabled * simplify condition --------- Co-authored-by: mertalev <[email protected]>
Implementation details:
Server: extract and keep the original-sized preview image for non-web-friendly images
image.fullsize
image.fullsize.enabled
: toggles original-sized previewsimage.extractEmbedded
is on, it will attempt to extract and use the JPG preview from RAW images instead of converting from RAW.AssetFileType.FULLSIZE
file.OpenAPI: a new
AssetMediaSize.FULLSIZE
size is available under theviewThumbnail
APIAssetFileType.FULLSIZE
file when availableAssetFileSize.PREVIEW
FULLSIZE
preview is not yet generated.Web: photo-viewer
AssetMediaSize.FULLSIZE
preview via theviewThumbnail
APISome future ideas:
FULLSIZE
image inthe mobile client. Unfortunately I'm not familiar with flutter yet.