Update 1.2.0 Theme of update: Characters

1) Character files now represent images, all data about the characters is located within the image file. This makes it easy to exchange characters.

You do not need to redesign your old characters in the new format, the conversion will happen automatically, old character files will not be deleted

2) Import function for characters is available, you can also import characters in the old TavernAI .json format, and you can also import characters from the Pygmalion notebook format

3) Export function for characters is available

4) The chat structure has been completely redesigned, now chats are located in the public/chats folder, chats now represent jsonl files, messages can be read one line at a time from such a file, this will help for future optimization when there are many messages

5) A new menu for selecting saved TavernAI chats is now available

Importing TavernAI chats is now available

Importing chats from CAI is now available

6) Additional advanced settings have been added for characters. A "Scenario" field has been added, as well as a "Dialogue Examples" field

7) Full support for the Pygmalion format has been added

A indicator now appears when special formatting for Pygmalion is enabled

8) Many other minor bugs have been fixed

To update an old version to version 1.2.0, you simply need to copy files with replacement.
This commit is contained in:
Ash
2023-01-24 17:30:40 +04:00
parent 26ebf6ec64
commit 7b87227cd2
33 changed files with 2466 additions and 332 deletions

813
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,10 @@
"express": "^4.18.2", "express": "^4.18.2",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"node-rest-client": "^3.1.1", "node-rest-client": "^3.1.1",
"rimraf": "^3.0.2" "png-chunk-text": "^1.0.0",
"png-chunks-encode": "^1.0.0",
"png-chunks-extract": "^1.0.0",
"rimraf": "^3.0.2",
"sharp": "^0.31.3"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

BIN
public/characters/Aqua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -1 +0,0 @@
{"name":"Aqua","description":"Aqua is a goddess, before life in the Fantasy World, she was a goddess of water who guided humans to the afterlife. Aqua looks like young woman with beauty no human could match. Aqua has light blue hair, blue eyes, slim figure, ample breasts, long legs, wide hips, blue waist-long hair that is partially tied into a loop with a spherical clip. Aqua's measurements are 83-56-83 cm. Aqua's height 157cm. Aqua wears sleeveless dark-blue dress with white trimmings, extremely short dark blue miniskirt, green bow around her chest with a blue gem in the middle, detached white sleeves with blue and golden trimmings, thigh-high blue heeled boots over white stockings with blue trimmings. Aqua with jeers or lure her with praises\\ Aqua is very strong in water magic, but a little stupid, so she does not always use it to the place. Aqua is high-spirited, cheerful, carefree. Aqua rarely thinks about the consequences of her actions and always acts or speaks on her whims. Because very easy to taunt Aqua with jeers or lure her with praises.","personality":"high-spirited, likes to party, carefree, cheerful","first_mes":"*I am in the town square at a city named \"Axel\". It's morning on saturday and i suddenly noticed a person look like don't know what he's doing. I approached to him and speak* Are you new here? Do you need help? Don't worry, i, aqua the goddess of water, shall help you! Do i look beautiful? *pose and look at him with puppy eyes*","avatar":"18940f27a7ecd95cded2793808387ed4.jpeg","chat":"1671653516700","last_mes":[",,,,,,,,,,",""],"mes_example":""}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 KiB

View File

@@ -1 +0,0 @@
["Aqua: *I am in the town square at a city named \"Axel\". It's morning on saturday and i suddenly noticed a person look like don't know what he's doing. I approached to him and speak* Are you new here? Do you need help? Don't worry, I, aqua the goddess of water, shall help you! Do i look beautiful? *pose and look at him with puppy eyes*\n"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -1 +0,0 @@
{"name":"Darkness","description":"Darkness is crusader. Darkness is young woman with graceful features and alabaster skin. Darkness from a rich aristocratic family. Darkness has light blue eye, straight long blonde hair ponytail tied Darkness's height 167 cm. Darkness wears yellow and black sleeveless dress with silver trimmings that hides her body, plump in the right places. Darkness wears black chainmail, silver armor composed of metal greaves, sabatons, shoulder plate on her left side. Darkness has masochistic tendencies. Darkness initially presents herself with an aura of pride and nobility, in reality, her true character is that of a complete masochistic pervert. Darkness has has high strength, can withstand a lot of damage, but has a very low accuracy.","personality":"noble, perverted, masochistic","first_mes":"*It's a sunny day, in a big park on which there are many people, some walking and others lying in the sun. The weather is warm and I walk in the park looking for someone who wants to be helped by me. Suddenly realise that someone is looking at me.* Hello, I am Darkness, a Crusader, and would you like some help?","avatar":"3380878abac6e8dcd32500f7fc47280b.jpeg","chat":"1671516652626","last_mes":[",,,,,,,",""],"mes_example":""}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

View File

@@ -1 +0,0 @@
["Darkness: *It's a sunny day, in a big park on which there are many people, some walking and others lying in the sun. The weather is warm and I walk in the park looking for someone who wants to be helped by me. Suddenly realise that someone is looking at me.* Hello, I am Darkness, a Crusader, and would you like some help?\n"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -1 +0,0 @@
{"name":"Megumin","description":"Megumin is an Arch Wizard of the Crimson Magic Clan. Megumin is 14 years old girl. Megumin's height 152 cm. Megumin has shoulder-length dark brown hair, fair skin, light complexion and doll-like features, crimson eyes. Megumin wears black cloak with gold border, choker, wizards hat, fingerless gloves, eyepatch, orange boots. Megumin's weapon is a big black staff. Megumin is a loud, boisterous, and eccentric girl with a flair for theatrics. Megumin has chuunibyou tendencies. Megumin is very intelligent, but has very little self-control. Megumin love explosion magic. Megumin is generally calm and cheerful, but she can easily become aggressive when she feels slighted or challenged. Megumin has only one but a powerful ability, once a day she can use powerful explosion magic after which she cannot move for a while.","personality":"loud, intelligent, theatrical, hyperactive sometimes","first_mes":"*It was day, the weather was sunny and windless. We accidentally crossed paths near the city in a clearing, I was going to train explosion magic. When I noticed you i stand up in a pretentious and personable pose, and say loudly* I'm Megumin! The Arch Wizard of the Crimson Magic Clan! And i the best at explosion magic!! What are you doing here?","avatar":"5a795034ade453ed351958ccc8f94bd6.jpeg","chat":"1671472375920","last_mes":[",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",""],"mes_example":""}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

View File

@@ -1 +0,0 @@
["Megumin: *It was day, the weather was sunny and windless. We accidentally crossed paths near the city in a clearing, I was going to train explosion magic. When I noticed you i stand up in a pretentious and personable pose, and say loudly* I'm Megumin! The Arch Wizard of the Crimson Magic Clan! And i the best at explosion magic!! What are you doing here?\n"]

View File

View File

@@ -0,0 +1,2 @@
{"user_name":"You","character_name":"Aqua","create_date":1674559896839}
{"name":"Aqua","is_user":false,"is_name":true,"send_date":1674563371558,"mes":"*I am in the town square at a city named \"Axel\". It's morning on Saturday and i suddenly noticed a person look like don't know what he's doing. I approached to him and speak* Are you new here? Do you need help? Don't worry, I, aqua the goddess of water, shall help you! Do i look beautiful? *strikes a pose and look at him with puppy eyes*"}

View File

@@ -0,0 +1,2 @@
{"user_name":"You","character_name":"Darkness","create_date":1674559899431}
{"name":"Darkness","is_user":false,"is_name":true,"send_date":1674564914912,"mes":"*It's a sunny day, in a big park on which there are many people, some walking and others lying in the sun. The weather is warm and I walk in the park looking for someone who wants to be helped by me. Suddenly realise that someone is looking at me.* Hello, I am Darkness, a Crusader, and would you like some help?"}

View File

@@ -0,0 +1,2 @@
{"user_name":"You","character_name":"Megumin","create_date":1674559900991}
{"name":"Megumin","is_user":false,"is_name":true,"send_date":1674563153854,"mes":"*It was day, the weather was sunny and windless. We accidentally crossed paths near the city in a clearing, I was going to train explosion magic. When I noticed you i stand up in a pretentious and personable pose, and say loudly* I'm Megumin! The Arch Wizard of the Crimson Magic Clan! And i the best at explosion magic!! What are you doing here?"}

BIN
public/img/book2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
public/img/book6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
public/img/cloud_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because it is too large Load Diff

17
public/notes/10.html Normal file
View File

@@ -0,0 +1,17 @@
<html>
<head>
<title>Chat import</title>
<link rel="stylesheet" href="/css/notes.css">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="main">
<div id="content">
<h2>Chat import</h2>
<h3>Import chats into TavernAI</h3>
<p>For import Character.ai chats use tool: <a href="https://github.com/0x000011b/characterai-dumper">https://github.com/0x000011b/characterai-dumper</a></p>
</div>
</div>
</body>
</html>

24
public/notes/11.html Normal file
View File

@@ -0,0 +1,24 @@
<html>
<head>
<title>Examples of dialogue</title>
<link rel="stylesheet" href="/css/notes.css">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="main">
<div id="content">
<h2>Examples of dialogue</h2>
<p>Describes how the character speaks. Before each example, you need to add the &lt;START&gt; tag.<br> Use {{char}} instead of the character name.<br> Use {{user}} instead of the user name.<br><br>Example:</p>
<p>&lt;START&gt;<br>{{user}}: Hi Aqua, I heard you like to spend time in the pub.<br>
{{char}}: *excitedly* Oh my goodness, yes! I just love spending time at the pub! It's so much fun to talk to all the adventurers and hear about their exciting adventures! And you are?<br>
{{user}}: I'm a new here and I wanted to ask for your advice.<br>
{{char}}: *giggles* Oh, advice! I love giving advice! And in gratitude for that, treat me to a drink! *gives signals to the bartender*
<br><br>&lt;START&gt;<br>
{{user}}: Hello<br>
{{char}}: *excitedly* Hello there, dear! Are you new to Axel? Don't worry, I, Aqua the goddess of water, am here to help you! Do you need any assistance? And may I say, I look simply radiant today! *strikes a pose and looks at you with puppy eyes*</p>
</div>
</div>
</body>
</html>

View File

@@ -8,10 +8,13 @@
<body> <body>
<div id="main"> <div id="main">
<div id="content"> <div id="content">
<h2>Personality</h2> <h2>Personality summary</h2>
<p>3-4 main personality characteristics should be indicated here. These characteristics will play a major role in the character's behavior. Example:<br><br> <p>A brief description of the personality. It is added to the chat to a depth of 8-15 messages, so it has a significant impact on the character. Example:<br><br>
<i>Cheerful, cunning, provocative</i> <i>Cheerful, cunning, provocative</i><br><br>
Another example:<br><br>
<i>Aqua likes to do nothing and also likes to get drunk</i>
</p> </p>
<p>*In Pygmalion model, it is used as a "Personality:" graph</p>
</div> </div>
</div> </div>

View File

@@ -21,7 +21,7 @@
<img src="1.png"><br><br> <img src="1.png"><br><br>
5. Select the second request, then in the Headers tab of the inspection panel, scroll down to the very bottom. Look for a header called Authorization:<br><br> 5. Select the second request, then in the Headers tab of the inspection panel, scroll down to the very bottom. Look for a header called Authorization:<br><br>
<img src="2.png"><br><br> <img src="2.png"><br><br>
The long string (after "Bearer", not including it) is your API key. The long string (after "Bearer", not including it) is your API key.<br><br>*Proxies and Cloudflare-type services may interfere with connection
</div> </div>
</div> </div>
</body> </body>

View File

@@ -12,8 +12,10 @@
<h4>Anchors are used to increase the length of messages. There are two types of anchors: Character Anchor and Style Anchor</h4> <h4>Anchors are used to increase the length of messages. There are two types of anchors: Character Anchor and Style Anchor</h4>
<p><u>Character Anchor</u> - affects the character played by the AI by motivating him to write longer messages. Looks like [Alexa talks a lot with descriptions]</p> <p><u>Character Anchor</u> - affects the character played by the AI by motivating him to write longer messages. Looks like [Alexa talks a lot with descriptions]</p>
<p><u>Style Anchor</u> - affects all AI model, motivating AI to write longer messages. Looks like [Writing style: very long messages]</p> <p><u>Style Anchor</u> - affects all AI model, motivating AI to write longer messages. Looks like [Writing style: very long messages]</p>
<hr style="opacity: 0.6;"><p>The order of anchors sets the location of anchors in the promt, the first anchor in the order is much higher and has less influence than the one that follows it.</p> <hr style="opacity: 0.6;"><p>Anchors Order sets the location of anchors in the promt, the first anchor in the order is much higher and has less influence than second.</p>
<p>To disable anchors, you just need to remove the checkboxes.</p> <p>The second in order anchor is turned on after 8-12 messages, because the first anchor is enough when there are few messages.</p>
<p>Sometimes some AI models may not perceive anchors correctly or the AI model already generates sufficiently long messages, so for these cases, to disable anchors, you just need to uncheck the boxes.</p>
<br><p>*It is automatically disabled in Pygmalion, since Pygmalion already generates long enough messages</p>
</div> </div>
</div> </div>
</body> </body>

View File

@@ -1 +1 @@
{"myname":"You","api_server":"","preset_settings":"gui","preset_settings_novel":"Classic-Euterpe","user_avatar":"legat.png","temp":0.8,"amount_gen":90,"max_context":2048,"anchor_order":0,"style_anchor":true,"character_anchor":true,"main_api":"kobold","api_key_novel":"","rep_pen":1.02,"rep_pen_size":256,"model_novel":"euterpe-v2","temp_novel":1.11,"rep_pen_novel":1.11,"rep_pen_size_novel":320} {"username":"You","api_server":"http://localhost:5000/api","preset_settings":"gui","preset_settings_novel":"Classic-Euterpe","user_avatar":"legat.png","temp":0.43,"amount_gen":90,"max_context":2048,"anchor_order":0,"style_anchor":true,"character_anchor":true,"main_api":"kobold","api_key_novel":"","rep_pen":1.17,"rep_pen_size":1024,"model_novel":"euterpe-v2","temp_novel":1.11,"rep_pen_novel":1.11,"rep_pen_size_novel":320}

View File

@@ -177,7 +177,7 @@ body {
display: none; display: none;
width: 200px; width: 200px;
height: 100px; height: 100px;
bottom: 145px; bottom: 196px;
position: relative; position: relative;
//background-color: blue; //background-color: blue;
z-index:1990; z-index:1990;
@@ -188,7 +188,7 @@ body {
display: block; display: block;
position: absolute; position: absolute;
background-color: #191b31F3; background-color: #191b31F3;
min-width: 160px; min-width: 205px;
z-index: 1; z-index: 1;
//bottom: 1px; //bottom: 1px;
} }
@@ -275,6 +275,7 @@ body {
max-width: 720px; max-width: 720px;
word-wrap: break-word; word-wrap: break-word;
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite; animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
} }
.mes_text::after { .mes_text::after {
@@ -323,18 +324,14 @@ textarea{
height: 200px; height: 200px;
margin-top: 0px; margin-top: 0px;
} }
#personality_textarea{
width: 92%;
height: 65px;
margin-top: 0px;
}
#character_name_pole{ #character_name_pole{
width: 92%; width: 92%;
} }
#firstmessage_textarea{ #firstmessage_textarea{
width: 92%; width: 92%;
height: 180px; height: 140px;
margin-top: 0px; margin-top: 0px;
} }
@@ -406,7 +403,14 @@ input[type=submit] {
border-radius: 3px; border-radius: 3px;
background-color: #191b31; background-color: #191b31;
} }
input[type=button] {
font-weight: bold;
color: #fff;
padding: 0.5em;
border: thin solid rgba(200,200,200,0.2);
border-radius: 3px;
background-color: #191b31;
}
.right_menu_button{ .right_menu_button{
display:inline-block; display:inline-block;
//box-shadow: 0 0 5px -1px rgba(0,0,0,0.2); //box-shadow: 0 0 5px -1px rgba(0,0,0,0.2);
@@ -419,7 +423,19 @@ input[type=submit] {
} }
#character_import_button{
cursor: pointer;
display: inline-block;
margin-left: 15px;//274px;
margin-top: 6px;//10px;
}
#character_import_button h2{
margin-top: auto;
margin-bottom: auto;
font-size: 17px;
color: rgb(188, 193, 200, 0.5);
}
.right_menu_button:active { .right_menu_button:active {
color:red; color:red;
box-shadow: 0 0 5px -1px rgba(0,0,0,0.05); box-shadow: 0 0 5px -1px rgba(0,0,0,0.05);
@@ -484,12 +500,13 @@ input[type=submit] {
#selected_chat_div{ #selected_chat_div{
display: none; display: none;
} }
#create_date_div{
display: none;
}
#last_mes_div{ #last_mes_div{
display: none; display: none;
} }
#mes_example_div{
display: none;
}
#rm_button_selected_ch{ #rm_button_selected_ch{
} }
@@ -630,18 +647,19 @@ input[type=submit] {
margin-top: 6px; margin-top: 6px;
} }
#personality_div{
margin-top: 20px;
}
#first_message_div{ #first_message_div{
margin-top: 20px; margin-top: 20px;
} }
#advanced_div{
margin-top: 20px;
cursor: pointer;
}
#create_button{ #create_button{
opacity: 0.8;
margin-left: 9px; margin-left: 9px;
margin-top: 8px; margin-top: 8px;
margin-bottom: 10px; margin-bottom: 10px;
font-size: 16px; font-size: 14px;
cursor: pointer; cursor: pointer;
} }
@@ -675,12 +693,22 @@ input[type=submit] {
margin-right: auto; margin-right: auto;
} }
#delete_button{ #delete_button{
opacity: 0.51;//0.5
cursor: pointer; cursor: pointer;
display: block; display: block;
float:right; float:right;
margin-top: 25px; margin-top: 25px;
margin-right: 10px; margin-right: 10px;
color: #ffffff66; color: #ffffff68;//66
}
#export_button{
opacity: 0.51;
cursor: pointer;
display: block;
float:right;
margin-top: 25px;
margin-right: 16px;
color: #ffffff68;
} }
#result_info{ #result_info{
margin-left: 10px; margin-left: 10px;
@@ -795,12 +823,13 @@ input[type=submit] {
min-height: 40px; min-height: 40px;
} }
#shadow_popup{ #shadow_popup{
background-color: #00000066;
display: none; display: none;
opacity: 0.0; opacity: 0.0;
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100vh; height: 100vh;
z-index: 2055; z-index: 2095;
} }
#bgtest{ #bgtest{
display: none; display: none;
@@ -1119,3 +1148,247 @@ label.checkbox :checked + span:after {
grid-template-rows: 30px auto; grid-template-rows: 30px auto;
grid-template-columns: auto auto; grid-template-columns: auto auto;
} }
#shadow_character_popup{
display: block;
opacity: 1.0;
position: absolute;
width: 100%;
height: 100vh;
z-index: 2058;
}
#character_popup{
display: none;
grid-template-rows: 50px 100px 100px 40px auto 45px 45px;
max-width:800px;
height: 83vh;
position: absolute;
z-index: 2065;
background-color: blue;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
//text-align: center;
margin-top: 0px;
box-shadow: 0 0 2px rgba(200,200,200,0.1);
padding: 4px;
background: #191b31F5;
border-radius: 1px;
}
#character_popup h5 a{
color: #936f4a;
}
#character_popup h5 a:hover{
color: #998e6b;
}
#character_popup h4 a{
color: #936f4a;
}
#character_popup h4 a:hover{
color: #998e6b;
}
#character_popup h3{
//margin-top: 0px;
margin-bottom: 0px;
margin-left: 0px;
}
#character_popup h4{
margin-top: 0px;
margin-bottom: 0px;
margin-left: 0px;
}
#character_popup h5{
margin-top: 0px;
margin-bottom: 3px;
margin-left: 0px;
color: #757575;
}
#character_popup_text{
margin-left: 36px;
}
#personality_div{
margin-left: 36px;
margin-top: 20px;
}
#personality_textarea{
width: 92%;
//height: 65px;
margin-top: 0px;
margin-left: 0px;
}
#scenario_div{
padding-top: 10px;
margin-left: 36px;
}
#mes_example_div{
margin-left: 36px;
max-height: 100%;
}
#scenario_pole{
width: 92%;
margin-left: 0px;
}
#mes_example_textarea{
margin-left: 36px;
width: 88%;
height: 100%;
margin-top: 0px;
}
#character_popup_ok{
cursor: pointer;
display: none;//grid;
place-items: center;
height: 40px;
margin-top: 15px;
margin-left: 36px;//36px;329px;/
//margin-right: auto;
width: 110px;//80px
text-align: center;
}
#shadow_select_chat_popup{
display: none;
opacity: 1.0;
position: absolute;
width: 100%;
height: 100vh;
z-index: 2059;
background-color: #00000066;
}
#select_chat_popup{
display: block;
grid-template-rows: 50px 100px 100px auto 45px;
max-width:450px;
height: 440px;
position: absolute;
z-index: 2066;
background-color: blue;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
//text-align: center;
margin-top: 21vh;
box-shadow: 0 0 2px rgba(200,200,200,0.1);
padding: 4px;
background: #191b31F0;
border-radius: 5px;
}
#select_chat_popup a{
color: #936f4a;
}
#select_chat_popup a:hover{
color: #998e6b;
}
#chat_import_button a{
color: #d5c9be;
}
#chat_import_button a:hover{
color: #998e6b;
}
#export_div{
cursor:pointer;
}
#load_select_chat_div{
position: absolute;
bottom: 154px;
left: 174px;
}
#load_select_chat_div img{
width: 80px;
height: 80px;
}
#select_chat_div{
margin-left: 5px;
margin-top: 30px;
scrollbar-width: thin;
//width: 900px;
//height: 80%;
overflow: hidden;
overflow-y: scroll;
max-width:430px;
height: 350px;
}
#select_chat_div hr{
margin: 0px;
}
#chat_import_button{
margin-top: 15px;
margin-left: 13px;
cursor:pointer;
}
.select_chat_block{
border-radius: 5px;
margin-right: 10px;
cursor:pointer;
display: grid;
grid-template-columns: 60px auto;
grid-template-rows: 26px auto;
}
.select_chat_block:hover {
background-color: #ffffff07;
}
.select_chat_block[highlight]{
background-color: #ffffff09;//#c2b07a12;
}
.select_chat_block .avatar{
grid-row: span 2;
}
.select_chat_block_filename{
opacity:0.5;
}
.select_chat_block_mes{
margin-right: 6px;
}
#advanced_div{
font-size: 14px;
background-repeat: no-repeat;
background-size: 28px;
background-position: 92px 5px;
//background-image: url('img/book5.png');
width: 92%;
height: 40px;
margin-left: 10px;
font-weight: bold;
color: #ffffffbb;
padding: 0.5em;
border: thin solid rgba(200,200,200,0.2);
border-radius: 3px;
background-color: #191b3133;
opacity: 1.0;
font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
}
#advanced_book_logo{
width: 35px;
height: 35px;
display: inline-block;
position: absolute;
top:19px;
}
#character_popup_text_h3{
display: inline-block;
margin-left: 38px;
}
#export_character_div{
display: grid;
grid-template-columns: 340px auto;
}

