{"_id":"peertube-plugin-static-files","_rev":"114-a105f25967202b96700e74704701f6e3","name":"peertube-plugin-static-files","dist-tags":{"latest":"1.6.9"},"versions":{"1.6.5":{"name":"peertube-plugin-static-files","version":"1.6.5","keywords":["peertube","plugin","static-files","file-upload","admin-tools"],"author":{"name":"yarkolife"},"license":"AGPL-3.0","_id":"peertube-plugin-static-files@1.6.5","maintainers":[{"name":"yarkolife","email":"yarkolife@gmail.com"}],"homepage":"https://github.com/yarkolife/peertube-plugin-static-files","bugs":{"url":"https://github.com/yarkolife/peertube-plugin-static-files/issues"},"css":["assets/style.css","assets/stats-dashboard.css"],"dist":{"shasum":"ac4ca87876cc1f2c19e8a7529528f9fc5868499e","tarball":"https://registry.npmjs.org/peertube-plugin-static-files/-/peertube-plugin-static-files-1.6.5.tgz","fileCount":11,"integrity":"sha512-V128MuR0MK950kkLF7SGE9YSpYMtDbM8fKGIL9VqFf5QuzbsLcX6d2cC3jK0unXKWISZwm4PmPimy0qbCkV+WQ==","signatures":[{"sig":"MEYCIQDB7jRKDuqMO9DLUhum8RYVnb6CXb7DQZV39ZVyB7+6jgIhAKZ32MghDySPkJPqlAMYI5iSrJE5GH9j3qFDKakb4dMq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255949},"main":"./main.js","engine":{"peertube":">=5.2.0"},"library":"./main.js","scripts":{"build":"node ./scripts/build.js"},"_npmUser":{"name":"yarkolife","email":"yarkolife@gmail.com"},"repository":{"url":"git+https://github.com/yarkolife/peertube-plugin-static-files.git","type":"git"},"staticDirs":{"stats":"assets","public":"public"},"_npmVersion":"11.6.0","description":"PeerTube Plugin zum Hochladen und Verwalten statischer Dateien mit Admin-Statistiken","directories":{},"_nodeVersion":"24.10.0","dependencies":{"moment":"^2.29.4","multer":"^1.4.5-lts.1","mime-types":"^2.1.35"},"translations":{"de":"./translations/de.json"},"clientScripts":[{"scopes":["common"],"script":"dist/client-plugin.js"}],"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.17.11"},"peertubeUpdatePolicy":"automatic","_npmOperationalInternal":{"tmp":"tmp/peertube-plugin-static-files_1.6.5_1763678493739_0.8375272704953836","host":"s3://npm-registry-packages-npm-production"}},"1.6.8":{"name":"peertube-plugin-static-files","version":"1.6.8","keywords":["peertube","plugin","static-files","file-upload","admin-tools"],"author":{"name":"yarkolife"},"license":"AGPL-3.0","_id":"peertube-plugin-static-files@1.6.8","maintainers":[{"name":"yarkolife","email":"yarkolife@gmail.com"}],"homepage":"https://github.com/yarkolife/peertube-plugin-static-files","bugs":{"url":"https://github.com/yarkolife/peertube-plugin-static-files/issues"},"css":["assets/style.css","assets/stats-dashboard.css"],"dist":{"shasum":"7c71d4ef2547913069ccab7dff53fb71e3bd8fa4","tarball":"https://registry.npmjs.org/peertube-plugin-static-files/-/peertube-plugin-static-files-1.6.8.tgz","fileCount":11,"integrity":"sha512-ROtlUV1HG7AOCBAVNlrcePF6MscYTAzuxwHc1IBHZu6+XIQn02cLMXlO5l8Jl1B4Zl3zq+EMO0YnHIuOHbUBsQ==","signatures":[{"sig":"MEUCIQDSjwgVvjH8R1JUvpF6sJkLP/NgYYM5mgCY+Yel52xRoQIgDmLCl2Hfl+W0/F5i2EoK9qE9Y+m8ZuBp4y4tN/fDg7k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257410},"main":"./main.js","engine":{"peertube":">=5.2.0"},"gitHead":"964efbc7c52d2f6e48455e176226b5a607a3069c","library":"./main.js","scripts":{"build":"node ./scripts/build.js"},"_npmUser":{"name":"yarkolife","email":"yarkolife@gmail.com"},"repository":{"url":"git+https://github.com/yarkolife/peertube-plugin-static-files.git","type":"git"},"staticDirs":{"stats":"assets","public":"public"},"_npmVersion":"11.6.0","description":"PeerTube Plugin zum Hochladen und Verwalten statischer Dateien mit Admin-Statistiken","directories":{},"_nodeVersion":"24.10.0","dependencies":{"moment":"^2.29.4","multer":"^1.4.5-lts.1","mime-types":"^2.1.35"},"translations":{"de":"./translations/de.json"},"clientScripts":[{"scopes":["common"],"script":"dist/client-plugin.js"}],"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.17.11"},"peertubeUpdatePolicy":"automatic","_npmOperationalInternal":{"tmp":"tmp/peertube-plugin-static-files_1.6.8_1763931512652_0.29709615008216494","host":"s3://npm-registry-packages-npm-production"}},"1.6.9":{"name":"peertube-plugin-static-files","description":"PeerTube Plugin zum Hochladen und Verwalten statischer Dateien mit Admin-Statistiken","version":"1.6.9","author":{"name":"yarkolife"},"repository":{"type":"git","url":"git+https://github.com/yarkolife/peertube-plugin-static-files.git"},"license":"AGPL-3.0","bugs":{"url":"https://github.com/yarkolife/peertube-plugin-static-files/issues"},"clientScripts":[{"script":"dist/client-plugin.js","scopes":["common"]}],"css":["assets/style.css","assets/stats-dashboard.css"],"peertubeUpdatePolicy":"automatic","engine":{"peertube":">=5.2.0"},"main":"./main.js","homepage":"https://github.com/yarkolife/peertube-plugin-static-files","keywords":["peertube","plugin","static-files","file-upload","admin-tools"],"library":"./main.js","staticDirs":{"public":"public","stats":"assets"},"translations":{"de":"./translations/de.json"},"scripts":{"build":"node ./scripts/build.js"},"devDependencies":{"esbuild":"^0.17.11"},"dependencies":{"multer":"^1.4.5-lts.1","mime-types":"^2.1.35","moment":"^2.29.4"},"_id":"peertube-plugin-static-files@1.6.9","gitHead":"964efbc7c52d2f6e48455e176226b5a607a3069c","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-nQYMmVAwe2H3MAy0XR3gHPhbdxj74zL2Ef3svwI2P9DAy9zTMJ/PMCzCu2SD//kNoO5SngZOV9lIqJIi7v8Msg==","shasum":"8f2c0f51b144cd4a7fb0cfd76610117704291131","tarball":"https://registry.npmjs.org/peertube-plugin-static-files/-/peertube-plugin-static-files-1.6.9.tgz","fileCount":11,"unpackedSize":257291,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF8QMG3shoSR1lMzRUxEcfbM6jTVVE40TWOmNZHc8BT4AiEAhuU2sqfIANUfEg40tbJALasx/23Iz4tGkmrDGEIZ0YM="}]},"_npmUser":{"name":"yarkolife","email":"yarkolife@gmail.com"},"directories":{},"maintainers":[{"name":"yarkolife","email":"yarkolife@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/peertube-plugin-static-files_1.6.9_1763934625729_0.24336017133232457"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-25T17:47:55.128Z","modified":"2025-11-23T21:50:26.109Z","1.0.0":"2025-07-25T17:47:55.308Z","1.0.1":"2025-07-25T18:51:25.493Z","1.0.2":"2025-07-25T19:39:36.413Z","1.0.3":"2025-07-25T20:43:31.142Z","1.0.4":"2025-07-25T21:46:37.173Z","1.0.5":"2025-07-25T23:05:25.729Z","1.0.6":"2025-07-25T23:41:03.628Z","1.0.7":"2025-07-26T01:22:09.479Z","1.0.8":"2025-07-26T01:39:41.889Z","1.0.9":"2025-07-26T06:34:43.243Z","1.0.10":"2025-07-26T07:38:14.610Z","1.0.11":"2025-07-26T09:01:07.636Z","1.0.13":"2025-07-26T09:57:27.919Z","1.0.14":"2025-07-26T11:19:30.531Z","1.0.15":"2025-07-26T11:41:28.406Z","1.0.16":"2025-07-26T12:38:57.235Z","1.0.17":"2025-07-26T13:50:48.357Z","1.0.18":"2025-07-26T13:58:34.952Z","1.0.19":"2025-07-26T15:22:15.623Z","1.0.20":"2025-07-26T15:47:24.724Z","1.0.21":"2025-07-26T16:55:43.252Z","1.0.22":"2025-07-26T17:58:46.587Z","1.0.23":"2025-07-26T19:40:29.532Z","1.0.24":"2025-07-26T20:44:47.477Z","1.0.25":"2025-07-27T09:59:34.892Z","1.0.26":"2025-07-27T17:38:43.137Z","1.0.27":"2025-07-27T18:42:13.783Z","1.0.28":"2025-07-27T20:06:41.765Z","1.1.0":"2025-07-27T20:45:55.001Z","1.1.1":"2025-07-27T22:04:57.324Z","1.1.2":"2025-07-27T22:48:37.156Z","1.1.3":"2025-07-27T23:49:00.159Z","1.1.4":"2025-07-28T00:55:36.287Z","1.2.0":"2025-07-28T06:22:23.951Z","1.2.1":"2025-07-28T07:12:04.527Z","1.2.2":"2025-11-19T21:21:55.876Z","1.2.3":"2025-11-19T21:37:09.792Z","1.2.4":"2025-11-19T22:43:30.900Z","1.2.5":"2025-11-19T23:43:32.553Z","1.2.6":"2025-11-20T01:34:00.460Z","1.2.7":"2025-11-20T01:51:07.479Z","1.2.8":"2025-11-20T01:53:22.850Z","1.2.9":"2025-11-20T07:14:18.954Z","1.3.0":"2025-11-20T07:17:15.733Z","1.3.1":"2025-11-20T07:30:35.728Z","1.4.0":"2025-11-20T07:54:31.665Z","1.4.1":"2025-11-20T08:01:17.355Z","1.5.0":"2025-11-20T08:07:27.020Z","1.6.0":"2025-11-20T08:17:46.059Z","1.6.1":"2025-11-20T19:44:33.918Z","1.6.2":"2025-11-20T19:51:26.079Z","1.6.3":"2025-11-20T19:57:12.530Z","1.6.4":"2025-11-20T19:58:57.311Z","1.6.5":"2025-11-20T22:41:33.929Z","1.6.6":"2025-11-23T20:12:47.572Z","1.6.7":"2025-11-23T20:16:06.867Z","1.6.8":"2025-11-23T20:58:32.868Z","1.6.9":"2025-11-23T21:50:25.911Z"},"bugs":{"url":"https://github.com/yarkolife/peertube-plugin-static-files/issues"},"author":{"name":"yarkolife"},"license":"AGPL-3.0","homepage":"https://github.com/yarkolife/peertube-plugin-static-files","keywords":["peertube","plugin","static-files","file-upload","admin-tools"],"repository":{"type":"git","url":"git+https://github.com/yarkolife/peertube-plugin-static-files.git"},"description":"PeerTube Plugin zum Hochladen und Verwalten statischer Dateien mit Admin-Statistiken","maintainers":[{"name":"yarkolife","email":"yarkolife@gmail.com"}],"readme":"# PeerTube Static Files & Admin Stats Plugin\n\nEin umfassendes Plugin für PeerTube, das sowohl die Verwaltung statischer Dateien als auch detaillierte Administratorstatistiken in einer einheitlichen Lösung bietet.\n\n## 🚀 Hauptfunktionen\n\n### 📁 Datei-Management\n- **Upload von Bildern und Dokumenten** mit Drag & Drop-Interface\n- **Flexible Benutzerrechte** mit granularer Kontrolle\n- **Admin-Interface** für zentrale Dateiverwaltung\n- **Automatische Kategorisierung** nach Dateitypen\n- **Link-Sharing** mit einem Klick\n\n### 📊 Administrator-Statistiken\n- **Instance-Metriken**: Benutzer, Videos, Speicherplatz, Engagement\n- **Video-Analytics**: Detaillierte Zuschauerzahlen, Wiedergabezeit (Watch Time)\n- **Top-Content**: Meistgesehene Videos und beliebteste Kanäle\n- **Zeitbasierte Auswertungen** mit flexibler Gruppierung\n- **Responsive Dashboards** mit dynamischen Diagrammen\n- **Echtzeit-Datenaktualisierung**\n\n## 📋 Unterstützte Dateitypen\n\n### 🖼️ Bilder\n- **JPG/JPEG** - Standard-Bildformat\n- **PNG** - Verlustfreie Kompression\n- **GIF** - Animierte Bilder\n- **WebP** - Moderne Kompression\n- **ICO** - Favicon und Icons\n\n### 📄 Dokumente\n- **PDF** - Portable Document Format\n- **TXT** - Textdateien\n- **DOC** - Microsoft Word (Legacy)\n- **DOCX** - Microsoft Word (Modern)\n\n## 🔧 Installation\n\n### Automatische Installation (empfohlen)\n1. Öffnen Sie Ihre **PeerTube Admin-Oberfläche**\n2. Navigieren Sie zu **\"Plugins & Themes\"**\n3. Suchen Sie nach **\"peertube-plugin-static-files\"**\n4. Klicken Sie auf **\"Installieren\"**\n\n### Manuelle Installation\n```bash\ncd /var/www/peertube\nsudo -u peertube npm install peertube-plugin-static-files\nsudo systemctl restart peertube\n```\n\n### Development Installation\n```bash\ngit clone https://github.com/yarkolife/peertube-plugin-static-files.git\ncd peertube-plugin-static-files\nnpm install\nnpm run build\n```\n\n## ⚙️ Konfiguration\n\nNach der Installation navigieren Sie zu:\n**Admin → Plugins & Themes → peertube-plugin-static-files → Einstellungen**\n\n### 🛠️ Verfügbare Einstellungen\n\n| Einstellung | Beschreibung | Standard | Optionen |\n|-------------|--------------|----------|----------|\n| **Plugin aktivieren** | Master-Switch für das gesamte Plugin | ✅ Aktiviert | ☑️ / ☐ |\n| **Upload-Seiten-Pfad** | URL-Pfad für die Upload-Seite | `files/upload` | Beliebiger Pfad |\n| **Berechtigte Benutzer** | Komma-getrennte Liste spezifischer Benutzer | Leer (alle) | `user1,user2,user3` |\n| **Berechtigte Rollen** | Systemrollen mit Zugriff | Alle angemeldeten | Siehe unten |\n| **Erlaubte Dateitypen** | Upload-Beschränkungen | Alle | Bilder/Dokumente/Alle |\n| **Max. Dateigröße** | Upload-Limit in Megabytes | 50 MB | 1-100 MB |\n\n### 👥 Berechtigte Rollen\n\n- **Alle angemeldeten Benutzer** *(Standard)*\n  - Jeder mit gültigem Account kann Dateien hochladen\n  - Benutzer sehen nur ihre eigenen Dateien\n  \n- **Nur Administratoren**\n  - Maximale Sicherheit\n  - Vollzugriff auf alle Funktionen\n  \n- **Administratoren und Moderatoren**\n  - Moderatoren erhalten Upload-Rechte\n  - Admins behalten alle Statistik-Funktionen\n\n## 🎯 Verwendung\n\n### 👤 Für Endbenutzer\n\n1. **Zugang zur Upload-Seite**\n   ```\n   https://ihre-domain.de/p/files/upload\n   ```\n\n2. **Datei-Upload-Prozess**\n   - Anmeldung (falls erforderlich)\n   - Drag & Drop oder Datei-Browser verwenden\n   - Upload-Fortschritt beobachten\n   - Links kopieren und teilen\n\n3. **Datei-Management**\n   - Eigene Dateien anzeigen\n   - Vorschau in neuem Tab\n   - Download-Funktion\n   - Löschung (nur eigene Dateien)\n\n### 🔧 Für Administratoren\n\n#### 📁 Datei-Verwaltung\n**Zugang:** `/p/files/admin`\n\n- **Alle Dateien anzeigen** mit Metadaten\n- **Bulk-Operationen** für effiziente Verwaltung\n- **Aufräumen-Funktion** für verwaiste Dateien\n- **Benutzer-Zuordnung** und Upload-Zeitstempel\n\n#### 📊 Statistik-Dashboard\n**Zugang:** `/p/admin/stats`\n\n- **Instance-Metriken**\n  - Gesamtzahl Benutzer & Videos (+ Monatszuwachs)\n  - **NEU:** Belegter Speicherplatz\n  - **NEU:** Engagement (Kommentare & Likes)\n  - Offene Meldungen/Beschwerden\n\n- **Video-Analytics**\n  - **NEU:** Wiedergabezeit (Watch Time) Analyse\n  - **NEU:** Top-Listen (Videos & Kanäle)\n  - **NEU:** Interaktive Diagramme\n  - Flexible Zeitraumauswahl (Tag/Monat/Jahr)\n\n## 🔗 API-Endpunkte\n\n### 🌐 Öffentliche Endpunkte\n```http\nGET /plugins/static-files/router/file/:category/:filename\n```\n- Direkte Datei-Auslieferung\n- Caching-Header für Performance\n- Content-Type Detection\n\n### 🔐 Authentifizierte Endpunkte\n\n#### Datei-Management\n```http\nGET    /plugins/static-files/router/check-access      # Zugriff prüfen\nPOST   /plugins/static-files/router/upload            # Datei hochladen  \nGET    /plugins/static-files/router/files             # Eigene Dateien\nDELETE /plugins/static-files/router/file/:category/:filename  # Datei löschen\n```\n\n#### Admin-Funktionen\n```http\nGET  /plugins/static-files/router/admin/files    # Alle Dateien auflisten\nPOST /plugins/static-files/router/admin/cleanup  # Verwaiste Dateien aufräumen\nGET  /plugins/static-files/router/admin/stats    # Instance-Statistiken\n```\n\n### 📝 API-Beispiele\n\n#### Upload mit cURL\n```bash\ncurl -X POST \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -F \"file=@beispiel.jpg\" \\\n  https://ihre-domain.de/plugins/static-files/router/upload\n```\n\n#### Statistiken abrufen\n```bash\ncurl -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  \"https://ihre-domain.de/plugins/static-files/router/admin/stats?from=2024-01-01&to=2024-12-31&groupBy=month\"\n```\n\n## 🛠️ Entwicklung\n\n### 📦 Voraussetzungen\n- **Node.js** ≥ 16.0.0\n- **PeerTube** ≥ 5.2.0\n- **npm** oder **yarn**\n\n### 🏗️ Development Setup\n```bash\n# Repository klonen\ngit clone https://github.com/yarkolife/peertube-plugin-static-files.git\ncd peertube-plugin-static-files\n\n# Abhängigkeiten installieren\nnpm install\n\n# Development Build\nnpm run build\n\n# Für Live-Entwicklung\nnpm run dev\n```\n\n### 📁 Projektstruktur\n```\npeertube-plugin-static-files/\n├── assets/\n│   └── style.css              # UI-Styling\n├── client/\n│   ├── client-plugin.js       # Haupt-Client-Code\n│   └── stats-page.js          # Statistik-Interface\n├── routes/\n│   └── stats.js               # Statistik-API-Routen\n├── dist/                      # Gebaute Dateien\n├── public/uploads/            # Hochgeladene Dateien\n│   ├── images/                # Bilder-Kategorie\n│   └── documents/             # Dokument-Kategorie\n├── metadata/                  # Datei-Metadaten (JSON)\n├── scripts/\n│   └── build.js               # Build-Pipeline\n├── main.js                    # Server-seitiger Hauptcode\n├── package.json               # Projekt-Konfiguration\n└── README.md                  # Diese Dokumentation\n```\n\n### 🔄 Build-Prozess\n```bash\n# Vollständiger Build\nnpm run build\n\n# Nur Client-Dateien\nnode scripts/build.js\n\n# Entwicklung mit Auto-Reload  \nnpm run dev\n```\n\n## 🔒 Sicherheit & Best Practices\n\n### 🛡️ Sicherheitsmaßnahmen\n- **Strikte Dateityp-Validierung** auf Server- und Client-Seite\n- **Dateigrößen-Limits** konfigurierbar bis 100MB\n- **Benutzer-Autorisierung** bei jedem API-Aufruf\n- **Pfad-Sanitization** verhindert Directory Traversal\n- **MIME-Type-Prüfung** zusätzlich zur Dateiendung\n\n### ⚡ Performance-Optimierungen\n- **Streaming File Upload** für große Dateien\n- **ETag & Cache-Control** Header für Browser-Caching\n- **Lazy Loading** in der Dateiliste\n- **Chunked Transfer** für Downloads\n- **Database Query Optimization** für Statistiken\n\n### 📊 Monitoring & Logging\n- **Detaillierte Upload-Logs** mit Benutzer-Tracking\n- **Error Handling** mit aussagekräftigen Fehlermeldungen\n- **Performance Metriken** für Admin-Dashboard\n- **Audit Trail** für Admin-Aktionen\n\n## 🐛 Troubleshooting\n\n### ❗ Häufige Probleme\n\n#### Plugin lädt nicht\n```bash\n# PeerTube Logs prüfen\njournalctl -u peertube -f\n\n# Plugin-Status überprüfen\nsudo -u peertube npm list | grep static-files\n\n# Dateiberechtigungen korrigieren\nsudo chown -R peertube:peertube /var/www/peertube/plugins/\n```\n\n#### Upload schlägt fehl\n- ✅ **Dateigröße prüfen** (Standard: 50MB)\n- ✅ **Dateityp validieren** (siehe unterstützte Formate)\n- ✅ **Speicherplatz verfügbar** im uploads-Verzeichnis\n- ✅ **Nginx Upload-Limit** erhöhen falls nötig\n\n#### 403 Zugriffsverweigert\n- ✅ **Benutzer-Anmeldung** überprüfen\n- ✅ **Plugin-Einstellungen** kontrollieren\n- ✅ **Rollen-Konfiguration** validieren\n\n#### Statistiken laden nicht\n- ✅ **Admin/Moderator-Rechte** bestätigen\n- ✅ **Datenbank-Zugriff** testen\n- ✅ **API-Endpunkte** via Browser/cURL prüfen\n\n### 🔧 Debug-Modus aktivieren\n```javascript\n// In main.js temporär hinzufügen:\n```\nconsole.log('DEBUG: Plugin loaded with settings:', settings);\n```\n\n## 📈 Changelog\n\n### v1.6.5 *(Aktuell)*\n- 🐛 **Fix:** NPM-Installation repariert (prepare-Skript entfernt)\n\n### v1.6.4\n- 🐛 **Fix:** Korrektes Parsen der Kategorien aus der API (Objekt statt Array)\n\n### v1.6.3\n- ✅ **Verbessert:** Kategorien werden dynamisch über PeerTube API geladen\n- 🔧 **Fix:** Kompatibel mit peertube-plugin-categories\n\n### v1.6.2\n- ✅ **Verbessert:** Kategorie-Namen angepasst (Kurzfilm, Heimatdoku, etc.)\n\n### v1.6.1\n- 🐛 **Fix:** renderRegionsCard Funktion fehlte\n- 🐛 **Fix:** Top Kanäle und Kategorien zeigten falsche View-Zahlen  \n- 🐛 **Fix:** Video-Counts waren inflationiert (jetzt COUNT DISTINCT)\n- ✅ **Verbessert:** Watch Time = tatsächliche Wiedergabezeit (nicht Video-Länge)\n- ✅ **Verbessert:** Views = einzelne View-Events (nicht aggregiert)\n\n### v1.6.0\n- 🏆 **Neu:** Top Kanäle Statistiken (Views, Watch Time, Video Count)\n- 🏷️ **Neu:** Top Kategorien Analyse\n- 📈 **Neu:** Schnell Wachsende Videos (7-Tage-Vergleich)\n- 📊 **Neu:** Channel Performance Dashboard\n- 🚀 **Neu:** Growth Tracking mit Prozent-Wachstum\n\n### v1.5.0\n- 🔥 **Neu:** Aktivitäts-Heatmap (Stunde × Wochentag)\n- 💡 **Neu:** Beste Veröffentlichungszeiten-Empfehlungen\n- 📊 **Neu:** Watch Time Perzentile (p25, p50, p75, p90, p95)\n- 📈 **Neu:** Retention Distribution Visualisierung\n- 🎯 **Neu:** Interaktive Heatmap mit Hover-Effekten\n\n### v1.4.1\n- 🗺️ **Neu:** Regional-Statistiken (Top Regionen mit Land und Views)\n- 📊 **Verbessert:** Detaillierte Aufschlüsselung nach subdivisionName + country\n- 👥 **Neu:** Unique Viewers pro Region\n\n### v1.4.0\n- ✨ **Neu:** DAU/WAU/MAU Metriken (Daily/Weekly/Monthly Active Users)\n- 📊 **Neu:** Retention Metriken (Durchschnittliche & Median Watch Time)\n- 📈 **Neu:** Time Series für Watch Time und Active Viewers\n- 🎨 **Neu:** Interaktiver Chart-Selector (Views / Watch Time / Active Viewers)\n- 🔧 **Verbessert:** Erweiterte Zeitreihen-Analysen\n\n### v1.3.1\n- 🎨 **Neu:** Modernes Dashboard-Design mit dunklem Theme und voller Seitenbreite\n- ✨ **Verbessert:** Farbcodierte Metrik-Karten (Blau, Grün, Cyan, Orange, Lila, Pink)\n- 🔧 **Verbessert:** Responsives Grid-Layout und verbesserte Lesbarkeit\n- 💅 **Neu:** Animierte Hover-Effekte und moderne Typografie\n\n### v1.3.0\n- ✨ **Neu:** Detaillierte Zuschauer-Statistiken (Eindeutige Zuschauer, Länder, Geräte, Betriebssysteme, Browser)\n- 🔧 **Verbessert:** Erweiterte Nutzung der `localVideoViewer` Tabelle für präzise Daten\n\n### v1.2.9\n- ✨ **Neu:** Exakte Berechnung der Wiedergabezeit (basierend auf `localVideoViewer`)\n- 🔧 **Verbessert:** Fallback auf Schätzung, falls keine detaillierten Daten verfügbar sind\n- 🗑️ **Entfernt:** Debug-Route\n\n### v1.2.8\n- 🔧 **Debug:** Temporäre Route zur Schema-Analyse hinzugefügt (für exakte Watch-Time)\n- ✨ **Neu:** Unterstützung für SVG-Dateien beim Upload\n- 🔧 **Verbessert:** Videotitel in Statistiken sind jetzt vollständig lesbar und verlinkt\n\n### v1.2.7\n- ✨ **Neu:** Unterstützung für SVG-Dateien beim Upload\n- 🔧 **Verbessert:** Videotitel in Statistiken sind jetzt vollständig lesbar und verlinkt\n\n### v1.2.6\n- 🔧 **Verbessert:** Videotitel in Statistiken sind jetzt vollständig lesbar und verlinkt\n- ℹ️ **Info:** Klarstellung zur Berechnung der Wiedergabezeit (Schätzung)\n\n### v1.2.5\n- 🐛 **Behoben:** Fehlende Statistik-Features im Frontend (Build-Prozess korrigiert)\n- 🔧 **Verbessert:** Integration der Statistik-Seite\n\n### v1.2.4\n- 🐛 **Behoben:** HTTP 500 Fehler auf der Statistik-Seite (Fehlerbehandlung verbessert)\n- 🔧 **Verbessert:** Robustere Berechnung der Wiedergabezeit\n\n### v1.2.3\n- ✨ **NEU:** Erweiterte Statistiken (Speicherplatz, Engagement, Wiedergabezeit)\n- ✨ **NEU:** Top-Listen für Videos und Kanäle\n- ✨ **NEU:** Dynamische Diagramme für Views-Verlauf\n- 🐛 **Behoben:** Pfad-Probleme beim Datei-Upload (Persistente Speicherung)\n- 🔧 **Verbessert:** Performance der Datenbank-Abfragen\n\n### v1.2.0\n- ✨ **NEU:** Basis Administrator-Statistiken\n- ✨ **NEU:** Video-Analytics mit flexibler Gruppierung  \n- ✨ **NEU:** ICO-Datei Unterstützung\n- 🔧 **Verbessert:** Modulare Architektur mit separaten Routen\n- 🔧 **Verbessert:** Enhanced Error Handling\n- 🐛 **Behoben:** ES Module Export-Probleme\n\n### v1.1.4\n- 🔧 **Verbessert:** Datei-Metadaten System\n- 🔧 **Verbessert:** Admin-Interface Überarbeitung\n- 🐛 **Behoben:** Upload-Fehlerbehandlung\n\n### v1.1.0\n- ✨ Drag & Drop Upload-Interface\n- ✨ Flexible Benutzerrechte-Verwaltung\n- 🔧 Responsive Design\n\n## 🤝 Beitragen\n\nWir freuen uns über Beiträge zur Weiterentwicklung des Plugins!\n\n### 🔄 Contribution Workflow\n1. **Fork** des Repositories erstellen\n2. **Feature-Branch** erstellen (`git checkout -b feature/amazing-feature`)\n3. **Änderungen committen** (`git commit -m 'Add amazing feature'`)\n4. **Branch pushen** (`git push origin feature/amazing-feature`)\n5. **Pull Request** erstellen\n\n### 🐛 Bug Reports\nBitte verwenden Sie die **GitHub Issues** mit folgenden Informationen:\n- PeerTube Version\n- Plugin Version  \n- Detaillierte Fehlerbeschreibung\n- Schritte zur Reproduktion\n- Browser/OS Information\n\n### 💡 Feature Requests\nBeschreiben Sie neue Funktionswünsche mit:\n- Use Case und Motivation\n- Erwartetes Verhalten\n- Mögliche Implementierungsansätze\n\n## 📄 Lizenz\n\nDieses Plugin ist unter der **AGPL-3.0** Lizenz veröffentlicht.\n\n```\nPeerTube Static Files & Admin Stats Plugin\nCopyright (C) 2025 yarkolife\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published\nby the Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n```\n\nVollständige Lizenz-Details finden Sie in der [LICENSE](LICENSE) Datei.\n\n## 🙋‍♂️ Support & Community\n\n### 📞 Support-Kanäle\n- **GitHub Issues**: [Bug Reports & Feature Requests](https://github.com/yarkolife/peertube-plugin-static-files/issues)\n- **GitHub Discussions**: [Community Forum](https://github.com/yarkolife/peertube-plugin-static-files/discussions)\n- **PeerTube Forum**: [Plugin-spezifische Diskussionen](https://framatalk.org/c/peertube)\n\n### 🌟 Mitwirkende\n- **[yarkolife](https://github.com/yarkolife)** - Hauptentwickler & Maintainer\n- **Community Contributors** - Siehe [Contributors](https://github.com/yarkolife/peertube-plugin-static-files/graphs/contributors)\n\n### 💖 Sponsoring\nWenn dieses Plugin für Sie nützlich ist, können Sie die Entwicklung unterstützen:\n- ⭐ **GitHub Star** vergeben\n- 🍻 **Buy me a coffee** (Link folgt)\n- 💼 **Enterprise Support** anfragen\n\n---\n\n**📌 Hinweis**: Dieses Plugin befindet sich in aktiver Entwicklung. Regelmäßige Updates bringen neue Features und Verbesserungen. Feedback und Verbesserungsvorschläge sind jederzeit willkommen!\n\n---\n\n*Entwickelt mit ❤️ für die PeerTube Community*","readmeFilename":"README.md"}