Evaluate and migrate away from Nextcloud Memories for self-hosted media #217

Open
opened 2026-04-19 02:13:46 -04:00 by ahuston-0 · 1 comment
Owner

Summary

Move off Nextcloud Memories and adopt a dedicated FOSS image/video hosting stack with reliable video transcoding support.

Motivation

Nextcloud Memories is no longer a good long-term fit for this setup. We should evaluate alternatives and choose a replacement that is easier to operate, performs better for media browsing/streaming, and has predictable transcoding behavior.

Scope

  • Identify candidate FOSS media platforms for photos + videos
  • Compare feature/ops/security tradeoffs
  • Select one option for implementation in this repo
  • Plan migration from current Nextcloud Memories workflow

Candidate options to evaluate

  • Immich
  • PhotoPrism
  • LibrePhotos
  • Ente (self-host / OSS components as applicable)
  • PiGallery2 (photos-first baseline)
  • Jellyfin + photo companion approach (if needed for strong video pipeline)

Evaluation criteria

Product/UX

  • Mobile upload experience (Android/iOS)
  • Timeline, albums, search, metadata handling (EXIF, geotagging)
  • Shared links and access control

Video handling

  • Server-side transcoding support (H.264/H.265/AV1 input handling)
  • Streaming compatibility across web/mobile clients
  • Thumbnail/preview generation reliability
  • Hardware acceleration support (VAAPI, NVENC, QuickSync) on our host

Operations

  • Containerization and NixOS fit (service module or docker-compose viability)
  • Resource usage (CPU/RAM/storage)
  • Upgrade/migration complexity
  • Backup/restore model and data portability

Security & maintenance

  • Auth model (OIDC/SSO compatibility)
  • Update cadence and community health
  • CVE exposure and patch responsiveness

Deliverables

  • Short comparison matrix (pros/cons + notable caveats)
  • Recommended platform with rationale
  • Minimal deployment plan for palatine-hill including:
    • storage layout
    • database dependency
    • reverse proxy integration
    • hardware transcoding configuration
  • Migration plan from Nextcloud Memories (export/import and cutover)

Acceptance criteria

  • At least 3 realistic alternatives evaluated in writing
  • Transcoding capability validated for at least one representative video workload
  • Final recommendation documented with explicit tradeoffs
  • Follow-up implementation issue(s) created for rollout/migration

Notes

If no single platform covers both photo UX and video transcoding well, document a two-service architecture and justify operational impact.

## Summary Move off Nextcloud Memories and adopt a dedicated FOSS image/video hosting stack with reliable video transcoding support. ## Motivation Nextcloud Memories is no longer a good long-term fit for this setup. We should evaluate alternatives and choose a replacement that is easier to operate, performs better for media browsing/streaming, and has predictable transcoding behavior. ## Scope - Identify candidate FOSS media platforms for photos + videos - Compare feature/ops/security tradeoffs - Select one option for implementation in this repo - Plan migration from current Nextcloud Memories workflow ## Candidate options to evaluate - Immich - PhotoPrism - LibrePhotos - Ente (self-host / OSS components as applicable) - PiGallery2 (photos-first baseline) - Jellyfin + photo companion approach (if needed for strong video pipeline) ## Evaluation criteria ### Product/UX - Mobile upload experience (Android/iOS) - Timeline, albums, search, metadata handling (EXIF, geotagging) - Shared links and access control ### Video handling - Server-side transcoding support (H.264/H.265/AV1 input handling) - Streaming compatibility across web/mobile clients - Thumbnail/preview generation reliability - Hardware acceleration support (VAAPI, NVENC, QuickSync) on our host ### Operations - Containerization and NixOS fit (service module or docker-compose viability) - Resource usage (CPU/RAM/storage) - Upgrade/migration complexity - Backup/restore model and data portability ### Security & maintenance - Auth model (OIDC/SSO compatibility) - Update cadence and community health - CVE exposure and patch responsiveness ## Deliverables - Short comparison matrix (pros/cons + notable caveats) - Recommended platform with rationale - Minimal deployment plan for palatine-hill including: - storage layout - database dependency - reverse proxy integration - hardware transcoding configuration - Migration plan from Nextcloud Memories (export/import and cutover) ## Acceptance criteria - [ ] At least 3 realistic alternatives evaluated in writing - [ ] Transcoding capability validated for at least one representative video workload - [ ] Final recommendation documented with explicit tradeoffs - [ ] Follow-up implementation issue(s) created for rollout/migration ## Notes If no single platform covers both photo UX and video transcoding well, document a two-service architecture and justify operational impact.
Author
Owner

