Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
128 lines (116 loc) · 5.96 KB
/
Copy path.env.example
File metadata and controls
128 lines (116 loc) · 5.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# =============================================================================
# ytvideomaker — environment configuration
#
# Copy to `.env` and fill in. NEVER commit `.env`.
# cp .env.example .env
#
# Everything in this file is free or open-source. The only account you need is
# an Anthropic API key (Claude = the reasoning engine) and a Google Cloud
# project for the YouTube Data API (free quota).
# =============================================================================
# -----------------------------------------------------------------------------
# Runtime
# -----------------------------------------------------------------------------
NODE_ENV=development
# Port for the Fastify API server.
API_PORT=4000
API_HOST=127.0.0.1
# Origin of the Vite dashboard, used for CORS + the OAuth success redirect.
WEB_ORIGIN=http://localhost:5173
# trace | debug | info | warn | error | fatal
LOG_LEVEL=info
# pretty | json (pretty = human-readable dev logs, json = structured file logs)
LOG_FORMAT=pretty
# -----------------------------------------------------------------------------
# Database — MongoDB Community Edition, running locally. No cloud required.
# brew install mongodb-community && brew services start mongodb-community
# -----------------------------------------------------------------------------
DATABASE_URL=mongodb://127.0.0.1:27017/ytvideomaker
# -----------------------------------------------------------------------------
# Claude — the content director / reasoning engine.
# Get a key at https://console.anthropic.com/settings/keys
# -----------------------------------------------------------------------------
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Model used for long-form reasoning (research, script, storyboard, analysis).
ANTHROPIC_MODEL=claude-opus-5
# Cheaper model for short structured tasks (tag extraction, scoring, titles).
ANTHROPIC_FAST_MODEL=claude-haiku-4-5-20251001
ANTHROPIC_MAX_TOKENS=16000
# Which AIProvider implementation to use: anthropic | mock
AI_PROVIDER=anthropic
# -----------------------------------------------------------------------------
# Research — how the system collects real, citable sources.
#
# wikipedia Free public API, no key, no quota. Returns real URLs that are
# verified against what was actually fetched, so a model-invented
# citation cannot survive into a script.
# none No retrieval. Every claim is then forced to `estimate` or lower
# and hedged in the narration. Use offline or to save time.
# -----------------------------------------------------------------------------
RESEARCH_PROVIDER=wikipedia
RESEARCH_MAX_QUESTIONS=8
# -----------------------------------------------------------------------------
# Text to speech — local / open-source only.
#
# piper Recommended, cross-platform, high quality, fully offline.
# https://github.com/rhasspy/piper (MIT)
# Download a voice .onnx + .onnx.json into ./models/piper/
# say macOS built-in. Zero install, lower quality. Good for smoke tests.
# espeak espeak-ng. Robotic but works everywhere. Fallback of last resort.
# mock Generates silence of the right duration. Used by tests.
# -----------------------------------------------------------------------------
TTS_PROVIDER=say
TTS_VOICE=Samantha
# Words-per-minute target for narration pacing.
TTS_SPEAKING_RATE=175
# Piper-specific (only needed when TTS_PROVIDER=piper)
PIPER_BINARY=piper
PIPER_MODEL_PATH=./models/piper/en_US-lessac-medium.onnx
# -----------------------------------------------------------------------------
# Media tooling
# Leave blank to auto-detect from PATH, then fall back to Remotion's bundled
# binaries. Install a system copy with: brew install ffmpeg
# -----------------------------------------------------------------------------
FFMPEG_PATH=
FFPROBE_PATH=
# -----------------------------------------------------------------------------
# Video defaults — overridden per-channel by the channel config (§16).
# -----------------------------------------------------------------------------
VIDEO_WIDTH=1920
VIDEO_HEIGHT=1080
VIDEO_FPS=30
# Concurrent Remotion render workers. 0 = auto (based on CPU count).
RENDER_CONCURRENCY=0
# -----------------------------------------------------------------------------
# YouTube Data API v3 — free quota (10,000 units/day).
#
# 1. https://console.cloud.google.com → new project
# 2. Enable "YouTube Data API v3" and "YouTube Analytics API"
# 3. Credentials → OAuth client ID → Desktop app / Web app
# 4. Add the redirect URI below to the client's authorized redirect URIs
#
# IMPORTANT — the unverified-app limitation:
# While your OAuth app is in "Testing", every upload lands as PRIVATE and the
# API *cannot* make it public. That is Google's policy, not a bug here. You
# can still flip a video to public by hand in YouTube Studio. Publishing
# programmatically requires passing Google's verification review.
# Add your own Google account under "Test users" or consent will be refused.
#
# Quota: 10,000 units/day. An upload costs ~1600, so roughly 6 uploads/day.
# -----------------------------------------------------------------------------
YOUTUBE_CLIENT_ID=
YOUTUBE_CLIENT_SECRET=
YOUTUBE_REDIRECT_URI=http://127.0.0.1:4000/api/youtube/oauth/callback
# -----------------------------------------------------------------------------
# Safety rails
# -----------------------------------------------------------------------------
# manual | autonomous — manual requires human approval at each gate (§15).
PIPELINE_MODE=manual
# Uploads are ALWAYS private unless this is explicitly flipped to true.
ALLOW_AUTO_PUBLISH=false
# private | unlisted | public — the privacy status new uploads receive.
DEFAULT_UPLOAD_PRIVACY=private
# -----------------------------------------------------------------------------
# Storage — local filesystem. Paths are relative to the repo root.
# -----------------------------------------------------------------------------
DATA_DIR=./data