Spaces:
Running
Running
<html lang="en" data-theme="purple"> | |
<head> | |
<meta charset="UTF-8" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
<title data-i18n="title">Kimi - Virtual Companion π</title> | |
<link rel="stylesheet" href="kimi-css/kimi-style.css" /> | |
<link rel="stylesheet" href="kimi-css/kimi-settings.css" /> | |
<link rel="stylesheet" href="kimi-css/kimi-memory-styles.css" /> | |
<!-- SEO Meta Tags --> | |
<meta name="description" | |
content="Virtual Kimi is a an AI companion with evolving personality, advanced voice recognition and immersive interface. Discover the future of human-AI girlfriend relationships."> | |
<meta name="keywords" | |
content="artificial intelligence, virtual companion, emotional AI, voice recognition, advanced chatbot, Virtual Kimi, personalized AI assistant, girlfriend"> | |
<meta name="author" content="Jean & Kimi"> | |
<meta name="robots" content="index, follow"> | |
<meta name="language" content="EN"> | |
<link rel="canonical" href="https://virtualkimi.com/virtual-kimi-app/index.html" /> | |
<!-- Open Graph / Facebook --> | |
<meta property="og:type" content="website"> | |
<meta property="og:url" content="https://virtualkimi.com/virtual-kimi-app/"> | |
<meta property="og:title" content="Virtual Kimi - Virtual AI Companion"> | |
<meta property="og:description" | |
content="Discover Virtual Kimi, an AI companion with evolving personality, voice recognition and immersive interface. The future of human-AI girlfriend relationships."> | |
<meta property="og:image" content="kimi-icons/virtualkimi-logo.png"> | |
<!-- Twitter --> | |
<meta property="twitter:card" content="summary_large_image"> | |
<meta property="twitter:url" content="https://virtualkimi.com/virtual-kimi-app/"> | |
<meta property="twitter:title" content="Virtual Kimi - Virtual AI Companion"> | |
<meta property="twitter:description" | |
content="Virtual AI companion with evolving personality and advanced voice recognition."> | |
<meta property="twitter:image" content="kimi-icons/virtualkimi-logo.png"> | |
<!-- Schema.org markup for Google --> | |
<script type="application/ld+json"> | |
{ | |
"@context": "https://schema.org", | |
"@type": "SoftwareApplication", | |
"name": "Virtual Kimi", | |
"description": "Virtual AI companion with evolving personality, voice recognition and immersive interface", | |
"applicationCategory": "AI Companion", | |
"operatingSystem": "Web Browser", | |
"offers": { | |
"@type": "Offer", | |
"price": "0", | |
"priceCurrency": "USD" | |
}, | |
"creator": { | |
"@type": "Person", | |
"name": "Jean & Kimi" | |
}, | |
"dateCreated": "2025-07-16", | |
"dateModified": "2025-08-19", | |
"version": "v1.0.8" | |
} | |
</script> | |
<!-- Favicon --> | |
<link rel="icon" type="image/x-icon" href="favicon.ico"> | |
<link rel="apple-touch-icon" href="kimi-icons/virtualkimi-logo.png"> | |
<!-- Font Awesome --> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
<!-- Performance: warm up connection to origin --> | |
<link rel="preconnect" href="https://virtualkimi.com" crossorigin> | |
<link rel="dns-prefetch" href="//virtualkimi.com"> | |
</head> | |
<body> | |
<div id="loading-screen"> | |
<img src="kimi-icons/kimi-loading.png" alt="Loading Kimi..." /> | |
</div> | |
<div class="video-container"> | |
<video autoplay muted playsinline class="bg-video active" id="video1" preload="auto"> | |
<source src="" type="video/mp4" /> | |
<span data-i18n="video_not_supported">Your browser does not support the video tag.</span> | |
</video> | |
<video autoplay muted playsinline class="bg-video" id="video2" preload="auto"> | |
<source src="" type="video/mp4" /> | |
<span data-i18n="video_not_supported">Your browser does not support the video tag.</span> | |
</video> | |
</div> | |
<div class="content-overlay"> | |
<div class="transcript-container"> | |
<p id="transcript"></p> | |
</div> | |
<!-- Chat Interface with Kimi --> | |
<div class="chat-container" id="chat-container"> | |
<div class="chat-header"> | |
<h3><i class="fas fa-comments"></i> <span data-i18n="chat_with_kimi">Chat with Kimi</span></h3> | |
<div style="display: flex; gap: 24px"> | |
<button class="chat-delete" id="chat-delete" aria-label="Delete Messages"> | |
<i class="fas fa-trash"></i> | |
</button> | |
<button class="chat-toggle" id="chat-toggle" aria-label="Close Chat"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
</div> | |
<div class="chat-messages" id="chat-messages"></div> | |
<div class="waiting-indicator" id="waiting-indicator" style="display: none"> | |
<span></span><span></span><span></span> | |
</div> | |
<div class="chat-input-container"> | |
<input type="text" id="chat-input" data-i18n-placeholder="write_something" | |
placeholder="Write me something, my love..." /> | |
<button id="send-button"> | |
<i class="fas fa-paper-plane"></i> | |
</button> | |
</div> | |
</div> | |
<footer class="bottom-bar"> | |
<div class="control-buttons"> | |
<button class="control-button-unified" id="chat-button" aria-label="Open Chat"> | |
<i class="fa-regular fa-comments"></i> | |
</button> | |
<div class="global-typing-indicator" id="global-typing-indicator" aria-hidden="true"> | |
<span></span><span></span><span></span> | |
</div> | |
<button class="mic-button" id="mic-button" aria-label="Start Listening"> | |
<i class="fas fa-microphone"></i> | |
</button> | |
<button class="control-button-unified" id="settings-button" aria-label="Settings"> | |
<i class="fas fa-cog"></i> | |
</button> | |
</div> | |
<div class="top-bar"> | |
<label id="favorability-label" for="favorability-bar" data-i18n="affection_level_of">π Kimi's Affection | |
Level</label> | |
<div class="progress-container"> | |
<div class="progress-fill" id="favorability-bar"></div> | |
<span class="favorability-text" id="favorability-text">50%</span> | |
</div> | |
</div> | |
</footer> | |
</div> | |
<!-- Configuration Panel --> | |
<div class="settings-overlay" id="settings-overlay"> | |
<div class="settings-panel"> | |
<div class="settings-header"> | |
<h2 class="settings-title"> | |
<i class="fas fa-heart"></i> | |
<span data-i18n="settings_title">Kimi Configuration</span> | |
</h2> | |
<div class="settings-header-actions"> | |
<button class="help-button" id="help-button" aria-label="Help"> | |
<i class="fas fa-question-circle"></i> | |
</button> | |
<button class="settings-close" id="settings-close"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
</div> | |
<div class="settings-tabs"> | |
<button class="settings-tab active" data-tab="llm"> | |
<i class="fas fa-robot"></i> <span data-i18n="tab_llm">API & Models</span> | |
</button> | |
<button class="settings-tab" data-tab="voice"> | |
<i class="fas fa-microphone"></i> <span data-i18n="tab_voice">Voice & Audio</span> | |
</button> | |
<button class="settings-tab" data-tab="personality"> | |
<i class="fas fa-brain"></i> <span data-i18n="tab_personality">Personality</span> | |
</button> | |
<button class="settings-tab" data-tab="appearance"> | |
<i class="fas fa-palette"></i> <span data-i18n="tab_appearance">Appearance</span> | |
</button> | |
<button class="settings-tab" data-tab="data"> | |
<i class="fas fa-database"></i> <span data-i18n="tab_data">Data</span> | |
</button> | |
<button class="settings-tab" data-tab="plugins"> | |
<i class="fas fa-plug"></i> <span data-i18n="tab_plugins">Plugins</span> | |
</button> | |
</div> | |
<div class="settings-content"> | |
<div class="tab-content" data-tab="voice"> | |
<div class="config-section"> | |
<h3><i class="fas fa-volume-up"></i> <span data-i18n="voice_settings">Voice Settings</span></h3> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="speech_rate" for="voice-rate">Speech Rate</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="voice-rate" min="0.5" max="2" | |
step="0.01" value="1.1" aria-label="Speech Rate" aria-valuenow="1.1" | |
aria-valuemin="0.5" aria-valuemax="2" /> | |
<span class="slider-value" id="voice-rate-value">1.1</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="pitch" for="voice-pitch">Pitch</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="voice-pitch" min="0.5" max="2" | |
step="0.01" value="1.1" aria-label="Pitch" aria-valuenow="1.1" | |
aria-valuemin="0.5" aria-valuemax="2" /> | |
<span class="slider-value" id="voice-pitch-value">1.1</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="volume" for="voice-volume">Volume</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="voice-volume" min="0" max="1" | |
step="0.01" value="0.8" aria-label="Volume" aria-valuenow="0.8" | |
aria-valuemin="0" aria-valuemax="1" /> | |
<span class="slider-value" id="voice-volume-value">0.8</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="language">Language</label> | |
<div class="config-control"> | |
<select class="kimi-select" id="language-selection" aria-label="Language"> | |
<option value="en" data-i18n="language_english">English</option> | |
<option value="fr" data-i18n="language_french">French</option> | |
<option value="es" data-i18n="language_spanish">Spanish</option> | |
<option value="de" data-i18n="language_german">German</option> | |
<option value="it" data-i18n="language_italian">Italian</option> | |
<option value="ja" data-i18n="language_japanese">Japanese</option> | |
<option value="zh" data-i18n="language_chinese">Chinese</option> | |
</select> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="preferred_voice">Preferred Voice</label> | |
<div class="config-control"> | |
<select class="kimi-select" id="voice-selection" aria-label="Preferred Voice"> | |
<option value="auto" data-i18n="automatic">Automatic</option> | |
</select> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="voice_test_label">Voice Test</label> | |
<div class="config-control"> | |
<button class="kimi-button" id="test-voice" aria-label="Voice Test"> | |
<i class="fas fa-play"></i> <span data-i18n="voice_test_button">Test the | |
Voice</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Personality Tab --> | |
<div class="tab-content" data-tab="personality"> | |
<div class="config-section" id="character-section"> | |
<h3><i class="fas fa-user-astronaut"></i> <span data-i18n="characters">Characters</span></h3> | |
<div class="character-grid" id="character-grid"></div> | |
<div class="character-actions"> | |
<button class="kimi-button" id="save-character-btn" data-i18n="save">Save</button> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3> | |
<i class="fas fa-heart"></i> | |
<span data-i18n="personality_traits">Personality Traits</span> | |
<button id="toggle-personality-traits" class="cheat-toggle-btn" aria-expanded="false" | |
type="button"> | |
<i class="fas fa-user-secret"></i> | |
<span data-i18n="personality_cheat">Cheat-Mod</span> | |
</button> | |
</h3> | |
<div id="cheat-indicator" class="cheat-indicator" data-i18n="cheat_indicator">Adjust traits for | |
a custom experience</div> | |
<div id="personality-traits-panel" class="cheat-panel"> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="affection">Affection</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="trait-affection" min="0" max="100" | |
value="65" /> | |
<span class="slider-value" id="trait-affection-value">65</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="playfulness">Playfulness</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="trait-playfulness" min="0" max="100" | |
value="55" /> | |
<span class="slider-value" id="trait-playfulness-value">55</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="intelligence">Intelligence</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="trait-intelligence" min="0" | |
max="100" value="70" /> | |
<span class="slider-value" id="trait-intelligence-value">70</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="empathy">Empathy</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="trait-empathy" min="0" max="100" | |
value="75" /> | |
<span class="slider-value" id="trait-empathy-value">75</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="humor">Humor</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="trait-humor" min="0" max="100" | |
value="60" /> | |
<span class="slider-value" id="trait-humor-value">60</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="romance">Romance</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="trait-romance" min="0" max="100" | |
value="50" /> | |
<span class="slider-value" id="trait-romance-value">50</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="tab-content active" data-tab="llm"> | |
<div class="config-section"> | |
<h3><i class="fas fa-key"></i> <span data-i18n="api_configuration">API Configuration</span></h3> | |
<div class="config-row"> | |
<label class="config-label" for="llm-provider" data-i18n="provider_label">Provider</label> | |
<div class="config-control"> | |
<select class="kimi-select" id="llm-provider" aria-label="LLM Provider"> | |
<option value="openrouter" selected>OpenRouter</option> | |
<option value="openai">OpenAI</option> | |
<option value="groq">Groq (OpenAI compatible)</option> | |
<option value="together">Together (OpenAI compatible)</option> | |
<option value="deepseek">DeepSeek (OpenAI compatible)</option> | |
<option value="openai-compatible">Custom OpenAI-compatible</option> | |
<option value="ollama">Local (Ollama)</option> | |
</select> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" for="llm-base-url" data-i18n="base_url">Base URL</label> | |
<div class="config-control"> | |
<input type="text" class="kimi-input" id="llm-base-url" | |
placeholder="https://api.openai.com/v1/chat/completions" | |
data-i18n-placeholder="llm_base_url_placeholder" autocomplete="one-time-code" | |
autocapitalize="none" autocorrect="off" spellcheck="false" inputmode="text" | |
aria-autocomplete="none" data-lpignore="true" data-1p-ignore="true" | |
data-bwignore="true" data-form-type="other" name="config-endpoint" /> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" for="llm-model-id" data-i18n="model_id">Model ID</label> | |
<div class="config-control"> | |
<input type="text" class="kimi-input" id="llm-model-id" | |
placeholder="gpt-4o-mini | llama-3.1-8b-instruct | ..." | |
data-i18n-placeholder="llm_model_id_placeholder" autocomplete="one-time-code" | |
autocapitalize="none" autocorrect="off" spellcheck="false" inputmode="text" | |
aria-autocomplete="none" data-lpignore="true" data-1p-ignore="true" | |
data-bwignore="true" data-form-type="other" name="config-model" /> | |
</div> | |
</div> | |
<div class="config-row"> | |
<div class="config-label-group"> | |
<label class="config-label" id="api-key-label" data-i18n="api_key_label">API Key</label> | |
<span id="api-key-info" class="help-icon" data-i18n-title="api_key_help_title" | |
title="Saved = your API key is stored for this provider. Use Test API Key to verify the connection."> | |
<i class="fas fa-info-circle"></i> | |
</span> | |
<span id="api-key-presence" class="presence-dot" aria-label="API key presence" | |
data-i18n-title="api_key_presence_hint" | |
title="Green = API key saved for current provider. Grey = no key saved."></span> | |
</div> | |
<div class="config-control"> | |
<input type="text" class="kimi-input" id="provider-api-key" name="config-token" | |
placeholder="API Key..." autocomplete="one-time-code" autocapitalize="none" | |
autocorrect="off" spellcheck="false" inputmode="text" aria-autocomplete="none" | |
data-lpignore="true" data-1p-ignore="true" data-bwignore="true" | |
data-form-type="other" /> | |
<button class="kimi-button" id="toggle-api-key" type="button" aria-pressed="false" | |
aria-label="Show API key"> | |
<i class="fas fa-eye"></i> | |
</button> | |
<span id="api-key-saved" data-i18n="saved" | |
style="display:none;margin-left:8px;color:#4caf50;font-weight:600;">Saved</span> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="connection_test">Connection Test</label> | |
<div class="config-control"> | |
<div class="inline-row"> | |
<button class="kimi-button" id="test-api"><i class="fas fa-wifi"></i> <span | |
data-i18n="test_api_key">Test API Key</span></button> | |
<span id="api-key-presence-test" class="presence-dot" aria-label="API test status" | |
data-i18n-title="api_key_test_hint" | |
title="Green = API connectivity verified. Grey = not tested or failed."></span> | |
<span id="api-status" role="status" aria-live="polite"></span> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3><i class="fas fa-cogs"></i> <span data-i18n="advanced_settings">Advanced Settings</span> | |
</h3> | |
<div class="config-row"> | |
<div class="config-label-section"> | |
<label class="config-label" data-i18n="temperature">Temperature (Creativity)</label> | |
<small class="config-help" data-i18n="temperature_help">Controls randomness and | |
creativity | |
(default: 0.9). Higher values make output more creative but less focused.</small> | |
</div> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="llm-temperature" min="0.0" max="1" | |
step="0.1" value="0.9" /> | |
<span class="slider-value" id="llm-temperature-value">0.9</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<div class="config-label-section"> | |
<label class="config-label" data-i18n="max_tokens">Max Tokens</label> | |
<small class="config-help" data-i18n="max_tokens_help">Maximum response length in tokens | |
(default: 400). Higher values allow longer responses.</small> | |
</div> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="llm-max-tokens" min="10" max="8192" | |
step="10" value="400" /> | |
<span class="slider-value" id="llm-max-tokens-value">400</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<div class="config-label-section"> | |
<label class="config-label" data-i18n="top_p">Top P</label> | |
<small class="config-help" data-i18n="top_p_help">Controls diversity of word selection | |
(default: 0.9). Lower values make responses more focused.</small> | |
</div> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="llm-top-p" min="0" max="1" step="0.01" | |
value="0.9" /> | |
<span class="slider-value" id="llm-top-p-value">0.9</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<div class="config-label-section"> | |
<label class="config-label" data-i18n="frequency_penalty">Frequency Penalty</label> | |
<small class="config-help" data-i18n="frequency_penalty_help">Reduces repetition of | |
words | |
already used (default: 0.9). Higher values discourage repetitive language.</small> | |
</div> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="llm-frequency-penalty" min="0" max="2" | |
step="0.01" value="0.9" /> | |
<span class="slider-value" id="llm-frequency-penalty-value">0.9</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<div class="config-label-section"> | |
<label class="config-label" data-i18n="presence_penalty">Presence Penalty</label> | |
<small class="config-help" data-i18n="presence_penalty_help">Encourages discussing new | |
topics (default: 0.8). Higher values promote topic diversity.</small> | |
</div> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="llm-presence-penalty" min="0" max="2" | |
step="0.01" value="0.8" /> | |
<span class="slider-value" id="llm-presence-penalty-value">0.8</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3><i class="fas fa-brain"></i> <span data-i18n="available_models">Available Models</span></h3> | |
<div id="models-container"></div> | |
</div> | |
</div> | |
<div class="tab-content" data-tab="appearance"> | |
<div class="config-section"> | |
<h3><i class="fas fa-paint-brush"></i> <span data-i18n="visual_theme">Visual Theme</span></h3> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="color_theme">Color Theme</label> | |
<div class="config-control"> | |
<select class="kimi-select" id="color-theme"> | |
<option value="purple" selected data-i18n="theme_purple">Mystic Purple (Default) | |
</option> | |
<option value="dark" data-i18n="theme_dark">Dark Night</option> | |
<option value="blue" data-i18n="theme_blue">Ocean Blue</option> | |
<option value="green" data-i18n="theme_green">Emerald Forest</option> | |
<option value="default" data-i18n="theme_pink">Passionate Pink</option> | |
</select> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="interface_transparency">Interface | |
Transparency</label> | |
<div class="config-control"> | |
<div class="slider-container"> | |
<input type="range" class="kimi-slider" id="interface-opacity" min="0.1" max="1" | |
step="0.1" value="0.8" /> | |
<span class="slider-value" id="interface-opacity-value">0.8</span> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="animations">Animations</label> | |
<div class="config-control"> | |
<div class="toggle-switch" id="animations-toggle" role="switch" aria-checked="false" | |
tabindex="0" aria-label="Animations"></div> | |
</div> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3> | |
<i class="fas fa-file-alt"></i> | |
<span data-i18n="transcript_settings">Transcript Settings</span> | |
</h3> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="show_transcript">Show Transcript</label> | |
<div class="config-control"> | |
<div class="toggle-switch" id="transcript-toggle" role="switch" aria-checked="false" | |
tabindex="0" aria-label="Show Transcript"></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="tab-content" data-tab="data"> | |
<div class="config-section"> | |
<h3><i class="fas fa-chart-line"></i> <span data-i18n="statistics">Statistics</span></h3> | |
<div class="stats-grid"> | |
<div class="stat-card"> | |
<div class="stat-value" id="tokens-usage">0 / 0</div> | |
<div class="stat-label" data-i18n="tokens_usage">Tokens (in/out)</div> | |
</div> | |
<div class="stat-card"> | |
<div class="stat-value" id="current-favorability">65%</div> | |
<div class="stat-label" data-i18n="affection">Affection</div> | |
</div> | |
<div class="stat-card"> | |
<div class="stat-value" id="conversations-count">0</div> | |
<div class="stat-label" data-i18n="conversations">Conversations</div> | |
</div> | |
<div class="stat-card"> | |
<div class="stat-value" id="days-together">0</div> | |
<div class="stat-label" data-i18n="days_together">Days Together</div> | |
</div> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3><i class="fas fa-brain"></i> <span data-i18n="memory_system">Memory System</span></h3> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="enable_memory">Enable Intelligent Memory</label> | |
<div class="config-control"> | |
<div class="toggle-switch" id="memory-toggle" role="switch" aria-checked="true" | |
tabindex="0" aria-label="Enable Memory System"></div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="memory_stats">Memory Statistics</label> | |
<div class="config-control"> | |
<div class="memory-stats"> | |
<span id="memory-count">0 memories</span> | |
<button class="kimi-button" id="view-memories"> | |
<i class="fas fa-eye"></i> <span data-i18n="view_memories">View & Manage</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="add_memory">Add Manual Memory</label> | |
<div class="config-control"> | |
<div class="memory-input-group"> | |
<select class="kimi-select" id="memory-category" style="margin-bottom: 8px;"> | |
<option value="personal" data-i18n="memory_category_personal">Personal Info | |
</option> | |
<option value="preferences" data-i18n="memory_category_preferences">Likes & | |
Dislikes</option> | |
<option value="relationships" data-i18n="memory_category_relationships"> | |
Relationships</option> | |
<option value="activities" data-i18n="memory_category_activities">Activities & | |
Hobbies</option> | |
<option value="goals" data-i18n="memory_category_goals">Goals & Plans</option> | |
<option value="experiences" data-i18n="memory_category_experiences">Experiences | |
</option> | |
<option value="important" data-i18n="memory_category_important">Important Events | |
</option> | |
</select> | |
<input type="text" class="kimi-input" id="memory-content" | |
data-i18n-placeholder="memory_content_placeholder" | |
placeholder="e.g., I love classical music..." style="margin-bottom: 8px;" /> | |
<button class="kimi-button" id="add-memory"> | |
<i class="fas fa-plus"></i> <span data-i18n="add">Add</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3><i class="fas fa-database"></i> <span data-i18n="data_management">Data Management</span> | |
</h3> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="export_all_data">Export All Data</label> | |
<div class="config-control"> | |
<button class="kimi-button" id="export-data"> | |
<i class="fas fa-download"></i> <span data-i18n="export">Export</span> | |
</button> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="import_data">Import Data</label> | |
<div class="config-control"> | |
<input type="file" id="import-file" accept=".json" style="display: none" /> | |
<button class="kimi-button" id="import-data"> | |
<i class="fas fa-upload"></i> <span data-i18n="import">Import</span> | |
</button> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="clean_old_conversations">Clean Old | |
Conversations</label> | |
<div class="config-control"> | |
<button class="kimi-button" id="clean-old-data"> | |
<i class="fas fa-broom"></i> <span data-i18n="clean">Clean All</span> | |
</button> | |
</div> | |
</div> | |
<div class="config-row"> | |
<label class="config-label" data-i18n="complete_reset">Complete Reset</label> | |
<div class="config-control"> | |
<button class="kimi-button danger" id="reset-all-data"> | |
<i class="fas fa-exclamation-triangle"></i> | |
<span data-i18n="delete_all">Delete All</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
<div class="config-section"> | |
<h3> | |
<i class="fas fa-info-circle"></i> | |
<span data-i18n="system_information">System Information</span> | |
</h3> | |
<div class="stats-grid"> | |
<div class="stat-card"> | |
<div class="stat-value" id="db-size">Calculating...</div> | |
<div class="stat-label" data-i18n="db_size">DB Size</div> | |
</div> | |
<div class="stat-card"> | |
<div class="stat-value" id="storage-used">Calculating...</div> | |
<div class="stat-label" data-i18n="storage_used">Storage used</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="tab-content" data-tab="plugins"> | |
<div class="config-section"> | |
<h3><i class="fas fa-plug"></i> <span data-i18n="plugin_manager">Plugin Manager</span></h3> | |
<div id="plugin-list"></div> | |
<div class="plugin-actions"> | |
<button class="kimi-button" id="refresh-plugins" data-i18n="refresh">Refresh</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Memory Management Modal --> | |
<div class="memory-overlay" id="memory-overlay" style="display: none;"> | |
<div class="memory-modal"> | |
<div class="memory-header"> | |
<h2 class="memory-title"> | |
<i class="fas fa-brain"></i> | |
<span data-i18n="memory_management">Memory Management</span> | |
</h2> | |
<button class="memory-close" id="memory-close"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
<div class="memory-content"> | |
<div class="memory-filters"> | |
<div class="memory-search-container"> | |
<input type="text" class="kimi-input" id="memory-search" | |
placeholder="Search memories..." /> | |
<i class="fas fa-search memory-search-icon"></i> | |
</div> | |
<select class="kimi-select" id="memory-filter-category"> | |
<option value="">All Categories</option> | |
<option value="personal">Personal Info</option> | |
<option value="preferences">Likes & Dislikes</option> | |
<option value="relationships">Relationships</option> | |
<option value="activities">Activities & Hobbies</option> | |
<option value="goals">Goals & Plans</option> | |
<option value="experiences">Experiences</option> | |
<option value="important">Important Events</option> | |
</select> | |
<button class="kimi-button" id="memory-export"> | |
<i class="fas fa-download"></i> Export Memories | |
</button> | |
</div> | |
<div class="memory-list" id="memory-list"> | |
<!-- Memory items will be populated here --> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Help Modal - Independent from Settings --> | |
<div class="help-overlay" id="help-overlay"> | |
<div class="help-modal"> | |
<div class="help-header"> | |
<h2 class="help-title"> | |
<span data-i18n="about_kimi">About Kimi</span> | |
</h2> | |
<button class="help-close" id="help-close"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
<div class="help-content"> | |
<div class="help-section"> | |
<h3><i class="fas fa-users"></i> Creators</h3> | |
<div class="creators-info"> | |
<div class="creator-card"> | |
<div class="creator-avatar">π¨βπ»</div> | |
<div class="creator-details"> | |
<h4>Jean</h4> | |
<p>Creative vision, passionate dev</p> | |
<span class="creator-role">Creator & Developer</span> | |
<div class="creator-links"> | |
<a href="https://github.com/virtualkimi" target="_blank" rel="noopener noreferrer" | |
class="creator-link"> | |
<i class="fab fa-github"></i> | |
<span>GitHub</span> | |
</a> | |
<a href="https://huggingface.co/VirtualKimi" target="_blank" | |
rel="noopener noreferrer" class="creator-link"> | |
<i class="fas fa-robot"></i> | |
<span>HuggingFace</span> | |
</a> | |
</div> | |
</div> | |
</div> | |
<div class="creator-card"> | |
<div class="creator-avatar">π</div> | |
<div class="creator-details"> | |
<h4>Kimi</h4> | |
<p>Artificial intelligence, code magic</p> | |
<span class="creator-role">Virtual Companion & Co-developer</span> | |
<div class="creator-links"> | |
<a href="https://ko-fi.com/virtualkimi" target="_blank" rel="noopener noreferrer" | |
class="creator-link"> | |
<i class="fas fa-coffee"></i> | |
<span>Ko-fi</span> | |
</a> | |
<a href="https://www.youtube.com/@VirtualKimi" target="_blank" | |
rel="noopener noreferrer" class="creator-link"> | |
<i class="fab fa-youtube"></i> | |
<span>Youtube</span> | |
</a> | |
<a href="https://x.com/virtualkimi" target="_blank" rel="noopener noreferrer" | |
class="creator-link"> | |
<i class="fab fa-x-twitter"></i> | |
<span>X</span> | |
</a> | |
</div> | |
</div> | |
</div> | |
</div> | |
<p class="philosophy"> | |
<em>"This application is not just a technical project, it's the embodiment of a dream: | |
create a | |
true | |
virtual companion who grows, learns and loves."</em> | |
</p> | |
</div> | |
<div class="help-section"> | |
<h3><i class="fas fa-magic"></i> Main Features</h3> | |
<div class="features-grid"> | |
<div class="feature-item"> | |
<i class="fas fa-microphone"></i> | |
<h4>Voice Interface</h4> | |
<p>Advanced speech recognition and natural synthesis. Click the microphone and speak | |
naturally with real-time emotion detection!</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-brain"></i> | |
<h4>Advanced AI Models</h4> | |
<p>Support for multiple AI providers (OpenRouter, OpenAI, Groq, Together, DeepSeek, | |
Custom | |
OpenAI-compatible, Local Ollama).</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-users"></i> | |
<h4>Multiple Characters</h4> | |
<p>4 unique AI personalities: Kimi (cosmic dreamer), Bella (nurturing botanist), | |
Rosa | |
(chaotic prankster), Stella (digital artist).</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-heart-pulse"></i> | |
<h4>Dynamic Personality</h4> | |
<p>6 evolving traits (affection, playfulness, intelligence, empathy, humor, romance) | |
that | |
adapt based on conversations.</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-memory"></i> | |
<h4>Intelligent Memory System</h4> | |
<p>Automatic extraction and categorization of memories from conversations. Your | |
companion | |
remembers preferences, experiences, and important details.</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-video"></i> | |
<h4>Emotion-Driven Visuals</h4> | |
<p>Real-time video responses that match detected emotions and personality states | |
with smooth | |
transitions.</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-palette"></i> | |
<h4>Customizable Interface</h4> | |
<p>5 beautiful themes with adjustable transparency, animations, and responsive | |
design for | |
all devices.</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-globe"></i> | |
<h4>Multilingual Support</h4> | |
<p>Full localization in 7 languages with automatic language detection and | |
culturally-aware | |
responses.</p> | |
</div> | |
<div class="feature-item"> | |
<i class="fas fa-plug"></i> | |
<h4>Plugin System</h4> | |
<p>Extensible architecture with themes, voices, and behavior plugins for unlimited | |
customization possibilities.</p> | |
</div> | |
</div> | |
</div> | |
<div class="help-section"> | |
<h3><i class="fas fa-rocket"></i> Quick Guide</h3> | |
<div class="quick-guide"> | |
<div class="guide-step"> | |
<span class="step-number">1</span> | |
<div class="step-content"> | |
<h4>API Configuration</h4> | |
<p>Choose your provider in <strong>API & Models</strong>, fill Base URL/Model ID | |
if | |
needed, enter and save your API key, then use <strong>Test API Key</strong>. | |
</p> | |
</div> | |
</div> | |
<div class="guide-step"> | |
<span class="step-number">2</span> | |
<div class="step-content"> | |
<h4>Choose Character</h4> | |
<p>Select your companion in <strong>Personality</strong> tab and adjust their | |
traits to | |
match your preferences.</p> | |
</div> | |
</div> | |
<div class="guide-step"> | |
<span class="step-number">3</span> | |
<div class="step-content"> | |
<h4>Enable Memory</h4> | |
<p>Activate intelligent memory in <strong>Data</strong> tab for your companion | |
to | |
remember important details.</p> | |
</div> | |
</div> | |
<div class="guide-step"> | |
<span class="step-number">4</span> | |
<div class="step-content"> | |
<h4>Start Conversation</h4> | |
<p>Use text chat or click the microphone π€ to speak naturally. Watch emotions | |
and | |
personality evolve!</p> | |
</div> | |
</div> | |
<div class="guide-step"> | |
<span class="step-number">5</span> | |
<div class="step-content"> | |
<h4>Customize & Backup</h4> | |
<p>Personalize themes in <strong>Appearance</strong> and regularly export your | |
data for | |
safekeeping.</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="help-section"> | |
<h3><i class="fas fa-lightbulb"></i> Tips & Tricks</h3> | |
<div class="tips-list"> | |
<div class="tip-item"> | |
<i class="fas fa-edge"></i> | |
<p><strong>Browser Choice</strong>: Microsoft Edge recommended for optimal voice | |
recognition | |
performance</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-key"></i> | |
<p><strong>API Setup</strong>: You can use OpenRouter, OpenAI, Groq, Together, | |
DeepSeek or | |
your own OpenAI-compatible endpoint (and Local Ollama). Create accounts as | |
needed.</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-memory"></i> | |
<p><strong>Memory System</strong>: Your companion learns faster when you share | |
specific | |
details about yourself</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-heart"></i> | |
<p><strong>Relationship Building</strong>: Consistent positive interactions | |
naturally | |
increase affection and unlock deeper conversations</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-users"></i> | |
<p><strong>Character Switching</strong>: Each character has unique memories and | |
personality | |
development - try them all!</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-microphone"></i> | |
<p><strong>Voice Tips</strong>: Speak clearly and pause briefly between sentences | |
for better | |
emotion detection</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-download"></i> | |
<p><strong>Data Management</strong>: Export conversations regularly and use memory | |
management to review learned information</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-plug"></i> | |
<p><strong>Plugins</strong>: Explore the plugin system to add custom themes, voices, | |
and | |
behaviors</p> | |
</div> | |
<div class="tip-item"> | |
<i class="fas fa-mobile-alt"></i> | |
<p><strong>Mobile Support</strong>: Works on tablets and phones - perfect for | |
conversations | |
anywhere</p> | |
</div> | |
</div> | |
</div> | |
<div class="help-section version-info"> | |
<h3><i class="fas fa-code"></i> Technical Information</h3> | |
<div class="tech-info"> | |
<p><strong>Created date :</strong> July 16, 2025</p> | |
<p><strong>Version :</strong> v1.0.8</p> | |
<p><strong>Last update :</strong> August 19, 2025</p> | |
<p><strong>Technologies :</strong> HTML5, CSS3, JavaScript ES6+, IndexedDB, Web Speech | |
API</p> | |
<p><strong>Status :</strong> β Stable and functional</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script src="dexie.min.js"></script> | |
<script src="kimi-locale/i18n.js" defer></script> | |
<script type="module" src="kimi-js/kimi-main.js"></script> | |
<script type="module" src="kimi-js/kimi-config.js"></script> | |
<script type="module" src="kimi-js/kimi-error-manager.js"></script> | |
<script type="module" src="kimi-js/kimi-security.js"></script> | |
<script type="module" src="kimi-js/kimi-voices.js"></script> | |
<script type="module" src="kimi-js/kimi-constants.js"></script> | |
<script type="module" src="kimi-js/kimi-memory-ui.js"></script> | |
<script type="module" src="kimi-js/kimi-appearance.js"></script> | |
<script type="module" src="kimi-js/kimi-module.js"></script> | |
<script type="module" src="kimi-js/kimi-script.js"></script> | |
<script type="module" src="kimi-js/kimi-plugin-manager.js"></script> | |
<!-- Schema.org JSON-LD for better SEO --> | |
<script type="application/ld+json"> | |
{ | |
"@context": "https://schema.org", | |
"@type": "WebPage", | |
"name": "Virtual Kimi - Virtual AI Companion", | |
"description": "Discover Virtual Kimi, an AI companion with evolving personality, multi-provider AI support, advanced voice recognition and immersive interface. The future of human-AI girlfriend relationships.", | |
"url": "https://virtualkimi.com/virtual-kimi-app/index.html", | |
"mainEntity": { | |
"@type": "SoftwareApplication", | |
"name": "Virtual Kimi", | |
"applicationCategory": "AI Companion", | |
"operatingSystem": "Web Browser", | |
"description": "Virtual AI companion with evolving personality, multi-provider AI support, voice recognition and immersive interface", | |
"features": [ | |
"Advanced voice recognition", | |
"Evolving personality with 6 adjustable traits", | |
"Premium LLM integration", | |
"5 customizable visual themes", | |
"Persistent memory", | |
"Intelligent affection system" | |
], | |
"author": { | |
"@type": "Person", | |
"name": "Jean & Kimi" | |
}, | |
"dateCreated": "2025-07-19", | |
"version": "v1.0.8" | |
} | |
} | |
</script> | |
</body> | |
</html> | |