Files
immish/docs/data-models.md

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
email 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

Previous: WebSocket | Next: API Reference