男哥的老友 发表于 2026-8-11 11:42:35

SillyTavern 体验增强插件 v1.0 —— 告别“音画不同步”

<div class="ce-block ce-block--focused" data-id="1dVTnzZZp6" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">在使用 SillyTavern 结合 Deepseek API 与本地 IndexTTS 1.5 构建 AI 语音聊天时,我遇到了一个影响沉浸感的硬伤:文本生成速度远快于语音合成速度。回复内容提前展示,语音却滞后 2-3 秒才播放,导致角色“对嘴型”严重脱节。</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="DX3wJGzD9f" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">为此,我开发了一款针对最新版酒馆的优化插件。其核心机制采用 “阻塞式渲染” 策略:</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="wxMk_AGY3M" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">逻辑重构:拦截 Deepseek 返回的流式文本,暂缓 UI 界面的刷新。</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="tJJW7ru5HZ" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">等待机制:在语音合成(IndexTTS)完成并触发播放指令前,对话气泡仅显示友好的 “请稍后...” 占位提示。</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="Sv0vbfBCJg" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">精准呈现:只有当音频流真正开始输出至扬声器的一刹那,脚本才同步释放被拦截的文本,实现台词与声音的 “零时差”同频输出。</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="JC8n0I4wrD" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">这一改动彻底消除了因 TTS 速度瓶颈带来的“视觉超前感”,让角色扮演的沉浸感重回巅峰。<br></div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="7rprGTqrjL" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_7rprGTqrjL" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/112556l4fff7l7rnennrvr.png" title="语音合成没出来,按住文本内容不显示" alt="语音合成没出来,按住文本内容不显示" data-aid="2698"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder="语音合成没出来,按住文本内容不显示">语音合成没出来,按住文本内容不显示</div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="jx2fqPlTgj" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_jx2fqPlTgj" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/112610m7cez7g9ehvavze1.png" title="当语音合成完毕,角色有说话声音了,再同步显示文本" alt="当语音合成完毕,角色有说话声音了,再同步显示文本" data-aid="2699"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder="当语音合成完毕,角色有说话声音了,再同步显示文本">当语音合成完毕,角色有说话声音了,再同步显示文本</div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="6fIjXd_vv8" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left"><b>插件安装方法</b><br><br><b>1、下载解压缩包,获得&nbsp;st-hide-until-tts 文件夹</b><br><br></div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="CJWxG8vuBv" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_CJWxG8vuBv" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/113239hwtt6wier9al8v6r.png" title="" alt="" data-aid="2700"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder=""></div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="old3Koa2yO" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left"><b>2、把文件夹复制到</b><br><br>SillyTavern文件夹下</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="9p3AmTaUx5" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">└─ public</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="zsuMbKpt1u" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">   └─ scripts</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="NsPPYu06i2" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">      └─ extensions</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="4qj0UAN6yb" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">         └─ third-party</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="HRPLl1vbjD" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">            └─ hide-text-until-tts</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="G2zhmYgSut" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_G2zhmYgSut" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/113647fqeq2nessiezj2ee.png" title="" alt="" data-aid="2701"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder=""></div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="eNqPD209wB" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left"><b>3、进入“管理扩展”,找到 Hide Text Until TTS,确认已经启用。</b></div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="Kh3biRJ1AT" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_Kh3biRJ1AT" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/113840oqomamc8umc2q4fg.png" title="" alt="" data-aid="2702"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder=""></div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="KMFyYSmu4Y" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left"><b>4、效果再次欣赏</b><br><br></div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="1kevoGXYcg" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_1kevoGXYcg" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/114035k9cpvskk33443kr4.png" title="" alt="" data-aid="2703"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder=""></div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="iO0zvXKl1y" >
    <div class="ce-block__content">
      <div class="cdx-block image-tool image-tool--filled   ">
            <div class="image-tool__image">
                <div class="image-tool__image-preloader" style=""></div>
                <img id="aimg_iO0zvXKl1y" class="image-tool__image-picture _zoom" src="https://bbs.gpt.com.cn/data/attachment/forum/202608/11/114051c08ua4lqu4v8a8am.png" title="" alt="" data-aid="2704"/>
            </div>
            <div class="cdx-input image-tool__caption" data-placeholder=""></div>
      </div>
    </div>
</div><div class="ce-block ce-block--focused" data-id="awWVce7cH_" >
        <div class="ce-block__content">
                <div class="ce-paragraph cdx-block ce-paragraph--left">5、插件于附件,自动下载即可</div>
        </div>
</div><div class="ce-block ce-block--focused" data-id="N-gQnOgZwd" >
    <div class="ce-block__content">
      <div class="cdx-block">
                <div class="cdx-attaches cdx-attaches--with-file">
                        <div class="cdx-attaches__file-icon">
                                <div class="cdx-attaches__file-icon-background">
                                        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.3236 8.43554L9.49533 12.1908C9.13119 12.5505 8.93118 13.043 8.9393 13.5598C8.94741 14.0767 9.163 14.5757 9.53862 14.947C9.91424 15.3182 10.4191 15.5314 10.9422 15.5397C11.4653 15.5479 11.9637 15.3504 12.3279 14.9908L16.1562 11.2355C16.8845 10.5161 17.2845 9.53123 17.2682 8.4975C17.252 7.46376 16.8208 6.46583 16.0696 5.72324C15.3184 4.98066 14.3086 4.55425 13.2624 4.53782C12.2162 4.52138 11.2193 4.91627 10.4911 5.63562L6.66277 9.39093C5.57035 10.4699 4.97032 11.9473 4.99467 13.4979C5.01903 15.0485 5.66578 16.5454 6.79264 17.6592C7.9195 18.7731 9.43417 19.4127 11.0034 19.4374C12.5727 19.462 14.068 18.8697 15.1604 17.7907L18.9887 14.0354"></path></svg>
                                </div>
                        </div>
                        <div class="cdx-attaches__file-info">
                                <div class="cdx-attaches__title" data-placeholder="" data-empty="false"></div>
                        </div>
                        <a class="cdx-attaches__download-button" href="forum.php?mod=attachment&aid=MjcwNnw1YmExMWRmNnwxNzg4MDA1NzM5fDB8ODA2" target="_self">
                                <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="M7 10L11.8586 14.8586C11.9367 14.9367 12.0633 14.9367 12.1414 14.8586L17 10"></path></svg>
                        </a>
                </div>
        </div>
    </div>
</div>
<style type="text/css">
.ce-block {
    margin-bottom: 20px;
}
.ce-block__content,.ce-toolbar__content {
        /* max-width:calc(100% - 50px) */
        margin-left: auto;
    margin-right: auto;
}
.ce-paragraph {
    line-height: 1.6em;
    outline: none;
    text-indent: 2em;
    font-size: 16px;
}
.ce-paragraph--right {
    text-align: right;
}
.ce-paragraph--center {
    text-align: center;
}
.ce-paragraph--left {
    text-align: left;
}

.ce-paragraph--justify {
    text-align: justify;
}

.ce-paragraph-text-indent {
    text-align: justify;
}
.ce-paragraph:empty::before{
content: attr(data-placeholder);
color: #707684;
font-weight: normal;
opacity: 0;
}

/** Show placeholder at the first paragraph if Editor is empty */
.codex-editor--empty .ce-block:first-child .ce-paragraph:empty::before {
opacity: 1;
}

.codex-editor--toolbox-opened .ce-block:first-child .ce-paragraph:empty::before,
.codex-editor--empty .ce-block:first-child .ce-paragraph:empty:focus::before {
opacity: 0;
}

.ce-paragraph p:first-of-type{
    margin-top: 0;
}

.ce-paragraph p:last-of-type{
    margin-bottom: 0;
}


.svg-icon {
    width: 1em;
    height: 1em;
}

.svg-icon path,
.svg-icon polygon,
.svg-icon rect {
    fill: #4691f6;
}

