initial commit

This commit is contained in:
2026-05-30 23:29:44 -07:00
commit 431ffdff06
48 changed files with 4221 additions and 0 deletions
+126
View File
@@ -0,0 +1,126 @@
# Evanescere configuration file.
#
# Copy this file to config.toml for local Compose runs:
#
# cp config.example.toml config.toml
#
# In containers, mount your config to:
#
# /etc/evanescere/config.toml
#
# Secrets such as DeepSeek and WebDAV credentials belong in your private config.toml.
[app]
# Free-form environment label included in logs.
env = "dev"
# Python logging level: DEBUG, INFO, WARNING, ERROR.
log_level = "DEBUG"
# Enable SQLAlchemy SQL logging. Very noisy; keep false unless debugging DB behavior.
log_sql = false
# Frontend origins allowed to call FastAPI. Include the Vite dev server while developing.
cors_origins = ["http://localhost:3000", "http://localhost:5173"]
[database]
# PostgreSQL connection string used by SQLAlchemy.
# For Compose local-db profile: postgresql+psycopg://evanescere:evanescere@postgres:5432/evanescere
# For an existing DB: postgresql+psycopg://USER:PASSWORD@HOST:5432/DBNAME
url = "postgresql+psycopg://evanescere:evanescere@postgres:5432/evanescere"
[redis]
# Redis URL used by Dramatiq workers.
url = "redis://redis:6379/0"
[storage]
# Container path for working media. Mount a Framework SSD directory here in Compose.
local_root = "/data/evanescere"
[webdav]
# IIS WebDAV directory containing recording files. Point at the collection, not one file.
base_url = "https://windows-server.example.local/webdav/recordings"
# Leave username/password empty if your WebDAV endpoint does not require basic auth.
username = ""
password = ""
# Set false only for trusted internal/self-signed testing.
verify_tls = true
# Scheduler interval. A file becomes stable after two equal positive size samples.
poll_interval_seconds = 60
[funasr]
# FunASR-compatible API base URL. Evanescere calls /audio/transcriptions.
base_url = "http://funasr:10096/v1"
# Optional bearer token for the FunASR service.
api_key = ""
# Model name sent to FunASR. Adjust this to match your deployed service.
model = "paraformer-zh"
[deepseek]
# OpenAI-compatible DeepSeek API base URL.
base_url = "https://api.deepseek.com"
# Required when clip suggestion is enabled.
api_key = ""
# Initial MVP model.
model = "deepseek-v4-pro"
# Lower values improve consistency.
temperature = 0.2
[defaults]
# Initial automatic pipeline settings. These can later be changed through the API/UI.
suggest_enabled = true
render_enabled = true
# For testing, consider false until uploads are wired and verified.
upload_enabled = true
preserve_final_artifacts = true
bake_subtitles = true
[clip]
# LLM clip duration bounds accepted by the backend.
min_seconds = 30
max_seconds = 360
# Transcript seconds per DeepSeek request. Larger chunks use more tokens.
transcript_chunk_seconds = 900
[thumbnail]
# Generate thumbnails during clip render.
enabled = true
# frame_overlay: use extracted video frame as background.
# command: run command below to call a local image generation workflow.
provider = "frame_overlay"
width = 1920
height = 1080
# Optional transparent PNG of the VTuber character.
character_overlay_path = ""
# Character height as a fraction of thumbnail height.
character_scale = 0.42
# Supported: bottom-right, bottom-left, center-right, center-left.
character_position = "bottom-right"
# Draw the clip title onto the final thumbnail.
title_enabled = true
# Used only when provider = "command". Receives JSON on stdin and must write output_path.
command = ""
[upload]
# noop: do not upload, only record what would have happened.
# command: run command below with JSON metadata on stdin.
adapter = "noop"
command = ""