Files
immish/docs/library.md

15 KiB

Library

This document describes the Library tab features including favorites, archive, trash, and other collections.

Library Overview

The Library tab provides access to various collections and utility features:

┌─────────────────────────────────────────────────────────────┐
│                      Library Features                        │
├─────────────────────────────────────────────────────────────┤
│  Quick Access    │  Collections     │  Utilities            │
├──────────────────┼──────────────────┼───────────────────────┤
│  • Favorites     │  • People        │  • Folders            │
│  • Archive       │  • Places        │  • Locked Folder      │
│  • Shared Links  │  • Local Albums  │  • Partners           │
│  • Trash         │                  │                       │
└──────────────────┴──────────────────┴───────────────────────┘

Favorites

Purpose

  • Quick access to favorite photos/videos
  • Marked assets appear here
  • Heart icon on assets

Toggle Favorite API

PUT /assets

Body:
{
  "ids": ["asset-1", "asset-2"],
  "isFavorite": true
}

UI Features

  • Grid view of favorited assets
  • Multi-select available
  • Can unfavorite from here

Archive

Purpose

  • Hide assets from main timeline
  • Assets still searchable
  • Good for screenshots, receipts, etc.

Toggle Archive API

PUT /assets

Body:
{
  "ids": ["asset-1", "asset-2"],
  "isArchived": true
}

Restore from Archive

Same API with isArchived: false

Trash

Purpose

  • Deleted assets go here first
  • Auto-deleted after 30 days (configurable)
  • Can restore or permanently delete

Trash Screen

┌─────────────────────────────────────────────────────────────┐
│  ←  Trash                                       [Empty All] │
├─────────────────────────────────────────────────────────────┤
│  Items in trash will be permanently deleted after 30 days   │
├─────────────────────────────────────────────────────────────┤
│  [Asset grid of trashed items]                              │
│                                                             │
│  Select to restore or delete permanently                    │
└─────────────────────────────────────────────────────────────┘

Trash API Endpoints

Move to Trash

POST /trash/assets

Body:
{
  "ids": ["asset-1", "asset-2"]
}

Restore from Trash

POST /trash/restore/assets

Body:
{
  "ids": ["asset-1", "asset-2"]
}

Restore All

POST /trash/restore

Empty Trash

POST /trash/empty

Purpose

  • Create public links to share assets/albums
  • Password protection optional
  • Expiration dates supported
┌─────────────────────────────────────────────────────────────┐
│  ←  Shared Links                              [+ Create]    │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────────────────┐   │
│  │  📷 5 items                                          │   │
│  │  Created: Dec 15, 2024                               │   │
│  │  Expires: Never                                      │   │
│  │  🔗 Copy Link                           [Edit] [X]   │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  📁 Summer 2024 Album                                │   │
│  │  Created: Dec 10, 2024                               │   │
│  │  Expires: Dec 31, 2024  🔒 Password                  │   │
│  │  🔗 Copy Link                           [Edit] [X]   │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘
SharedLink {
  id: String
  description: String?
  slug: String?           // Custom URL slug
  password: String?       // If protected
  expiresAt: DateTime?    // Expiration
  allowDownload: Boolean  // Can download
  allowUpload: Boolean    // Can upload (albums)
  showMetadata: Boolean   // Show EXIF data
  type: LinkType          // ALBUM or INDIVIDUAL
  albumId: String?        // If album link
  assets: List<Asset>     // Linked assets
  createdAt: DateTime
}

Create Link

POST /shared-links

Body:
{
  "type": "ALBUM" | "INDIVIDUAL",
  "albumId": "album-uuid",        // for album links
  "assetIds": ["asset-1"],        // for individual links
  "description": "My photos",
  "password": "optional",
  "expiresAt": "2024-12-31T23:59:59Z",
  "allowDownload": true,
  "allowUpload": false,
  "showMetadata": true
}

Update Link

PATCH /shared-links/{id}

Body: (same fields as create)

Delete Link