Full evaluation focused on priorities: mobile upload, streaming compatibility/quality, transcoding, and maintenance/update cadence.

Executive recommendation

Recommend Immich as primary replacement for Nextcloud Memories.

Why: it is currently the strongest all-in-one fit for mobile-first ingest plus video playback/transcoding in a self-hosted stack, with active maintenance and broad community usage.

Secondary recommendation (if Immich is rejected): PhotoPrism + Jellyfin split architecture, accepting higher operational complexity for stronger specialized video handling.

Method

I scored each option on a weighted model (1-5 scale):

  • Mobile upload: 30%
  • Streaming compatibility/quality: 20%
  • Transcoding capability: 20%
  • Maintenance/update cadence: 15%
  • Ops fit for this repo (NixOS/docker/reverse proxy/backup): 10%
  • Security/auth posture: 5%

Total weighted score out of 5.0.

Candidates and weighted scoring

Option Mobile Upload (30) Streaming Quality (20) Transcoding (20) Maintenance (15) Ops Fit (10) Security/Auth (5) Weighted Total
Immich 5.0 4.5 4.5 4.5 4.0 4.0 4.58
PhotoPrism 3.0 3.5 3.0 4.0 4.0 4.0 3.43
LibrePhotos 2.5 2.5 2.0 2.5 3.0 3.5 2.53
PiGallery2 1.5 2.0 1.0 3.0 4.0 3.5 2.13
Ente (self-host posture varies by component scope) 4.0 3.5 3.0 4.0 2.5 4.5 3.58
Jellyfin + photo companion (2-service) 2.5 5.0 5.0 4.5 2.5 4.0 3.90

Detailed evaluation

1) Immich

Pros:

  • Best-in-class mobile upload workflow for self-hosted photo/video use.
  • Very strong timeline UX and metadata handling for mixed libraries.
  • Solid browser streaming behavior with practical transcoding pipeline support.
  • Active release cadence and large user base.

Cons:

  • Deployment includes multiple moving parts (DB + redis + ML/transcoding workers depending on setup).
  • Has had periods of rapid schema/runtime changes; requires disciplined upgrade practice.

Transcoding notes:

  • Supports server-side video processing and practical playback compatibility for common client/browser targets.
  • Hardware acceleration is possible depending on host/GPU pass-through setup and codec path.

Maintenance view:

  • Strong cadence and responsiveness, but updates should be tested/staged due to pace.

Verdict: Best overall fit for stated priorities.

2) PhotoPrism

Pros:

  • Mature project with stable operational behavior.
  • Good metadata/search and library management.
  • Easier to reason about for conservative ops teams.

Cons:

  • Mobile upload usually depends on third-party/WebDAV patterns; weaker first-party mobile UX.
  • Video handling/transcoding less central than in Immich/Jellyfin workflows.

Verdict: Good stability choice, weaker for mobile-first ingest and robust video UX.

3) LibrePhotos

Pros:

  • FOSS focus and familiar photo management features.

Cons:

  • Less confidence on performance consistency and long-term feature parity.
  • Weaker video/transcoding story versus top candidates.
  • Lower confidence in maintenance velocity relative to Immich/PhotoPrism.

Verdict: Not preferred for this use case.

4) PiGallery2

Pros:

  • Lightweight and simple to deploy.

Cons:

  • Not a strong fit for mobile auto-upload and advanced video streaming/transcoding requirements.

Verdict: Useful as minimal gallery, not suitable as Memories replacement for priorities listed.

5) Ente (self-host scope caveat)

Pros:

  • Strong security/privacy model and polished clients.
  • Better mobile story than many alternatives.

Cons:

  • Self-host deployment/feature surface can differ based on component maturity and chosen architecture.
  • Operational model may be less straightforward for our existing infra patterns.

Verdict: Interesting option, but higher uncertainty for immediate migration path.

6) Jellyfin + photo companion architecture

Pros:

  • Best-in-class self-hosted video playback/transcoding controls.
  • Hardware acceleration and stream tuning are mature.

