Kacper Łukawski
Allow downloading a playlist from YT
070f7e4
|
Raw
History Blame Contribute Delete
3.9 kB
metadata
title: Post Conference Report
emoji: 🌖
colorFrom: purple
colorTo: green
sdk: docker
pinned: false

Post Conference Report Demo

A web app that transforms raw conference notes into structured markdown reports via a streaming LLM API.

Stack: FastAPI + vanilla JS/Tailwind CSS frontend, Haystack AI for LLM orchestration, NVIDIA Nemotron-3 Super 120B model via NVIDIA API. The Docker image also bundles the google-drive-mcp server as a background process.

Prerequisites

  • NVIDIA_API_KEY — set in a .env file at the project root
  • Google Drive OAuth credentials (for the MCP server) — see Google Drive MCP setup below

Running locally

# Install dependencies
uv sync

# Run the app (port 7860)
uv run main.py

Helper scripts

Download YouTube transcripts

Downloads transcripts for one or more YouTube videos and saves each as a .docx file named after the video title. Prefers manually-created transcriptions; falls back to auto-generated if unavailable.

# Single video
uv run scripts/download_transcripts.py https://www.youtube.com/watch?v=VIDEO_ID

# Playlist (downloads all videos)
uv run scripts/download_transcripts.py "https://www.youtube.com/playlist?list=PLAYLIST_ID"

# Mix of playlists and individual videos
uv run scripts/download_transcripts.py \
  "https://www.youtube.com/playlist?list=PLAYLIST_ID" \
  https://youtu.be/VIDEO_ID \
  -o ./my-transcripts

# Verbose logging
uv run scripts/download_transcripts.py https://youtu.be/VIDEO_ID -v

Output files land in ./transcripts/ by default. Each file is named after the video title (e.g. My_Talk_Title.docx). Exit code is non-zero if any video failed.

Running with Docker

./run.sh

run.sh builds the image and starts the container. It also mounts your local Google Drive MCP credentials and tokens automatically if they exist at ~/.config/google-drive-mcp/.

To run manually:

docker build -t post-conference-report-demo .
docker run --rm -p 7860:7860 --env-file .env \
  -v ~/.config/google-drive-mcp/gcp-oauth.keys.json:/root/.config/google-drive-mcp/gcp-oauth.keys.json:ro \
  -v ~/.config/google-drive-mcp/tokens.json:/root/.config/google-drive-mcp/tokens.json \
  post-conference-report-demo

Google Drive MCP setup

The Docker image installs @piotr-agier/google-drive-mcp globally and starts it in the background on container startup. It requires Google OAuth 2.0 credentials.

1. Create OAuth credentials

  1. Open Google Cloud Console and create (or select) a project
  2. Enable the following APIs: Drive, Docs, Sheets, Slides, Calendar
  3. Create an OAuth 2.0 Desktop app credential and download the JSON file
  4. Place it at ~/.config/google-drive-mcp/gcp-oauth.keys.json

2. Authenticate (once, on the host)

npx @piotr-agier/google-drive-mcp auth

This opens a browser for the OAuth flow and writes the token to ~/.config/google-drive-mcp/tokens.json. The token file is mounted into the container by run.sh and persists across container restarts.

Alternative: pass credentials via environment variables

Instead of volume mounts you can supply the JSON file contents directly as environment variables — useful for cloud deployments (HuggingFace Spaces secrets, Kubernetes secrets, etc.).

Add these to your .env file:

GOOGLE_DRIVE_OAUTH_KEYS_JSON={"installed":{"client_id":"...","client_secret":"...",...}}
GOOGLE_DRIVE_TOKENS_JSON={"access_token":"...","refresh_token":"...",...}

On container startup, entrypoint.sh writes the values to temp files and points the MCP server at them. Volume mounts take precedence if both are present.

MCP server logs

Inside a running container:

docker exec <container-id> cat /var/log/google-drive-mcp.log