Commit Graph
16 Commits
Author SHA1 Message Date
Andre a97ee9c41a fix: enable yt-dlp browser impersonation for TikTok
TikTok now answers requests without a real browser TLS fingerprint with a
page yt-dlp cannot parse, so every TikTok extraction failed at the metadata
step. yt-dlp can impersonate browsers, but only when curl_cffi is installed
on the interpreter it runs on, which the image never provided.
2026-09-12 11:23:24 +02:00
Andre 94965512fe fix: detect youtube shorts and live urls as video sources
Only the classic watch URL was recognised, so a shorts link fell through
to the website extractor. That path fetches the page, finds no recipe
markup in what is a JavaScript shell, and hands the raw text to the
language model, which returns an empty recipe titled "null" — stored in
the history as an apparently successful extraction rather than an error.

Shorts are among the most common formats for recipe clips, so the
failure mode was both frequent and silent. Live URLs share the pattern.
2026-08-14 16:32:27 +02:00
Andre 77c63770c3 fix: create data subdirectories on first container start
On a host that has never run the service, the mounted data volume is
empty. Ownership was being corrected for a subdirectory that did not
exist yet, which aborted the entrypoint before the application started
— exactly the situation a fresh deployment creates, and the reason the
container came up on the existing Pi but would not have elsewhere.

Creating the directory has to happen at runtime rather than during the
build, because the volume mount hides whatever the image places there.
2026-08-14 16:20:54 +02:00
Andre 790c744217 build: install ffmpeg and gosu as binaries instead of apt packages
Setting the service up on a new host took 20 to 30 minutes, spent almost
entirely in the Debian ffmpeg dependency chain: several hundred packages
of X11 and desktop libraries that dpkg unpacks and configures file by
file onto an SD card. That cost is paid again on every fresh machine and
turned moving the service into a half-hour commitment rather than a
routine step.

Prebuilt binaries remove the package manager from the build entirely. A
cold build with nothing cached now finishes in about four minutes on Pi
hardware, verified end to end including audio transcoding.

Pinning the dependency versions is unrelated to build speed. It prevents
a rebuild months from now from silently resolving versions other than
those the running container was tested with.
2026-08-14 16:20:49 +02:00
Andre 2ab62ba122 chore: stop tracking runtime data directory
data/ was added to .gitignore only after its contents had already been
committed, and an ignore rule never untracks existing files. The live
SQLite database therefore showed up as modified on every commit, made
accidental commits of user history likely, and bloated the repo with
binary churn.

Claude-Session: https://claude.ai/code/session_01QkiLqAtFamcbFXDnCtZSPm
2026-07-18 15:09:56 +02:00
Andre 9451c6e6d3 fix: self-update yt-dlp on container start
Instagram and TikTok extraction silently breaks whenever yt-dlp falls
behind upstream API changes, and fixing it required a manual image
rebuild each time. Updating at container start ties the fix to the Pi's
weekly reboot instead, so the extractor stays current without operator
intervention. A failed update never blocks startup, because the network
may not be up yet right after boot.

.gitattributes pins LF for shell scripts: a CRLF checkout on Windows
would make the entrypoint unrunnable inside the Linux container.

Claude-Session: https://claude.ai/code/session_01QkiLqAtFamcbFXDnCtZSPm
2026-07-18 15:06:36 +02:00
Andre 66c3fc8f7a fix: TikTok-Extraktion im Docker-Container (Pi-hole DNS + Windows-FFMPEG_LOCATION) 2026-04-16 18:34:58 +02:00
Andre 895e2e588f fix: Stack-Umgebungsvariablen via environment: an Container weitergeben
feat: entrypoint.sh mit gosu für automatisches chown und Privilege-Drop
2026-04-15 19:06:50 +02:00
Andre 08be478587 fix: speicherort history.db und images Ordner
- Bilder: data/images
  - SQLite: data/history.db
2026-04-15 17:11:45 +02:00
Andre 339b0d176e fix: docker-compose.yml – volumes über Env-Variablen konfigurierbar 2026-04-15 16:21:52 +02:00
Andre 48f71724e5 fix: docker-compose.yml
- env_file optional, damit der build sowohl manuell als auch über portainer ausgeführt werden kann.
2026-04-15 16:03:06 +02:00
Andre a5b93da795 fix: mounte tmp und data in docker-compose auf Host-Volumes 2026-04-15 15:33:58 +02:00
Andre d08dc94010 fix: Aufgeklappte Verlauf-Karte mit großem Hero-Bild; Buttons nicht mehr am Rand 2026-04-14 17:43:20 +02:00
Andre c7582dafbb fix: Rezeptverlauf-Bilder lokal speichern und Windows-Subprocess-Fix
- Bilder beim Extrahieren lokal cachen (data/images/{id}.ext) und über GET /api/history/{id}/image ausliefern; Löschen bei Verlaufseintrag-Entfernung
- history.db in ./data/ Volume verschoben, damit sie Container-Rebuilds überlebt
- yt-dlp Subprocess-Aufrufe auf Windows gefixt: run_in_executor statt asyncio.create_subprocess_exec (SelectorEventLoop-Kompatibilität)
- ./data:/app/data Docker-Volume für persistente Datenhaltung hinzugefügt
2026-04-14 17:17:03 +02:00
Andre 4de67f0192 docs: README.md mit Projektbeschreibung hinzugefügt 2026-04-14 16:13:56 +02:00
Andre e832c4e7ce Prototyp 2026-03-29 20:52:20 +02:00