diff --git a/public/img/default-expressions/admiration.png b/public/img/default-expressions/admiration.png new file mode 100644 index 000000000..a9001bb64 Binary files /dev/null and b/public/img/default-expressions/admiration.png differ diff --git a/public/img/default-expressions/amusement.png b/public/img/default-expressions/amusement.png new file mode 100644 index 000000000..493880a8a Binary files /dev/null and b/public/img/default-expressions/amusement.png differ diff --git a/public/img/default-expressions/anger.png b/public/img/default-expressions/anger.png new file mode 100644 index 000000000..6d7398d5b Binary files /dev/null and b/public/img/default-expressions/anger.png differ diff --git a/public/img/default-expressions/annoyance.png b/public/img/default-expressions/annoyance.png new file mode 100644 index 000000000..1c3c20e6e Binary files /dev/null and b/public/img/default-expressions/annoyance.png differ diff --git a/public/img/default-expressions/approval.png b/public/img/default-expressions/approval.png new file mode 100644 index 000000000..db2fd7fc1 Binary files /dev/null and b/public/img/default-expressions/approval.png differ diff --git a/public/img/default-expressions/caring.png b/public/img/default-expressions/caring.png new file mode 100644 index 000000000..676794920 Binary files /dev/null and b/public/img/default-expressions/caring.png differ diff --git a/public/img/default-expressions/confusion.png b/public/img/default-expressions/confusion.png new file mode 100644 index 000000000..b57949cb3 Binary files /dev/null and b/public/img/default-expressions/confusion.png differ diff --git a/public/img/default-expressions/curiosity.png b/public/img/default-expressions/curiosity.png new file mode 100644 index 000000000..e0d4061c8 Binary files /dev/null and b/public/img/default-expressions/curiosity.png differ diff --git a/public/img/default-expressions/desire.png b/public/img/default-expressions/desire.png new file mode 100644 index 000000000..98b88fb6f Binary files /dev/null and b/public/img/default-expressions/desire.png differ diff --git a/public/img/default-expressions/desire1.png b/public/img/default-expressions/desire1.png new file mode 100644 index 000000000..d4c6964b6 Binary files /dev/null and b/public/img/default-expressions/desire1.png differ diff --git a/public/img/default-expressions/desire2.png b/public/img/default-expressions/desire2.png new file mode 100644 index 000000000..fd31e6b19 Binary files /dev/null and b/public/img/default-expressions/desire2.png differ diff --git a/public/img/default-expressions/disappointment.png b/public/img/default-expressions/disappointment.png new file mode 100644 index 000000000..a2fbb03af Binary files /dev/null and b/public/img/default-expressions/disappointment.png differ diff --git a/public/img/default-expressions/disapproval.png b/public/img/default-expressions/disapproval.png new file mode 100644 index 000000000..cb14abbf4 Binary files /dev/null and b/public/img/default-expressions/disapproval.png differ diff --git a/public/img/default-expressions/disgust.png b/public/img/default-expressions/disgust.png new file mode 100644 index 000000000..bbb6dc5ff Binary files /dev/null and b/public/img/default-expressions/disgust.png differ diff --git a/public/img/default-expressions/embarrassment.png b/public/img/default-expressions/embarrassment.png new file mode 100644 index 000000000..5481a5c45 Binary files /dev/null and b/public/img/default-expressions/embarrassment.png differ diff --git a/public/img/default-expressions/excitement.png b/public/img/default-expressions/excitement.png new file mode 100644 index 000000000..3ba87d41d Binary files /dev/null and b/public/img/default-expressions/excitement.png differ diff --git a/public/img/default-expressions/fear.png b/public/img/default-expressions/fear.png new file mode 100644 index 000000000..c1ada3db9 Binary files /dev/null and b/public/img/default-expressions/fear.png differ diff --git a/public/img/default-expressions/gratitude.png b/public/img/default-expressions/gratitude.png new file mode 100644 index 000000000..e304a102d Binary files /dev/null and b/public/img/default-expressions/gratitude.png differ diff --git a/public/img/default-expressions/grief.png b/public/img/default-expressions/grief.png new file mode 100644 index 000000000..ae97d3486 Binary files /dev/null and b/public/img/default-expressions/grief.png differ diff --git a/public/img/default-expressions/joy.png b/public/img/default-expressions/joy.png new file mode 100644 index 000000000..939a8760c Binary files /dev/null and b/public/img/default-expressions/joy.png differ diff --git a/public/img/default-expressions/love.png b/public/img/default-expressions/love.png new file mode 100644 index 000000000..8c0556fd7 Binary files /dev/null and b/public/img/default-expressions/love.png differ diff --git a/public/img/default-expressions/nervousness.png b/public/img/default-expressions/nervousness.png new file mode 100644 index 000000000..d08554eed Binary files /dev/null and b/public/img/default-expressions/nervousness.png differ diff --git a/public/img/default-expressions/neutral.png b/public/img/default-expressions/neutral.png new file mode 100644 index 000000000..61c65b4d2 Binary files /dev/null and b/public/img/default-expressions/neutral.png differ diff --git a/public/img/default-expressions/optimism.png b/public/img/default-expressions/optimism.png new file mode 100644 index 000000000..fab101a79 Binary files /dev/null and b/public/img/default-expressions/optimism.png differ diff --git a/public/img/default-expressions/pride.png b/public/img/default-expressions/pride.png new file mode 100644 index 000000000..16dae6fca Binary files /dev/null and b/public/img/default-expressions/pride.png differ diff --git a/public/img/default-expressions/realization.png b/public/img/default-expressions/realization.png new file mode 100644 index 000000000..cc8738986 Binary files /dev/null and b/public/img/default-expressions/realization.png differ diff --git a/public/img/default-expressions/relief.png b/public/img/default-expressions/relief.png new file mode 100644 index 000000000..8731cd635 Binary files /dev/null and b/public/img/default-expressions/relief.png differ diff --git a/public/img/default-expressions/remorse.png b/public/img/default-expressions/remorse.png new file mode 100644 index 000000000..abf7c2623 Binary files /dev/null and b/public/img/default-expressions/remorse.png differ diff --git a/public/img/default-expressions/sadness.png b/public/img/default-expressions/sadness.png new file mode 100644 index 000000000..bcba564aa Binary files /dev/null and b/public/img/default-expressions/sadness.png differ diff --git a/public/img/default-expressions/surprise.png b/public/img/default-expressions/surprise.png new file mode 100644 index 000000000..a45a8dab9 Binary files /dev/null and b/public/img/default-expressions/surprise.png differ diff --git a/public/index.html b/public/index.html index 79fc7fd56..5bf94ef26 100644 --- a/public/index.html +++ b/public/index.html @@ -22,6 +22,7 @@ + @@ -106,7 +107,7 @@

