7.7 KiB
7.7 KiB
Data Models
Core data structures used throughout the application.
Asset
The fundamental unit representing a photo or video.
Properties
| Property | Type | Description |
|---|---|---|
| id | Integer | Local database ID (auto-increment) |
| remoteId | String? | Server-side UUID |
| localId | String? | Device media library ID |
| checksum | String | SHA1 hash (base64 encoded) |
| thumbhash | String? | Compact image placeholder hash |
| ownerId | Integer | Hash of owner's user ID |
| fileCreatedAt | DateTime | When file was originally created |
| fileModifiedAt | DateTime | When file was last modified |
| updatedAt | DateTime | Last server update timestamp |
| durationInSeconds | Integer | Video duration (0 for images) |
| type | AssetType | image, video, audio, or other |
| width | Integer? | Image/video width in pixels |
| height | Integer? | Image/video height in pixels |
| fileName | String | Original filename |
| livePhotoVideoId | String? | ID of video component for live photos |
| isFavorite | Boolean | Marked as favorite |
| isArchived | Boolean | Hidden from main timeline |
| isTrashed | Boolean | In trash (pending deletion) |
| isOffline | Boolean | Server asset not accessible |
| stackId | String? | ID of stack this asset belongs to |
| stackPrimaryAssetId | String? | Primary asset in the stack |
| stackCount | Integer | Number of assets in stack |
| visibility | Enum | timeline, archive, hidden, locked |
Asset Types
AssetType:
- other: Unknown file type
- image: Photo (JPEG, PNG, HEIC, etc.)
- video: Video file (MP4, MOV, etc.)
- audio: Audio file
Asset State
Describes where asset data comes from:
AssetState:
- local: Only exists on device
- remote: Only exists on server
- merged: Exists on both (synced)
Asset Visibility
AssetVisibilityEnum:
- timeline: Visible in main timeline
- archive: In archive (hidden from timeline)
- hidden: Hidden (private)
- locked: In locked folder (PIN protected)
Computed Properties
| Property | Description |
|---|---|
| isLocal | Has local device ID |
| isRemote | Has server ID |
| isImage | Type is image |
| isVideo | Type is video |
| isMotionPhoto | Has live photo video component |
| aspectRatio | Width / height ratio |
| duration | Duration as time object |
| name | Filename without extension |
| storage | Current asset state |
| isFlipped | EXIF indicates rotation 90/270 |
| orientatedWidth | Width accounting for rotation |
| orientatedHeight | Height accounting for rotation |
Album
Collection of assets.
Properties
| Property | Type | Description |
|---|---|---|
| id | Integer | Local database ID |
| remoteId | String? | Server-side UUID |
| name | String | Album name |
| createdAt | DateTime | Creation timestamp |
| modifiedAt | DateTime | Last modification |
| startDate | DateTime? | Earliest asset date |
| endDate | DateTime? | Latest asset date |
| lastModifiedAssetTimestamp | DateTime? | When assets last changed |
| shared | Boolean | Is shared with others |
| ownerId | Integer | Owner's user ID hash |
| owner | User | Owner user object |
| activityEnabled | Boolean | Comments/likes allowed |
| isRemote | Boolean | Exists on server |
| assetCount | Integer | Number of assets |
Album Types
- Regular Album: User-created collection
- Shared Album: Shared with other users
- Partner Album: Virtual album showing partner's assets
User
Represents an app user.
Properties
| Property | Type | Description |
|---|---|---|
| id | String | Unique user UUID |
| String | User's email address | |
| name | String | Display name |
| profileImagePath | String? | URL to profile picture |
| isAdmin | Boolean | Has admin privileges |
| memoryEnabled | Boolean | Show memories feature |
| avatarColor | Color | Generated avatar color |
| quotaUsageInBytes | Integer | Storage used |
| quotaSizeInBytes | Integer? | Storage quota (null = unlimited) |
| inTimeline | Boolean | Show in partner timeline |
| isPartnerSharedBy | Boolean | Sharing with current user |
| isPartnerSharedWith | Boolean | Current user shares with them |
ExifInfo
Metadata extracted from images.
Properties
| Property | Type | Description |
|---|---|---|
| assetId | Integer | Associated asset ID |
| make | String? | Camera manufacturer |
| model | String? | Camera model |
| lens | String? | Lens used |
| fNumber | Float? | Aperture f-stop |
| focalLength | Float? | Focal length in mm |
| iso | Integer? | ISO sensitivity |
| exposureTime | String? | Shutter speed |
| latitude | Float? | GPS latitude |
| longitude | Float? | GPS longitude |
| city | String? | Location city |
| state | String? | Location state/province |
| country | String? | Location country |
| description | String? | Image description/caption |
| dateTimeOriginal | DateTime? | Original capture time |
Computed Properties
| Property | Description |
|---|---|
| hasCoordinates | Has valid GPS data |
| isFlipped | Orientation is 90 or 270 degrees |
Activity
Comment or like on shared album.
Properties
| Property | Type | Description |
|---|---|---|
| id | String | Activity UUID |
| assetId | String? | Specific asset (null = album-level) |
| comment | String? | Comment text (null for likes) |
| createdAt | DateTime | When activity was created |
| type | ActivityType | comment or like |
| user | User | User who created activity |
Activity Types
ActivityType:
- comment: Text comment
- like: Thumbs up reaction
Search Filters
Parameters for searching assets.
Properties
| Property | Type | Description |
|---|---|---|
| context | String? | Text to search |
| filename | String? | Search by filename |
| personIds | List | Filter by people |
| location | SearchLocationFilter? | City/state/country |
| camera | SearchCameraFilter? | Make/model |
| date | SearchDateFilter? | Date range |
| display | SearchDisplayFilters? | Archive/favorite/trash |
| mediaType | AssetType? | Image/video filter |
Location Filter
SearchLocationFilter:
- city: String?
- state: String?
- country: String?
Camera Filter
SearchCameraFilter:
- make: String?
- model: String?
Date Filter
SearchDateFilter:
- takenAfter: DateTime?
- takenBefore: DateTime?
Display Filters
SearchDisplayFilters:
- isArchived: Boolean?
- isFavorite: Boolean?
- isNotInAlbum: Boolean?
Memory
"On this day" memories feature.
Properties
| Property | Type | Description |
|---|---|---|
| id | String | Memory UUID |
| title | String | Display title |
| assets | List | Assets in this memory |
| yearsAgo | Integer | How many years ago |
Backup Album
Local album selected for backup.
Properties
| Property | Type | Description |
|---|---|---|
| id | String | Device album ID |
| name | String | Album name |
| selection | BackupSelection | include, exclude, or none |
| lastBackup | DateTime? | Last successful backup time |
Store Keys
Key-value storage for app state and settings.
Key Categories
Authentication:
- serverUrl, serverEndpoint
- accessToken
- currentUser
Backup:
- autoBackup, backgroundBackup
- backupRequireWifi, backupRequireCharging
- backupTriggerDelay
- backupFailedSince
Display:
- themeMode, primaryColor
- dynamicTheme, colorfulInterface
- tilesPerRow, dynamicLayout
- groupAssetsBy
Cache:
- thumbnailCacheSize
- imageCacheSize
- albumThumbnailCacheSize
Features:
- syncAlbums
- betaTimeline
- enableHapticFeedback
Map:
- mapThemeMode
- mapShowFavoriteOnly
- mapIncludeArchived
- mapwithPartners
- mapRelativeDate