Cons:

  • Requires a second service for photo-first UX and mobile ingest (higher ops burden).
  • Split search/album/timeline experience unless integrated carefully.

Verdict: Strong if video dominates and two-service architecture is acceptable.

Coverage of all operational bases

NixOS/infra fit

  • Immich: commonly deployed in containerized stacks; feasible behind existing reverse proxy patterns on palatine-hill.
  • PhotoPrism/Jellyfin: both well-known in self-hosted ops; straightforward reverse proxy integration.

Storage and data portability

  • Prefer filesystem-originals layout with generated derivatives separated.
  • Require export path that preserves originals and metadata sidecars where possible.

Security/auth

  • Require support for robust auth model behind reverse proxy; OIDC/SSO desirability depends on selected app and deployment mode.
  • Apply least-privilege volume mounts and network scoping in docker setup.

Backup/restore

  • Backup originals/media path plus DB state and app config.
  • Validate restore with sampled timeline/albums and video playback checks.

Upgrade strategy

  • Pin image versions.
  • Stage upgrades in a non-production path if possible.
  • Keep rollback plan for DB schema migrations.

Suggested decision

Choose Immich for primary implementation.

Decision triggers that would flip to 2-service architecture (PhotoPrism + Jellyfin):

  • If test clips show unacceptable playback/transcoding behavior in target clients.
  • If required codec/hardware acceleration path is materially better in Jellyfin for our workload.

Validation plan before cutover

  1. Run a pilot with representative corpus (photos + mixed codecs: H.264/H.265/VP9/AV1 where available).
  2. Validate mobile upload reliability over several days.
  3. Validate browser playback/start latency/seek behavior on LAN and remote access path.
  4. Measure CPU/GPU utilization during transcode-heavy playback.
  5. Confirm backup + restore drill.

Migration outline from Nextcloud Memories

  1. Inventory current library and metadata dependency surface.
  2. Export/normalize originals into target library layout.
  3. Import and index in chosen platform.
  4. Parallel run for verification window.
  5. Cut over clients and sharing links.
  6. Retain rollback window before decommissioning Memories path.

If desired, I can open follow-up implementation issues next:

  • Deploy Immich on palatine-hill
  • Hardware transcoding enablement task
  • Migration runbook and rollback checklist
