Skip to content

Add photo library and creative asset migration contracts #13

Description

@mdheller

Summary

Add Exodus contracts for photo libraries, creative project folders, albums, edits, sidecars, metadata, and Linux/self-hosted migration readiness.

Why

Photos, videos, artwork, edits, albums, and creative project files are major lock-in surfaces. Users need to preserve original assets, edits, metadata, album organization, and export context before leaving Apple Photos, Google Photos, Adobe ecosystems, or local proprietary creative workflows.

Contract family

Add initial contracts for:

  • PhotoLibrarySourceProfile
  • PhotoAssetRecord
  • AlbumMigrationRecord
  • PhotoEditSidecarRecord
  • CreativeProjectSourceProfile
  • CreativeProjectManifest
  • CreativeAssetDependencyRecord
  • PhotoLibraryMigrationReadinessRecord

Initial provider/source surfaces

Photo libraries

  • Apple Photos library exports
  • iCloud Photos exports
  • Google Photos / Takeout exports
  • Microsoft OneDrive camera roll
  • local photo folders
  • camera SD card exports
  • phone export folders
  • NAS photo libraries

Creative and media projects

  • Adobe Lightroom catalogs and exports
  • Adobe Creative Cloud file exports where user-authorized
  • DaVinci Resolve project folders
  • Final Cut Pro libraries
  • Logic Pro projects
  • GarageBand projects
  • Audacity projects
  • Blender projects
  • Krita / GIMP / Inkscape project folders
  • podcast project folders

Required semantics

  • raw originals preserved before conversion or migration
  • original photos/videos and edited/rendered versions are linked, not collapsed
  • EXIF/XMP/IPTC metadata preserved where available
  • sidecars are linked as first-class evidence blobs
  • albums/folders preserved as source aliases and normalized collection records
  • duplicate detection is hash-first but must not erase album membership
  • live photos, bursts, motion photos, RAW+JPEG pairs, and paired sidecars are preserved as grouped records
  • edits, presets, project files, and dependency links are preserved where exportable
  • unsupported or proprietary-only project dependencies become blocked or metadata-only records

Preferred open targets

  • originals preserved as raw evidence blobs
  • XMP sidecars for metadata where appropriate
  • JSON sidecars for Exodus canonical metadata
  • open image derivatives where needed: PNG, JPEG, WebP, AVIF depending on policy
  • open video derivatives where needed: MKV or MP4 depending on profile
  • photo library export compatibility with self-hosted/open tools such as Immich, PhotoPrism, Nextcloud alternatives only where explicitly selected, and filesystem-first layouts

Acceptance criteria

  1. Contracts exist for photo libraries, assets, albums, edit sidecars, creative projects, dependencies, and migration readiness.
  2. Each contract has at least one fixture.
  3. Validators check all fixtures.
  4. EXIF/XMP/IPTC and provider metadata are source evidence, not canonical truth.
  5. Album membership is preserved even when assets dedupe by hash.
  6. RAW/JPEG/live-photo/motion-photo groups can be represented without data loss.
  7. Creative project dependency gaps are visible as blockers, not silent drops.
  8. Migration readiness can report imported, partial, blocked, metadata-only, or manual-review-required states.

Non-goals

  • No destructive media optimization.
  • No bypassing provider or project access controls.
  • No claim that proprietary edit graphs can always be converted.
  • No automatic cloud deletion or provider downgrade.
  • No graph/vector/search projection as canonical custody.

Related

  • SocioProphet/exodus#5
  • SocioProphet/exodus#10
  • SocioProphet/exodus#11
  • SocioProphet/sociosphere#288

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions