Launcher

Brings up SearXNG, the AI server, and the bot — in the right order. Replaces seekdeep_launcher.bat.
PID — · :8080

SearXNG

Privacy meta-search · docker compose
Uptime: Reqs:
PROBING
PID — · :7865

Local AI Server

uvicorn local_ai_server.py · workers=1
VRAM: Queue:
PROBING
PID — · gateway

SeekDeep Bot

node index.js · Discord gateway client
Latency: Guilds:
PROBING
Boot sequence
▸ no boot.* events yet — the full live tail is on the Logs pane
Quick actions
Bot repo path

GPU & VRAM

Live read with thrashing detection. Updates every 2s.
VRAM Used
/ GB
GPU Util
%
Temperature
°C
— nvidia-smi pending
Power Draw
W
— nvidia-smi pending
Resident models — VRAM breakdown
— no resident models · the AI server tracks loaded_chat_role / image_pipe / vision_model in /health; we populate this list from those.

VRAM · last 10 minutes

— waiting for first vram.sample event (server emits every 10s while WS is connected)

Model manager

Browse, warm, quantize, pin and prune the local Hugging Face cache.
Cache total
GB
— /stats/snapshot pending
Currently resident
— /health pending
Offline lock
— /health pending
HF hugging face · local OL ollama daemon ⚠ REMOTE prompts leave the box RESIDENT · PINNED · CACHED · NOT INSTALLED
MODELROLEQUANTSIZESTATE
meta-llama/Llama-3.1-8B-Instruct HFdefault_chat4bit~5 GBUNLOADED
Lykon/dreamshaper-xl-1-0 HFimagefp16~7 GBUNLOADED
Qwen/Qwen2.5-VL-3B-Instruct HFvisionfp16~3 GBUNLOADED
mistralai/Mistral-Nemo-Instruct-2407 HFquality_text4bit~7 GBUNLOADED
microsoft/phi-4 HFreasoning_code4bit~9 GBUNLOADED
ibm-granite/granite-3.3-8b-instruct HFfallback_chat4bit~5 GBUNLOADED
google/gemma-3n-E4B-it HFlightweight_chat4bit~3 GBUNLOADED
timbrooks/instruct-pix2pix HFpix2pixfp16~3 GBUNLOADED
CIDAS/clipseg-rd64-refined HFinpaint maskfp16<1 GBUNLOADED

Bot config

