smilyorg / photofield Goto Github PK
View Code? Open in Web Editor NEWExperimental fast photo viewer.
License: MIT License
Experimental fast photo viewer.
License: MIT License
Is your feature request related to a problem? Please describe.
Many background loads are currently not indicated and errors are also not reported, making it confusing whether there's a problem, or it's just slow, or what.
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
Describe the bug
Layout "wall" only produces white screen. Header with album name is still rendered.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Images are layouted as wall of pictures.
Desktop (please complete the following information):
Additional context
Chromium console shows
index.fb736cc0.js:4 [Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive. See https://www.ch40mestatus.qjz9zk/feature/5745543795965952
index.fb736cc0.js:47 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive. See https://www.ch40mestatus.qjz9zk/feature/5745543795965952
index.fb736cc0.js:29 Map not initialized yet, setting pending view {x: 0, y: 0, w: 1920, h: 0}
index.fb736cc0.js:29 Map not initialized yet, setting pending view {x: 0, y: 0, w: 1920, h: 1083}
Browser network analysis shows that lots of files like /api/scenes/8NDGBbzTGL/tiles?tile_size=512&zoom=9&background_color=%23000000&x=257&y=0
are loaded, all http 200
, so OK.
PF shows (taken from syslog because running as a service)
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 scene loading 2019
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 list infos sqlite 0 ms
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 list infos 0 ms
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 layout wall width 1920 cols 12
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 layout wall image 218.181818 174.545455
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 layout 0 ms
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 scene load 2019 1 ms
Aug 5 18:43:23 server photofield[166612]: 2023/08/05 18:43:23 photos 146, scene 1920 x 198
Thanks for photofield - it looks really great.
Nevertheless, I got a feature request: I would like to select multiple photos and remove them from disk.
Is your feature request related to a problem? Please describe.
Sorting by Faces is an awesome (and complicated) feature, usually done via machine learning algorithms in PhotoView, Photoprism, etc. However, there is an easier way...
Describe the solution you'd like
Google Picasa uses machine learning to recognise faces in photos, but the actual face tagging is done via either EXIF metadata with the person's name (if I recall correctly), or via multiple .picasa.ini
files that list hashes matching to position on the photo (?) and a name, for example, a folder full of pictures of my face:
[Contacts2]
caefa70bc4c5dad2=Darren;;
[Profile Picture 3.jpg]
faces=rect64(1ee22a22b94da514),caefa70bc4c5dad2
backuphash=16963
[Profile Picture 3 medium.jpg]
faces=rect64(1e830830b94dc1dc),caefa70bc4c5dad2
backuphash=16963
[Profile Picture 1.JPG]
faces=rect64(34000aabbb99e3bb),caefa70bc4c5dad2
backuphash=1120
[Profile Picture 2.JPG]
faces=rect64(6000000de66ffff),caefa70bc4c5dad2
backuphash=37025
[admin.jpg]
faces=rect64(1e1407aeb999c1eb),caefa70bc4c5dad2
backuphash=64588
A "quick" way to add face recognition to Photofield, without implementing actual recognition models and related complications, would be to make it check for .picasa.ini
and name metadata already present and map a People view from those. I don't know how useful this would be in the long term, but it was a silly idea I had of outsourcing the facial recognition to already-existing tools and just using what they generate. e.g. I believe Digikam uses name EXIF metadata by default (what Picasa calls Tools
>> Options
>> Name tags
>> Store name tags in photo
)
Currently, the log displayed by photofield in the console of the docker environment is fairly scant, almost useless when something does not work.
Add more information to the log, such as:
configuration.yaml
file if anyIs your feature request related to a problem? Please describe.
Currently AVIF images are not supported.
Describe the solution you'd like
Transparent support for AVIF.
Describe alternatives you've considered
Not supporting it? ๐
Additional context
Sample images were kindly provided by houseoflightshadow
Self-explanatory!
Describe the bug
The attached (ZIP) images display as big red squares in Photofield v0.7.0
To Reproduce
Steps to reproduce the behavior:
Load up photofield and get it to process these photos (JPG, PNG, wallpapers from Telegram, sourced from here)
Telegram wallpapers.zip. At least on Windows, running v0.7.0 plain (no exiftool or anything) they display as big red squares.
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Is your feature request related to a problem? Please describe.
Current image sources (native Go, JPEG thumbnails, FFmpeg, ...) do not support all the various popular formats out there, the biggest one being HEIC, which is widely used for iPhone photos (see #52).
Describe the solution you'd like
Add optional support for decoding images with imagemagick. There is a mostly complete implementation already in main...imagemagick, but I wasn't super happy with usability yet, so it might need more work?
Describe alternatives you've considered
https://www.libvips.org/ might be another good one that supports many formats, including HEIC.
Additional context
N/A
Is your feature request related to a problem? Please describe.
Would you kind updating your feature set here?
https://github.com/meichthys/foss_photo_libraries
I try to keep up with all the changes, but it helps greatly if the devs of each project help out since they know their projects so well.
Is your feature request related to a problem? Please describe.
Greta job! Any way to re use the thumbnail generatesi by photoprism? They are saved in the filesys but the name and directory are not related to the original image name - Diccole
Describe the solution you'd like
Figure out the feasibility of yoinking thumbnails from PhotoPrism. It might be tricky if database access is required.
I also noticed it doesn't seem to pay attention to nested folders? Didn't notice that before... e.g. I have the above wallpapers organised as:
/Wallpapers/iPhone Wallpapers/Telegram wallpapers/wall.jpg
(where /
is Photofield's root).
I kinda expected, when (in Album view) I went into iPhone Wallpapers/
to see the photos in that folder, headed up by another Album called Telegram wallpapers
. Instead I saw a flat display of every photo in every folder in iPhone Wallpapers/
, mixed with photos that are just there in the folder (which I logically expected only when flattening things to view as a Timeline or Wall).
Album layout:
Timeline layout:
<h2>
= Year/Month, <h3>
= Day/Date, order invisibly by Time?Wall layout:
Default layout:
Album layout:
<h2>
is Day, Month [numerical date], <h3>
is TimeTimeline layout:
Wall layout:
Default:
EDIT: Moving this comment to new issue, as it's kinda separate
Originally posted by @Darthagnon in #44 (comment)
Probably a regression in #17. While resizing it should use the center photo as an anchor and resize around it.
Reported by lord-carlos
Is your feature request related to a problem? Please describe.
It's not clear that it's even working as intended as the zoomed in view is very bare right now.
Describe the solution you'd like
A few things would make it better
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
Very cool! Do you plan to write something about the implementation or release a package, that other software devs can import? Would love to have something similar in LibrePhotos. - DerNeuere
@derneuere hi! I opened an issue here so I don't forget it :)
An idea would be to add a layout that is essentially a completely zoomable map with every photo drawn on it directly.
Pick a photo and have it be constructed from all your other photos. Have each pixel be its own photo? Or maybe even do it recursively forever? But there lies madness.
Is your feature request related to a problem? Please describe.
README.md is getting out of hand. Would be nice to have actual proper "product" docs, e.g. mkdocs.
Describe the solution you'd like
https://github.com/SmilyOrg/photofield/tree/docs has a WIP of what it could look like.
Describe alternatives you've considered
Godoc, but it's very library-focused. It would be good to have docs on how to use it, explaining the different configuration options in more detail, how to install it in different ways, etc.
All of the long term Nextcloud users suffer with a terribly broken, poor performance photo gallery app. An easy integration Nextcloud App for Photofield would be a huge boon to the community. I'm not aware of any other project for photos that has done that yet. - adx442
Is your feature request related to a problem? Please describe.
Depending on image metadata, an image may or may not be oriented properly.
Describe the solution you'd like
Having some basic image manipulation in the web UI would be a nice. Having those edits saved or reflected in export would be a plus.
Additional context
Orientation/rotation is handling in the goexif
Describe the bug
While image contents are loaded the scene seems to never end loading
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Smartphone (please complete the following information):
Additional context
Add any other context about the problem here.
You can set up a quick features tutorial with 2-3 steps on screen. Lots of commercial web apps use this tactic to reduces the clutter but still inform of features. Just don't overdo it or people won't remember / will just skip it. - H_Q_
Describe the bug
The view with collections is loading slowly sometimes, not sure why. It might be doing a SELECT counting all the files for each collection, which is not something that's even shown, which would be bad...
To Reproduce
Usually shows up on a slower HDD NAS after some idle time.
Expected behavior
Home page loads instantly.
Describe the bug
Whenever I try to open an auto-generated collection (my Messenger photos and videos), the app crashes.
Screenshots
Attaching the logs from the crash
2022/09/10 17:38:53 load meta 25% completed, 499 loaded, 1444 pending, 4.50 / sec
2022/09/10 17:38:55 load meta 26% completed, 511 loaded, 1432 pending, 5.66 / sec
2022/09/10 17:38:56 load color 4% completed, 159 loaded, 3751 pending, 1.25 / sec
2022/09/10 17:38:57 load meta 27% completed, 527 loaded, 1416 pending, 7.89 / sec
panic: Unable to compute cost, unsupported image format *image.Paletted
goroutine 38 [running]:
photofield/internal/image.newImageCache.func1({0xcaa940, 0xc01209d770})
/home/runner/work/photofield/photofield/internal/image/cache.go:100 +0x285
github.com/dgraph-io/ristretto.(*Cache).processItems(0xc00023ac00)
/home/runner/go/pkg/mod/github.com/dgraph-io/[email protected]/cache.go:303 +0x109
created by github.com/dgraph-io/ristretto.NewCache
/home/runner/go/pkg/mod/github.com/dgraph-io/[email protected]/cache.go:162 +0x347
Additional context
This particular folder contains some corrupted jpeg files and I know for a fact that some apps have trouble crawling them. I believe Photofield can't handle them and crashes.
Also hey, H_Q_ here.
Is your feature request related to a problem? Please describe.
It's annoying to not be able to easily publish a "next" release from a pull request for testing, so I usually just merge and ๐คทโโ๏ธ
Describe the solution you'd like
Each PR is built and published as a "next" release via goreleaser. See goreleaser/goreleaser#1534
Describe alternatives you've considered
๐คทโโ๏ธ
Additional context
Make sure it's not possible to create pwn requests
Describe the bug
If you hover over photos, the cursor remains an arrow, when it should be a hand instead, indicating that you can click on them to zoom in.
Additional context
This is because the photos don't actually exist as individual objects, making this a non-trivial functionality to add,
See also user reports #1, #2, #3
A few possible solutions:
Is your feature request related to a problem? Please describe.
The current search implementation is not discoverable and has lots of limitations, see #65 (comment). It's not possible to combine search terms or have expressive search queries.
Describe the solution you'd like
Describe alternatives you've considered
Not doing it or making it simpler ๐
Additional context
Add any other context or screenshots about the feature request here.
Describe the bug
After scrolling for a while in a large album, I reach pixellated thumbnails, then blurred thumbnails, then just a blur. The blur no longer responds to clicks or loads.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Memory to be cleared of earlier thumbnails and the new thumbnails to be loaded while scrolling, rather than stopping at some point.
Screenshots
of course, once I try and get a screenshot, I couldn't replicate. Maybe click-zooming clears memory and gets things working again?
Desktop (please complete the following information):
Smartphone (please complete the following information):
N/A
Is your feature request related to a problem? Please describe.
From some conversations, it seems like if you run the Docker image on something like a M1/M2/M3 Mac, it runs it some sort of an x86 emulation mode, making it super slow.
Describe the solution you'd like
If the Docker image contained an arm build, it would probably work better. But I'm not sure how to do that and I don't have a Mac to test. ๐คทโโ๏ธ
Describe the bug
When using docker-compose, the stack is unable to open the configuration.yaml
file and, as a result, does not publish photos
To Reproduce
Steps to reproduce the behavior:
configuration.yaml
file (following the defaults in the documentation) into the local directory bound to the /app/data
directory in the stack777
access rights to the file (not secure, but for now I want to eliminate any access right issues)docker-compose up
or, in my case, use Portainer2021/11/07 12:40:51 unable to open configuration.yaml, using defaults (open configuration.yaml: no such file or directory)
I checked within the container for the configuration.yaml
file: it is indeed there with the right content.
Expected behavior
The container should publish photos on the chosen port.
Environment
Debian 10
This is about the strip viewer added in #47. The general idea is good - common left-right swiping when zoomed in, shown on a black background. However, the implementation leaves a bit to be desired.
Potentially go back to the previous solution, where the existing views (scroll viewer, map viewer) are zoomed into directly, reusing them to switch between photos. Here are some problems from last time and how they can be addressed this time.
Is your feature request related to a problem? Please describe.
RAW files are completely unsupported right now so it's not possible to see them at all.
Describe the solution you'd like
Transparent support for common formats so that they just look like any other photo. Depending on how long it takes to convert, this might need thumbnail generation (issue TBD). I believe often they are also paired with JPEGs, which would be nice to take into account.
Additional context
Can be a deal breaker for many if not supported, see H_Q_'s comment
This is the error I found in logs of the docker container while trying to load a wall of ~95k photos.
Below is the whole stack trace:
photofield-photofield-1 | panic: determinant of affine transformation matrix is zero
photofield-photofield-1 |
photofield-photofield-1 | -> runtime/debug.Stack
photofield-photofield-1 | -> /opt/hostedtoolcache/go/1.19.7/x64/src/runtime/debug/stack.go:24
photofield-photofield-1 |
photofield-photofield-1 | github.com/go-chi/chi/v5/middleware.PrintPrettyStack
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:44
photofield-photofield-1 | github.com/go-chi/chi/v5/middleware.Recoverer.func1.1
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:30
photofield-photofield-1 | panic
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/runtime/panic.go:884
photofield-photofield-1 | github.com/tdewolff/canvas.Matrix.Inv
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/tdewolff/[email protected]/util.go:404
photofield-photofield-1 | photofield/internal/render.(*Scene).Draw
photofield-photofield-1 | /home/runner/work/photofield/photofield/internal/render/scene.go:116
photofield-photofield-1 | main.drawTile
photofield-photofield-1 | /home/runner/work/photofield/photofield/main.go:216
photofield-photofield-1 | main.GetScenesSceneIdTilesImpl
photofield-photofield-1 | /home/runner/work/photofield/photofield/main.go:715
photofield-photofield-1 | main.(*Api).GetScenesSceneIdTiles
photofield-photofield-1 | /home/runner/work/photofield/photofield/main.go:627
photofield-photofield-1 | photofield/internal/openapi.(*ServerInterfaceWrapper).GetScenesSceneIdTiles.func1
photofield-photofield-1 | /home/runner/work/photofield/photofield/internal/openapi/api.gen.go:892
photofield-photofield-1 | photofield/internal/openapi.(*ServerInterfaceWrapper).GetScenesSceneIdTiles
photofield-photofield-1 | /home/runner/work/photofield/photofield/internal/openapi/api.gen.go:899
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).routeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:442
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).ServeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).Mount.func1
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:314
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).routeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:442
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).ServeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).Mount.func1
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:314
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).routeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:442
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5/middleware.Recoverer.func1
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | main.instrumentationMiddleware.func1
photofield-photofield-1 | /home/runner/work/photofield/photofield/main.go:114
photofield-photofield-1 | net/http.HandlerFunc.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2109
photofield-photofield-1 | github.com/go-chi/chi/v5.(*Mux).ServeHTTP
photofield-photofield-1 | /home/runner/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88
photofield-photofield-1 | net/http.serverHandler.ServeHTTP
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:2947
photofield-photofield-1 | net/http.(*conn).serve
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:1991
photofield-photofield-1 | created by net/http.(*Server).Serve
photofield-photofield-1 | /opt/hostedtoolcache/go/1.19.7/x64/src/net/http/server.go:3102
Maybe it's just to much photos, but I wanted to experiment with it and see if it would be possible.
Also I must say, it's a great project, I hope to see it grow into something even more powerful!
Describe the bug
There are various ways to refresh various "caches", e.g. rescanning, reindexing, refreshing the page, refreshing the layout, etc. It's been like this due to some implementation difficulties and for debugging, but it's just dumb.
To Reproduce
Various caches fail in various ways.
Expected behavior
Ideally the user should care exactly 0% about this, all of it is just a workaround for lacking implementation. However realistically, it's hard to get rid of all of the "refresh buttons" without a lot of effort, so here's a ranked list of which buttons should really not even exist and which ones are common enough to be acceptable for some more time.
Refresh layout. Very dumb and should not exist. This should be handled by tracking all the dependencies and their staleness and automatically refreshing stale layouts.
Reindexing metadata/colors/etc. Somewhat dumb and usually not needed already, but could be improved. Mostly used when new features are added that aren't picked up automatically.
Rescanning files. Somewhat less egregious as the two examples above. Should be solved by #73, but implementation is tricky.
Reloading the page for updated. Updating generally doesn't even need a reload, but it's usually foiled by the three points above, so it's the least urgent to fix.
Having an in-depth, but comprehensive (blog post?) about what went into making this fast would
Is your feature request related to a problem? Please describe.
It's not possible to control the video right now.
Describe the solution you'd like
Make it possible to control the video, but also keeping the functionality of being able to freely move around the space. Perhaps only restrict movement for the control bar part of the video player?
Additional context
See reddit thread
Describe how to reproduce the bug
Click on the top-left Hamburger Menu on PC, and there is no way to close the menu. Page must be reloaded. (Similar with settings icon, but at least that can be closed by clicking on it again).
Expected behavior
Clicking off the Hamburger Menu should close it. Likewise, clicking off the Settings icon should (maybe?) close the settings menu. What about combining the settings menu and the hamburger menu?
Desktop (please complete the following information):
Smartphone (please complete the following information):
N/A
Is your feature request related to a problem? Please describe.
Actually using the app in day-to-day life is not a great experience. You have to rescan all the time, which can take forever. If you haven't rescanned in a while, the newly added photos can also take minutes to hours to finish indexing. Additionally, there are a bunch of caches that aren't invalidated when scanning, even if you refresh the page, which seems broken and is very annoying.
Describe the solution you'd like
Describe alternatives you've considered
Improving the caching part without adding watch.
Additional context
Add any other context or screenshots about the feature request here.
Describe the bug
When trying to start the application first time in windows 10 it ended up with panic: no migration
. Do I need to configure something? After start I have a new 12k sized file called photofield.cache.db
in the directory.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Successful start.
Screenshots
PS C:\Users\Downloads\photofield_0.3.0_Windows_x86_64> .\photofield.exe
2022/06/14 17:19:22 photofield 0.3.0
2022/06/14 17:19:22 unable to open configuration.yaml, using defaults (open configuration.yaml: The system cannot find the file specified.)
2022/06/14 17:19:22 unable to use exiftool, defaulting to goexif - no video metadata support (Could not create StayOpen: Failed starting exiftool in stay_open mode: exec: "exiftool": executable file not found in %PATH%)
panic: no migration
goroutine 1 [running]:
photofield/internal/image.(*Database).migrate(0xc00015dd40, {0xc0000d77b8})
/home/runner/work/photofield/photofield/internal/image/database.go:138 +0x295
photofield/internal/image.NewDatabase({0xc000132648, 0x13}, {0xd19e99})
/home/runner/work/photofield/photofield/internal/image/database.go:90 +0x6b
photofield/internal/image.NewSource({{0xc000132648, 0x13}, 0x4, 0x0, 0x8, 0x4, {0xc00015d7c0, 0x4, 0x4}, {0xc0001473a0, ...}, ...}, ...)
/home/runner/work/photofield/photofield/internal/image/source.go:85 +0xe5
main.main()
/home/runner/work/photofield/photofield/main.go:937 +0x5df
Desktop (please complete the following information):
Smartphone (please complete the following information):
Additional context
After loading my library, I noticed that theres a lot of dark images from a few days. It turns out I was on a trip and I was taking photos in RAW, so DNG files from my Pixel4a.
This is what the image looks like in the browser:
This is what it should look like:
Example image:
PXL_.tar.gz
I'm running it with docker-compose.
You seem to have mentioned in readme that you plan to support it later.
No user accounts. Not the focus right now. You can define separate collections for separate users based on the directory structure, but there is no authentication or authorization support.
Would it be possible to add basic support for admin only account. Probably in configuration.yml
password: "some_hashed_password"
collections:
.....
.....
Describe the bug
Testing on localhost, I found that I had some trouble cycling through photos with the arrow keys when the aspect ratio changed. Here's the photos I was testing with; I would start at the beginning, press Right
Right
Right
[...] and then I couldn't cycle from the 2nd to last (black and white cartoon) on to the last photo (stars over beach). Cycling left, I had no problems, despite identical changes in aspect ratio.
Expected behavior
Should be able to cycle with arrow keys without it randomly stopping? Unknown cause, see above for the sample photos.
Desktop (please complete the following information):
Smartphone (please complete the following information):
N/A
Describe the bug
Getting an SQLlite syntax error on first run. Executing the precompiled binary for arm64v8.
panic: sqlite: prepare "\n\tSELECT COUNT(id)\n\tFROM infos\n\tWHERE path_prefix_id IN (\n\t\tSELECT id\n\t\tFROM prefix\n\t\tWHERE\n\t\n\t\t)\n\t": SQL logic error: near ")": syntax error
goroutine 1 [running]:
zombiezen.com/go/sqlite.(*Conn).Prep(0x4000218be0, {0x40002ba000, 0x63})
/home/runner/go/pkg/mod/zombiezen.com/go/[email protected]/sqlite.go:431 +0x130
photofield/internal/image.(*Database).GetDirsCount(0x400025b580, {0x0, 0x0, 0x0?})
/home/runner/work/photofield/photofield/internal/image/database.go:722 +0x140
photofield/internal/image.(*Source).GetDirsCount(0x40000b6010?, {0x0?, 0x22?, 0xfa2d4?})
/home/runner/work/photofield/photofield/internal/image/source.go:450 +0x38
photofield/internal/collection.(*Collection).UpdateStatus(0x40002bfc80, 0x48?)
/home/runner/work/photofield/photofield/internal/collection/collection.go:78 +0x88
main.main()
/home/runner/work/photofield/photofield/main.go:1234 +0xe54
To Reproduce
Steps to reproduce the behavior:
collections:
- name: myPhotos
layout: timeline
dirs:
- /mnt/myPhotos
I should note that the dir where the images are it's a network mounted cifs folder, belonging to the same user executing the script with 755 perms
5. Execute ./photofield
6. Output is as stated above, even after executing ./photofield -vacuum
and deleting all photofield.cache.* and photofield.thumbs.* files
Expected behavior
No error and server starts correctly
Desktop:
Alright, so this will be a one-sided dump of a conversation and it might be a completely stupid idea, but it's so stupid it might work.
When it comes to searching for things/people/faces...
one fun thing that's probably not super useful, but seems easy with the AI embeddings, would be text/image arithmetic. For example, searching for lion -male +female would return images of lionesses. Or img:[photo of a bike]+person would return photos of people riding bikes. ๐คทโโ๏ธ Seems fun ๐
Face recognition/detection, but what if it was different? Related to #46
I agree that face recognition is hard and faulty problem. I've been thinking how to tackle it, so if you don't mind indulging me for a moment.
So what I've usually seen is that face detection is a different process from face recognition. That is, with detection you know you have a million faces, but you don't have any names and only a certain confidence on the unique people those faces are from. The recognition is differentiating these faces.
Usually then what many apps do is they show you all the presumably unique faces and allow you to name them. And then since recognition is not infallible, they also allow you to accept and reject individual instances of a face to better train the model on the person. Now this is pretty standard and there are solutions for it already, so it's a safe way to go.
However! Integrating all that sounds a bit boring and I'm here to have fun, so I've been thinking of something else, which is so crazy it might work, or be a complete waste of weeks of development... But hear me out.
What if you think of the naming of a face (ie creating a person) as creating an "auto" person tag. Say that you take a reference image of the face of the person and then compute the tag by using the "related images" functionality and tagging any images that pass a similarity threshold. Maybe that would be pretty good already as a first try, but since there is only one reference image, it would probably find all kinds of other unrelated stuff.
So what if we take it one step further. Let's still have the one output auto tag, but then also have two "input" tags, one for "accepted" images and one for "rejected" ones, same as the face recognition systems record accepted and rejected faces. Then you could pick a model (eg logistic regression) to "train" on these positive and negative examples and at the end apply it to all images to get a potentially more accurate output auto face tag. Now this is just reinventing face recognition badly probably, however...
None of what I said is even specific to faces. If the CLIP AI embeddings are "expressive enough", you could theoretically have trained auto tags for your partner, your dog, for a specific bridge you often take photos of, for a certain type of cloud, for food pics, as long as you provide enough examples. Presumably the model would pick up on many cues beyond the face, like clothes and so on, so perhaps it could even detect people with obscured faces. It'd be like training (or fine tuning) small dumb AI models, but more interactively, by the user directly, and without the overhead usually associated with it. Or like "few shot detection" in ML lingo.
But I'm not an AI scientist, so it could also be a complete trash fire that works like shit. ๐คทโโ๏ธ Only one way to find out
Linear regression for tags or something ๐คท
With accept/reject I meant providing the ground truth, by tagging it with e.g. person:alice:accept (could also be "in" or "+") you would say that the photo definitely contains Alice in it. With alice:reject or alice:out or alice:- you would say that this photo definitely does NOT have Alice in it. These would be just normal manual tags otherwise.
Then you could have a training process that takes e.g. (alice:+, alice:-, threshold:0.3) as input parameters, removes the person:alice tag from all photos and adds it back based on the new result. So as you say you could tune the threshold and the ground truth examples in case there are too many armpits or siblings detected :)
I agree that the UX would need to be slick for this to be usable, nobody will do it if you have to manually add the tags yourself. But kind of an interactive auto refreshing results page that updates as you click to accept/reject candidates would be sweet. If you really wanted to gamify it, you could even do a Tinder-like swipe left/right to say if it's a picture of your dog or not lol.
To be validated.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.