Commit Graph

45 Commits

Author SHA1 Message Date
Hermes Agent fe071ffd8a fix(nanobanana): Immer 16:9 Full HD nativ — kein Resize mehr
- Backend: aspect_ratio auf "16:9" erzwungen (ignoriert UI-Wert)
- imageConfig.aspectRatio im Gemini-API-Call (nativ, nicht per Prompt-Text)
- Post-Processing-Resize komplett entfernt → API-Output 1:1 ausgeliefert
- Nur noch PNG→JPG Konvertierung (DPI setzen, Format wechseln)
- Frontend: Aspect-Ratio-Dropdown entfernt → Fixtext "16:9 — Full HD"
- JS: aspectRatio hardcodiert auf '16:9'

User-Vorgabe: Immer nativ 16:9 rendern, niemals nachträglich verzerren.
2026-06-28 23:00:26 +02:00
Hermes Agent ff334be4c4 fix(nanobanana): Aspect-Ratio-Bug doppelt behoben
- Bug #1: img.resize((1920,1080)) war hartkodiert → auf _aspect_to_size() umgestellt
- Bug #2: imageConfig.aspectRatio fehlte im Gemini-API-Call → ergänzt

Alle Aspect-Ratios (1:1, 2:3, 9:16, 21:9 etc.) werden jetzt korrekt gerendert.
2026-06-28 22:51:36 +02:00
Hermes Agent 0a63f0439f Retro-Artikel #46-#57: BSN-Standard-Fixes + Abkürzungs-Check (Daniel 24.06.2026) 2026-06-24 23:07:48 +02:00
Hermes Agent 8902915f03 QC: CHECK 19 – Abkürzungen bei Erstverwendung definiert (Daniel 24.06.2026) 2026-06-24 22:54:09 +02:00
Hermes Agent 1056eef8db Fix: Read-More-Doppelung + Bild-Dimensionen
- Read-More: introtext ohne <hr> (Joomla setzt eigenen)
- Bild-Dimensionen: PIL erkennt Größe → ?width=X&height=Y
2026-06-24 13:32:39 +02:00
Hermes Agent 4d90e4249d fix: QC-Ratings aus 7 älteren Artikeln entfernt (CHECK 10) 2026-06-23 23:47:51 +02:00
Hermes Agent e73e0e88de fix: QC-Ratings (AAA/AA/A) aus Qork entfernt + verify CHECK 10 lehnt QC-Zeilen jetzt ab 2026-06-23 23:41:17 +02:00
Hermes Agent 0a1dffa027 fix: Datumszeile aus Gamegenic-Testartikel entfernt (System setzt Datum) 2026-06-23 23:38:36 +02:00
Hermes Agent 34ab91097f artikel: Moytura (Thompson x Benjamin, Bitewing) — 0 QC-Fehler 2026-06-23 23:32:53 +02:00
Hermes Agent e67eea9022 fix: Recherchestand nur Datum, keine Quellen-Wiederholung — Quellen stehen im Block 2026-06-23 23:13:54 +02:00
Hermes Agent 4323ab97a1 fix: Recherchestand-Fußzeile jetzt mit klickbaren Links + <p class=meta> entfernt (System setzt Datum) 2026-06-23 23:10:37 +02:00
Hermes Agent 7893c7b38d fix: Read-More NACH Absatz 1 (nicht vor h2) — Daniel 23.06. + verify_article.sh CHECK 16 korrigiert 2026-06-23 23:06:32 +02:00
Hermes Agent 0fc75beab8 artikel: Chivalry (Turczi x dlp games) — 0 QC-Fehler 2026-06-23 23:03:24 +02:00
Hermes Agent 5d4d1b7471 fix: Read-More nach Einleitung (Joomla-Standard), Meta-Zeile entfernt (macht Server) 2026-06-23 22:50:47 +02:00
Hermes Agent b2f03b6cfb artikel: Chivalry - Dávid Turczi entführt mit dlp games in die Welt von König Artus 2026-06-23 22:48:14 +02:00
Hermes Agent 3457705be5 feat: verify_article.sh +5 Checks — Dachzeile, Infobox, Read-More-Pos, Quellen-Links, Recherchestand 2026-06-23 22:39:54 +02:00
Hermes Agent 3f66ba877e fix: Pipeline — Dachzeile, Infobox, Read-More-Position, Quellen-Format v2 2026-06-23 22:39:31 +02:00
Hermes Agent be19c0ec83 artikel: Gamegenic wird Partner von Tolarian Community Coll 2026-06-23 17:36:22 +02:00
Hermes Agent bc1c025101 artikel: Gamegenic × Tolarian Community College — The Academic Deckbox 2026-06-23 17:33:39 +02:00
Hermes Agent fa281391a9 feat: article_pipeline.py — Stage 0 Prompt-Builder für BSN-Artikel-Workflow 2026-06-23 14:35:52 +02:00
Hermes Agent 85aa2781f1 spec: article pipeline workflow for Cody 2026-06-23 14:26:02 +02:00
Hermes Agent e63004daca gamegenic: add head/body structure for article server listing 2026-06-23 12:57:32 +02:00
Hermes Agent 082af0a46b gamegenic: fix unlinked PM source + html ending + h2/span Quellen 2026-06-23 12:55:40 +02:00
Hermes Agent 42069f9aa7 QC: fix Survivalist article + add checks 12-13 (XML-API refs, unlinked sources)
- Fix artikel_survivalist: 'BGG-Daten via XML API v2' -> klickbare Links
- verify_article.sh: CHECK 12 (keine XML-API-Referenzen)
- verify_article.sh: CHECK 13 (Quellen müssen verlinkt sein)
2026-06-23 12:37:59 +02:00
Hermes Agent 26f8ac477d Fix 16:9 output + MIME detection for Image-to-Image
- Pillow installiert (fehlte → try/except lief ins Leere)
- _detect_image_mime(): Magic-Bytes-Erkennung (JPEG/PNG/WebP/HEIC)
- _gemini_generate_image(): kein hartes 'image/jpeg' mehr
- PIL-Resize 1920×1080 greift jetzt korrekt
2026-06-23 08:57:26 +02:00
Hermes Agent 202cb9da42 feat: Imagen → Gemini Flash Image (gemini-2.5-flash-image)
- Gemini kann Image-to-Image (Cover+Landschaft), Imagen nur Text
- generateContent statt predict, inlineData statt rawBytes
- PNG-Output, optionale PIL-Konvertierung zu JPEG
- image_base64 als Referenzbild im contents[].parts[]
- Getestet: Text-to-Image + Image-to-Image
2026-06-23 08:38:56 +02:00
Hermes Agent 23a4bff254 feat: Imagen Image-to-Image — Referenzbild als rawBytes übergeben
- _imagen_generate akzeptiert image_base64 (str|None)
- Multipart-Parser extrahiert hochgeladenes Bild als Base64
- rawBytes im Instance-Feld für Image-to-Image-Modus
- Duplicate import base64 as b64 entfernt
- Getestet: Text-to-Image + Image-to-Image funktionieren
2026-06-23 08:30:48 +02:00
Hermes Agent 53efc2f93b feat: NanoBanana → Google Imagen Backend (synchron, kein Polling)
- Ersetzt NanoBanana (async, Credits-Probleme) durch Google Imagen
- Synchron: Bild kommt als Base64 direkt in der Response
- JS vereinfacht: pollStatus() komplett entfernt (-70 Zeilen)
- Assign-Handler unterstützt jetzt lokale /media/ Pfade
- Default-Auflösung 1K, Imagen-Key via bsn-secrets (google-imagen-key)
- Editor: Header auf Google Imagen aktualisiert
2026-06-22 23:50:24 +02:00
Hermes Agent 8299ad1e24 Fix: NanoBanana null-safe handling + bessere Fehlermeldungen
- _handle_nanobanana_generate: Prüfe code!=0 (z.B. 402=kein Guthaben), data=None-Safe
- _handle_nanobanana_status: data=None-Safe + response=None-Safe
- JavaScript: Bessere Fehlermeldung wenn resp.json() fehlschlägt
- Verhindert 'NoneType' object has no attribute 'get' Crash
2026-06-22 22:46:24 +02:00
Hermes Agent 513fc0e6af feat: NanoBanana Bild-Generator — /nanobanana Editor mit Upload, Prompt, Polling, Artikel-Zuordnung
- Neue Unterseite /nanobanana im Article-Server (Port 8890)
- Foto-Upload per Drag/Drop (Referenzbild für Image-to-Image)
- Prompt-Textarea mit Char-Zähler + Ratio/Resolution-Selects
- BSN-Blau UI, Mobile-First CSS, Inline-JS
- Backend: /nanobanana/generate (POST), /status, /articles, /assign
- NanoBanana generate-2 API via bsn-secrets Key
- Automatisches Polling (5s, max 5min) mit Spinner
- Download-Button + Artikel-Zuordnung (unveröffentlichte Artikel)
- Live getestet: Page 200, Generate 200, Status successFlag=1
2026-06-22 22:35:44 +02:00
Hermes Agent 889acd8c6d Fix: H1+Meta aus Joomla-Body strippen, Bild-Auto-Delete entfernt
- H1 und <p class=meta> werden vor dem Senden an Joomla aus dem Body gefiltert
  (Daniel 19.06.: Titel+Lesezeit dürfen nicht im Fließtext landen)