DELETE /shared-links/{id}

People Collection

Purpose

  • Browse photos by recognized faces
  • Name and manage people
  • Merge duplicate people

People API

GET /people

Response:
[
  {
    "id": "person-uuid",
    "name": "John Doe",
    "birthDate": "1990-01-15",
    "thumbnailPath": "/path",
    "isHidden": false
  }
]

Person Detail Screen

┌─────────────────────────────────────────────────────────────┐
│  ←  John Doe                                    [⋮]        │
├─────────────────────────────────────────────────────────────┤
│       [Large Face Thumbnail]                                │
│                                                             │
│       156 photos                                            │
├─────────────────────────────────────────────────────────────┤
│  [Grid of assets featuring this person]                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Update Person

PUT /people/{id}

Body:
{
  "name": "John Doe",
  "birthDate": "1990-01-15",
  "isHidden": false
}

Places Collection

Purpose

  • Browse photos by location
  • Map view of all geotagged photos
  • Location clustering

Places Screen

┌─────────────────────────────────────────────────────────────┐
│  ←  Places                                                  │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                      │   │
│  │              [Interactive Map]                       │   │
│  │              with asset markers                      │   │
│  │                                                      │   │
│  └─────────────────────────────────────────────────────┘   │
├─────────────────────────────────────────────────────────────┤
│  [Grid of cities/places with thumbnails]                    │
│                                                             │
│  San Francisco    New York    Paris                         │
│  24 photos        56 photos   12 photos                     │
└─────────────────────────────────────────────────────────────┘

Map Features

  • Tap marker to see asset
  • Cluster markers for dense areas
  • Filter by date, favorites, partners
  • Different map themes (light/dark)

Local Albums (On This Device)

Purpose

  • Access device photo albums
  • Select albums for backup
  • View local-only content

Local Album Features

  • Shows all device photo albums
  • Displays asset count
  • Can browse contents
  • Cannot modify from app (read-only)

Folders

Purpose

  • Browse by server folder structure
  • See how photos are organized on server
  • Navigate folder hierarchy

Folder API

GET /view/folder?path=/

Response:
{
  "folders": ["2024", "2023", "Screenshots"],
  "assets": [...]
}

Locked Folder

Purpose

  • PIN-protected private folder
  • Hidden from main views
  • Biometric unlock option

Locked Folder Flow

┌─────────────────────────────────────────────────────────────┐
│                    Locked Folder                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                       🔒                                    │
│                                                             │
│              Enter PIN to unlock                            │
│                                                             │
│              ┌───┬───┬───┬───┐                             │
│              │ ● │ ● │ ○ │ ○ │                             │
│              └───┴───┴───┴───┘                             │
│                                                             │
│              [Use Biometrics]                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Setup PIN

PUT /auth/pin-code

Body:
{
  "pinCode": "1234"
}

Verify PIN

POST /auth/pin-code/verify

Body:
{
  "pinCode": "1234"
}

Locked Assets

Assets can be moved to/from locked folder:

PUT /assets

Body:
{
  "ids": ["asset-1"],
  "visibility": "locked" | "timeline"
}

Partners

Purpose

  • View photos shared by partners
  • Include partner photos in timeline
  • Manage partner relationships

Partners Screen

┌─────────────────────────────────────────────────────────────┐
│  ←  Partners                                                │
├─────────────────────────────────────────────────────────────┤
│  Sharing with you:                                          │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 Jane Doe                                          │   │
│  │     Include in timeline: [Toggle: ON]                │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  You're sharing with:                                       │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 John Smith                              [Remove]  │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  [+ Add Partner]                                            │
└─────────────────────────────────────────────────────────────┘

Partner API

Get Partners

GET /partners?direction=shared-with|shared-by

Add Partner

POST /partners/{userId}

Remove Partner

DELETE /partners/{userId}

Update Partner Settings

PUT /partners/{userId}

Body:
{
  "inTimeline": true
}

Previous: Albums | Next: Gallery Viewer