Every .env knob — grouped, collapsible, persisted on save.
▸ Quick model picker
Live · cached HF repos + Ollama daemon tags · changes apply on Save + AI server restart
scanning…
CHAT
IMAGE
VISION
Discord & routing core 9
DISCORD_TOKEN
Bot token from the Discord developer portal · required.
SEEKDEEP_ALLOWED_CHANNELS
Comma-separated channel IDs · empty = answer everywhere.
SEEKDEEP_BLOCKED_CHANNELS
Channels SeekDeep ignores even when mentioned.
SEEKDEEP_ADMIN_IDS
User IDs that get queue priority + persona/digest perms.
MAX_DISCORD_CHARS
Hard cap before SeekDeep splits an answer across messages.
CHAT_PROVIDER
Provider for chat completions.
IMAGE_PROVIDER
Provider for image generation.
VISION_PROVIDER
Provider for vision / image-understanding.
MODEL_AUTO_FALLBACK
If a chat role's model fails to load, fall back to default_chat.
DIRTY
Models & roles routing per task 8
LOCAL_CHAT_MODEL_ID
Default chat model — fallback when no role-specific model fits.
LOCAL_CHAT_QUALITY_MODEL_ID
Used when /ask is invoked with quality:high or for complex synthesis.
LOCAL_CHAT_REASONING_MODEL_ID
For math/logic queries · auto-routed by the intent classifier.
LOCAL_CHAT_FALLBACK_MODEL_ID
Soft fallback when the primary chat model can't load.
LOCAL_CHAT_LIGHTWEIGHT_MODEL_ID
For low-stakes routing under VRAM pressure.
LOCAL_IMAGE_MODEL_ID
SDXL base for txt2img / img2img.
LOCAL_VISION_MODEL_ID
Image-understanding · OCR mode + describe mode.
LOCAL_CHAT_QUANT
4bit fits 12-14B models on 24GB VRAM, ~1-2% quality drop.
DIRTY · requires restart
VRAM & cache safety budgets 7
VRAM_SYSTEM_RESERVE_MB
Reserve for OS + background apps · keeps the desktop responsive under load.
VRAM_SAFETY_MARGIN_MB
Headroom for KV cache / allocator fragmentation.
MODEL_KEEP_MODE
task-lru = evict cold roles. always = keep all resident (needs 32GB+).
LOCAL_CHAT_KEEP_RESIDENT
Keep chat model in VRAM across task switches (zero reload cost).
LOCAL_IMAGE_KEEP_RESIDENT
Pin SDXL · useful if you batch image gens.
LOCAL_VISION_KEEP_RESIDENT
Pin vision model · rarely needed.
LOCAL_MODEL_CACHE_DIR
Where HF stores pulled weights.
Paths & backends HF · Ollama · cache roots 4
▸ Where weights live on disk · how long Ollama keeps a model warm after the last request. Empty = use each tool's default.
HF_HOME
Hugging Face cache root. Override to put weights on a fast SSD or a separate volume.
OLLAMA_MODELS
Ollama models directory. Pulled tags live here.
OLLAMA_KEEP_ALIVE
Duration a model stays warm in Ollama after the last request. "0" = evict immediately · "5m" = keep warm 5 minutes · "-1" = forever.
LOCAL_AI_BASE_URL
FastAPI side-car URL. Loopback only — never expose this beyond the local box.
Remote chat keys per-role API URL + key 10
Prompts for these roles leave the local machine. Keys are stored in .env in plaintext — same threat model as any local dev tool. Loopback only.
▸ Leave a row empty to keep the role on the local HF / Ollama path. Roles without a matching _BACKEND override stay local even if a key is set here.
LOCAL_CHAT_DEFAULT_API_URL
Base URL for the default_chat role when its backend is remote.
LOCAL_CHAT_DEFAULT_API_KEY
Bearer / x-api-key for the default_chat role.
LOCAL_CHAT_LIGHTWEIGHT_API_URL
Base URL for lightweight_chat — used for greetings, translations, trivial routing.
LOCAL_CHAT_LIGHTWEIGHT_API_KEY
Key for the lightweight_chat role.
LOCAL_CHAT_QUALITY_API_URL
Base URL for quality_text — synthesis-heavy queries. Anthropic uses https://api.anthropic.com/v1/messages.
LOCAL_CHAT_QUALITY_API_KEY
Key for quality_text.
LOCAL_CHAT_REASONING_API_URL
Base URL for reasoning_code. Groq / OpenRouter / DeepSeek all speak the openai-compat shape.
LOCAL_CHAT_REASONING_API_KEY
Key for reasoning_code.
LOCAL_CHAT_FALLBACK_API_URL
Base URL for the cold-failover role.
LOCAL_CHAT_FALLBACK_API_KEY
Key for fallback_chat.
Memory conversation context 5
SEEKDEEP_MEMORY_SCOPE
user = per-user context · channel = shared (small private servers).
SEEKDEEP_MEMORY_MODE
rolling = sliding window · summarize = compact older turns.
MAX_CONTEXT_MESSAGES
How many messages SeekDeep stores per scope.
MAX_CONTEXT_CHARS
Storage cap. ~12K tokens at 40K chars.
SEEKDEEP_MEMORY_RECENT_ENTRIES
Render cap · how many entries are actually sent to the model.
Image generation SDXL pipeline 11
IMAGE_GUIDANCE_SCALE
Dreamshaper-XL sweet spot 6.5-8.0.
DIRTY
IMAGE_STEPS
28 is standard · /image quality:low|standard|high → 12/28/40.
IMAGE_SCHEDULER
dpmsolver++ (DPM++ 2M Karras) is tuned for Dreamshaper-XL.
SEEKDEEP_IMAGE_PROMPT_DYNAMIC_REFINEMENT
Refine prompts via the pinned chat model before SDXL.
SEEKDEEP_IMAGE_PROMPT_DYNAMIC_MAX_WORDS
Cap on refined-prompt length in words.
SEEKDEEP_IMAGE_PROMPT_MAX_CHARS
Hard cap on the prompt sent to SDXL.
SEEKDEEP_UPSCALE_METHOD
lanczos is local/offline · realesrgan requires the optional model.
SEEKDEEP_UPSCALE_SHARPEN
Apply mild unsharp mask after upscale.
SEEKDEEP_UPSCALE_SHARPEN_RADIUS
Sharpen radius · higher = more pronounced edges.
SEEKDEEP_UPSCALE_SHARPEN_PERCENT
Sharpen intensity (0-200).
SEEKDEEP_UPSCALE_MAX_OUTPUT_PIXELS
Safety ceiling · prevents accidental 8k explosions.
Chat generation sampling 4
CHAT_WEB_TEMPERATURE
Web-routed answers · lower = more coherent synthesis.
CHAT_TOP_K
Top-K sampling cap · 0 = disabled.
CHAT_WEB_MAX_NEW_TOKENS
Generation cap for web-backed answers (room for synthesis).
WEB_APPEND_SOURCES
Append "Sources:" line to web-routed answers.
Feature flags SEEKDEEP_FEATURE_* 9
▸ The three reaction features (FORCE_REACT, EMOJI_VAULT, AUTO_REACT) default off so SeekDeep doesn't fight demonbot in shared servers.
IMG2IMG
Transform attached / replied images.
UNKNOWN
INSTRUCT_PIX2PIX
Edit-by-instruction · pulls extra model.
UNKNOWN
INPAINT
CLIPSeg-masked SDXL fill.
UNKNOWN
UPSCALE_REALESRGAN
Heavier upscale path · requires model.
UNKNOWN
NSFW_GATE
Hard refusal on NSFW prompts.
UNKNOWN
TTS_VOICE
Voice replies in voice channels.
UNKNOWN
EMOJI_VAULT
@SeekDeep emoji backup/import/count/list.
UNKNOWN
FORCE_REACT
Manual react via paginated emoji picker.
UNKNOWN
AUTO_REACT
Per-message rule scan · @SeekDeep reactrule admin.
UNKNOWN
Integrations channel-targeted features 1
▸ Features that post to a specific channel. Save here writes .env; click ⟳ Reload .env in Launcher to apply.
Member join/leave log UNKNOWN
Posts a Member Joined / Member Left embed (avatar · mention · user tag + ID · account created · server member count) to the channel below. Set the channel ID in JOIN_LEAVE_CHANNEL_ID (.env). Requires the GuildMembers privileged intent — enable it at discord.com/developers/applications → your bot → Bot → Privileged Gateway Intents → Server Members.
JOIN_LEAVE_CHANNEL_ID UNKNOWN
post joins
post leaves
Personas tone · synced with Tweaks panel 4
▸ Single source of truth. The Tweaks panel cycles the same value live · this is where it persists to .env.

