ventures: refresh havre from havre-live

This commit is contained in:
github-actions[bot] committed 2026-10-20 18:22:41 +00:00
1 parent fbf54971af
commit 00cbf4f4eb
28 files changed
+2419 -239

No files matched your search

+8 -6
View File
@@ -30,7 +30,7 @@
<header class="mast" id="top">
<h1>HAVRE</h1>
<p class="motto">a harbor for characters. <br>talk to venice characters on your own key. <br>no account. no server. nothing kept but what you keep.</p>
<nav class="nav" aria-label="On this page"><a href="#how">how it works</a> / <a href="#agents">for agents</a> / <a href="#costs">costs</a> / <a href="#plans">early access</a> / <a href="open/">open studio (beta)</a> / <button type="button" class="linkish" id="theme">dark mode</button></nav>
<nav class="nav" aria-label="On this page"><a href="#how">how it works</a> / <a href="#agents">for agents</a> / <a href="#costs">costs</a> / <a href="#plans">early access</a> / <a href="open/">open studio (beta)</a> / <button type="button" class="linkish" id="theme">dark mode</button> / <button type="button" class="linkish" id="reload" title="the latest Havre (installed as an app, there's no other way to reload)">reload</button></nav>
</header>
<form class="keybar" id="keyform" autocomplete="off" aria-label="Your Venice API key">
@@ -110,7 +110,7 @@
<form id="composer" class="composer">
<div class="sayrow">
<label for="say" class="sr">Message</label>
<textarea id="say" rows="1" placeholder="say something" autocomplete="off" enterkeyhint="send"></textarea>
<textarea id="say" rows="1" placeholder="say something" title="/help lists what the harbor can do from here" autocomplete="off" enterkeyhint="send"></textarea>
<button type="submit" class="btn solid" id="sendbtn">SEND</button>
</div>
<p id="tools" class="tools" hidden></p>
@@ -123,7 +123,7 @@
<section class="block card" id="card" aria-labelledby="card-h">
<div class="sechead">
<h2 id="card-h">CARD</h2>
<span class="meta">the character as a file: edit it, remix it, export it.</span>
<span class="meta">the character as a file: edit it, remix it, export it. / <button type="button" class="linkish" id="card-fresh">new character</button></span>
</div>
<p id="card-empty" class="mono pad">no character yet. the card shows up here once someone is in your harbor.</p>
<form id="card-new" class="pad newcard" autocomplete="off" hidden>
@@ -131,7 +131,7 @@
<label>NAME <input id="nc-name" maxlength="80" placeholder="what they're called"></label>
<label>WHO THEY ARE <textarea id="nc-persona" rows="4" placeholder="who they are, what they care about, how they talk"></textarea></label>
<label>FIRST LINE <input id="nc-greeting" maxlength="400" placeholder="what they say first"></label>
<p class="actions"><button type="button" class="btn" id="nc-import">IMPORT A CARD INSTEAD</button> <button type="submit" class="btn solid" id="nc-go">CREATE</button></p>
<p class="actions"><button type="button" class="btn" id="nc-import">IMPORT A CARD INSTEAD</button> <button type="button" class="btn" id="nc-ai" title="an idea under who they are is enough: a model writes the rest, on your venice key">WRITE IT WITH AI</button> <button type="submit" class="btn solid" id="nc-go">CREATE</button></p>
</form>
<div id="card-body">
<div class="tabs" role="tablist" aria-label="Card">
@@ -145,7 +145,7 @@
<div class="col">
<div class="portrait">
<span class="face big" id="sheet-face" aria-hidden="true"></span>
<p class="mono"><button type="button" class="linkish" id="portrait-pick">change portrait</button> / <button type="button" class="linkish" id="portrait-make">make one with ai</button> / <button type="button" class="linkish" id="portrait-clear">remove</button> <span id="portrait-status" class="status" role="status"></span></p>
<p class="mono"><button type="button" class="linkish" id="portrait-pick">change portrait</button> / <button type="button" class="linkish" id="portrait-make">make one with ai</button> / <button type="button" class="linkish" id="portrait-three">three to pick from</button> / <button type="button" class="linkish" id="portrait-clear">remove</button> <span id="portrait-status" class="status" role="status"></span></p>
<input type="file" id="portrait-file" accept="image/png,image/jpeg,image/webp,image/svg+xml" hidden>
</div>
<label>NAME <input name="name" maxlength="120" required></label>
@@ -247,8 +247,10 @@
<li><button type="button" class="out" data-out="v3"><b>CHARACTER CARD V3</b><span>.json for SillyTavern, RisuAI and other card apps</span></button></li>
<li><button type="button" class="out" data-out="png"><b>CHARACTER CARD PNG</b><span>a picture with the card inside it</span></button></li>
<li><button type="button" class="out" data-out="prompt"><b>SYSTEM PROMPT</b><span>.txt for any OpenAI-compatible API</span></button></li>
<li><button type="button" class="out" data-out="full"><b>WITH MEMORY AND CHATS</b><span>.havre-full.json: the card, what they remember, your chats with them, the pictures in them</span></button></li>
<li><button type="button" class="out" data-out="all"><b>EVERYTHING</b><span>havre-backup.json: every character, memory, chat and picture, and your settings (never your key)</span></button></li>
</ul>
<p class="mono">files are made here, in your browser. nothing is uploaded.</p>
<p class="mono">files are made here, in your browser. nothing is uploaded. a .havre-full or backup file restores through <button type="button" class="linkish" id="restore">import a card</button>: what's already here stays, the rest is added.</p>
</div>
</div>
</section>