Talkativeness

-
How often does the character speak randomly. Affects group chats only! +
How often the chracter speaks in  group chats!
diff --git a/public/script.js b/public/script.js index b4c49da3e..390c2b2c1 100644 --- a/public/script.js +++ b/public/script.js @@ -64,7 +64,7 @@ export { default_avatar, system_message_types, talkativeness_default, -}; +} // API OBJECT FOR EXTERNAL WIRING window["TavernAI"] = {}; @@ -817,22 +817,22 @@ function addOneMessage(mes) { ); } count_view_mes++; + //console.log('add mes without animation = '+add_mes_without_animation); + //console.log(!add_mes_without_animation); if (!add_mes_without_animation) { - $("#chat").children().last().css("opacity", 1.0); - $("#chat") - .children() - .last() - .transition({ - opacity: 1.0, - duration: 700, - easing: "", - complete: function () { }, - }); - } else { + console.log('adding mes with animation') + //$('#chat').children().last().css('transition','all 2s ease-in-out'); + $('#chat').children().last().css("opacity", "1"); + //$('#chat').children().last().css('transition','all 2s ease-in-out'); + + + }else { + console.log('add mes with animation was false, and is set to false again') add_mes_without_animation = false; } var $textchat = $("#chat"); - $textchat.scrollTop($textchat[0].scrollHeight); + //$('#chat').children().last().css("opacity", "1"); + $textchat.scrollTop(($textchat[0].scrollHeight)); } function typeWriter(target, text, speed, i) { @@ -936,8 +936,12 @@ async function Generate(type, automatic_trigger) { //console.log('about to remove last msg') chat.length = chat.length - 1; count_view_mes -= 1; - //console.log('removing last msg') - $("#chat").children().last().remove(); + //$('#chat').children().last().css({'transition':'all 0.5s ease-in-out'}); + //$('#chat').children().last().css({'transform':'translateX(100vh) scale(0.1,0.1)'}); + //$('#chat').children().last().css({'opacity':'0'}); + setTimeout(function(){ + $('#chat').children().last().remove(); + },1000); } } diff --git a/public/scripts/RossAscends-mods.js b/public/scripts/RossAscends-mods.js index 9d64ae7a9..6ea43bc06 100644 --- a/public/scripts/RossAscends-mods.js +++ b/public/scripts/RossAscends-mods.js @@ -2,22 +2,25 @@ import { encode } from "../scripts/gpt-2-3-tokenizer/mod.js"; import { Generate, - getSettings, +/* getSettings, saveSettings, printMessages, clearChat, getChat, - this_chid, - settings, + chat + settings, */ + this_chid, characters, online_status, main_api, api_server, api_key_novel, - getCharacters, - is_send_press + is_send_press, + } from "../script.js"; +import { LoadLocal, SaveLocal, ClearLocal, CheckLocal, LoadLocalBool } from "./f-localStorage.js"; + var NavToggle = document.getElementById("nav-toggle"); var PanelPin = document.getElementById("rm_button_panel_pin"); var SelectedCharacterTab = document.getElementById("rm_button_selected_ch"); @@ -38,30 +41,6 @@ var count_tokens; var perm_tokens; var ALC_Done; -////////////////// LOCAL STORAGE HANDLING ///////////////////// - -function SaveLocal(target, val) { - localStorage.setItem(target, val); - console.log('SaveLocal -- '+target+' : '+val); - } - function LoadLocal(target) { - return localStorage.getItem(target); - } - function LoadLocalBool(target){ - let result = localStorage.getItem(target) === 'true'; - return result; - } - function CheckLocal() { - console.log("----------local storage---------"); - var i; - for (i = 0; i < localStorage.length; i++) { - console.log(localStorage.key(i) +" : " +localStorage.getItem(localStorage.key(i))); - } - console.log("------------------------------"); - } - function ClearLocal() {localStorage.clear();console.log('Removed All Local Storage');} - -///////////////////////////////////////////////////////////////////////// //RossAscends: Added function to format dates used in files and chat timestamps to a humanized format. //Mostly I wanted this to be for file names, but couldn't figure out exactly where the filename save code was as everything seemed to be connected. //Does not break old characters/chats, as the code just uses whatever timestamp exists in the chat. @@ -271,18 +250,14 @@ $("document").ready(function () { $(AutoConnectCheckbox).prop("checked",LoadLocalBool("AutoConnectEnabled")); $(AutoLoadChatCheckbox).prop("checked",LoadLocalBool("AutoLoadChatEnabled")); - - //AutoLoadChat and AutoConnect must be loaded on a small delay after page load to allow getSettings to fill out what they need if (LoadLocalBool('AutoLoadChatEnabled') == true) { console.log('calling RA_ALC'); RA_autoloadchat(); } - + //Autoconnect on page load if enabled, or when api type is changed if (LoadLocalBool("AutoConnectEnabled") == true) {RA_autoconnect()} - $("#main_api").change(function () {RA_autoconnect();}); - $("#api_button").click(function () {setTimeout(RA_checkOnlineStatus, 100);}); //close the RightNav panel when user clicks outside of it or related panels (adv editing popup, or dialog popups) @@ -343,6 +318,37 @@ $("document").ready(function () { (this.scrollHeight) + 'px'; }); + //Regenerate if user swipes on the last mesage in chat + //TODO: + //1. Make it detect if the last message is from user, and ignore swipes then... + //2. find a way to make the chat slide down smoothly when the last mes div gets .remove()-d + + document.addEventListener('swiped-left', function(e) { + var SwipeTargetMesClassParent = e.target.closest('.mes'); + if (is_send_press == false){ + if (SwipeTargetMesClassParent !== null && SwipeTargetMesClassParent.nextSibling == null ){ + $('#chat').children().last().css({'transition':'all 0.5s ease-in-out'}); + $('#chat').children().last().css({'transform':'translateX(-100vw) scale(0,0)','overflow':'hidden'}); + $('#chat').children().last().css({'opacity':'0'}); + + Generate('regenerate'); + } + } + }); + document.addEventListener('swiped-right', function(e) { + var SwipeTargetMesClassParent = e.target.closest('.mes'); + console.log(is_send_press); + if (is_send_press === false){ + if (SwipeTargetMesClassParent !== null && SwipeTargetMesClassParent.nextSibling == null){ + $('#chat').children().last().css({'transition':'all 0.5s ease-in-out'}); + $('#chat').children().last().css({'transform':'translateX(100vh) scale(0,0)','overflow':'hidden'}); + $('#chat').children().last().css({'opacity':'0'}); + Generate('regenerate'); + console.log(is_send_press); + } + } + }); + //Additional hotkeys CTRL+ENTER and CTRL+UPARROW document.addEventListener("keydown", (event) => { if (event.ctrlKey && event.key == "Enter") { diff --git a/public/scripts/f-localStorage.js b/public/scripts/f-localStorage.js new file mode 100644 index 000000000..52bc6a7bb --- /dev/null +++ b/public/scripts/f-localStorage.js @@ -0,0 +1,25 @@ +////////////////// LOCAL STORAGE HANDLING ///////////////////// + +export function SaveLocal(target, val) { + localStorage.setItem(target, val); + console.log('SaveLocal -- '+target+' : '+val); + } +export function LoadLocal(target) { + return localStorage.getItem(target); + } +export function LoadLocalBool(target){ + let result = localStorage.getItem(target) === 'true'; + return result; + } +export function CheckLocal() { + console.log("----------local storage---------"); + var i; + for (i = 0; i < localStorage.length; i++) { + console.log(localStorage.key(i) +" : " +localStorage.getItem(localStorage.key(i))); + } + console.log("------------------------------"); + } + +export function ClearLocal() {localStorage.clear();console.log('Removed All Local Storage');} + +///////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/public/scripts/swiped-events.js b/public/scripts/swiped-events.js new file mode 100644 index 000000000..b38054aba --- /dev/null +++ b/public/scripts/swiped-events.js @@ -0,0 +1,165 @@ +/*! + * swiped-events.js - v@version@ + * Pure JavaScript swipe events + * https://github.com/john-doherty/swiped-events + * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element + * @author John Doherty + * @license MIT + */ +(function (window, document) { + + 'use strict'; + + // patch CustomEvent to allow constructor creation (IE/Chrome) + if (typeof window.CustomEvent !== 'function') { + + window.CustomEvent = function (event, params) { + + params = params || { bubbles: false, cancelable: false, detail: undefined }; + + var evt = document.createEvent('CustomEvent'); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + }; + + window.CustomEvent.prototype = window.Event.prototype; + } + + document.addEventListener('touchstart', handleTouchStart, false); + document.addEventListener('touchmove', handleTouchMove, false); + document.addEventListener('touchend', handleTouchEnd, false); + + var xDown = null; + var yDown = null; + var xDiff = null; + var yDiff = null; + var timeDown = null; + var startEl = null; + + /** + * Fires swiped event if swipe detected on touchend + * @param {object} e - browser event object + * @returns {void} + */ + function handleTouchEnd(e) { + + // if the user released on a different target, cancel! + if (startEl !== e.target) return; + + var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units + var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px + var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms + var timeDiff = Date.now() - timeDown; + var eventType = ''; + var changedTouches = e.changedTouches || e.touches || []; + + if (swipeUnit === 'vh') { + swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels + } + if (swipeUnit === 'vw') { + swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels + } + + if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant + if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) { + if (xDiff > 0) { + eventType = 'swiped-left'; + } + else { + eventType = 'swiped-right'; + } + } + } + else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) { + if (yDiff > 0) { + eventType = 'swiped-up'; + } + else { + eventType = 'swiped-down'; + } + } + + if (eventType !== '') { + + var eventData = { + dir: eventType.replace(/swiped-/, ''), + touchType: (changedTouches[0] || {}).touchType || 'direct', + xStart: parseInt(xDown, 10), + xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10), + yStart: parseInt(yDown, 10), + yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10) + }; + + // fire `swiped` event event on the element that started the swipe + startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData })); + + // fire `swiped-dir` event on the element that started the swipe + startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData })); + } + + // reset values + xDown = null; + yDown = null; + timeDown = null; + } + + /** + * Records current location on touchstart event + * @param {object} e - browser event object + * @returns {void} + */ + function handleTouchStart(e) { + + // if the element has data-swipe-ignore="true" we stop listening for swipe events + if (e.target.getAttribute('data-swipe-ignore') === 'true') return; + + startEl = e.target; + + timeDown = Date.now(); + xDown = e.touches[0].clientX; + yDown = e.touches[0].clientY; + xDiff = 0; + yDiff = 0; + } + + /** + * Records location diff in px on touchmove event + * @param {object} e - browser event object + * @returns {void} + */ + function handleTouchMove(e) { + + if (!xDown || !yDown) return; + + var xUp = e.touches[0].clientX; + var yUp = e.touches[0].clientY; + + xDiff = xDown - xUp; + yDiff = yDown - yUp; + } + + /** + * Gets attribute off HTML element or nearest parent + * @param {object} el - HTML element to retrieve attribute from + * @param {string} attributeName - name of the attribute + * @param {any} defaultValue - default value to return if no match found + * @returns {any} attribute value or defaultValue + */ + function getNearestAttribute(el, attributeName, defaultValue) { + + // walk up the dom tree looking for attributeName + while (el && el !== document.documentElement) { + + var attributeValue = el.getAttribute(attributeName); + + if (attributeValue) { + return attributeValue; + } + + el = el.parentNode; + } + + return defaultValue; + } + +}(window, document)); diff --git a/public/settings.json b/public/settings.json index d96c6244d..0b363013a 100644 --- a/public/settings.json +++ b/public/settings.json @@ -1 +1 @@ -{"username":"You","api_server":"","api_server_textgenerationwebui":"","preset_settings":"gui","preset_settings_novel":"Classic-Euterpe","user_avatar":"you.png","temp":0.43,"amount_gen":90,"max_context":2048,"anchor_order":0,"style_anchor":false,"character_anchor":true,"auto_connect":true,"auto_load_chat":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,"world_info":null,"world_info_depth":2,"world_info_budget":200,"textgenerationwebui_settings":{"temp":0.5,"top_p":0.9,"top_k":0,"typical_p":1,"rep_pen":1.1,"rep_pen_size":0,"penalty_alpha":0}} \ No newline at end of file +{"username":"You","api_server":"http://localhost:5000/api","api_server_textgenerationwebui":"","preset_settings":"gui","preset_settings_novel":"Classic-Euterpe","user_avatar":"legat.png","temp":0.43,"amount_gen":180,"max_context":2048,"anchor_order":0,"style_anchor":false,"character_anchor":false,"auto_connect":true,"auto_load_chat":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,"world_info":null,"world_info_depth":2,"world_info_budget":200,"active_character":"0","textgenerationwebui_settings":{"temp":0.5,"top_p":0.9,"top_k":0,"typical_p":1,"rep_pen":1.1,"rep_pen_size":0,"penalty_alpha":0}} \ No newline at end of file diff --git a/public/style.css b/public/style.css index d3bdec9f3..028b2c540 100644 --- a/public/style.css +++ b/public/style.css @@ -32,8 +32,11 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -moz-appearance: initial; + scrolling-behaviour: smooth; } +html { scroll-behaviour: smooth;} + body { margin: 0; padding: 0; @@ -45,18 +48,11 @@ body { background-size: cover; font-family: "Noto Sans", "Noto Color Emoji", sans-serif; font-size: 15px; - /*1rem*/ color: var(--ivory); } -@media screen and (max-width: 450px) { - body { - margin-left: auto; - margin-right: auto; - overflow-x: hidden; - } -} + ::-webkit-scrollbar { width: 0.6em; @@ -191,6 +187,7 @@ code { -webkit-backdrop-filter: blur(20px); text-shadow: #000 0 0 3px; scrollbar-width: thin; + transition: all 1s ease-in-out; } @@ -811,7 +808,7 @@ input[type=search]:focus::-webkit-search-cancel-button { margin-top: 0; margin-left: 2px; cursor: pointer; - position: absolute; + position: fixed; z-index: 2050; -webkit-user-select: none; -webkit-touch-callout: none; @@ -1055,7 +1052,7 @@ input[type=search]:focus::-webkit-search-cancel-button { margin-top: 36vh; box-shadow: 0 0 5px 5px var(--fullred); padding: 4px; - background-color: var(--black30a); + background-color: var(--black70a); border-radius: 10px; } @@ -1788,6 +1785,7 @@ input[type="range"] { #character_popup { display: none; + position:fixed; background-color: var(--black30a); backdrop-filter: blur(50px); -webkit-backdrop-filter: blur(30px); @@ -1796,7 +1794,7 @@ input[type="range"] { max-width: 800px; height: calc(100vh - 50px); position: absolute; - z-index: 2065; + z-index: 3002; margin-left: auto; margin-right: auto; left: 0; @@ -2429,14 +2427,11 @@ a { } @media screen and (max-width: 450px) { - #right-nav-panel { - width: 100%; - box-shadow: none; - } + } #nav-toggle { - position: absolute; + position: fixed; right: 13px; top: 12px; padding: 0; @@ -2497,8 +2492,70 @@ a { display: none; } +@media screen and (max-width: 450px) { /*styles for mobile phones (tested on iPhone 13 Pro)*/ + body { + font-size: 18px; + } + + #bg1, #bg2 {position:fixed;} + + #sheld { /*margin around the sides, and a larger one on bottom to avoid iOS Home bar*/ + height: calc(100svh - 15px); + margin-left: 5px; + margin-right: 5px; + position: fixed; + } + #send_textarea { /*larger input bar for mobile screens, easier to tap*/ + font-size: 1.25rem; + line-height: 1.5rem; + min-height: calc(2rem + 0.75rem + 2px); + max-height: 35vh; + word-wrap: break-word; + height: 40px; + resize: vertical; + display: block; + background-color: rgba(255, 0, 0, 0); + border: 0; + box-shadow: none; + padding: 6px 0 6px 0; + font-family: "Noto Sans", "Noto Color Emoji", sans-serif; + margin: 0; + text-shadow: #000 0 0 3px; + } + #rm_ch_create_block textarea { /*without this the text areas display far too large*/ + max-height: 300px; + } + + #right-nav-panel, #character_popup { /* character_popup display needs work, "width:100%" items push outside the box */ + width: 100%; + box-shadow: none; + } + + #character_popup { + margin-top:0; + height:100dvh; + padding-left:15px; + padding-right: 15px; + width: 100vw; + position: fixed; + } + + #talkativeness_hint span { + min-width: 33%; + } + /*for debug purposes*/ + /** {border: 1px solid purple;}*/ +} + @media (max-width: 768px) { .mes img.img_extra { max-width: 100%; } +} + +@media all and (display-mode: browser) { /*Even in iOS WebApp mode the window detects as this; unhelpful.*/ + * { + + } + } \ No newline at end of file diff --git a/readme.md b/readme.md index 920717f03..f531b7c52 100644 --- a/readme.md +++ b/readme.md @@ -1,16 +1,19 @@ -## RossAscends 1.2.8 mods ported into Silly TavernAI 1.2.8 +## RossAscends mods ported into SillyLossy's TavernAI 1.2.8 image ## This branch includes: * Base TavernAI 1.2.8 -* SillyLossy's extensive 1.2.8 modifications and functions ( +* SillyLossy's extensive 1.2.8 modifications and functions * World Info * OobaBooga's TextGen WebUI API connection * Soft prompts - * Character emotional expressions - * Auto-Summary of the chat history + * installing [SillyLossy's TAI-extras](https://github.com/SillyLossy/TavernAI-extras) will give support for + * Character emotional expressions + * Auto-Summary of the chat history + * sending images to chat, and the AI interpreting the content. + ...and... @@ -21,12 +24,11 @@ * Mobile-friendly page design * HotKeys * Ctrl+Up = Connect to API - * Ctrl+Left = view localled stored variables (in the browser console window) + * Ctrl+Left = view locally stored variables (in the browser console window) * Ctrl+Right = clear locally stored variables. * Ctrl+enter = Regenerate last AI response. -* No more page refresh on character deletion -* No more page refresh on user name change +* User Name Changes and Character Deletion no longer force the page to refresh. * Toggle option to automatically connect to API on page load (currently only for Kobold) * Toggle option to automatically load the most recently viewed character on page load @@ -40,14 +42,16 @@ * Clicking the Lock on the nav panel will hold the panel open, and this setting be remembered across sessions. * Nav panel status of open or closed will also be saved across sessions. +* Supports saving a shortcut to iOS homescreens and opening in fullscreen mode from that bookmark. + ## Installation *NOTE: This branch is intended for local install purposes, and has not been tested on a colab or other cloud notebook service.* 1. install [NodeJS](nodejs.org) - 2. download the zip from this github + 2. download the zip from this github repo 3. unzip it into a folder of your choice - 4. run start.bat with aby double clicking or in a command line. + 4. run start.bat via double clicking or in a command line. 5. Once the server has prepared everything for you, it will open a tab in your browser. ## Remote connections @@ -56,21 +60,22 @@ Most often this is for people who want use TAI on their mobile phones while at h If you want to enable other devices to connect to your TAI server, open 'config.conf' in a text editor, and change: ``` -const whitelistMode = false; +const whitelistMode = true; ``` to ``` -const whitelistMode = true; +const whitelistMode = false; ``` Save the file. -Close, then restart your TAI server. +Restart your TAI server. You will now be able to connect from other devices. + ***Disclaimer: Anyone else who knows your IP address and TAI port number will be able to as well*** To connect over wifi you'll need your PC's local wifi IP address - - (For Windows: windows button > type 'cmd.exe' in the search bar> type 'ipconfig' in the consol, hit Enter > "IPv4" listing) -if you want other people around the internet to connect, check [here](https://whatismyipaddress.com/) for 'IPv4' + - (For Windows: windows button > type 'cmd.exe' in the search bar> type 'ipconfig' in the console, hit Enter > "IPv4" listing) +if you want other people on the internet to connect, and check [here](https://whatismyipaddress.com/) for 'IPv4' ## Questions or suggestions? Contact me on Discord: RossAscends#1779