Full evaluation focused on priorities: mobile upload, streaming compatibility/quality, transcoding, and maintenance/update cadence. ## Executive recommendation Recommend Immich as primary replacement for Nextcloud Memories. Why: it is currently the strongest all-in-one fit for mobile-first ingest plus video playback/transcoding in a self-hosted stack, with active maintenance and broad community usage. Secondary recommendation (if Immich is rejected): PhotoPrism + Jellyfin split architecture, accepting higher operational complexity for stronger specialized video handling. ## Method I scored each option on a weighted model (1-5 scale): - Mobile upload: 30% - Streaming compatibility/quality: 20% - Transcoding capability: 20% - Maintenance/update cadence: 15% - Ops fit for this repo (NixOS/docker/reverse proxy/backup): 10% - Security/auth posture: 5% Total weighted score out of 5.0. ## Candidates and weighted scoring | Option | Mobile Upload (30) | Streaming Quality (20) | Transcoding (20) | Maintenance (15) | Ops Fit (10) | Security/Auth (5) | Weighted Total | |---|---:|---:|---:|---:|---:|---:|---:| | Immich | 5.0 | 4.5 | 4.5 | 4.5 | 4.0 | 4.0 | 4.58 | | PhotoPrism | 3.0 | 3.5 | 3.0 | 4.0 | 4.0 | 4.0 | 3.43 | | LibrePhotos | 2.5 | 2.5 | 2.0 | 2.5 | 3.0 | 3.5 | 2.53 | | PiGallery2 | 1.5 | 2.0 | 1.0 | 3.0 | 4.0 | 3.5 | 2.13 | | Ente (self-host posture varies by component scope) | 4.0 | 3.5 | 3.0 | 4.0 | 2.5 | 4.5 | 3.58 | | Jellyfin + photo companion (2-service) | 2.5 | 5.0 | 5.0 | 4.5 | 2.5 | 4.0 | 3.90 | ## Detailed evaluation ### 1) Immich Pros: - Best-in-class mobile upload workflow for self-hosted photo/video use. - Very strong timeline UX and metadata handling for mixed libraries. - Solid browser streaming behavior with practical transcoding pipeline support. - Active release cadence and large user base. Cons: - Deployment includes multiple moving parts (DB + redis + ML/transcoding workers depending on setup). - Has had periods of rapid schema/runtime changes; requires disciplined upgrade practice. Transcoding notes: - Supports server-side video processing and practical playback compatibility for common client/browser targets. - Hardware acceleration is possible depending on host/GPU pass-through setup and codec path. Maintenance view: - Strong cadence and responsiveness, but updates should be tested/staged due to pace. Verdict: Best overall fit for stated priorities. ### 2) PhotoPrism Pros: - Mature project with stable operational behavior. - Good metadata/search and library management. - Easier to reason about for conservative ops teams. Cons: - Mobile upload usually depends on third-party/WebDAV patterns; weaker first-party mobile UX. - Video handling/transcoding less central than in Immich/Jellyfin workflows. Verdict: Good stability choice, weaker for mobile-first ingest and robust video UX. ### 3) LibrePhotos Pros: - FOSS focus and familiar photo management features. Cons: - Less confidence on performance consistency and long-term feature parity. - Weaker video/transcoding story versus top candidates. - Lower confidence in maintenance velocity relative to Immich/PhotoPrism. Verdict: Not preferred for this use case. ### 4) PiGallery2 Pros: - Lightweight and simple to deploy. Cons: - Not a strong fit for mobile auto-upload and advanced video streaming/transcoding requirements. Verdict: Useful as minimal gallery, not suitable as Memories replacement for priorities listed. ### 5) Ente (self-host scope caveat) Pros: - Strong security/privacy model and polished clients. - Better mobile story than many alternatives. Cons: - Self-host deployment/feature surface can differ based on component maturity and chosen architecture. - Operational model may be less straightforward for our existing infra patterns. Verdict: Interesting option, but higher uncertainty for immediate migration path. ### 6) Jellyfin + photo companion architecture Pros: - Best-in-class self-hosted video playback/transcoding controls. - Hardware acceleration and stream tuning are mature. Cons: - Requires a second service for photo-first UX and mobile ingest (higher ops burden). - Split search/album/timeline experience unless integrated carefully. Verdict: Strong if video dominates and two-service architecture is acceptable. ## Coverage of all operational bases ### NixOS/infra fit - Immich: commonly deployed in containerized stacks; feasible behind existing reverse proxy patterns on palatine-hill. - PhotoPrism/Jellyfin: both well-known in self-hosted ops; straightforward reverse proxy integration. ### Storage and data portability - Prefer filesystem-originals layout with generated derivatives separated. - Require export path that preserves originals and metadata sidecars where possible. ### Security/auth - Require support for robust auth model behind reverse proxy; OIDC/SSO desirability depends on selected app and deployment mode. - Apply least-privilege volume mounts and network scoping in docker setup. ### Backup/restore - Backup originals/media path plus DB state and app config. - Validate restore with sampled timeline/albums and video playback checks. ### Upgrade strategy - Pin image versions. - Stage upgrades in a non-production path if possible. - Keep rollback plan for DB schema migrations. ## Suggested decision Choose Immich for primary implementation. Decision triggers that would flip to 2-service architecture (PhotoPrism + Jellyfin): - If test clips show unacceptable playback/transcoding behavior in target clients. - If required codec/hardware acceleration path is materially better in Jellyfin for our workload. ## Validation plan before cutover 1. Run a pilot with representative corpus (photos + mixed codecs: H.264/H.265/VP9/AV1 where available). 2. Validate mobile upload reliability over several days. 3. Validate browser playback/start latency/seek behavior on LAN and remote access path. 4. Measure CPU/GPU utilization during transcode-heavy playback. 5. Confirm backup + restore drill. ## Migration outline from Nextcloud Memories 1. Inventory current library and metadata dependency surface. 2. Export/normalize originals into target library layout. 3. Import and index in chosen platform. 4. Parallel run for verification window. 5. Cut over clients and sharing links. 6. Retain rollback window before decommissioning Memories path. If desired, I can open follow-up implementation issues next: - Deploy Immich on palatine-hill - Hardware transcoding enablement task - Migration runbook and rollback checklist
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ahuston-0/nix-dotfiles#217