From dda8ffa133cd6828656c95379f5b11de3f7cc18d Mon Sep 17 00:00:00 2001 From: mARTin-B78 Date: Tue, 6 Oct 2026 05:12:42 +0200 Subject: [PATCH] chore(build): rebuild static bundle after sonar JS fixes Co-Authored-By: Claude Sonnet 5.5 --- static/dist/main.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/dist/main.min.js b/static/dist/main.min.js index 7582532..d45b4b7 100644 --- a/static/dist/main.min.js +++ b/static/dist/main.min.js @@ -819,7 +819,7 @@ This warms each voice so the engine caches its .pt and first playback is instant ${maxL} ms worst ${avgRtf.toFixed(2)} avg RTF ${avgRtf<1?' Real-time capable':' Slower than real-time'} - `,sessionDone&&rtfArr.length&&(updateTrendDisplay(perfBackendSel.value,perfVoiceSel.value,avgRtf),perfHistoryAdd2({ts:Date.now(),backend:perfBackendSel.value,voice:perfVoiceSel.value,...perfHistoryExtraFields(perfVoiceSel.value,perfBackendSel.value),textLen:perfText.value.trim().length,avgLatencyMs:avg,minLatencyMs:minL,maxLatencyMs:maxL,avgRtf,runCount:ok.length,allOk:ok.length===perfRows.length}),renderPerfHistory2())}else perfSummary.innerHTML='All runs failed'}perfClearBtn.addEventListener("click",()=>{perfRows=[],renderPerfTable(),$("perf-trend-row")&&($("perf-trend-row").style.display="none"),perfProgress.style.display="none"}),perfRunBtn.addEventListener("click",async()=>{const backend=perfBackendSel.value,voice=perfVoiceSel.value,text=perfText.value.trim(),runs=parseInt(perfRunsSel.value)||3;if(!backend){toast("Select a backend first","error");return}if(!voice){toast("Fetch and select a voice first","error");return}if(!text){toast("Enter sample text","error");return}perfRows=[],perfRunBtn.disabled=!0,perfProgress.style.display="";for(let i=0;i1?"s":""} completed.`,renderPerfTable(!0),perfRunBtn.disabled=!1}),(_a2=$("perf-history-filter-current"))==null||_a2.addEventListener("change",renderPerfHistory2),(_b=$("perf-history-clear-btn"))==null||_b.addEventListener("click",()=>{perfHistorySave([]),renderPerfHistory2(),toast("Benchmark history cleared","success")}),renderPerfHistory2()})(),Object.assign(root,{backendVoiceId:backendVoiceId2,shouldFilterBackendVoices:shouldFilterBackendVoices2,shouldReplaceWithLibraryVoices,activeLibraryVoiceIds:activeLibraryVoiceIds2,cleanReferenceText,selectedPreviewLibraryVoice,previewVoiceWarnings,updatePreviewVoiceMatchPanel:updatePreviewVoiceMatchPanel2,synthesizeSelectedReferenceText,_ttsIsFishBackend,FISH_EMOTION_TAGS,FISH_TAG_SAMPLE_TEXT,_fishInsertTag,_fishTagsRender,_fishTagsSync,_ttsApplyEmotionTag,_ttsStreamHealth,effectiveTtsPlaybackMode,isTtsStreamAvailable,createTtsStreamUrl,_ttsPreviewFetchWithRetry,_ttsBackendForVoice:_ttsBackendForVoice2,fetchTtsPreviewBlob:fetchTtsPreviewBlob2,_textWords,_textSimilarity,_voiceRoundtripCheck:_voiceRoundtripCheck2,createTtsAudioSource:createTtsAudioSource2,previewBlob:previewBlob2,PREVIEW_SAMPLE_TEXT,_onPreviewGenerated,_TRYOUT_SPEED_KEY,PERF_HISTORY_KEY,PERF_HISTORY_MAX,PERF_HISTORY_SORT,perfHistoryLoad:perfHistoryLoad2,perfHistorySave,perfHistoryAdd:perfHistoryAdd2,perfSparklineSvg,perfHistoryVoiceLookup,perfHistoryVoiceMeta,perfHistoryExtraFields,perfHistoryGenderLabel,perfHistoryDeviceLabel,perfHistoryDeviceHtml,perfHistoryAvatarHtml,perfHistorySortValue,perfHistoryCompare,perfHistoryHeadButton,renderPerfHistory:renderPerfHistory2}),root.TTVC=root.TTVC||{},root.TTVC.tts=root.TTVC.tts||{},Object.assign(root.TTVC.tts,{preview:{synthesize:synthesizeSelectedReferenceText,createAudio:createTtsAudioSource2},history:{load:perfHistoryLoad2,save:perfHistorySave,render:renderPerfHistory2}})}(window),function(root){var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k;function _parseWavBytes(bytes){const v=new DataView(bytes.buffer,bytes.byteOffset,bytes.byteLength);let off=12,fmt=null,dataOff=0,dataSize=0;for(;off+8<=bytes.length;){const id=v.getUint32(off,!1),sz=v.getUint32(off+4,!0);id===1718449184?fmt={channels:v.getUint16(off+10,!0),sampleRate:v.getUint32(off+12,!0),bitDepth:v.getUint16(off+22,!0)}:id===1684108385&&(dataOff=off+8,dataSize=sz),off+=8+sz}return{fmt,dataOff,dataSize}}function _buildWavBlob(pcmBytes,fmt){const out=new Uint8Array(44+pcmBytes.length),dv=new DataView(out.buffer);return dv.setUint32(0,1380533830,!1),dv.setUint32(4,36+pcmBytes.length,!0),dv.setUint32(8,1463899717,!1),dv.setUint32(12,1718449184,!1),dv.setUint32(16,16,!0),dv.setUint16(20,1,!0),dv.setUint16(22,fmt.channels,!0),dv.setUint32(24,fmt.sampleRate,!0),dv.setUint32(28,fmt.sampleRate*fmt.channels*(fmt.bitDepth>>3),!0),dv.setUint16(32,fmt.channels*(fmt.bitDepth>>3),!0),dv.setUint16(34,fmt.bitDepth,!0),dv.setUint32(36,1684108385,!1),dv.setUint32(40,pcmBytes.length,!0),out.set(pcmBytes,44),new Blob([out],{type:"audio/wav"})}function _silencePcmBytes(ms,fmt){const bytesPerSample=fmt.bitDepth>>3,frames=Math.round(ms/1e3*fmt.sampleRate);return new Uint8Array(frames*fmt.channels*bytesPerSample)}async function mergeWavBlobs(blobs,gapMs=0){if(!blobs||blobs.length===0)return null;if(blobs.length===1&&!gapMs)return blobs[0];const parsed=[];for(const b of blobs){const bytes=new Uint8Array(await b.arrayBuffer()),p=_parseWavBytes(bytes);if(!p.fmt)throw new Error("Invalid WAV in chunk");parsed.push({bytes,...p})}const ref=parsed[0].fmt,silence=gapMs>0?_silencePcmBytes(gapMs,ref):null,totalPcm=parsed.reduce((s,p)=>s+p.dataSize,0)+(silence?silence.length*(parsed.length-1):0),out=new Uint8Array(totalPcm);let pos=0;return parsed.forEach((p,i)=>{out.set(p.bytes.slice(p.dataOff,p.dataOff+p.dataSize),pos),pos+=p.dataSize,silence&&im.replace(".","\0")),restore=s=>s.replace(/\x00/g,"."),segments=[];for(const line of safe.split(` + `,sessionDone&&rtfArr.length&&(updateTrendDisplay(perfBackendSel.value,perfVoiceSel.value,avgRtf),perfHistoryAdd2({ts:Date.now(),backend:perfBackendSel.value,voice:perfVoiceSel.value,...perfHistoryExtraFields(perfVoiceSel.value,perfBackendSel.value),textLen:perfText.value.trim().length,avgLatencyMs:avg,minLatencyMs:minL,maxLatencyMs:maxL,avgRtf,runCount:ok.length,allOk:ok.length===perfRows.length}),renderPerfHistory2())}else perfSummary.innerHTML='All runs failed'}perfClearBtn.addEventListener("click",()=>{perfRows=[],renderPerfTable(),$("perf-trend-row")&&($("perf-trend-row").style.display="none"),perfProgress.style.display="none"}),perfRunBtn.addEventListener("click",async()=>{const backend=perfBackendSel.value,voice=perfVoiceSel.value,text=perfText.value.trim(),runs=parseInt(perfRunsSel.value)||3;if(!backend){toast("Select a backend first","error");return}if(!voice){toast("Fetch and select a voice first","error");return}if(!text){toast("Enter sample text","error");return}perfRows=[],perfRunBtn.disabled=!0,perfProgress.style.display="";for(let i=0;i1?"s":""} completed.`,renderPerfTable(!0),perfRunBtn.disabled=!1}),(_a2=$("perf-history-filter-current"))==null||_a2.addEventListener("change",renderPerfHistory2),(_b=$("perf-history-clear-btn"))==null||_b.addEventListener("click",()=>{perfHistorySave([]),renderPerfHistory2(),toast("Benchmark history cleared","success")}),renderPerfHistory2()})(),Object.assign(root,{backendVoiceId:backendVoiceId2,shouldFilterBackendVoices:shouldFilterBackendVoices2,shouldReplaceWithLibraryVoices,activeLibraryVoiceIds:activeLibraryVoiceIds2,cleanReferenceText,selectedPreviewLibraryVoice,previewVoiceWarnings,updatePreviewVoiceMatchPanel:updatePreviewVoiceMatchPanel2,synthesizeSelectedReferenceText,_ttsIsFishBackend,FISH_EMOTION_TAGS,FISH_TAG_SAMPLE_TEXT,_fishInsertTag,_fishTagsRender,_fishTagsSync,_ttsApplyEmotionTag,_ttsStreamHealth,effectiveTtsPlaybackMode,isTtsStreamAvailable,createTtsStreamUrl,_ttsPreviewFetchWithRetry,_ttsBackendForVoice:_ttsBackendForVoice2,fetchTtsPreviewBlob:fetchTtsPreviewBlob2,_textWords,_textSimilarity,_voiceRoundtripCheck:_voiceRoundtripCheck2,createTtsAudioSource:createTtsAudioSource2,previewBlob:previewBlob2,PREVIEW_SAMPLE_TEXT,_onPreviewGenerated,_TRYOUT_SPEED_KEY,PERF_HISTORY_KEY,PERF_HISTORY_MAX,PERF_HISTORY_SORT,perfHistoryLoad:perfHistoryLoad2,perfHistorySave,perfHistoryAdd:perfHistoryAdd2,perfSparklineSvg,perfHistoryVoiceLookup,perfHistoryVoiceMeta,perfHistoryExtraFields,perfHistoryGenderLabel,perfHistoryDeviceLabel,perfHistoryDeviceHtml,perfHistoryAvatarHtml,perfHistorySortValue,perfHistoryCompare,perfHistoryHeadButton,renderPerfHistory:renderPerfHistory2}),root.TTVC=root.TTVC||{},root.TTVC.tts=root.TTVC.tts||{},Object.assign(root.TTVC.tts,{preview:{synthesize:synthesizeSelectedReferenceText,createAudio:createTtsAudioSource2},history:{load:perfHistoryLoad2,save:perfHistorySave,render:renderPerfHistory2}})}(window),function(root){var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k;function _parseWavBytes(bytes){const v=new DataView(bytes.buffer,bytes.byteOffset,bytes.byteLength);let off=12,fmt=null,dataOff=0,dataSize=0;for(;off+8<=bytes.length;){const id=v.getUint32(off,!1),sz=v.getUint32(off+4,!0);id===1718449184?fmt={channels:v.getUint16(off+10,!0),sampleRate:v.getUint32(off+12,!0),bitDepth:v.getUint16(off+22,!0)}:id===1684108385&&(dataOff=off+8,dataSize=sz),off+=8+sz}return{fmt,dataOff,dataSize}}function _buildWavBlob(pcmBytes,fmt){const out=new Uint8Array(44+pcmBytes.length),dv=new DataView(out.buffer);return dv.setUint32(0,1380533830,!1),dv.setUint32(4,36+pcmBytes.length,!0),dv.setUint32(8,1463899717,!1),dv.setUint32(12,1718449184,!1),dv.setUint32(16,16,!0),dv.setUint16(20,1,!0),dv.setUint16(22,fmt.channels,!0),dv.setUint32(24,fmt.sampleRate,!0),dv.setUint32(28,fmt.sampleRate*fmt.channels*(fmt.bitDepth>>3),!0),dv.setUint16(32,fmt.channels*(fmt.bitDepth>>3),!0),dv.setUint16(34,fmt.bitDepth,!0),dv.setUint32(36,1684108385,!1),dv.setUint32(40,pcmBytes.length,!0),out.set(pcmBytes,44),new Blob([out],{type:"audio/wav"})}function _silencePcmBytes(ms,fmt){const bytesPerSample=fmt.bitDepth>>3,frames=Math.round(ms/1e3*fmt.sampleRate);return new Uint8Array(frames*fmt.channels*bytesPerSample)}async function mergeWavBlobs(blobs,gapMs=0){if(!blobs||blobs.length===0)return null;if(blobs.length===1&&!gapMs)return blobs[0];const parsed=[];for(const b of blobs){const bytes=new Uint8Array(await b.arrayBuffer()),p=_parseWavBytes(bytes);if(!p.fmt)throw new Error("Invalid WAV in chunk");parsed.push({bytes,...p})}const ref=parsed[0].fmt,silence=gapMs>0?_silencePcmBytes(gapMs,ref):null,totalPcm=parsed.reduce((s,p)=>s+p.dataSize,0)+(silence?silence.length*(parsed.length-1):0),out=new Uint8Array(totalPcm);let pos=0;return parsed.forEach((p,i)=>{out.set(p.bytes.slice(p.dataOff,p.dataOff+p.dataSize),pos),pos+=p.dataSize,silence&&im.replace(".","\0")),restore=s=>s.replaceAll("\0","."),segments=[];for(const line of safe.split(` `)){if(!line.trim()){segments.length&&segments.push("");continue}const sentences=line.match(/[^.!?]+[.!?]+\s*/g)||[],rest=line.replace(/[^.!?]+[.!?]+\s*/g,"").trim();segments.push(...sentences),rest&&segments.push(rest)}if(!segments.length)return[text];const chunks=[];let cur="",paraPending=!1;for(const seg of segments){if(seg===""){paraPending=!0;continue}const joined=cur?cur+(paraPending?` `:" ")+seg.trim():seg.trim();joined.length>maxLen&&cur?(chunks.push(restore(cur.trim())),cur=seg.trim()):cur=joined,paraPending=!1}return cur.trim()&&chunks.push(restore(cur.trim())),chunks.length?chunks:[text]}async function generateChunkedTts2(voice,text,backend,instruct,extra=null,applyPersona=!1){const chunks=splitTextIntoChunks(text),prog=$("preview-chunk-progress");prog&&(prog.hidden=!1,prog.textContent=`Chunk 1 / ${chunks.length}\u2026`);const blobs=[];for(let i=0;i20&&_genHistory.pop(),renderHistory()}function _histAvatarColor(id){const palette=["#3b82f6","#10b981","#8b5cf6","#f59e0b","#ef4444","#ec4899","#06b6d4","#84cc16"];let h=0;for(let i=0;i<(id||"").length;i++)h=h*31+id.charCodeAt(i)>>>0;return palette[h%palette.length]}function renderHistory(){const list=$("history-list");if(list){if(!_genHistory.length){list.innerHTML='
No generations yet.
';return}list.innerHTML=_genHistory.map(item=>{const t=new Date(item.ts),ts=String(t.getHours()).padStart(2,"0")+":"+String(t.getMinutes()).padStart(2,"0"),preview=escHtml(item.text.length>90?item.text.slice(0,90)+"\u2026":item.text),v=(window._voices||[]).find(vx=>vx.id===item.voice),avatar=v!=null&&v.has_picture?``:`${(item.voice||"?")[0].toUpperCase()}`;return`