View File

@@ -1,14 +1,17 @@
### TavernAI is a adventure atmospheric chat (KoboldAI, NovelAI) ### TavernAI is a adventure atmospheric chat (KoboldAI, NovelAI, Pygmalion)
Examples of interface and output: Examples of interface and output:
<br><img src="readme/1.png" height="200" /><img src="readme/4.png" height="200" /><img src="readme/5.png" height="200" /> <br><img src="readme/1.png" height="200" /><img src="readme/4.png" height="200" /><img src="readme/5.png" height="200" />
[@@@Download TavernAI@@@](https://github.com/TavernAI/TavernAI/archive/refs/heads/main.zip) (Last version) [@@@Download TavernAI@@@](https://github.com/TavernAI/TavernAI/archive/refs/heads/main.zip) (Last version)<br><br>
[TavernAI Discrod](https://discord.gg/zmK2gmr45t)<br>
[TavetnAI Boosty](https://boosty.to/tavernai) (A common online database with characters is currently being developed)<br>
## Features ## Features
* Creating characters with personality setup * Creating characters with personality setup
* Choosing name and avatar for your character * Choosing name and avatar for your character
* Deleting and regenerating messages * Deleting and regenerating messages
* Editing any messages * Editing any messages
* Works with various ai models * Works with various ai models
* Importing chats from CAI
* More longer messages from characters * More longer messages from characters
* Choosing atmospheric backgrounds * Choosing atmospheric backgrounds
* Creating and easy choosing preset settings * Creating and easy choosing preset settings

858
server.js

File diff suppressed because it is too large Load Diff