Tobias Ludwig
Start
ServicesWeb, Apps, Backend und KIBranchen-DemosBeispielseiten für Handwerk, Praxis, GastroReferenzenKundenprojekte mit ErgebnisMatch-CheckPasst das Vorhaben zu mir?Über michWer hinter der Seite steht
ProjekteEigene Software und Open SourceProdukteFertige Apps und WerkzeugeFlutterPlugins und PaketeBlogNotizen aus der Praxis
ToolsKleine Helfer im BrowserTech-WikiWerkzeuge und Stacks, kurz erklärtShowcaseDemos, Shader, Inszenierungen
Support & HilfeHilfe zu laufenden ProjektenMein KontoTickets und Zugänge
Erstgespräch
Erstgespräch buchenKostenloser Kennenlern-CallKontakt schreibenNachricht per Formular
$whoami
Tobias Ludwig
DevOps · Application Manager · Software Engineer
$ls /pages
tobias-ludwig/projekte/kontakt/kalender/impressum/datenschutz/
$git remote
github.com/nexas105
online·next.js 16·hono·postgresql
© 2026 tjl·stay curious_
Ambient OFF
Weiter so… ↓↓ ← → ← → B A
/flutter/media_backup/Active/v0.3.0

media_backup

iOS-Fotomediathek indexieren und in die eigene Cloud sichern: Supabase, S3, GCS, Azure, Firebase oder ein beliebiger HTTP-Endpunkt.

pub.devSource
$flutter pub add media_backup
iosswiftflutter
flutter package

Snapshot

media_backup

flutter pub add media_backup

status

Active

version

v0.3.0

score

140/160

platforms

3
iosswiftflutter
Package öffnen
FeaturesDokuCode
01

Features

features.md
  • →Fotomediathek in SQLite indexieren, Scan per Cursor wiederaufnehmbar, danach inkrementell
  • →Live-Deltas über PHPhotoLibraryChangeObserver
  • →Upload zu Supabase, S3, GCS, Azure, Firebase oder eigenem HTTP-Endpunkt
  • →Wiederaufnehmbare Uploads: TUS bei Supabase, Multipart bei S3
  • →Byte-Budget statt fester Aufgabenzahl, getrennte Pools für Extraktion und Upload
  • →Fortschritts-Stream je Asset ohne Polling, Steuerung zur Laufzeit
  • →iCloud-Download vor dem Upload, optional
02

Dokumentation

README.md

Ein Flutter-Plugin, das die iOS-Fotomediathek in eine lokale SQLite-Datenbank einliest und die Medien an einen Speicher der Wahl hochlädt: Supabase, S3, GCS, Azure, Firebase oder ein eigener HTTP-Endpunkt.

Der erste Scan ist per Cursor wiederaufnehmbar, danach holen Folgescans nur noch, was seit dem letzten Lauf neu oder geändert ist. Ein Beobachter auf der Fotomediathek meldet Aufnahmen, Änderungen und Löschungen live. Extraktion (iCloud-Download, Temp-Datei) und Upload laufen in getrennten Pools, damit ein langsamer iCloud-Download keinen Upload-Platz blockiert. Die Nebenläufigkeit wird über ein Byte-Budget gesteuert statt über eine feste Anzahl Aufgaben.

Große Dateien laufen wiederaufnehmbar über TUS (Supabase) oder S3-Multipart. Fehler werden mit Backoff und Jitter wiederholt, dauerhafte Fehler markiert. Ein Stream liefert Fortschritt, Abschluss und Fehler je Asset ohne Polling. Start, Pause, Wiederholen, Statuszähler und Datenbank-Reset sind zur Laufzeit steuerbar.

Bisher nur iOS (ab 13.0), Android ist geplant. MIT-Lizenz.

03

Code-Beispiele

Installation
dependencies:
  media_backup: ^0.3.0
Konfigurieren
await MediaBackup.configure(
  settings: MediaBackupSettings(
    enableDeltaObserver: true,
    startUploader: true,
    maxInFlightBytes: 300 * 1024 * 1024,
    remoteFolder: 'my_app/user_42',
    provider: const SupabaseUploadProvider(
      projectUrl: 'https://<project>.supabase.co',
      bucket: 'media-backup',
      accessToken: '<token>',
    ),
  ),
);
final init = await MediaBackup.instance.initialize();
if (init.permissionGranted) {
  await MediaBackup.instance.loadAssetsToDatabase();
}
Steuern
MediaBackup.instance.uploader.start();
MediaBackup.instance.uploader.pause();
await MediaBackup.instance.uploader.retryFailed();
final counts = await MediaBackup.instance.uploader.statusCounts();
pubspec.yaml
name:media_backup
version:0.3.0
dart:>=3.0.0
license:MIT
score:140/160
links
pub.dev Source