.svg-icon circle {
    stroke: #4691f6;
    stroke-width: 1;
}
</style><style type="text/css">
.ce-block {
    margin-bottom: 20px;
}
.ce-block__content,.ce-toolbar__content {
        /* max-width:calc(100% - 50px) */
        margin-left: auto;
    margin-right: auto;
}
.image-tool {
--bg-color: #cdd1e0;
--front-color: #388ae5;
--border-color: #e8e8eb;

}

.image-tool__image {
    border-radius: 3px;
    overflow: hidden;
    margin-bottom: 10px;
}

.image-tool__image-picture {
      max-width: 100%;
      vertical-align: bottom;
      display: block;
      margin-left: auto;
      margin-right: auto;
    }

.image-tool__image-preloader {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      background-size: cover;
      margin: auto;
      position: relative;
      background-color: #cdd1e0;
      background-position: center center;
    }

.image-tool__image-preloader::after {
      content: "";
      position: absolute;
      z-index: 3;
      width: 60px;
      height: 60px;
      border-radius: 50%;
      border: 2px solid #cdd1e0;
      border-top-color: #388ae5;
      left: 50%;
      top: 50%;
      margin-top: -30px;
      margin-left: -30px;
      animation: image-preloader-spin 2s infinite linear;
      box-sizing: border-box;
      }

.image-tool__caption::before {
      position: absolute !important;
      content: attr(data-placeholder);
      color: #707684;
      font-weight: normal;
      display: none;
    }

.image-tool__caption:empty::before {
      display: block;
      }

.image-tool__caption:empty:focus::before {
      display: none;
      }

.image-tool--empty .image-tool__image {
      display: none;
    }

.image-tool--empty .image-tool__caption, .image-tool--loading .image-tool__caption {
      display: none;
    }

.image-tool .cdx-button {
    display: flex;
    align-items: center;
    justify-content: center;
}

.image-tool .cdx-button svg {
      height: auto;
      margin: 0 6px 0 0;
    }

.image-tool--filled .cdx-button {
      display: none;
    }

.image-tool--filled .image-tool__image-preloader {
      display: none;
      }

.image-tool--loading .image-tool__image {
      min-height: 200px;
      display: flex;
      border: 1px solid #e8e8eb;
      background-color: #fff;
    }

.image-tool--loading .image-tool__image-picture {
      display: none;
      }

.image-tool--loading .cdx-button {
      display: none;
    }

/**
   * Tunes
   * ----------------
   */

.image-tool--withBorder .image-tool__image {
      border: 1px solid #e8e8eb;
    }

.image-tool--withBackground .image-tool__image {
      padding: 15px;
      background: #cdd1e0;
    }

.image-tool--withBackground .image-tool__image-picture {
      max-width: 60%;
      margin: 0 auto;
      }

.image-tool--stretched .image-tool__image-picture {
      width: 100%;
      }

.image-tool__caption {
                text-align: center;
                font-size: 14px;
                color: #a3a3a3;
        }
@keyframes image-preloader-spin {
0% {
    transform: rotate(0deg);
}
100% {
    transform: rotate(360deg);
}
}
</style><style type="text/css">
.ce-block {
    margin-bottom: 20px;
}
.ce-block__content,.ce-toolbar__content {
        /* max-width:calc(100% - 50px) */
        margin-left: auto;
    margin-right: auto;
}
.cdx-attaches {
--color-line: #EFF0F1;
--color-bg: #fff;
--color-bg-secondary: #F8F8F8;
--color-bg-secondary--hover: #f2f2f2;
--color-text-secondary: #707684;
}

.cdx-attaches--with-file {
    display: flex;
    align-items: center;
    padding: 10px 12px;
    border: 1px solid #EFF0F1;
    border-radius: 7px;
    background: #fff;
}

.cdx-attaches--with-file .cdx-attaches__file-info {
      display: grid;
      grid-gap: 4px;
      max-width: calc(100% - 80px);
      margin: auto 0;
      flex-grow: 2;
    }

