Add backlog: streaming server fixes and enhancements

Tasks completed this session:
- Fix recording permissions (nginx nobody user)
- Add Whisper transcription to archive-worker
- Add heartbeat-based viewer counter to stream page
- Fix R2 credentials and rclone config
- Version control streaming-server on Netcup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-02-21 17:29:15 -07:00
parent fd5868f569
commit 812b0a49cf
6 changed files with 96 additions and 0 deletions

16
backlog/config.yml Normal file
View File

@ -0,0 +1,16 @@
project_name: "OBS R2 Uploader & Streaming"
default_status: "To Do"
statuses: ["To Do", "In Progress", "Done"]
labels: []
milestones: []
date_format: yyyy-mm-dd
max_column_width: 20
default_editor: "nvim"
auto_open_browser: true
default_port: 6420
remote_operations: true
auto_commit: false
bypass_git_hooks: false
check_active_branches: true
active_branch_days: 30
task_prefix: "task"

View File

@ -0,0 +1,16 @@
---
id: TASK-1
title: Fix streaming server recording permissions
status: Done
assignee: []
created_date: '2026-02-22 00:28'
labels: []
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
nginx-rtmp recordings dir was owned by root, nginx runs as nobody. Fixed with chown nobody:nogroup.
<!-- SECTION:DESCRIPTION:END -->

View File

@ -0,0 +1,16 @@
---
id: TASK-2
title: Add Whisper transcription to archive-worker
status: Done
assignee: []
created_date: '2026-02-22 00:28'
labels: []
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Archive-worker now extracts audio, sends to Whisper (large-v3-turbo), saves .txt and .srt alongside MP4 recordings. Connected to whisper-local via traefik-public network.
<!-- SECTION:DESCRIPTION:END -->

View File

@ -0,0 +1,16 @@
---
id: TASK-3
title: Add live viewer counter to stream page
status: Done
assignee: []
created_date: '2026-02-22 00:28'
labels: []
dependencies: []
priority: medium
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Heartbeat-based viewer tracking via archive-worker Flask endpoints. Page sends POST /api/viewers/heartbeat every 5s, displays count with pulsing red dot. Nginx proxies /api/ to archive-worker.
<!-- SECTION:DESCRIPTION:END -->

View File

@ -0,0 +1,16 @@
---
id: TASK-4
title: Fix R2 credentials and rclone config
status: Done
assignee: []
created_date: '2026-02-22 00:28'
labels: []
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Old R2 API token was rotated during credential cleanup. Created new scoped token for obs-videos bucket (Object Read & Write). Updated rclone config on Netcup with no_check_bucket=true. Updated local .env. Cleaned up 500+ stale HLS chunks from R2.
<!-- SECTION:DESCRIPTION:END -->

View File

@ -0,0 +1,16 @@
---
id: TASK-5
title: Version control streaming-server on Netcup
status: Done
assignee: []
created_date: '2026-02-22 00:28'
labels: []
dependencies: []
priority: medium
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Initialized git repo at /opt/streaming-server, pushed to gitea.jeffemmett.com/jeffemmett/streaming-server (private). Includes nginx-rtmp config, archive-worker with transcription, docker-compose, stream player page.
<!-- SECTION:DESCRIPTION:END -->