slate.env.example
Rama main · réplica de lectura del repositorio original.
# slate.env.example -- copy this to slate.env, then fill in your own values.
#
# cp slate.env.example slate.env
# # edit slate.env
# ./run.sh
#
# slate.env holds your secrets. It is already ignored by git, so it is never
# committed. Do not share it or paste it anywhere. Every value below is for
# YOUR own accounts; you pay your own bills.
#
# Only ONE value is truly required to start: DISCORD_TOKEN. Everything else adds
# a feature. What each knob does, why it exists, and where to get it is spelled
# out in plain words in docs/configuration.md. This file is the short version.
# ---------------------------------------------------------------------------
# 1. Discord (required)
# ---------------------------------------------------------------------------
# Your bot login token from the Discord Developer Portal
# (Applications -> your app -> Bot -> Reset Token). REQUIRED.
DISCORD_TOKEN=
# Which channels Slate listens in, as a comma-separated list of channel IDs.
# Leave this EMPTY and Slate only answers direct messages and @mentions.
# To get a channel ID: turn on Discord Developer Mode, right-click a channel,
# then "Copy Channel ID".
DISCORD_CHANNEL_IDS=
# How many past back-and-forth turns Slate keeps in the live conversation.
# Default 20. Higher = more memory, more cost per reply.
DISCORD_HISTORY=20
# Other bot IDs Slate is allowed to talk to (comma-separated). Leave empty to
# ignore all other bots. Only needed if you run a second cooperating bot.
TRUSTED_BOT_IDS=
# A file path to also write logs to. Leave empty to log to the screen only.
# In Docker this is set to /dev/stdout for you.
DISCORD_LOG=
# ---------------------------------------------------------------------------
# 2. The writing brain: Claude (recommended) or your own Ollama
# ---------------------------------------------------------------------------
# Slate needs one language model to talk and to keep the storyboard. Pick ONE
# of the two paths below.
#
# Path A -- Claude through Cloudflare AI Gateway (recommended): set CF_AIG_TOKEN
# and CF_GATEWAY_ENDPOINT, and set DISCORD_MODEL to a Claude model.
# Path B -- A local Ollama model (no cloud, no bill): leave CF_AIG_TOKEN EMPTY,
# set OLLAMA_BASE_URL and DISCORD_MODEL to your Ollama model.
# The model id Slate uses to think and write.
# Claude path example: claude-sonnet-4-6
# Ollama path example: qwen3.6:27b-ctx8k
DISCORD_MODEL=claude-sonnet-4-6
# Cloudflare AI Gateway API token (the Claude path). Set this to use Claude.
# Leave EMPTY to fall back to Ollama. Make one in the Cloudflare dashboard:
# AI -> AI Gateway -> your gateway -> API keys.
CF_AIG_TOKEN=
# Your AI Gateway compatibility URL. Slate uses it to reach Claude. Looks like:
# https://gateway.ai.cloudflare.com/v1/<account-id>/<gateway-name>/compat/chat/completions
CF_GATEWAY_ENDPOINT=
# Where your local Ollama server listens (the Ollama path). Only used when
# CF_AIG_TOKEN is empty. Default is a local Ollama on the same machine.
OLLAMA_BASE_URL=http://localhost:11434/v1
# ---------------------------------------------------------------------------
# 3. The Studio (needed to render films)
# ---------------------------------------------------------------------------
# Slate writes storyboards on its own, but to turn one into a video it hands the
# job to a Vivijure Studio. Point Slate at your Studio here. Leave VIVIJURE_API_URL
# empty and Slate still plans films; it just cannot press "render".
# Your Studio web address (the vivijure control plane you deployed).
# Example: https://vivijure.example.com
VIVIJURE_API_URL=
# The Studio's API token. REQUIRED whenever VIVIJURE_API_URL is set: the Studio
# checks it on every call Slate makes (bundle, cast, portrait, render, status),
# and Slate refuses to start without it. Your Studio prints/mints this when you
# deploy it; paste the same value here.
STUDIO_API_TOKEN=
# OPTIONAL, additive hardening: if you ALSO front your Studio with Cloudflare
# Access, add an Access SERVICE TOKEN so Slate can pass that outer door. Create
# one in Cloudflare: Zero Trust -> Access -> Service Auth -> Service Tokens.
# Leave both empty if your Studio has no Access (the common case).
CF_ACCESS_CLIENT_ID=
CF_ACCESS_CLIENT_SECRET=
# ---------------------------------------------------------------------------
# 4. Saved memory: Cloudflare D1 (recommended)
# ---------------------------------------------------------------------------
# D1 is a small cloud database. Slate uses it to remember every project storyboard,
# history, and pending renders, so nothing is lost on restart.
# Create one with: npx wrangler d1 create slate-sessions (this prints the id).
# A Cloudflare API token with the "D1 Edit" permission.
# Make one at: dash.cloudflare.com -> My Profile -> API Tokens.
CF_D1_TOKEN=
# Your Cloudflare account id (dash.cloudflare.com, right sidebar on any zone).
CF_D1_ACCOUNT_ID=
# The database id printed when you ran "wrangler d1 create".
CF_D1_DATABASE_ID=
# ---------------------------------------------------------------------------
# 5. Pictures: the image generator (optional)
# ---------------------------------------------------------------------------
# The base URL of the image service Slate calls for character portraits and
# scene thumbnails. Default is our public playground; point it at your own if
# you run one. Portrait uploads flow through this service, so Slate itself needs
# no storage keys.
LLM_API_URL=https://play.skyphusion.org
# ---------------------------------------------------------------------------
# 6. Web search + knowledge base (optional)
# ---------------------------------------------------------------------------
# Slate can look things up on the web and search a knowledge base you feed it
# with "!learn". Both come from the separate slate-search Worker (see
# search-worker/ and docs/configuration.md). Leave these empty to run without
# search; Slate still writes and renders.
# The web address of your deployed slate-search Worker.
SEARCH_WORKER_URL=
# REQUIRED whenever SEARCH_WORKER_URL is set: four distinct passwords (>= 16 chars
# each; `openssl rand -hex 32`). Each MUST match the Worker secret of the same name.
# Leave all five (URL + secrets) empty to run without search.
SEARCH_SECRET=
KNOWLEDGE_SECRET=
FETCH_SECRET=
MEMORY_SECRET=
# ---------------------------------------------------------------------------
# 7. Shipping logs to a bucket (optional)
# ---------------------------------------------------------------------------
# Slate can also ship its logs to the separate slate-logs Worker (see log-worker/).
# Leave these empty to keep logs on the screen / in DISCORD_LOG only.
# The web address of your deployed slate-logs Worker.
LOG_WORKER_URL=
# A shared password Slate sends to that Worker. It MUST match the LOG_SECRET you
# set on the Worker.
LOG_SECRET=
# A label attached to shipped log lines, so one bucket can hold several services.
LOG_SERVICE=slate