.cdx-attaches--with-file .cdx-attaches__download-button {
      display: flex;
      align-items: center;
      background: #F8F8F8;
      padding: 6px;
      border-radius: 6px;
      margin: auto 0 auto auto;
    }

.cdx-attaches--with-file .cdx-attaches__download-button:hover {
      background: #f2f2f2;
      }

.cdx-attaches--with-file .cdx-attaches__download-button svg {
      width: 20px;
      height: 20px;
      fill: none;
      }

.cdx-attaches--with-file .cdx-attaches__file-icon {
      position: relative;
    }

.cdx-attaches--with-file .cdx-attaches__file-icon-background {
      background-color: #333;

      width: 27px;
      height: 30px;
      margin-right: 12px;
      border-radius: 8px;
      display: flex;
      align-items: center;
      justify-content: center;
      }

@supports(-webkit-mask-box-image: url('')){

.cdx-attaches--with-file .cdx-attaches__file-icon-background {
          border-radius: 0;
          -webkit-mask-box-image: url("data:image/svg+xml,%3Csvg width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath d=%27M0 10.3872C0 1.83334 1.83334 0 10.3872 0H13.6128C22.1667 0 24 1.83334 24 10.3872V13.6128C24 22.1667 22.1667 24 13.6128 24H10.3872C1.83334 24 0 22.1667 0 13.6128V10.3872Z%27 fill=%27black%27/%3E%3C/svg%3E%0A") 48% 41% 37.9% 53.3%
      };
      }

.cdx-attaches--with-file .cdx-attaches__file-icon-label {
      position: absolute;
      left: 3px;
      top: 11px;
      background: inherit;
      text-transform: uppercase;
      line-height: 1em;
      color: #fff;
      padding: 1px 2px;
      border-radius: 3px;
      font-size: 10px;
      font-weight: bold;
      /* box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.22); */
      font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
      letter-spacing: 0.02em;
      }

.cdx-attaches--with-file .cdx-attaches__file-icon svg {
      width: 20px;
      height: 20px;
      }

.cdx-attaches--with-file .cdx-attaches__file-icon path {
      stroke: #fff;
      }

.cdx-attaches--with-file .cdx-attaches__size {
      color: #707684;
      font-size: 12px;
      line-height: 1em;
    }

.cdx-attaches--with-file .cdx-attaches__size::after {
      content: attr(data-size);
      margin-left: 0.2em;
      }

.cdx-attaches--with-file .cdx-attaches__title {
      white-space: nowrap;
      text-overflow: ellipsis;
      overflow: hidden;
      outline: none;
      max-width: 90%;
      font-size: 14px;
      font-weight: 500;
      line-height: 1em;
    }

.cdx-attaches--with-file .cdx-attaches__title:empty::before {
      content: attr(data-placeholder);
      color: #7b7e89;
    }

.cdx-attaches--loading .cdx-attaches__title,
    .cdx-attaches--loading .cdx-attaches__file-icon,
    .cdx-attaches--loading .cdx-attaches__size,
    .cdx-attaches--loading .cdx-attaches__download-button,
    .cdx-attaches--loading .cdx-attaches__button {
      opacity: 0;
      font-size: 0;
    }

.cdx-attaches__button {
    display: flex;
    align-items: center;
    justify-content: center;
    color: #000;
    border-radius: 7px;
    font-weight: 500;
}

.cdx-attaches__button svg {
      margin-top: 0;
    }
</style><style type="text/css">
.inline-code {
background: rgba(250, 239, 240, 0.78);
color: #b44437;
padding: 3px 4px;
border-radius: 5px;
margin: 0 1px;
font-family: inherit;
font-size: 0.86em;
font-weight: 500;
letter-spacing: 0.3px;
}
</style>

sense 发表于 2026-8-11 17:34:33

欢迎大佬多多分享干货~
页: [1]
查看完整版本: SillyTavern 体验增强插件 v1.0 —— 告别“音画不同步”