- os.remove() für Bilder nach erfolgreichem Publish entfernt
  (Bilder bleiben auf Disk erhalten für spätere Referenz/Live-Schaltung)
2026-06-19 09:17:41 +02:00
Hermes Agent 0f787589fe fix: upload images to Spiele/<year>/ directory on publish 2026-06-19 00:50:43 +02:00
Hermes Agent 7629eecc24 fix: publish: auto-include meta description, keywords, image upload, Daniel as author
- Add metadesc + metakey extraction from HTML <meta> tags
- Upload article image to Joomla media endpoint before publish
- Set created_by=560 (Daniel Krause) for all articles
- Image is uploaded as both image_intro and image_fulltext
2026-06-19 00:49:15 +02:00
Hermes Agent 3e6db33027 feat: Rubrik-Dropdown beim Live-Stellen — freie Kategoriewahl
- Neuer <select id='rubricSelect'> neben dem 🔴 Live Toggle
- Alle 10 Rubriken: Nachrichten, Angebot, Crowdfunding, Branche,
  Neuerscheinungen, Ankündigungen, Zubehör, Brettspieltest, Magazin, Video, Podcast
- Bei Live+Haken: Rubrik-Wahl pflicht (Toast wenn 'Rubrik wählen…' gesetzt)
- Backend _handle_publish: nutzt rubric vom Client statt meta category-id
- SAFETY GATE bleibt: ohne Live-Haken → immer Korrektur (catid=61)
- Confirm-Dialog zeigt gewählte Rubrik an
2026-06-19 00:38:33 +02:00
Hermes Agent ced413710f chore: Orphan-Section + Image1-6.jpg entfernt — war nur Test/Debug
- Verwaiste-Bilder-Sektion aus build_index() entfernt
- Image1.jpg–Image6.jpg vom Workspace gelöscht
- CSS (orphan-box etc.) bleibt harmlos im Stylesheet
2026-06-19 00:16:45 +02:00
Hermes Agent a16b3368c6 fix: accept-Attribut von File-Inputs entfernt — Browser-Bug blockierte Bilder
- accept='image/*,.jpg,.jpeg,...' wird von Browsern unterschiedlich interpretiert
- Manche Browser machen UND statt ODER → keine Bilder sichtbar
- Fix: accept komplett raus, Server-Validierung bleibt aktiv (.jpg/.jpeg/.png/.webp/.gif/.svg)
2026-06-19 00:15:32 +02:00
Hermes Agent 6e20684af4 feat: Verwaiste-Bilder-Scanner — Orphans automatisch finden + per Dropdown zuordnen
- find_orphan_images(): scannt Workspace nach Bildern ohne article_images.json-Eintrag
- Gelbe Orphan-Box oben auf der Seite: alle verwaisten Bilder mit Artikel-Dropdown
- assignOrphan() JS: Dropdown-Auswahl → fetch /assign-image → Toast + Reload
- _handle_assign_image(): Backend validiert Bildpfad + Artikel + speichert Mapping
- Test-JPEGs aus media/ bereinigt, article_images.json sauber initialisiert
2026-06-19 00:12:59 +02:00
Hermes Agent 32d1e1ef86 fix: Upload-Zone vereinfacht — kein manueller Dateiname mehr
- Text-Input für Artikel-Dateinamen komplett entfernt
- uploadFile() nimmt jetzt den ERSTEN markierten Artikel (Checkbox)
- Drag&Drop-Zone oben: Ziel = markierter Artikel oder Hinweis
- JPEG-Accept verbessert: image/* + explizit .jpg,.jpeg,.png,.webp,.gif
- Obsolete CSS für input[type=text] in upload-zone entfernt
- Nach Upload: Auto-Reload für Badge-Update
2026-06-19 00:08:02 +02:00
Hermes Agent 681437b86b fix: hidden-Attribut von File-Inputs entfernt (verhinderte Bild-Auswahl)
- hidden auf input[type=file] blockiert label-Trigger in manchen Browsern
- CSS .row-file-input { display: none } reicht zum Verstecken
- accept="image/*" ist korrekt gesetzt
2026-06-19 00:02:13 +02:00
Hermes Agent 9e727ef427 chore: remove backup file 2026-06-18 23:59:56 +02:00
Hermes Agent 726f25ff83 fix: Bild-Upload pro Artikel-Zeile — Datei wählen ohne Dateinamen tippen
- Jede Artikel-Zeile hat jetzt einen 📷 Upload-Button (row-upload-btn)
- Klick → native File-Picker → Auto-Upload mit dem korrekten Artikel-Dateinamen
- uploadForRow() JS-Funktion: async fetch + Badge-Update + Toast-Feedback
- Bugfix: f.write(file_data) statt f.write(data) im _handle_upload
- Upload-Zone oben bleibt für Bulk/Drag-Drop erhalten
2026-06-18 23:59:52 +02:00
Hermes Agent ebcd338bd4 SAFETY GATE: Kein Live-Publish ohne explizite Freigabe
- _handle_publish() braucht 'live':true im JSON-Payload
- Ohne live=true: ALLE Artikel → catid=61, state=0 (Korrektur)
- Meta category-id wird NUR bei live=true respektiert
- UI: roter Live-Schalter mit Warn-Confirm
- Server-Log zeigt [PUBLISH] Modus an
- Response enthält live_mode flag
- Daniel 18.06.: 10.000+ Leser/Tag, NIE ohne Freigabe live
2026-06-18 22:50:25 +02:00
Hermes Agent 934ac899ce VG-Wort: Zählmarke NUR bei state=1 (live) verbrauchen
- if state == 1 → Zählmarke aus Pool holen + Pixel einbauen
- Korrektur (state=0) → KEINE Zählmarke, Log-Meldung 'Übersprungen'
- Pool: 19/20 verfügbar (1 korrekt für Live-Test verbraucht)
2026-06-18 22:42:25 +02:00
Hermes Agent eb59327086 VG-Wort: Zählmarken-Pool-Integration via subprocess
- _handle_publish() ruft vgwort_pool.py get auf
- Pixel-Tag auto in articletext vor </article> eingebaut
- Live getestet: Pixel korrekt (15371, vg09.met.vgwort.de)
- Pool-Script: ~/.hermes/vgwort_pool.py
2026-06-18 22:39:10 +02:00
Hermes Agent 2f356ddfb8 Initial commit: article-server mit Publish-Workflow
- Publish-Gate entfernt (Korrektur ist Redaktion-only)
- Default catid=61 (Korrektur), state=0, access=6
- Öffentliche Rubriken auto-featured für 3 Tage
- featured_up=jetzt, featured_down=+3 Tage
- per meta name='featured-days' content='N' anpassbar
2026-06-18 18:33:25 +02:00