SillyTavern-EchoChamber/settings.html
mattjaybe a94643a92e
v5.1.0 - Persona fix, Author's Note support
- Content Settings: Fixed Persona not working when enabled
- Content Settings: Added support for Author's Note, can be enabled
- Settings> Chat Participation: Fixed backspace and input issue with AI Replies per Comment
2026-03-18 17:29:42 -04:00

458 lines
No EOL
27 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="discord_settings">
<div class="inline-drawer">
<div class="inline-drawer-toggle inline-drawer-header">
<b>EchoChamber</b>
<div class="inline-drawer-icon fa-solid fa-circle-chevron-down down"></div>
</div>
<div class="inline-drawer-content">
<div class="ec-s-panel">
<!-- Description -->
<div class="ec-s-description">
Fake chat feed that reacts dynamically to conversation context.
</div>
<!-- Global Enable -->
<label class="ec-s-toggle-row ec-s-global-enable" for="discord_enabled">
<input id="discord_enabled" type="checkbox" class="checkbox">
<span class="ec-s-label-text ec-s-label-bold">Enable EchoChamber</span>
</label>
<!-- ═══ GENERATION ENGINE ═══ -->
<div class="ec-s-section">
<button class="ec-s-section-header" aria-expanded="false" type="button">
<span class="ec-s-section-title">
<i class="fa-solid fa-microchip"></i> Generation Engine
</span>
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
</button>
<div class="ec-s-section-body" hidden>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_source">
<i class="fa-solid fa-plug"></i> Source
</label>
<select id="discord_source" class="text_pole ec-s-select">
<option value="default">Default (Main API)</option>
<option value="profile">Connection Profile (Recommended)</option>
<option value="ollama">Ollama (Local)</option>
<option value="openai">OpenAI Compatible</option>
</select>
</div>
<!-- Provider: Ollama -->
<div id="discord_ollama_settings" class="ec-s-sub-panel ec-s-sub-panel--ollama"
style="display:none">
<div class="ec-s-sub-panel-title">
<i class="fa-solid fa-terminal"></i> Ollama
</div>
<input id="discord_url" type="text" class="text_pole ec-s-input"
placeholder="http://localhost:11434" title="Ollama API endpoint">
<select id="discord_model_select" class="text_pole ec-s-select"></select>
<div id="discord_ollama_status" class="ec-s-status-note"></div>
</div>
<!-- Provider: OpenAI Compatible -->
<div id="discord_openai_settings" class="ec-s-sub-panel ec-s-sub-panel--openai"
style="display:none">
<div class="ec-s-sub-panel-title">
<i class="fa-solid fa-cloud"></i> OpenAI Compatible
</div>
<select id="discord_openai_preset" class="text_pole ec-s-select">
<option value="custom">Custom</option>
<option value="lmstudio">LM Studio (:1234)</option>
<option value="kobold">KoboldCPP (:5001)</option>
<option value="textgen">TextGenWebUI (:5000)</option>
<option value="vllm">vLLM (:8000)</option>
</select>
<input id="discord_openai_url" type="text" class="text_pole ec-s-input"
placeholder="http://localhost:1234/v1" title="API endpoint URL">
<input id="discord_openai_key" type="password" class="text_pole ec-s-input"
placeholder="API Key (Optional)" title="API Key (if required)">
<input id="discord_openai_model" type="text" class="text_pole ec-s-input"
placeholder="Model name" title="Model identifier">
</div>
<!-- Provider: Connection Profile -->
<div id="discord_profile_settings" class="ec-s-sub-panel ec-s-sub-panel--profile"
style="display:none">
<div class="ec-s-sub-panel-title">
<i class="fa-solid fa-link"></i> Connection Profile
</div>
<select id="discord_preset_select" class="text_pole ec-s-select"></select>
<div class="ec-s-hint">
<i class="fa-solid fa-shield-halved"></i> Uses your existing ST credentials securely.
</div>
</div>
</div>
</div>
<!-- ═══ DISPLAY ═══ -->
<div class="ec-s-section" data-default-open>
<button class="ec-s-section-header" aria-expanded="false" type="button">
<span class="ec-s-section-title">
<i class="fa-solid fa-sliders"></i> Display
</span>
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
</button>
<div class="ec-s-section-body" hidden>
<!-- Style + Position -->
<div class="ec-s-grid-2">
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_style">
<i class="fa-solid fa-palette"></i> Style
</label>
<select id="discord_style" class="text_pole ec-s-select">
<option value="twitch">Discord/Twitch</option>
<option value="verbose">Thoughtful</option>
<option value="twitter">Twitter/X</option>
<option value="news">Breaking News</option>
<option value="mst3k">MST3K</option>
<option value="nsfw_ava">Ava NSFW</option>
<option value="nsfw_kai">Kai NSFW</option>
<option value="hypebot">HypeBot</option>
<option value="doomscrollers">Doomscrollers</option>
<option value="darkroast">Dark Roast</option>
<option value="dumbanddumber">Dumb &amp; Dumber</option>
<option value="ao3wattpad">AO3 / Wattpad</option>
<option value="custom">Custom</option>
</select>
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_position">
<i class="fa-solid fa-arrows-up-down-left-right"></i> Position
</label>
<select id="discord_position" class="text_pole ec-s-select">
<option value="bottom">Bottom</option>
<option value="top">Top</option>
<option value="left">Left</option>
<option value="right">Right</option>
<option value="popout">↗ Pop Out</option>
</select>
</div>
</div>
<!-- Users + Font + Opacity -->
<div class="ec-s-grid-3">
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_user_count">
<i class="fa-solid fa-users"></i> Users
</label>
<input id="discord_user_count" type="number" class="text_pole ec-s-input-num" min="1"
max="20" value="5" title="Number of fake users (1-20)">
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_font_size">
<i class="fa-solid fa-font"></i> Font (px)
</label>
<input id="discord_font_size" type="number" class="text_pole ec-s-input-num" min="8"
max="32" value="15" title="Font size in pixels">
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_opacity">
<i class="fa-solid fa-eye"></i> Opacity
</label>
<div class="ec-s-slider-row">
<input id="discord_opacity" type="range" class="slider ec-s-slider" min="10"
max="100" value="80" step="5">
<span id="discord_opacity_val" class="ec-s-slider-val">80%</span>
</div>
</div>
</div>
</div>
</div>
<!-- ═══ CONTENT SETTINGS ═══ -->
<div class="ec-s-section" data-default-open>
<button class="ec-s-section-header" aria-expanded="false" type="button">
<span class="ec-s-section-title">
<i class="fa-solid fa-gear"></i> Content Settings
</span>
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
</button>
<div class="ec-s-section-body" hidden>
<!-- Auto-update -->
<label class="ec-s-toggle-row" for="discord_auto_update">
<input id="discord_auto_update" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-sync"></i> Auto-update On Messages
</span>
</label>
<!-- Include Chat History -->
<label class="ec-s-toggle-row" for="discord_include_user">
<input id="discord_include_user" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-comments"></i> Include Chat History
</span>
</label>
<div id="discord_context_depth_container" class="ec-s-sub-field" style="display:none">
<label class="ec-s-field-label" for="discord_context_depth">Context Depth</label>
<input id="discord_context_depth" type="number" class="text_pole ec-s-input-num" min="2"
max="20" value="4" title="Number of messages to include">
</div>
<!-- Include Past EchoChambers -->
<label class="ec-s-toggle-row" for="discord_include_past_echo">
<input id="discord_include_past_echo" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-layer-group"></i> Include Past Generated EchoChambers
</span>
</label>
<div class="ec-s-hint ec-s-hint--indent">
Includes previous commentary in the prompt for new generations
</div>
<!-- Include in Context sub-group -->
<div class="ec-s-context-sub">
<div class="ec-s-context-sub-title">
<i class="fa-solid fa-file-lines"></i> Include in Context
</div>
<label class="ec-s-toggle-row" for="discord_include_persona">
<input id="discord_include_persona" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-face-smile"></i> Persona
</span>
</label>
<label class="ec-s-toggle-row" for="discord_include_authors_note">
<input id="discord_include_authors_note" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-pen-nib"></i> Author's Note
</span>
</label>
<label class="ec-s-toggle-row" for="discord_include_character_description">
<input id="discord_include_character_description" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-address-card"></i> Character Description(s)
</span>
</label>
<label class="ec-s-toggle-row" for="discord_include_summary">
<input id="discord_include_summary" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-scroll"></i> Summary (from Summarize ext.)
</span>
</label>
<label class="ec-s-toggle-row" for="discord_include_world_info">
<input id="discord_include_world_info" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-globe"></i> World Info / Lorebook
</span>
</label>
<div class="ec-s-hint">
Additional context to include when generating the chat feed
</div>
<!-- WI Budget -->
<div id="discord_wi_budget_container" class="ec-s-sub-field" style="display:none">
<label class="ec-s-field-label" for="discord_wi_budget">
<i class="fa-solid fa-coins"></i> WI Token Budget
</label>
<div class="ec-s-inline-pair">
<input id="discord_wi_budget" type="number" class="text_pole ec-s-input-num" min="0"
max="200000" step="1000" value="0"
title="Max tokens for lorebook entries. 0 = use SillyTavern's own budget (recommended).">
<span class="ec-s-hint">0 = use ST budget</span>
</div>
</div>
</div>
</div>
</div>
<!-- ═══ LIVESTREAM ═══ -->
<div class="ec-s-section">
<button class="ec-s-section-header" aria-expanded="false" type="button">
<span class="ec-s-section-title">
<i class="fa-solid fa-tower-broadcast"></i> Livestream
</span>
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
</button>
<div class="ec-s-section-body" hidden>
<label class="ec-s-toggle-row" for="discord_livestream">
<input id="discord_livestream" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-tower-broadcast"></i> Enable Livestream Mode
</span>
</label>
<div class="ec-s-hint ec-s-hint--indent">
Simulate a livestream by showing messages appear in the panel over time
</div>
<!-- Livestream Settings (shown when enabled) -->
<div id="discord_livestream_settings" class="ec-s-sub-field" hidden>
<div class="ec-s-grid-2">
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_livestream_batch_size">
<i class="fa-solid fa-boxes-stacked"></i> Batch Size
</label>
<input id="discord_livestream_batch_size" type="number"
class="text_pole ec-s-input-num" min="5" max="50" value="20"
title="Number of messages to generate per batch">
</div>
<div class="ec-s-field-group">
<!-- spacer -->
</div>
</div>
<div class="ec-s-grid-2">
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_livestream_min_wait">
<i class="fa-solid fa-clock"></i> Min Wait (s)
</label>
<input id="discord_livestream_min_wait" type="number"
class="text_pole ec-s-input-num" min="1" max="120" value="5"
title="Minimum seconds to wait between messages">
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_livestream_max_wait">
<i class="fa-solid fa-clock"></i> Max Wait (s)
</label>
<input id="discord_livestream_max_wait" type="number"
class="text_pole ec-s-input-num" min="1" max="300" value="60"
title="Maximum seconds to wait between messages">
</div>
</div>
<div class="ec-s-field-group">
<div class="ec-s-field-label">
<i class="fa-solid fa-clapperboard"></i> Generation Mode
</div>
<label class="ec-s-toggle-row ec-s-radio-row" for="discord_livestream_manual">
<input type="radio" name="discord_livestream_mode" value="manual" class="radio"
id="discord_livestream_manual" checked>
<span class="ec-s-label-text">Manual Upon Clicking Regenerate Chat</span>
</label>
<label class="ec-s-toggle-row ec-s-radio-row" for="discord_livestream_onmessage">
<input type="radio" name="discord_livestream_mode" value="onMessage" class="radio"
id="discord_livestream_onmessage">
<span class="ec-s-label-text">Generate Upon Receiving A New Message</span>
</label>
<label class="ec-s-toggle-row ec-s-radio-row" for="discord_livestream_oncomplete">
<input type="radio" name="discord_livestream_mode" value="onComplete" class="radio"
id="discord_livestream_oncomplete">
<span class="ec-s-label-text">Generate A New Batch After The Last One
Finishes</span>
</label>
</div>
</div>
</div>
</div>
<!-- ═══ CHAT PARTICIPATION ═══ -->
<div class="ec-s-section">
<button class="ec-s-section-header" aria-expanded="false" type="button">
<span class="ec-s-section-title">
<i class="fa-solid fa-reply"></i> Chat Participation
</span>
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
</button>
<div class="ec-s-section-body" hidden>
<label class="ec-s-toggle-row" for="discord_chat_enabled">
<input id="discord_chat_enabled" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-reply"></i> Enable Chat Participation
</span>
</label>
<div class="ec-s-hint ec-s-hint--indent">
Type in the chat panel and receive replies from AI chatters. Click any username to
@mention them directly.
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_chat_username">
<i class="fa-solid fa-user"></i> Your Username
</label>
<input id="discord_chat_username" type="text" class="text_pole ec-s-input"
placeholder="Streamer (You)">
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_chat_avatar_color">
<i class="fa-solid fa-circle"></i> Avatar Color
</label>
<div class="ec-s-color-row">
<input id="discord_chat_avatar_color" type="color" class="ec-s-color-input"
value="#3b82f6">
<span class="ec-s-hint">Color of your avatar circle in the chat</span>
</div>
</div>
<div class="ec-s-field-group">
<label class="ec-s-field-label" for="discord_chat_reply_count">
<i class="fa-solid fa-comments"></i> AI Replies per Comment
</label>
<input id="discord_chat_reply_count" type="number" class="text_pole ec-s-input" min="1"
max="12" value="3">
<div class="ec-s-hint ec-s-hint--indent">
Number of AI responses after a general comment (112). Direct @mentions always get a
single reply from that chatter.
</div>
</div>
<!-- Max Tokens setting for Chat Participation -->
<div class="ec-s-field-group">
<label class="ec-s-toggle-row" for="discord_chat_override_tokens">
<input id="discord_chat_override_tokens" type="checkbox" class="checkbox">
<span class="ec-s-label-text">
<i class="fa-solid fa-coins"></i> Override Max Tokens Limit
</span>
</label>
<div id="discord_chat_max_tokens_container" class="ec-s-sub-field" style="display:none">
<label class="ec-s-field-label" for="discord_chat_max_tokens">Custom Max Tokens</label>
<input id="discord_chat_max_tokens" type="number" class="text_pole ec-s-input-num"
min="10" max="8192" value="3000"
title="Max generation tokens for chat participation">
</div>
<div class="ec-s-hint ec-s-hint--indent">
If unchecked, uses SillyTavern's default Response Length setting. Use this if your AI
generates replies that are too long or too short.
</div>
</div>
</div>
</div>
<!-- ═══ STYLE MANAGER ═══ -->
<div class="ec-s-section">
<button class="ec-s-section-header" aria-expanded="false" type="button">
<span class="ec-s-section-title">
<i class="fa-solid fa-folder-tree"></i> Style Manager
</span>
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
</button>
<div class="ec-s-section-body" hidden>
<div class="ec-s-btn-row">
<button id="discord_open_style_editor" class="menu_button">
<i class="fa-solid fa-palette"></i> Manage
</button>
<button id="discord_import_btn" class="menu_button">
<i class="fa-solid fa-file-import"></i> Import
</button>
</div>
<input type="file" id="discord_import_file" accept=".md" style="display:none;">
</div>
</div>
</div><!-- /.ec-s-panel -->
</div><!-- /.inline-drawer-content -->
</div><!-- /.inline-drawer -->
</div><!-- /.discord_settings -->