# ResearchOwl — Environment Variables # Copy to .env and fill in values # Required TELEGRAM_BOT_TOKEN=your_bot_token_here TELEGRAM_ALLOWED_USERS=123456789 # your Telegram user ID # Ollama (default points to your existing instance) OLLAMA_URL=http://ollama.chemavx.xyz OLLAMA_MODEL=qwen2.5:7b OLLAMA_EMBED_MODEL=bge-m3 # Claude fallback (optional, only for premium generation) # ANTHROPIC_API_KEY=sk-ant-... # CLAUDE_MODEL=claude-haiku-4-5 # Storage DB_PATH=/data/researchowl.db # Scraping tuning MAX_DEPTH=3 # how deep to follow links (1-5) MAX_SOURCES=150 # hard cap on total sources MAX_PAGES_PER_SEARCH=5 REQUEST_DELAY=1.0 # seconds between requests (be polite) MIN_CONTENT_LENGTH=200 # Shorts (shortsmith) — el renderizador vive en su propio namespace del cluster. # Los valores por defecto ya apuntan al Service interno: sólo hace falta tocarlo # para desarrollo local o para apagarlo. SHORTSMITH_URL=http://shortsmith-svc.shortsmith.svc.cluster.local:8080 SHORTSMITH_TIMEOUT=600 SHORTSMITH_ENABLED=true # false = /generate short_en responde que está apagado SHORTS_DIR=/data/shorts # los MP4 van a disco, nunca a SQLite # YouTube (/upload_short) — sin credenciales el comando contesta que no está # configurado y no rompe nada más. Se sacan con scripts/youtube_oauth.py. YOUTUBE_ENABLED=true YOUTUBE_CLIENT_ID= YOUTUBE_CLIENT_SECRET= YOUTUBE_REFRESH_TOKEN= # OJO: los vídeos subidos por API desde un proyecto sin auditar quedan privados # los pidas como los pidas. Poner "public" aquí no publica nada; sólo hace que # el aviso de Telegram diga que YouTube te forzó la visibilidad. YOUTUBE_PRIVACY=private YOUTUBE_CATEGORY_ID=27 # 27 = Education YOUTUBE_TIMEOUT=300 # Processing CHUNK_SIZE=800 CHUNK_OVERLAP=100 QUALITY_THRESHOLD=0.4 # 0-1, lower = more permissive