Jeg har i et stykke tid ønsket mig en ordentlig fotoramme til digital visning. Du ved, den slags, der cykler gennem dine yndlingsminder, står elegant på en hylde eller hænger på væggen og bare fungerer.

Mine Ønsker

Behovene var i virkeligheden ret ligetil:

  • Billedvisning i høj kvalitet: Jeg ville ikke have en billig skærm med lav opløsning, der får mine billeder til at se værre ud, end de fortjener.
  • Offline, ikke cloud-baseret: Jeg ønskede, at mine billeder skulle forblive mine billeder, ikke svævende rundt på andres servere. Jeg ville heller ikke have, at enheden pludselig skulle holde op med at virke, fordi internettet røg.
  • Intet abonnementspjat: Jeg er træt af, at alt bliver til en månedlig udgift. Køb det én gang, ej det for evigt.

Det viste sig, at det er sværere, end man skulle tro, at finde noget, der opfylder alle disse krav uden at sprænge budgettet. Så naturligvis besluttede jeg at bygge min egen.

iPad’en: Et Nyt Liv til Teknologien

I stedet for at købe nyt valgte jeg en renoveret iPad fra refurbed.dk. Jeg gik efter en iPad Air 2 (2014) med en 9,7” skærm, 16 GB lagerplads, i space grey, og den kom med 12 måneders garanti. Den samlede pris? 734,99 DKK. Faktisk temmelig pebret, men jeg mener, det var pengene værd for:

  • Retina-skærm
  • 2048 x 1536-pixel opløsning ved 264 PPI
  • Antirefleksbelægning

Havde det været en enhed, jeg skulle bruge som en bærbar enhed, ville jeg nok have sat spørgsmålstegn ved batterilevetiden. Jeg var også ligeglad med eventuelle ridser på bagsiden eller siderne, da de alligevel ville blive dækket af en ramme. En anden ting, jeg virkelig satte pris på ved dette valg, var den miljømæssige påvirkning. Ifølge ordreoplysningerne bidrog jeg ved at vælge renoveret til:

  • 435 g e-affald sparet
  • 82 kg CO2 sparet
  • 37.398 liter vand sparet

Ikke dårligt for en fotoramme, vel? Desuden er der noget tilfredsstillende ved at forhindre fuldt funktionsdygtig teknologi i at ende på lossepladsen.

Rammen: IKEA til Undsætning

Til selve rammen holdt jeg det enkelt med IKEAs RÖDALM i sort, i størrelsen 21x30 cm. Den kostede kun 39 DKK. Helt ærligt vil enhver ramme, der er større end iPad’en, fungere; vælg blot den stil, der passer til dit rum. Nøglen er at få passepartoutet tilpasset korrekt til netop din opsætning.

Passepartoutet: Skræddersyet er Bedst

Her blev det en smule mere indviklet. Jeg havde brug for et specialfremstillet passepartout for at montere iPad’en korrekt i rammen, og jeg gad ikke gamble med standardløsninger.

Jeg bestilte fra specialrammer.dk med disse specifikationer:

  • Hvidt passepartout, specialmål
  • Centreret åbning
  • Ydre mål: 21 cm x 30 cm (for at matche IKEA-rammen)
  • Åbningsmål: 14,8 cm x 19,7 cm (en anelse mindre end iPad-skærmens dimensioner)
  • Samlet pris: 112,90 DKK (hvoraf 69 DKK dog var porto… av!)

Den 3D-printede Holder: Stabilitet er Altafgørende

iPad Spacer Model

iPad’en sidder ikke naturligt plant i rammen, så jeg designede nogle hjørnebeslag for at holde den på plads. Dimensionerne var:

  • Venstre: 500 mm
  • Top: 500 mm
  • Bund: 310 mm
  • Højre: 210 mm
  • Tykkelse: 7 mm (for at matche iPad’ens højde)

