Commit graph

537 commits

Author SHA1 Message Date
Jason Rasmussen
58ca1402ed
feat: sync partner stacks (#19635) 2025-06-30 16:41:06 -04:00
Jason Rasmussen
181a7e115f
feat: sync stacks (#19629) 2025-06-30 14:26:41 -05:00
Jason Rasmussen
e60bc3c304
refactor: database types (#19624) 2025-06-30 13:19:16 -04:00
Jason Rasmussen
a2a9797fab
refactor: auth medium tests (#19583) 2025-06-27 15:35:19 -04:00
Jason Rasmussen
df76735f4a
refactor: sync repository (#19581) 2025-06-27 13:47:06 -04:00
Jason Rasmussen
6feca56da8
feat: sync memories (#19579) 2025-06-27 12:20:13 -04:00
Jason Rasmussen
6c6a32c63e
refactor: memory medium tests (#19568) 2025-06-26 19:52:10 -04:00
Jason Rasmussen
3105094a3d
refactor: medium tests (#19537) 2025-06-26 15:32:06 -04:00
shenlong
fda22c83b9
fix: sync stream album assets type order (#19540)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-25 20:42:56 -05:00
Jason Rasmussen
881a96cdf9
feat: add album asset sync (#19503)
wip: fix album asset exif and some other refactorings

feat: add album assets sync

feat: album to assets relation sync

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-06-25 16:10:31 +00:00
Jason Rasmussen
eca9b56847
feat(server): person delete (#19511)
feat(api): person delete
2025-06-25 11:12:36 -04:00
Jason Rasmussen
1a90fc8e58
feat: test for non-standard database name (#19386) 2025-06-20 19:31:16 +00:00
Zack Pollard
0b44d4b6f2
fix: partner and album backfill acks (#19371)
fix: partner sync being entirely broken
2025-06-20 16:14:36 +00:00
Mert
7c43e6c3c8
fix: bump vchord default to 0.4.3 (#19365)
bump default to 0.4.3
2025-06-20 08:35:32 -05:00
SGT
0a9a520ed2
feat(server): sql-tools support for class level composite fk (#19242)
* feat: support for class level composite fk

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-06-18 14:30:39 -04:00
Jason Rasmussen
e0144b4ece
feat: backfill album users (#19234) 2025-06-18 10:48:11 -04:00
Zack Pollard
749f63e4a0
fix: partner asset and exif sync backfill (#19224)
* fix: partner asset sync backfill

* fix: add partner asset exif backfill

* ci: output content of files that have changed
2025-06-17 09:56:54 -04:00
shenlong
db68d1af9b
feat(server): add duration to SyncAssetV1 (#19196)
add duration to SyncAssetV1

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-06-17 08:09:50 -04:00
Jason Rasmussen
5cd186d3d4
refactor: duplicate queries (#19136) 2025-06-12 14:23:02 -04:00
Brandon Wees
74438f5bd8
feat(web): improved user onboarding (#18782)
* wip

* added user metadata key

* wip

* restructure onboarding system and add initial locale

* update language card and fix translation updating

* remove prints

* new card formattings

* fix cursed unmount effect

* add OAuth route onboarding

* remove required admin auth for onboarding

* delete the hotwire button

* update open-api files

* delete import

* fix failing oauth onboarding fields

* fix e2e test

* fix web e2e test

* add onboarding to user registration e2e test

* remove todo

this was a holdover during dev and didn't get deleted

* fix server small tests

* use onDestroy to save settings rather than a bind:this

* change to false for isOnboarded

* fix other auth small test

* provide type annotation in user factory metadata field

* remove onboardingCompelted from UserDto

* move translations to onboarding steps array and mark as derived so they update

* break language selector out into its own component as per @danieldietzler suggestion

* remove hello header on card

* fix flixkering on server privacy card

* label/id fixes

* openapi

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-02 21:09:13 +00:00
shenlong
b854a3dd47
feat(server): add originalFileName to SyncAssetV1 (#18767)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-30 09:56:35 -05:00
Mert
3f08768854
chore: vchord 0.4.1 (#18588)
* vchord 0.4.x

* oops

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-28 14:38:52 +00:00
Jason Rasmussen
cd288533a1
feat: sync albums and album users (#18377) 2025-05-21 14:35:32 -05:00
Mert
bc906f7343
chore: specify vchord version in ci (#18423) 2025-05-21 13:41:14 -04:00
Mert
493b9b7a54
fix(server): use preview path for person thumbnails from videos (#18419)
use preview path for person thumbnails from videos
2025-05-21 11:15:30 -05:00
Mert
a02fe89ec9
fix(server): drop old extension (#18400) 2025-05-21 09:53:40 -04:00
Mert
0d773af6c3
feat: vectorchord (#18042)
* wip

auto-detect available extensions

auto-recovery, fix reindexing check

use original image for ml

* set probes

* update image for sql checker

update images for gha

* cascade

* fix new instance

* accurate dummy vector

* simplify dummy

* preexisiting pg docs

* handle different db name

* maybe fix sql generation

* revert refreshfaces sql change

* redundant switch

* outdated message

* update docker compose files

* Update docs/docs/administration/postgres-standalone.md

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* tighten range

* avoid always printing "vector reindexing complete"

* remove nesting

* use new images

* add vchord to unit tests

* debug e2e image

* mention 1.107.2 in startup error

* support new vchord versions

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-20 08:36:43 -05:00
Min Idzelis
e7edbcdf04
feat(server): lighter buckets (#17831)
* feat(web): lighter timeline buckets

* GalleryViewer

* weird ssr

* Remove generics from AssetInteraction

* ensure keys on getAssetInfo, alt-text

* empty - trigger ci

* re-add alt-text

* test fix

* update tests

* tests

* missing import

* feat(server): lighter buckets

* fix: flappy e2e test

* lint

* revert settings

* unneeded cast

* fix after merge

* Adapt web client to consume new server response format

* test

* missing import

* lint

* Use nulls, make-sql

* openapi battle

* date->string

* tests

* tests

* lint/tests

* lint

* test

* push aggregation to query

* openapi

* stack as tuple

* openapi

* update references to description

* update alt text tests

* update sql

* update sql

* update timeline tests

* linting, fix expected response

* string tuple

* fix spec

* fix

* silly generator

* rename patch

* minimize sorting

* review

* lint

* lint

* sql

* test

* avoid abbreviations

* review comment - type safety in test

* merge conflicts

* lint

* lint/abbreviations

* remove unncessary code

* review comments

* sql

* re-add package-lock

* use booleans, fix visibility in openapi spec, less cursed controller

* update sql

* no need to use sql template

* array access actually doesn't seem to matter

* remove redundant code

* re-add sql decorator

* unused type

* remove null assertions

* bad merge

* Fix test

* shave

* extra clean shave

* use decorator for content type

* redundant types

* redundant comment

* update comment

* unnecessary res

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-19 16:40:48 -05:00
Daimolean
dc8962f2bc
fix(server): select main stream according to bitrate (#18375)
* fix main stream

* update unit tests

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-05-19 17:33:28 -04:00
Mert
48d746d9d5
refactor(server): "on this day" memory creation (#18333)
* refactor memory creation

* always update system metadata

* maybe fix medium tests
2025-05-16 13:16:27 -04:00
Jason Rasmussen
c1150fe7e3
feat: lock auth session (#18322) 2025-05-15 18:08:31 -04:00
Brandon Wees
6117329057
feat: add session creation endpoint (#18295) 2025-05-15 13:34:33 -05:00
Alex
b7b0b9b6d8
feat: locked/private view (#18268)
* feat: locked/private view

* feat: locked/private view

* pr feedback

* fix: redirect loop

* pr feedback
2025-05-15 15:35:21 +00:00
Mert
3a0ddfb92d
fix(server): vacuum after deleting people (#18299)
* vacuum after deleting people

* update sql
2025-05-14 23:13:13 -04:00
Mert
2a80251dc3
fix(server): more robust person thumbnail generation (#17974)
* more robust person thumbnail generation

* clamp bounding boxes

* update sql

* no need to process invalid images after decoding

* cursed knowledge

* new line
2025-05-06 14:18:22 -04:00
Alex
d33ce13561
feat(server): visibility column (#17939)
* feat: private view

* pr feedback

* sql generation

* feat: visibility column

* fix: set visibility value as the same as the still part after unlinked live photos

* fix: test

* pr feedback
2025-05-06 12:12:48 -05:00
Jason Rasmussen
f34f83e164
refactor: controller tests (#18100) 2025-05-05 18:57:32 -04:00
Jason Rasmussen
ea9f11bf39
refactor: controller tests (#18035)
* feat: controller unit tests

* refactor: controller tests
2025-05-03 09:39:44 -04:00
Jason Rasmussen
5d21ba3166
chore: logging clean up (#18031) 2025-05-02 12:34:35 -05:00
Thomas
da7a81b752
chore(server): split album update notifications into multiple jobs (#17879)
We would like to move away from the concept of finding and removing pending
jobs. The only place this is used is for album update notifications, and this
is done so that users who initially uploaded assets to an album will also
receive a notification if someone else then adds assets to the same album. This
can also be achieved with a job for each recipient. Multiple jobs also has the
advantage that it will scale better for albums with many users, it's possible
to send notifications concurrently, retries are possible without sending
duplicate notifications, and it's clear what recipient a job failed for.
2025-04-30 17:45:35 -04:00
Jason Rasmussen
526c02297c
refactor: stream queue migration (#17997) 2025-04-30 16:23:13 +00:00
Thomas
3ce353393a
chore(server): don't insert embeddings if the model has changed (#17885)
* chore(server): don't insert embeddings if the model has changed

We're moving away from the heuristic of waiting for queues to complete. The job
which inserts embeddings can simply check if the model has changed before
inserting, rather than attempting to lock the queue.

* more robust dim size update

* use check constraint

* index command cleanup

* add create statement

* update medium test, create appropriate extension

* new line

* set dimension size when running on all assets

* why does it want braces smh

* take 2

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-29 14:23:01 -04:00
Eli Gao
48bcbee6ed
feat(server): JXL previews from DNG 1.7+ (#17861)
* feat(server): JXL previews from RAW

* refactor(server): use var name assumedExtractedFormat for clarity

* test(server): fix existing media.extract() returning JPEG

* chore(openapi): regen

* style(server): lint

* fix(server): ignore undefined decode orientation

* fix(server): correct orientation assignment in media decode options

* test(server): unit tests of JXL-encoded DNG

* refactor(server): return buffer and format from mediaRepository.extract()

* chore(open-api): regen

* refactor

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-28 18:18:46 -04:00
Jason Rasmussen
1b5fc9c665
feat: notifications (#17701)
* feat: notifications

* UI works

* chore: pr feedback

* initial fetch and clear notification upon logging out

* fix: merge

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-04-28 10:36:14 -04:00
Jason Rasmussen
ad272333db
refactor: user avatar color (#17753) 2025-04-28 08:54:51 -05:00
Jason Rasmussen
1d610ad9cb
refactor: database connection parsing (#17852) 2025-04-24 12:58:29 -04:00
Jason Rasmussen
1b5e981a45
fix: failing ci checks (#17810) 2025-04-23 10:59:54 -04:00
Jason Rasmussen
56a4aa9ffe
refactor: email repository (#17746) 2025-04-21 12:53:37 -04:00
Daniel Dietzler
52ae06c119
refactor: remove album entity, update types (#17450) 2025-04-18 23:10:34 +02:00
Jason Rasmussen
6474a78b8b
feat: initial kysely migration file (#17678) 2025-04-17 17:38:47 -04:00
Jason Rasmussen
e275f2d8b3
feat: add foreign key indexes (#17672) 2025-04-17 14:41:06 -04:00
Daniel Dietzler
8b38f8a58d
fix: do not select album in time bucket query (#17662) 2025-04-16 17:52:22 -04:00
Daniel Dietzler
586a7a173b
refactor: handle detect faces job query (#17660) 2025-04-16 22:52:54 +02:00
Jason Rasmussen
8cefa0b84b
refactor: migrate some e2e to medium (#17640) 2025-04-16 14:59:08 -04:00
Daniel Dietzler
f50e5d006c
refactor: dedicated queries for asset jobs (#17652) 2025-04-16 14:08:49 -04:00
Jason Rasmussen
8da5f21fcf
refactor: medium tests (#17634) 2025-04-15 15:54:23 -04:00
Jason Rasmussen
b710ad36f3
feat: upgrade kysely (#17630)
* feat: upgrade kysely

* chore: pr feedback
2025-04-15 13:26:56 -04:00
Jason Rasmussen
17e720440d
refactor: new asset-job repository (#17622)
* refactor: new asset-job repository

* fix: broken medium tests on main
2025-04-15 10:24:51 -04:00
Jason Rasmussen
f189c7b101
refactor: medium tests (#17599) 2025-04-15 08:53:14 -04:00
Mert
c3d10c5be2
refactor(server): non-nullable file metadata (#17598) 2025-04-15 12:03:31 +01:00
Jason Rasmussen
b2753103c6
chore: remove unused logger (#17593) 2025-04-14 15:01:49 -04:00
Daniel Dietzler
a373034629
refactor: migrate stacks (#17559)
chore: migrate stacks
2025-04-12 08:33:35 -04:00
Mert
25f2b9602f
refactor(server): remove face, person and face search entities (#17535)
* remove face, person and face search entities

update tests and mappers

check if face relation exists

update sql

unused imports

* pr feedback

generate sql, remove unused imports
2025-04-11 14:44:45 -04:00
Jason Rasmussen
584e5894bf
refactor: user factories instead of stubs (#17540) 2025-04-11 11:53:37 -04:00
Jason Rasmussen
75c83cb704
refactor: metadata stub (#17532) 2025-04-10 21:58:55 +02:00
Jason Rasmussen
eaa0e07329
refactor: asset files entity (#17527) 2025-04-10 13:26:27 -04:00
Daniel Dietzler
7a1e8ce6d8
chore: remove exif entity (#17499) 2025-04-10 12:36:29 -04:00
Jason Rasmussen
8aea07b750
refactor: album user entity (#17524) 2025-04-10 11:53:21 -04:00
Zack Pollard
94dba29298
refactor: remove user entity (#17498) 2025-04-10 10:53:21 -04:00
Jason Rasmussen
206545356d
refactor: metadata entity (#17492) 2025-04-09 11:45:30 -04:00
Jason Rasmussen
8943ec23ba
refactor: more database types (#17490) 2025-04-09 10:24:38 -04:00
Jason Rasmussen
cf2c0260a6
refactor: activity item (#17470)
* refactor: activity item

* fix query

* qualified columns

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-09 08:35:20 -04:00
Jason Rasmussen
4794eeca88
refactor: database types (#17468) 2025-04-08 12:40:03 -04:00
Alex
e5ca79dd44
refactor: remove session entity (#17466)
* refactor: remove session entity

* fix: test

* update sql

* remote export
2025-04-08 16:04:07 +00:00
Jason Rasmussen
b6c5a03533
refactor: remove tag entity (#17462) 2025-04-08 10:52:54 -04:00
Jason Rasmussen
fdbe6d649f
refactor: remove smart search entity (#17447)
refactor: smart search entity
2025-04-08 09:56:45 -04:00
Jason Rasmussen
e7a5b96ed0
feat: extension, triggers, functions, comments, parameters management in sql-tools (#17269)
feat: sql-tools extension, triggers, functions, comments, parameters
2025-04-07 15:12:12 -04:00
Abhinav Valecha
b621281351
feat(server): Avoid face match with people born after file creation #4743 (#16918)
* feat(server): Avoid face matching with people born after file creation date (#4743)

* lint

* add medium tests for facial recognition

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-02 10:37:26 -05:00
Mert
d911b76c08
fix(server): use stat instead of exifinfo for file date metadata (#17311)
* use stat instead of filecreatedate

* update tests

* unused import
2025-04-01 17:24:07 -05:00
Mert
59e5c82569
fix(server): full-size images not migrated or deleted correctly (#17308)
* fix file path logic

* update tests

* add empty array fallback just in case for now
2025-04-01 18:11:46 -04:00
Eli Gao
5c80e8734b
feat: original-sized previews for non-web-friendly images (#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 <101130780+mertalev@users.noreply.github.com>
2025-03-31 13:24:28 -04:00
Zack Pollard
d613f15606
test: fix flaky user handle delete check medium test (#17253)
we can't run specifically the handleUserDeleteCheck tests concurrently due to one of the tests modifying the config in the shared database
if run concurrently you can get race conditions where the other tests pick up the change, even with resetting the config in the beforeEach
therefore the test that checks a delete actually happens, fails
there are many ways to solve this, disabling concurrency for the suite, forcing sequential tests for just handleUserDeleteCheck, increasing the delete test deletedAt to more than the custom duration tests deleteDelay
I applied all three of these. You could also force all the user tests to run in their own databases, but that feels overkill
2025-03-31 13:19:57 +01:00
PathToLife
09f4476f97
feat: improve performance for GET /api/album & /api/album/:id (#17124)
* fix(server) optimize number of sql calls for GET /api/albums

remove unnecessary join for getMetadataForIds
remove separate call to getLastUpdatedAssetForAlbumId

* fix(server) remove unnecessary getLastUpdatedAssetForAlbumId call for GET /api/album/:id

also remove getLastUpdatedAssetForAlbumId query as it is no longer referenced

* fix(server): correct lastModifiedAssetTimestamp return type + formatting and typing

* chore(server): address type issue with tests found via npm:check

tests & lint still pass before this commit.
2025-03-31 11:28:41 +00:00
Daniel Dietzler
238c151ac3
chore: finish migrating eslint config files; bump unicorn (#17200) 2025-03-31 12:18:25 +01:00
Jason Rasmussen
55a3c30664
feat: kysely migrations (#17198) 2025-03-29 09:26:24 -04:00
Jason Rasmussen
4b4bcd23f4
feat: schema diff sql tools (#17116) 2025-03-28 10:40:09 -04:00
Mert
75df8fc10e
refactor(server): bulk update exif (#17109)
* bulk update exif

* update sql

* update tests

* check job queeuing in test
2025-03-25 21:24:24 +00:00
Mert
9f46ba8eb4
fix(server): set pixel format when scaling and not tonemapping (#16932)
set pixel format when scaling and not tonemapping
2025-03-18 11:42:09 -05:00
Jason Rasmussen
6a40aa83b7
refactor: better types for getList and getDeletedAfter (#16926) 2025-03-17 15:32:12 -04:00
Jason Rasmussen
16fd19994b
refactor: use factory and kysely types for partner repository (#16812) 2025-03-11 16:29:56 -04:00
Jonathan Jogenfors
6bb0aa217c
fix(server): set unit test timezone to UTC (#16805) 2025-03-11 10:19:33 -04:00
Jason Rasmussen
1382b27349
refactor: repository mocks (#16785) 2025-03-10 16:52:44 -04:00
Jason Rasmussen
a96bba4b26
feat: sync assets, partner assets, exif, and partner exif (#16658)
* feat: sync assets, partner assets, exif, and partner exif

Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>

* refactor: remove duplicate where clause and orderBy statements in sync queries

* fix: asset deletes not filtering by ownerId

---------

Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-10 12:05:39 -04:00
Jason Rasmussen
e97df503f2
refactor: api key spec to use factories (#16776) 2025-03-10 12:04:35 -04:00
Jason Rasmussen
1e127ae3a1
refactor: migrate library spec to factories (#16711) 2025-03-08 13:44:36 -05:00
Jason Rasmussen
fd46d43726
chore: remove unused file (#16707) 2025-03-07 22:47:27 -06:00
Jason Rasmussen
3f06a494a9
refactor: queue asset deletes via stream (#16706) 2025-03-07 22:22:57 +00:00
Jason Rasmussen
ce74f765b1
refactor: memory stub (#16704) 2025-03-07 16:03:34 -05:00
Jason Rasmussen
2d106755f6
refactor: convert activity stub to a factory (#16702) 2025-03-07 15:20:04 -05:00
Jason Rasmussen
f82786a297
feat: use stream for template migrations (#16700) 2025-03-07 14:30:01 -05:00