Ein Jahr Videos lokal auf einem MacBook von 2021 mit Gemma 4 31B indexieren (50 GB Swap)
(blog.simbastack.com)- Der Engpass beim Videoarchiv war nicht das Schnitt-Tool, sondern die fehlende Durchsuchbarkeit. Der Fokus lag darauf, unbeschriftete Clips in einen auf Englisch abfragbaren Index zu verwandeln.
- Das lokal-first entworfene System erzeugt neben jedem Clip eine Sidecar-Datei
.description.mdund extrahiert in einem einzigen Vision-Aufruf Rating, Licht, Ort, Transkript, Keywords und eine beschreibende Zusammenfassung. - Die Pipeline kombiniert
ffprobe,exiftool, Nominatim,ffmpeg, WhisperX,insightfaceund ein Vision-Modell, um Metadaten, GPS, Frames, Transkripte und Face-Embeddings zu erzeugen. - Ein 16-Zoll MacBook Pro M1 Max 64 GB von 2021 führte in LM Studio Gemma 4 31B Q4 aus; bei der Massenverarbeitung stieg der Swap auf bis zu 50,89 GB.
- Ein strukturiertes Schema und Enum-Einschränkungen reduzierten Halluzinationen. Die Massenindexierung konnte lokal mit 31B laufen, während nur die schwierigen 10–20 % der Clips durch ein Cloud-Modell neu bewertet wurden.
Ausgangspunkt des Problems: Suchen statt Schneiden
- Während eines fast halbjährigen Aufenthalts in der Maasai Mara sammelten sich ständig Aufnahmen an, die mit iPhone, DJI Pocket, Drohne, Nikon Z8 und Ray-Ban Meta gemacht wurden, aber die meisten wurden nie wieder geöffnet.
- Die Social-Kanäle von Mara Hilltop standen drei Monate lang still — nicht wegen fehlender Inhalte, sondern wegen fehlender Schnittzeit.
- Mit Claude Code und Opus 4.5/4.6 waren bei der Entwicklungsarbeit lange Agent-Runs und parallele Aufgaben möglich geworden; zusammen mit dem Launch der ersten bezahlten Unterkunft von KaribuKit blieb dadurch noch weniger Zeit für Videoschnitt.
- Die erste Idee war ein monatlicher SaaS-Stack für 140 $ aus Eddie AI, Higgsfield MCP, Submagic und Buffer, doch das passte nicht zum tatsächlichen Engpass.
- Generative KI-Videos passten nicht zu einer realen Reisemarke; falsch dargestellte KI-Szenen konnten Vertrauen beschädigen, wenn Gäste den tatsächlichen Ort erwarten.
- Realistisch war keine Posting-Frequenz von 3–5 Beiträgen pro Woche, sondern eher 2–3, sodass der ursprüngliche Plan wahrscheinlich schon in der zweiten Woche gescheitert wäre.
- Das bereits vorhandene DaVinci Resolve Studio samt IntelliSearch, Smart Bins und Voice to Subtitle in Resolve 21 deckte rund 70 % der Funktionen ab, die Eddie bot.
- Übrig blieb eine Konfiguration, in der Claude Code Resolve über das Open-Source-DaVinci-Resolve-MCP steuert und ElevenLabs Voiceover nur für informative Clips übernimmt; die Kosten sanken damit auf 22 $ pro Monat.
Der echte Engpass: Vor dem KI-Editor braucht es einen Index
- Kommerzielle KI-Videoeditoren setzen voraus, dass Videos bereits gelabelt sind, tatsächlich lagen Archive aber unter Namen wie
IMG_*.mov,DJI_*.mp4oderMara june 2024 backup final FINALverstreut vor. - Eddie konnte zwar im Transkript suchen, aber in einem unbeschrifteten Archiv keine Szene wie „Elefanten auf einem Hügel zur goldenen Stunde“ finden.
- Aus Dateinamen, Elternordner, GPS-Koordinaten und Transkripttext allein lässt sich der visuelle Inhalt nicht erkennen, etwa „Weitwinkelaufnahme bei Sonnenaufgang mit einer Giraffe im Bild“.
- Der eigentliche Hebel lag nicht auf Ebene des Editors, sondern davor: Zuerst brauchte es einen Index, der das Archiv auf Englisch abfragbar macht.
Entwurf eines lokal-first Indexers
- Die Gesamtstruktur ähnelte dem, was bei SimbaStack als AI-native Build für Kunden entsteht, aber da hier Kunde und Engineer dieselbe Person waren, gingen Entscheidungen schneller.
-
Vier Einschränkungen
- Es musste lokal-first sein.
- Das Mara-Hilltop-Archiv lag auf physischen SSDs, persönliche Videos auf dem Laptop; tausende Multi-GB-Clips in die Cloud hochzuladen, passte weder zu Kosten noch zu Datenschutz.
- Statt einer zentralen DB waren Sidecar-Dateien gewünscht.
- Neben jedem Clip liegt eine
.description.md, die sich als Klartext mit grep durchsuchen lässt. - Selbst wenn der Indexer später kaputtgeht, bleiben die Dateien erhalten, und beim Verschieben zwischen Laufwerken wandern die Daten mit.
- Neben jedem Clip liegt eine
- Ein Vision-Aufruf musste alle benötigten Informationen auf einmal ziehen.
- Da ein Vision-Pass über extrahierte Frames teuer ist, wurde das Schema von Anfang an breit angelegt, damit auch später relevante Informationen schon im ersten Aufruf enthalten sind.
- Dazu gehörten rating, technical quality, lighting, time of day, color palette, audio quality, people count, keywords, faces, location, transcript und prose description.
- Es musste zwischen drei Vision-Backends wählbar sein.
- Standard war die CLI des Claude-Max-Abos ohne Grenzkosten.
- Wenn Geschwindigkeit wichtig war, kam die Anthropic API zum Einsatz.
- Für Massenverarbeitung wurde ein lokales Backend über LM Studio genutzt — und genau dieses lokale Backend war zentral.
- Es musste lokal-first sein.
Verarbeitungspipeline pro Clip
- Mit
ffprobewerden Metadaten gelesen. - Mit
exiftoolwerden GPS-Breitengrad, -Längengrad und -Höhe gelesen; das funktionierte gleichermaßen für Videos von iPhone, DJI Pocket und Drohne. - Nominatim übernimmt das Reverse-Geocoding; kostenlos, rate-limitiert und ohne API-Key.
- Mit
ffmpegwerden fünf Frames mit 1920 px Breite in gleichmäßigen Abständen extrahiert. - WhisperX erstellt Transkripte inklusive Wort-für-Wort-Alignment und Sprechertrennung mit pyannote; unterstützt werden 97 Sprachen wie Hindi, Englisch und Suaheli.
insightfaceerkennt Gesichter und speichert 512-dimensionale ArcFace-Embeddings in einer zentralen SQLite-Face-DB, damit später personenübergreifend im Archiv gesucht werden kann.- Das Vision-Modell liest Frames, einen Teil des Transkripts und den Ordnerkontext und gibt YAML-Frontmatter plus eine beschreibende Zusammenfassung zurück.
- Das Endergebnis wird als Sidecar
.description.mdneben dem Clip gespeichert. - Beim realen Mara-Hilltop-Clip
IMG_1103.MOVwar aus dem Dateinamen kein Kontext erkennbar, aber das von Gemma erzeugte Sidecar enthielt Hinweise auf den Aufbau eines Safari-Zelts, einen Kameraschwenk vom Innenraum in die Savanne, den Shot-Typ und mögliche Einsatzzwecke wie Marketing-Reels oder Travel-Vlog-B-Roll. - Auf Ordnerebene wurden zusätzlich zu den Sidecars pro Clip auch
_INDEX.jsonund_INDEX.mdim Wurzelbereich erzeugt, für schnelles grep und zum Weiterreichen an LLMs. - Die gesamte Implementierung ist ein Claude-Code-Skill mit rund 1.400 Zeilen Python; Claude Code schrieb den Großteil, der menschliche Anteil lag bei Architektur, Prompting, Schemadesign und Bug-Triage.
Ein lokales 31B-Modell auf einem alten MacBook
- Das 16-Zoll MacBook Pro M1 Max mit 64 GB RAM, 2021 gekauft, war ursprünglich nicht für LLMs gedacht, sondern dafür, gleichzeitig Chrome-Tabs, DaVinci Resolve, Slack, Discord und Drive auszuführen.
- Fünf Jahre später verarbeitet derselbe Laptop in LM Studio mit Gemma 4 31B Q4 ein Jahr Videoarchiv.
- In LM Studio war ein 28,40-GB-Modell in den Speicher geladen, die REST-API lief auf
127.0.0.1:1234. - Bei der Massenverarbeitung reichten 64 GB RAM nicht aus; laut Activity Monitor stieg die Swap-Nutzung auf maximal 50,89 GB.
- Das war kein Zustand für den normalen Arbeitsalltag, aber akzeptabel, um das System über ein Wochenende hart laufen zu lassen.
- Der Laptop wurde heiß, die Lüfter liefen laut, erzeugte aber weiter Sidecars, während parallel andere Arbeit lief.
- Das 16-Zoll M1 Max zeigte, dass selbst fünf Jahre alte Hardware ein 31B-Parameter-Modell noch mit brauchbarer Geschwindigkeit betreiben kann; bei effizienteren lokalen LLMs könnten weitere 3–5 Jahre Nutzung realistisch sein.
Vier Bugs und die Lehren daraus
-
API-Änderung bei der Sprechertrennung in WhisperX 3.8
- In WhisperX 3.8 wurde
whisperx.DiarizationPipelinein das Untermodulwhisperx.diarizeverschoben. - Das Konstruktorargument
use_auth_tokenwurde entsprechend pyannote 3.x intokenumbenannt. - Die Lösung war Signature-Introspection.
- Das Skript versucht zuerst
token=; wenn der Konstruktor einTypeErrorwirft, fällt es aufuse_auth_token=zurück. - Bei schnelllebigen KI-Bibliotheken ist defensives Aufrufen von Konstruktoren eine günstige Versicherung.
- In WhisperX 3.8 wurde
-
Claude CLI gab Berechtigungsfehler als Erfolg zurück
- Beim ersten Test des CLI-Backends lieferten vier Sidecars alle denselben Text: „I need permission to read the image frames...“
- Exit-Code war 0 und die Ausgabe nicht leer, also bestand sie die Erfolgskontrolle des Skripts.
- Ohne
--permission-mode bypassPermissionsim nicht-interaktiven Modus liefert die Claude CLI statt eines Prompts den Text der Berechtigungsverweigerung als Antwort-Body zurück. - Die Lösung war, das Flag zu ergänzen und kurze Antworten mit „I need permission“ nicht als Beschreibung, sondern als Fehler zu behandeln.
- Wer KI-Tools skriptgesteuert nutzt, muss mit stillen Fehlern in nicht-interaktiven Berechtigungsflüssen rechnen.
-
Gemma gab
people_count: "many"zurück- Der Vision-Prompt hatte „integer or the string "many" if >10“ verlangt; Gemma folgte der Anweisung also korrekt.
- Der Bug lag nicht beim Modell, sondern beim Schemadesign.
- Danach wurde explizit eine Schätzung als Integer von 0–99 gefordert, und bestehende
"many"-Antworten wurden im Parser zwangsweise umgewandelt. - Schemafelder sollten kein Union wie
int oder bestimmter stringsein; entweder immer Integer oder immer String, damit nachgelagerte Verbraucher simpel bleiben.
-
Ein verwackelter Motorradclip wurde fälschlich verworfen
- Der anfängliche Cull-Prompt orientierte sich eher an Maßstäben für ein Fotoportfolio und bewertete starke Bewegungsunschärfe, weichen Fokus und Verwacklung als
cull. - Ein nachts handgehalten gefilmter Motorradclip aus einer Spanienreise wurde dadurch ebenfalls zur Verwerfung markiert, obwohl genau diese Unschärfe die Stimmung der Erinnerung trug.
- Das Kriterium wurde von „nicht perfekt aufgenommen“ auf „kein tatsächlicher Record“ umgestellt.
- Verworfen werden sollten nur noch Clips wie Objektivdeckel-Aufnahmen, Hosentaschen-Videos, zweisekündige Testclips oder komplett ausgefressene Belichtungen.
- Fotoarchive sollte man aggressiv cullen, Videoerinnerungen dagegen großzügig; selbst bei gleichem Schema müssen die Modi klar getrennt sein.
- Der anfängliche Cull-Prompt orientierte sich eher an Maßstäben für ein Fotoportfolio und bewertete starke Bewegungsunschärfe, weichen Fokus und Verwacklung als
Erkenntnisse aus strukturiertem Schema und lokalem Modell
-
Enum-Einschränkungen reduzieren Halluzinationen
- Gemma 4 E4B beschrieb ein nachts aufgenommenes Coworking-Space-Foto als „brightly lit, abundant natural light, floor-to-ceiling windows“, obwohl draußen völlige Dunkelheit herrschte.
- Mit einem strukturierten Schema für 31B und einer Auswahl aus
golden_hour | bright_daylight | overcast | dim_interior | nighttime | mixed | unclearkamen sowohl thinking-off als auch thinking-on wieder beinighttimeheraus. - In offenem Fließtext kann das Modell falsche Beschreibungen erfinden, aber bei einem Enum kann es keine neuen Werte erfinden, sondern nur falsch auswählen.
- Das Schema war sicherer als bloße Instruktionen.
-
Lokales 31B plus strukturierte Prompts verkleinern den Abstand zur Cloud
- Gemma 4 31B Q4 thinking-off erzeugte mit einem strukturierten Schema bei vielen Testclips Ausgaben, die kaum von Sonnet 4.6 zu unterscheiden waren.
- Der Mehrwert des Cloud-Modells zeigte sich vor allem bei den schwierigen 10–20 % der Clips.
- Für skalierbare Batch-Jobs ließ sich ein zweistufiger Aufbau nutzen: Tausende Clips über Nacht lokal indexieren und nur die von lokal als
reviewmarkierten Clips in der Cloud neu bewerten.
-
KI-Videoeditoren konkurrieren auf einer zu hohen Schicht
- Die wertvolle Schicht war nicht der Editor, sondern der durchsuchbare Index.
- Wenn sich per natürlicher Sprache nach etwas wie „handgehaltene Innenraumclips aus Mara, goldene Stunde, mit Menschen, länger als 8 Sekunden“ suchen lässt, wird der Editor darüber deutlich einfacher.
- Der Markt für KI-Editoren konkurriert auf einer Oberflächenschicht über einem Index, den es noch gar nicht gibt, und überspringt damit die eigentliche Voraussetzung.
Nächste Schritte und Grenzen
- Der nächste Schritt ist ein Editor, der Claude Code als Orchestrator nutzt, mit DaVinci Resolve MCP Schnitte erstellt und bei informativen Clips ElevenLabs-Voiceover hinzufügt.
- Für Voice-Cloning gibt es klare Grenzen.
- Es wird nur für Utility-Inhalte genutzt, etwa Wegbeschreibungen, Zimmererklärungen, mehrsprachige Versionen oder sachliche Informationen, die man auch selbst sprechen würde.
- Für Reviews oder Gründerbotschaften wird es nicht verwendet.
- 2026 sind Gesetze zu Offenlegungspflichten realistisch, und Vertrauen in eine Hospitality-Marke ist schnell verspielt.
- Mit einem Index lässt sich vermeiden, in 47 GB DJI-Pocket-Material manuell nach einem Sonnenaufgangs-Weitwinkelshot zu scrubben.
- Auf dem inzwischen fünf Jahre alten Laptop ist ein Jahr Mara-Hilltop-Video jetzt auf Englisch abfragbar; die Kosten waren ein Wochenendarbeitsblock und 50 GB Swap.
- Die restlichen Jahre auf alten SSDs sind die nächsten Kandidaten für die Verarbeitung.
- Die Social-Kanäle von Mara Hilltop sind trotzdem noch nicht wieder aktiv.
- Der Indexer löst nur das Problem, passende Clips zu finden.
- Die andere Hälfte ist ein Editor, der daraus fertige Reels macht; bei Erfolg soll ein Folgeartikel erscheinen, bei Misserfolg einer über die Gründe.
- Die richtige Antwort könnte auch sein, jemanden einzustellen.
- Einen Editor mit dem warmen, beobachtenden Gespür zu finden, das zu Mara Hilltop passt, könnte schwieriger sein als einen weiteren Skill zu schreiben.
- Übermäßig zerschnittene MTV-artige Reels sind nicht das gewünschte Ziel.
- Der Code ist unter github.com/Simbastack-hq/framedex veröffentlicht; Pull Requests und Issues sind willkommen.
1 Kommentare
Hacker-News-Kommentare
Es sieht so aus, als hätte Claude beim Schreiben des Artikels die falsche URL zum Teilen ausgewählt. Sofern dein Home-Verzeichnis nicht nach außen exponiert ist, ist
~/.claude/skills/video-index/nicht erreichbar, daher würde mich interessieren, ob du die Skill-Datei teilen kannstUpdate: Ich habe in Eile dieses Repository erstellt - https://github.com/Simbastack-hq/framedex
Die Lizenz ist MIT, und ich hatte noch keine Gelegenheit, es nach der Verallgemeinerung ordentlich zu testen. Ich werde es bald gründlich durchgehen und weitere Updates hinzufügen
Die zwei großen TODOs sind: 1) mit diesem Index und der Hilfe von Claude das Videoschneiden in DaVinci Resolve zu beschleunigen, 2) derzeit werden nur Videos verarbeitet, aber ich möchte es so erweitern, dass es auch Tausende von Standbildern auf der Kamera verstehen kann
Ich verstehe nicht ganz, warum so viel Swapping nötig ist. Wenn man die erforderliche Speicherbandbreite bedenkt, könnte das die Lebensdauer der SSD ziemlich schnell verkürzen
Das 4-Bit-quantisierte Modell von Gemma 4 31B sollte eher bei etwa 19GiB liegen und nicht bei 28,4GiB [1]. Ich füge nicht oft Bilder ein, daher weiß ich nicht, wie viel zusätzlicher Speicher im Kontext dafür gebraucht wird, aber ich würde nicht erwarten, dass es über 10GiB hinausgeht
Im Aktivitätsmonitor sieht man mehrere Electron-Apps zusätzlich zu Handy und der VM für Claude Code, auf der das Modell offenbar geladen wurde, daher scheint die eigentliche Ursache eher dort zu liegen. Wenn das Notebook anfängt, die Platte stark zu bearbeiten, frieren solche Apps ohnehin ein und sind dann wohl nutzlos
[1] https://huggingface.co/mlx-community/gemma-4-31b-it-4bit
Es hat zwar etwas geruckelt, aber ich fand es trotzdem beeindruckend, dass ich weiterarbeiten konnte, selbst mit vielen offenen Tabs im Brave-Browser
Mich würde interessieren, ob dir bewusst war, dass es das schon gibt, es ziemlich gut ist und keine 50GB Swap verschlingt
https://github.com/iliashad/edit-mind
Cool. Ich wünschte, ich hätte genug RAM, um lokale Modelle laufen zu lassen. Ich habe in den letzten Wochen etwas sehr Ähnliches gebaut, allerdings als lokale Electron-App mit Whisper und ffmpeg, und ich habe semantische Suche und Embeddings hinzugefügt, um mit Videos zu chatten
Visuelle Analyse, Tagging und Video-Chat laufen bei mir über Claude. Mich würde interessieren, ob dieses Projekt nur ein einziges Bild sendet. Ich finde mit einem benutzerdefinierten Szenenerkennungsalgorithmus mehrere unterschiedliche Bilder pro Video und sende sie zusammen mit Untertiteln in einer einzigen Anfrage an Claude. Das ist definitiv der teuerste Teil. Mit Sonnet 4.6 für die Analyse und Haiku für das Tagging kostet eine Stunde Video etwa 1 Dollar, und lokal wäre es vermutlich langsam
Allerdings ist die Auswahl der Frames die Schwachstelle. Szenenerkennung würde auf jeden Fall helfen und steht auf Platz 1 der Roadmap. Mich würde interessieren, ob du teilen kannst, wie du bei der Szenenerkennung die Frames auswählst
Ich habe bewusst keine Vektorsuche eingebaut und mich stattdessen dafür entschieden, es mit allgemeinen Markdown-Dateien einfacher und portabler zu halten. Wenn man die SSD umsteckt, zieht das Wissen mit den Dateien um, es gibt keinen zu synchronisierenden Index, und Klartext überlebt Werkzeuge länger. Aber die andere Richtung, die du nennst, ist sicherlich ebenfalls erkundenswert
Es gibt auch andere gute Optionen. Gemini 3.1 Flash Lite ist für solche Aufgaben sehr gut. Nur Gemini 3.5 Flash nicht. Das Preis-Leistungs-Verhältnis ist dort nicht besonders gut
https://openrouter.ai/google/gemma-4-31b-it
Ich habe zwei Fragen
description.mdgibt es Einträge wiefaces -> cluster_id. Ich frage mich, ob das aus dem Gesichter-Index von DaVinci Resolve stammt. In Fotosammlungen sind Dinge wie Gesichter+Namen und Orte wirklich wichtig, aber allgemeine LLMs kommen damit nicht gut zurecht.description.md-Sidecar-Datei, die pro Clip neben dem Video liegtSpäter kann man bei Brainstormings mit Claude Dinge abfragen wie „Ich möchte ein Video über die hochwertigen Zimmer der Lodge machen“, und Claude kann die Dateien durchsehen und erkennen, welches Material hilfreich sein könnte
Außerdem gibt es eine Datei auf Root-Ebene des Ordners, in der Textbeschreibungen gesammelt werden, damit man sie leichter findet. Ich habe dem Blog ein Beispielbild hinzugefügt - https://blog.simbastack.com/_media/gvcycx2n.png
Gesichter kommen von insightface. Sie werden mit RetinaFace aus dem Open-Source-Paket
buffalo_lerkannt und laufen lokal auf der CPU. Gesichter werden aus Sample-Frames jedes Clips erkannt und eingebettet, danach wird eine Zeile in~/.framedex/faces.dbgeschriebenEhrlich gesagt weiß ich zwar, dass sich dieser Teil in einer lokalen DB ansammelt, aber ich konnte noch nicht richtig testen, wie gut er funktioniert. Ich will das bald gründlich prüfen
Allgemeiner gesagt ist genau deshalb framedex absichtlich so aufgebaut, dass LLMs nicht mit Gesichtern oder Orten betraut werden. Gesichter werden mit insightface-/ArcFace-Embeddings verarbeitet, sodass ein deterministischer Vergleich zwischen Clips möglich ist. Das visuelle Modell liefert nur grob die Anzahl der Personen und versucht nicht, zu identifizieren, wer sie sind
Orte werden über EXIF-GPS via exiftool und Reverse-Geocoding mit Nominatim/OpenStreetMap verarbeitet. Das sind belastbare Metadaten, keine Vermutungen
Das LLM macht nur das, worin es gut ist: Szenenbeschreibung, Stimmung, Shot-Typ, Keywords und Bewertungen wie archivieren/prüfen/verwerfen. Über den letzten Bewertungsteil lässt sich allerdings streiten
Ich habe versucht, auf einem ThinkPad von 2015 etwas Ähnliches mit Gemma zu machen. Zum Glück konnte ich den Speicher aufrüsten, sonst wäre es ziemlich schmerzhaft geworden
Ich will nicht lügen, aber beim Ausführen von llama.cpp lief der Lüfter auf voller Geschwindigkeit. Trotzdem hat es funktioniert, und ich habe die Arbeit abgeschlossen
Manchmal scheint das als Metapher für „es nutzt 100 % der Ressourcen“ verwendet zu werden, und hier ist wohl genau das gemeint, aber in anderen Kontexten wurde es definitiv auch als echte Beschwerde geäußert
Der Aussage „Generative AI-Videos haben bei echten Reisemarken keinen Platz“ würden die meisten Airbnb-Hosts wahrscheinlich nicht zustimmen
Auch beim Ausdruck „TripAdvisor-Kreuzigung“ frage ich mich wirklich, wie Airbnb-Hosts, die gefälschte Unterkünfte einstellen, überhaupt überleben
Andererseits brauchen echte Videos Zeit und verlangsamen den gesamten Prozess
Ich denke, B2C-AI-Anwendungen haben strukturelle Grenzen, weil es schwer ist, personalisierten Kontext aufzubauen
Wenn fähige lokale Modelle in großem Maßstab von Grund auf Kontextsammlung, Recherche, Tagging usw. übernehmen könnten, wäre das hier ein großer Durchbruch
Man wirft mehrere Screenshots hinein, und sie versucht, ihnen auf Basis ihres Inhalts intelligente Namen zu geben. Dasselbe gilt für Videos, PDFs usw.
Aber wie du sagst, Apple wird das vermutlich einfach als Feature einbauen, daher habe ich gar nicht erst versucht, Geld dafür zu verlangen
https://finalfinalreallyfinaluntitleddocumentv3.com/
Aber ich denke, es ist nur eine Frage der Zeit, bis Agenten klug genug sind, dass auch meine nichttechnischen Freunde einfach sagen können: „Organisiere die Videos in diesem Ordner so, dass ich sie verstehen kann“, und es dann einfach passiert