Jeg printede fire beslag (ét til hvert hjørne), selvom to i modsatte hjørner sandsynligvis ville have været tilstrækkeligt, set i bakspejlet. Hvis du ikke har en 3D-printer, er jeg overbevist om, at du nemt kunne lave disse af træ eller endda tykt pap. Det ville formentlig også være hurtigere end at vente på, at printene blev færdige.

Sådan ser de ud i rammen:

4 spacers in corners, holding iPad in the center of frame

Strøm: Kabel-hovedbruddet…

Der fulgte intet kabel med iPad’en, og her blev det lidt af en udfordring. iPad’ens Lightning-port vender ind mod rammen, så jeg havde brug for et kabel, der kunne passe ind, men derefter bøje ud på meget lidt plads.

Mit første forsøg var en Temu-bestilling, der inkluderede et 90-graders/vinklet iPhone-ladekabel (24,26 DKK) og et billedrammesæt i resin (81,36 DKK). Resin-rammen ankom med brud i tre ud af fire hjørner, og selvom kablet i første omgang virkede, leverede det ikke nok strøm til at holde iPad-skærmen tændt konstant.

Jeg endte med at bestille et ordentligt kabel fra ledpaerer.dk: “USB-kabel til Lightning Baseus Cafule, 2.4A, 2m” i hvid til 24 DKK. Dette virker rent faktisk og ser ud til at levere strøm uden problemer.

Heldigvis passer det lige akkurat…

Charge cable tight fit

Til USB-opladerstikket havde jeg nogle Essager 20W GaN PD USB C-opladere liggende fra en tidligere AliExpress-bestilling, som fungerede perfekt. De kostede kun omkring 30 DKK.

Softwaren: Immich og Immich Frame

Jeg hoster en instans af Immich på min server. Det er en selv-hostet løsning til håndtering af billeder og videoer, der lader dig “nemt sikkerhedskopiere, organisere og administrere dine billeder på din egen server” uden at gå på kompromis med privatlivets fred.

For noget tid siden blev jeg uden varsel i praksis “udelukket” fra Amazon. Altså, jeg kunne slet ikke logge ind. Ikke engang for at kunne bruge kundeservice. Jeg måtte finde et obskurt telefonnummer fra en anden hjemmeside, som tillod mig at ringe ind, hvorefter de blot genaktiverede min konto. Hvad i alverden?? Jeg har, og bruger stadig, Amazon Photos som en måde at opbevare sikkerhedskopier af billeder på. Da jeg har Amazon Prime, giver det mening også at udnytte denne backup.

Nå, men hvis du kører Proxmox, findes der endda et LXC-script for at komme hurtigt i gang. Jeg satte faktisk min op, før dette script eksisterede, så jeg kører den via Docker Compose, men begge metoder fungerer glimrende.

Til selve visningen bruger jeg Immich Frame. Det er et fantastisk projekt designet specifikt til dette formål. Der var bare ét problem: der var ikke rigtig nogen gode gratis “kiosk-lignende” muligheder til at køre på en iPad, og Immich Frame skulle vises i en browser.

Jeg oprettede en issue, hvor jeg spurgte ind til potentiel PWA (Progressive Web App)-understøttelse, og vedligeholderen var ikke kun enig, men implementerede det temmelig hurtigt. Dette er open source, når det er bedst.

Derefter administrerer jeg simpelthen et album i Immich kaldet “Display Frames”, hvor jeg udvælger de billeder, jeg finder mest tiltalende til visning på en hvilken som helst billedramme. Så kan Immich Frame rotere gennem billeder fra dette album. Dette album bruger jeg også på andre enheder, der for eksempel kører et Home Assistant Dashboard.

Docker Compose-filen er som følger (baseret på kildens docker-compose-fil):

#
# ADVARSEL: Sørg for at bruge docker-compose.yml fra den nuværende udgivelse:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# Compose-filen på main-grenen er muligvis ikke kompatibel med den seneste udgivelse.
#

# BEMÆRK: Sørg også for at oprette en tilhørende .env-fil til variabler

name: immich                

