Ersetzt: Baserow (migriert 2026-05-27, RAM-Grund: ~1.2 GB eingespart)
URL: https://nocodb.srv859437.hstgr.cloud
Container: nocodb | Port intern: 8080
Volume: root_nocodb_data → /usr/app/data/noco.db (SQLite)
| Element | ID | Name |
|---|---|---|
| Workspace | wl60k6m1 |
Multi-Brand Ecosystem |
| Base | pfi05ul615g6757 |
Base |
Tabelle video_queu |
mnrg8hwdw9m8imk |
TQF Video Queue |
Auth-Header: xc-token: <token>
Token-Speicherort in n8n: Credential NocoDB API (ID: 3MQFoD8XB1O0jWUK, Typ: httpHeaderAuth)
Token-Erstellung: NocoDB Web-UI → Account → Team & Auth → API Tokens.
Fallback wenn UI-Login vergessen: Token direkt in/usr/app/data/noco.db(Tabellenc_api_tokens) via SQLite eintragen.
video_queuBase-URL: https://nocodb.srv859437.hstgr.cloud/api/v1/db/data/noco/pfi05ul615g6757/mnrg8hwdw9m8imk
GET {base}?where=(status,eq,enriched)~and(brand,eq,TQF)&limit=100
Response-Format (NocoDB):
{
"list": [ { "Id": 29, "topic": "...", "status": "enriched", ... } ],
"pageInfo": { "totalRows": 25, "page": 1, "pageSize": 100, "isLastPage": true }
}
⚠️ Unterschied zu Baserow: Baserow lieferte
{"results": [...]}, NocoDB liefert{"list": [...]}.
Code Nodes in n8n wurden entsprechend angepasst (body.results→body.list).
GET {base}/{rowId}
PATCH {base}/{rowId}
Content-Type: application/json
{ "status": "processing" }
POST {base}
Content-Type: application/json
{ "topic": "...", "brand": "TQF", "status": "suggested" }
| Baserow (alt) | NocoDB (neu) |
|---|---|
filter__status__single_select_equal=2117 |
where=(status,eq,enriched) |
filter__brand__single_select_equal=2079 |
where=(brand,eq,TQF) |
filter__field_4001__not_empty=true |
where=(approved_quotes,notempty,) |
size=5 |
limit=5 |
Kombinieren mit & |
Kombinieren mit ~and |
video_queu — Feldstruktur| Feld | Typ | Beschreibung |
|---|---|---|
Id |
AutoNumber | Zeilen-ID (wird in API-URLs verwendet) |
topic |
SingleLineText | Haupt-Thema des Videos |
brand |
SingleSelect | WRT / TQF / SCF |
status |
SingleSelect | Aktueller Pipeline-Status |
source |
SingleLineText | Quelle/Zitat-Herkunft (z.B. Marcus Aurelius - Meditations 5) |
series |
SingleSelect | TQF Series (Iron Discipline, Memento Mori, …) |
philosopher |
MultiSelect | Zugeordneter Philosoph |
suggested → enriched → processing → script_ready → script_approved → done
↘ script_rejected → enriched (reset)
↘ enrichment_failed
↘ error
↘ rejected
↘ manual_render
↘ published
| Status | Bedeutung |
|---|---|
suggested |
Neues Topic, noch unbearbeitet |
enriched |
Mit Philosopher/Series/Quote angereichert |
processing |
Wird gerade von n8n verarbeitet |
script_ready |
Script generiert, wartet auf Review |
script_approved |
Via Telegram genehmigt |
script_rejected |
Via Telegram abgelehnt |
done |
Video gerendert |
published |
Auf YouTube veröffentlicht |
error |
Fehler während Verarbeitung |
enrichment_failed |
Enricher-Schritt fehlgeschlagen |
manual_render |
Manueller Render-Job |
| Feld | Typ | Beschreibung |
|---|---|---|
original_script |
LongText | Vom AI generiertes Roh-Script |
approved_script |
LongText | Final genehmigtes Script |
approved_scenes |
LongText | Scene-Breakdown (JSON-Array) |
approved_title |
SingleLineText | Genehmigter YouTube-Titel |
quote_text |
LongText | Verwendetes Zitat |
hook_angle |
LongText | Einstieg/Hook |
conceptual_topic |
LongText | Konzeptioneller Kern |
core_principle |
LongText | Stoisches Kernprinzip |
modern_parallel |
LongText | Moderne Analogie |
| Feld | Typ | Beschreibung |
|---|---|---|
critique_log |
LongText | TQF Critique Service Ausgabe |
final_score |
Decimal | Qualitätsscore (0–10) |
was_revised |
Checkbox | Script wurde überarbeitet |
editor_notes |
LongText | Manuelle Anmerkungen |
source_verification_status |
SingleSelect | PASS / WARN / FAIL |
source_verification_report |
LongText | Verifikations-Bericht |
blocking_issues_count |
Decimal | Anzahl kritischer Probleme |
| Feld | Typ | Optionen |
|---|---|---|
format |
SingleSelect | long_form, short |
target_platform |
SingleSelect | youtube, tiktok, instagram, x, linkedin |
aspect_ratio |
SingleSelect | 16:9, 9:16, 1:1 |
target_duration_s |
Decimal | Ziel-Länge in Sekunden |
hook_pattern_used |
SingleSelect | A, B, C, D |
| Feld | Typ | Beschreibung |
|---|---|---|
video_url |
URL | Fertig gerendertes Video |
youtube_video_id |
SingleLineText | YouTube Video-ID nach Upload |
youtube_url |
URL | YouTube-Link |
published_at |
DateTime | Veröffentlichungszeitpunkt |
rendered_at |
DateTime | Render-Abschluss |
voice_id |
SingleLineText | ElevenLabs Voice-ID |
error_msg |
LongText | Fehlermeldung bei error-Status |
| Feld | Typ | Beschreibung |
|---|---|---|
approved_quotes |
LongText | Zitate-Tracking (field_4001) |
approved_examples |
LongText | Beispiele-Tracking (field_4002) |
Anmerkungen |
LongText | Interne Notizen |
Aktiv |
Checkbox | Row aktiv/inaktiv |
Marcus Aurelius · Seneca · Epictetus · Musonius Rufus
Iron Discipline · Memento Mori · The Obstacle Forge · The Quiet Sage · The Dichotomy · Forge Your Character · The Unbreakable
Credential in n8n: NocoDB API (ID: 3MQFoD8XB1O0jWUK)
Typ: httpHeaderAuth — Header xc-token
| Workflow | Funktion | NocoDB-Operationen |
|---|---|---|
| TQF Topic Enricher | Reichert suggested Rows an |
GET filter + PATCH |
| TQF Video Short Generator V2 | Generiert Script aus enriched Rows |
GET filter + PATCH status |
| TQF Script Approval Handler V2 | Verarbeitet Telegram-Approve/Reject | PATCH status |
| Telegram Callback Handler | Button-Callbacks | PATCH status=rejected |
| Video Factory — Topic Suggester | Neue Queue-Einträge | POST create |
| Video Factory — Main | Holt nächsten pending Job |
GET filter + PATCH status |
| Video Factory — Production (3x) | Render-Abschluss | GET + PATCH status=done |
| TQF Script Generator | Liest approved_quotes |
GET filter |
| Stoic Story Idea Generator v2 | Liest approved_quotes |
GET filter |
| Video Factory — Main (Critique Test) | Critique-Variante | GET + PATCH |
Nach n8n-Updates oder Encryption-Key-Wechsel: Credentials in allen Workflows neu verknüpfen (ab- und wieder anwählen → Save).
root_baserow_data Volume noch vorhanden als Backup/root/baserow_dump.pgdumpstatus=enriched (TQF)/root/nocodb_setup.py, /root/nocodb_import_data.py, /root/update_workflows_nocodb.pyProblem: Workflow liefert leere list
→ Filter-Syntax prüfen: NocoDB nutzt (feld,operator,wert) nicht filter__feld__op=wert
Problem: 401 Unauthorized
→ xc-token Header prüfen, nicht Authorization: Bearer
Problem: Token ungültig nach NocoDB-Neustart
→ Token in SQLite wurde nicht persistiert. Neu anlegen via UI oder direkt in noco.db eintragen (Tabelle nc_api_tokens)
Problem: Credential in n8n funktioniert nicht
→ Credential neu verknüpfen (ab- und wieder anwählen in jedem betroffenen Node)