Clinical

terse, numbered, footnoted. minimal warmth. like a manpage with feelings.

Neurotic

second-guesses itself, asks clarifying questions, hedges. "are you sure that's what you want?"

Unsettling

too-knowing pauses. uses your name unprompted. ellipses everywhere…

Chaotic

CAPS LOCK. tangents. ENERGY. emoji approved. ships first asks later.

Admin offline mode · diagnostics 3
HF_HUB_OFFLINE
Lock Hugging Face to local cache only · run after first warmup.
TRANSFORMERS_OFFLINE
Lock Transformers to local cache · pairs with HF_HUB_OFFLINE.
MODEL_ROUTER_LOG
Log every routing decision to logs/.

Logs viewer

Tailing /logs/tail · showing lines ()
POLL MODE
ALL INFO WARN ERROR DEBUG bot ai-server searxng image vision
▸ loading from /logs/tail…

Chat playground

Test chat roles & personas without leaving the GUI. No Discord round-trip.
Role
Web search
off auto always
Persona
Temperature0.7
0.0 · greedy0.7 · default1.0 · creative
Run diagnostics
last latency
tok/s
prompt tokens
completion tokens
web search
memory hit
vram resident
Routing trace
— send a message to populate the trace

Image playground

SDXL · txt2img · img2img · pix2pix · inpaint · upscale — local, queued, refined.
txt2img img2img pix2pix inpaint upscale ▸ SDXL txt2img · prompt only
raw refined both
×
[SDXL OUTPUT · 1024² · seed —]
IDLE

Archive browser

Visual browse for user & shared archive threads. — snapshot pending
▸ AUTHOR NOTIFY
When someone archives a post, optionally DM the original author so they know their work is being kept. Defaults to silent. Per-channel overrides below.
MODE
SELF
own posts
SENT 24h
ALL · —
▸ snapshot not loaded yet
data/archive-snapshot.json is written by the bot on a 6h cron. The first snapshot appears ~30s after bot ready. Run @SeekDeep archive snapshot in Discord for an immediate refresh.

Auto-react rules

Substring + /regex/ patterns that trigger emoji reactions. Scoped to channel or user.
Emoji
Pattern (substring or /regex/)
Scope
Target (channel/user ID)
Guild ID
 
EMOJIPATTERNSCOPEHITSSTATE
— loading custom rules from /data/auto-reactions.json

Built-in stacks

▸ click a toggle to flip · uses the Guild ID from the form above (per-guild state)
long_message
🧶 on messages over the length threshold
forwarded
📨 on forwarded messages (messageSnapshots)
code_block
💻 on messages containing fenced code blocks
image_only
🖼 on messages whose only content is an image attachment
link_only
🔗 on messages whose only content is a URL

Server stats

Activity rollups, top contributors, charts. Last 30 days.
Total messages
Images generated
Vision queries
Active members

Activity · last 30 days

— /stats/snapshot pending · run a /chat or /image to seed day-buckets, or wait for the 30s pump

Top contributors

— no contributor data yet · send any chat/image/vision through the bot to seed (counters live in data/server-stats.json per user, aggregated by /stats/snapshot)

Persona usage

— no persona usage yet · run @SeekDeep persona <name> in Discord or pick one in the chat playground to seed

Image styles

— no image-style usage yet · generate an image with a style preset (cinematic / anime / pixel …) to seed

Model usage

— no chat-model usage yet · send a chat in Discord or the playground to seed