services:
  # Hold tingene automatisk opdateret (valgfrit)
  watchtower:             
    image: containrrr/watchtower
    environment:
      - WATCHTOWER_CLEANUP=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  # Immich-serveren
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:       
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env    
    ports:
      - '2283:2283'                
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false
  # Immich Frame til visning på enheder (f.eks. iPad'en)
  immichframe:
    container_name: immichframe
    image: ghcr.io/immichframe/immichframe:latest
    restart: always
    depends_on:
      - immich-server
    ports:
      - "8080:8080"
    volumes:
      - ${IMMICHFRAME_CONFIG_LOCATION}:/app/Config/Settings.json
    environment:
      TZ: "Europe/Copenhagen"

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always

volumes:
  model-cache:

Tiraden om Apple-skatten

Her er noget, der frustrerer mig. Immich Frame er et fremragende projekt, som med glæde ville lave en native iOS-app, men Apple kræver, at udviklere betaler $100 hvert eneste år bare for det privilegium? Dette tvinger app-udviklere til at tage betaling for apps for at dække omkostningerne, og i sidste ende gavner det Apple mere end nogen anden. Økosystemet har sine fordele, men lige netop dette aspekt? Det er elendigt.

Kiosk-tilstand: Låsning af Enheden

iOS har en funktion kaldet Assisteret adgang, der lader dig låse enheden til en enkelt app. Til mit hjemmebrug fungerer det perfekt til at forhindre, at nogen ved et uheld (eller med vilje) skifter til andre apps. Det er ikke sikkerhed på virksomhedsniveau, men det er mere end rigeligt til en fotoramme.

Resultatet

Close-up of final device view

Så der har du det: en højkvalitets, offline, abonnementsfri digital fotoramme for under 900 DKK (uden at medregne opladeren, jeg allerede havde). Den viser mine billeder smukt, respekterer mit privatliv og gav et nyt liv til en fuldt funktionsdygtig iPad.

Her er styklisten (Bill of Materials):

VareKildePris (DKK)Noter
Renoveret iPad Air 2 (2014)refurbed.dk734,999,7” skærm, 16 GB, space grey, 12 måneders garanti
RÖDALM Ramme (21x30 cm, sort)IKEA39,00Enhver ramme større end iPad’en fungerer
Specialfremstillet hvidt passepartoutspecialrammer.dk43,90Man kan muligvis finde en standardstørrelse billigere
USB-kabel til Lightning Baseus Cafule, 2.4A, 2mledpaerer.dk24,00Hvid, korrekt strømforsyning
Essager 20W GaN PD USB C-oplader AliExpress~30,00Fra en tidligere bestilling
3D-printede hjørnebeslagSelv-printet~0,00Filamentomkostninger ubetydelige; træ/pap kunne bruges
Total~871,89 DKKOmkring 116,72 EUR

Det bedste? Den er fuldstændig under min kontrol. Ingen cloud-tjenester, ingen månedlige gebyrer, ingen bekymringer om, hvorvidt firmaet lukker deres servere næste år. Kun mine billeder, min hardware og mit hjemmenetværk. Dog også mit problem, hvis noget går galt, selvfølgelig 😁

Vil jeg anbefale denne tilgang? Absolut, hvis du er komfortabel med lidt gør-det-selv og ønsker noget, der er helt dit eget. Ruten med den renoverede iPad er særligt tilfredsstillende, både for pengepungen og miljøet. Og med Immich og Immich Frame, der håndterer softwaresiden, fungerer hele opsætningen bare.

Fremtidige Forbedringer

I fremtiden vil jeg stadig gerne have en app, der betyder, at den øverste statuslinje ikke vises. Jeg mener at huske, at denne statuslinje er svær (umulig?) at skjule. Jeg er ligeglad med at se klokken, datoen eller batteristatus på en fuldskærms-app.

PWA’en fungerer godt, selvom jeg er nødt til at zoome en smule ind for at få en mere “fuldskærms”-lignende oplevelse. Det ville også være fantastisk, hvis dette ikke var nødvendigt.