xVASynth-TTS / javascript /settingsMenu.js
Pendrokar's picture
xVASynth v3 code for English
19c8b95
raw
history blame
56.9 kB
"use strict"
const er = require('@electron/remote')
const saveUserSettings = () => localStorage.setItem("userSettings", JSON.stringify(window.userSettings))
// const saveUserSettings = () => {}
const deleteFolderRecursive = function (directoryPath) {
if (fs.existsSync(directoryPath)) {
fs.readdirSync(directoryPath).forEach((file, index) => {
const curPath = `${directoryPath}/${file}`;
if (fs.lstatSync(curPath).isDirectory()) {
// recurse
deleteFolderRecursive(curPath);
} else {
// delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(directoryPath);
}
};
// Load user settings
window.userSettings = localStorage.getItem("userSettings") ||
// window.userSettings =
{
useGPU: false,
customWindowSize:`${window.innerHeight},${window.innerWidth}`,
base_speaker: "default",
autoplay: true,
autoPlayGen: false,
audio: {
format: "wav"
},
plugins: {
}
}
if ((typeof window.userSettings)=="string") {
window.userSettings = JSON.parse(window.userSettings)
}
if (!Object.keys(window.userSettings).includes("installation")) { // For backwards compatibility
window.userSettings.installation = "cpu"
}
if (!Object.keys(window.userSettings).includes("audio")) { // For backwards compatibility
window.userSettings.audio = {format: "wav", hz: 44100, padStart: 0, padEnd: 0, pitchMult: 1, tempo: 1, nr: 5, nf: -20, deessing: 0.1}
}
if (!Object.keys(window.userSettings).includes("sliderTooltip")) { // For backwards compatibility
window.userSettings.sliderTooltip = true
}
// if (!Object.keys(window.userSettings).includes("darkPrompt")) { // For backwards compatibility
// window.userSettings.darkPrompt = false
// }
if (!Object.keys(window.userSettings).includes("showDiscordStatus")) { // For backwards compatibility
window.userSettings.showDiscordStatus = true
}
if (!Object.keys(window.userSettings).includes("prompt_fontSize")) { // For backwards compatibility
window.userSettings.prompt_fontSize = 15
}
if (!Object.keys(window.userSettings).includes("bg_gradient_opacity")) { // For backwards compatibility
window.userSettings.bg_gradient_opacity = 13
}
if (!Object.keys(window.userSettings).includes("autoReloadVoices")) { // For backwards compatibility
window.userSettings.autoReloadVoices = false
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("hz")) { // For backwards compatibility
window.userSettings.audio.hz = 44100
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("padStart")) { // For backwards compatibility
window.userSettings.audio.padStart = 0
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("padEnd")) { // For backwards compatibility
window.userSettings.audio.padEnd = 0
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("pitchMult")) { // For backwards compatibility
window.userSettings.audio.pitchMult = 1
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("tempo")) { // For backwards compatibility
window.userSettings.audio.tempo = 1
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("deessing")) { // For backwards compatibility
window.userSettings.audio.deessing = 0.1
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("nr")) { // For backwards compatibility
window.userSettings.audio.nr = 5
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("nf")) { // For backwards compatibility
window.userSettings.audio.nf = -20
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("ffmpeg")) { // For backwards compatibility
window.userSettings.audio.ffmpeg = true
}
// if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("ffmpeg_preview")) { // For backwards compatibility
// window.userSettings.audio.ffmpeg_preview = true
// }
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("useNR")) { // For backwards compatibility
window.userSettings.audio.useNR = true
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("bitdepth")) { // For backwards compatibility
window.userSettings.audio.bitdepth = "pcm_s32le"
}
if (!Object.keys(window.userSettings).includes("showEditorFFMPEGAmplitude")) { // For backwards compatibility
window.userSettings.showEditorFFMPEGAmplitude = false
}
if (!Object.keys(window.userSettings).includes("vocoder")) { // For backwards compatibility
window.userSettings.vocoder = "256_waveglow"
}
if (!Object.keys(window.userSettings).includes("audio") || !Object.keys(window.userSettings.audio).includes("amplitude")) { // For backwards compatibility
window.userSettings.audio.amplitude = 1
}
if (!Object.keys(window.userSettings).includes("max_filename_chars")) { // For backwards compatibility
window.userSettings.max_filename_chars = 70
}
if (!Object.keys(window.userSettings).includes("clear_text_after_synth")) { // For backwards compatibility
window.userSettings.clear_text_after_synth = false
}
if (!Object.keys(window.userSettings).includes("do_model_version_highlight")) { // For backwards compatibility
window.userSettings.do_model_version_highlight = false
}
if (!Object.keys(window.userSettings).includes("model_version_highlight")) { // For backwards compatibility
window.userSettings.model_version_highlight = 3.0
}
if (!Object.keys(window.userSettings).includes("do_pitchrangeoverride")) { // For backwards compatibility
window.userSettings.do_pitchrangeoverride = false
}
if (!Object.keys(window.userSettings).includes("pitchrangeoverride")) { // For backwards compatibility
window.userSettings.pitchrangeoverride = 6.0
}
if (!Object.keys(window.userSettings).includes("keepPaceOnNew")) { // For backwards compatibility
window.userSettings.keepPaceOnNew = true
}
if (!Object.keys(window.userSettings).includes("batchOutFolder")) { // For backwards compatibility
window.userSettings.batchOutFolder = `${__dirname.replace(/\\/g,"/")}/batch`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
}
if (!Object.keys(window.userSettings).includes("batch_clearDirFirst")) { // For backwards compatibility
window.userSettings.batch_clearDirFirst = false
}
// if (!Object.keys(window.userSettings).includes("batch_fastMode")) { // For backwards compatibility
// window.userSettings.batch_fastMode = false
// }
// if (!Object.keys(window.userSettings).includes("batch_fastModeMaxParallelizations")) { // For backwards compatibility
// window.userSettings.batch_fastModeMaxParallelizations = 1000
// }
if (!Object.keys(window.userSettings).includes("batch_json")) { // For backwards compatibility
window.userSettings.batch_json = false
}
if (!Object.keys(window.userSettings).includes("batch_useMP")) { // For backwards compatibility
window.userSettings.batch_useMP = false
}
if (!Object.keys(window.userSettings).includes("batch_MPCount")) { // For backwards compatibility
window.userSettings.batch_MPCount = 0
}
if (!Object.keys(window.userSettings).includes("batch_skipExisting")) { // For backwards compatibility
window.userSettings.batch_skipExisting = true
}
if (!Object.keys(window.userSettings).includes("batch_doGrouping")) { // For backwards compatibility
window.userSettings.batch_doGrouping = true
}
if (!Object.keys(window.userSettings).includes("batch_doVocoderGrouping")) { // For backwards compatibility
window.userSettings.batch_doVocoderGrouping = false
}
if (!Object.keys(window.userSettings).includes("batch_delimiter")) { // For backwards compatibility
window.userSettings.batch_delimiter = ","
}
if (!Object.keys(window.userSettings).includes("batch_paginationSize")) { // For backwards compatibility
window.userSettings.batch_paginationSize = 100
}
if (!Object.keys(window.userSettings).includes("defaultToHiFi")) { // For backwards compatibility
window.userSettings.defaultToHiFi = true
}
if (!Object.keys(window.userSettings).includes("batch_batchSize")) { // For backwards compatibility
window.userSettings.batch_batchSize = 1
}
if (!Object.keys(window.userSettings).includes("autoPlayGen")) { // For backwards compatibility
window.userSettings.autoPlayGen = true
}
if (!Object.keys(window.userSettings).includes("outputJSON")) { // For backwards compatibility
window.userSettings.outputJSON = true
}
if (!Object.keys(window.userSettings).includes("keepEditorOnVoiceChange")) { // For backwards compatibility
window.userSettings.keepEditorOnVoiceChange = false
}
if (!Object.keys(window.userSettings).includes("filenameNumericalSeq")) { // For backwards compatibility
window.userSettings.filenameNumericalSeq = false
}
if (!Object.keys(window.userSettings).includes("spacePadding")) { // For backwards compatibility
window.userSettings.spacePadding = true
}
if (!Object.keys(window.userSettings).includes("useErrorSound")) { // For backwards compatibility
window.userSettings.useErrorSound = false
}
if (!Object.keys(window.userSettings).includes("showTipOfTheDay")) { // For backwards compatibility
window.userSettings.showTipOfTheDay = true
}
if (!Object.keys(window.userSettings).includes("showUnseenTipOfTheDay")) { // For backwards compatibility
window.userSettings.showUnseenTipOfTheDay = false
}
if (!Object.keys(window.userSettings).includes("playChangedAudio")) { // For backwards compatibility
window.userSettings.playChangedAudio = false
}
if (!Object.keys(window.userSettings).includes("errorSoundFile")) { // For backwards compatibility
window.userSettings.errorSoundFile = `${__dirname.replace(/\\/g,"/")}/lib/xp_error.mp3`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
}
if (!Object.keys(window.userSettings).includes("plugins")) { // For backwards compatibility
window.userSettings.plugins = {}
}
if (!Object.keys(window.userSettings.plugins).includes("loadOrder")) { // For backwards compatibility
window.userSettings.plugins.loadOrder = ""
}
if (!Object.keys(window.userSettings).includes("externalAudioEditor")) { // For backwards compatibility
window.userSettings.externalAudioEditor = ""
}
if (!Object.keys(window.userSettings).includes("s2s_autogenerate")) { // For backwards compatibility
window.userSettings.s2s_autogenerate = true
}
if (!Object.keys(window.userSettings).includes("s2s_prePitchShift")) { // For backwards compatibility
window.userSettings.s2s_prePitchShift = false
}
if (!Object.keys(window.userSettings).includes("s2s_removeNoise")) { // For backwards compatibility
window.userSettings.s2s_removeNoise = false
}
if (!Object.keys(window.userSettings).includes("s2s_noiseRemStrength")) { // For backwards compatibility
window.userSettings.s2s_noiseRemStrength = 0.25
}
if (!Object.keys(window.userSettings).includes("vc_strength")) { // For backwards compatibility
window.userSettings.vc_strength = 2
}
if (!Object.keys(window.userSettings).includes("waveglow_path")) { // For backwards compatibility
window.userSettings.waveglow_path = `${__dirname.replace(/\\/g,"/")}/models/waveglow_256channels_universal_v4.pt`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
}
if (!Object.keys(window.userSettings).includes("bigwaveglow_path")) { // For backwards compatibility
window.userSettings.bigwaveglow_path = `${__dirname.replace(/\\/g,"/")}/models/nvidia_waveglowpyt_fp32_20190427.pt`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
}
if (!Object.keys(window.userSettings).includes("arpabet_paginationSize")) { // For backwards compatibility
window.userSettings.arpabet_paginationSize = 200
}
if (!Object.keys(window.userSettings).includes("output_files_pagination_size")) { // For backwards compatibility
window.userSettings.output_files_pagination_size = 25
}
const updateUIWithSettings = () => {
useGPUCbx.checked = window.userSettings.useGPU
autoplay_ckbx.checked = window.userSettings.autoplay
// setting_slidersTooltip.checked = window.userSettings.sliderTooltip
setting_defaultToHiFi.checked = window.userSettings.defaultToHiFi
setting_keepPaceOnNew.checked = window.userSettings.keepPaceOnNew
setting_autoplaygenCbx.checked = window.userSettings.autoPlayGen
// setting_darkprompt.checked = window.userSettings.darkPrompt
setting_show_discord_status.checked = window.userSettings.showDiscordStatus
setting_prompt_fontSize.value = window.userSettings.prompt_fontSize
setting_bg_gradient_opacity.value = window.userSettings.bg_gradient_opacity
setting_areload_voices.checked = window.userSettings.autoReloadVoices
setting_output_json.checked = window.userSettings.outputJSON
setting_output_num_seq.checked = window.userSettings.filenameNumericalSeq
setting_space_padding.checked = window.userSettings.spacePadding
setting_keepEditorOnVoiceChange.checked = window.userSettings.keepEditorOnVoiceChange
setting_use_error_sound.checked = window.userSettings.useErrorSound
setting_error_sound_file.value = window.userSettings.errorSoundFile
setting_showTipOfTheDay.checked = window.userSettings.showTipOfTheDay
totdShowTips.checked = window.userSettings.showTipOfTheDay
setting_showUnseenTipOfTheDay.checked = window.userSettings.showUnseenTipOfTheDay
totdShowOnlyUnseenTips.checked = window.userSettings.showUnseenTipOfTheDay
setting_playChangedAudio.checked = window.userSettings.playChangedAudio
setting_external_audio_editor.value = window.userSettings.externalAudioEditor
setting_audio_ffmpeg.checked = window.userSettings.audio.ffmpeg
// setting_audio_ffmpeg_preview.checked = window.userSettings.audio.ffmpeg && window.userSettings.audio.ffmpeg_preview
setting_audio_useNR.checked = window.userSettings.audio.ffmpeg && window.userSettings.audio.useNR
setting_audio_format.value = window.userSettings.audio.format
setting_audio_hz.value = window.userSettings.audio.hz
setting_audio_pad_start.value = window.userSettings.audio.padStart
setting_audio_pad_end.value = window.userSettings.audio.padEnd
setting_audio_pitchMult.value = window.userSettings.audio.pitchMult
setting_audio_tempo.value = window.userSettings.audio.tempo
setting_audio_deessing.value = window.userSettings.audio.deessing
setting_audio_nr.value = window.userSettings.audio.nr
setting_audio_nf.value = window.userSettings.audio.nf
setting_audio_bitdepth.value = window.userSettings.audio.bitdepth
setting_audio_amplitude.value = window.userSettings.audio.amplitude
setting_editor_audio_amplitude.value = window.userSettings.audio.amplitude
setting_show_editor_ffmpegamplitude.checked = window.userSettings.showEditorFFMPEGAmplitude
editor_amplitude_options.style.display = window.userSettings.showEditorFFMPEGAmplitude ? "flex" : "none"
// setting_s2s_autogenerate.checked = window.userSettings.s2s_autogenerate
// setting_s2s_prePitchShift.checked = window.userSettings.s2s_prePitchShift
// setting_s2s_removeNoise.checked = window.userSettings.s2s_removeNoise
// setting_s2s_noiseRemStrength.value = window.userSettings.s2s_noiseRemStrength
setting_s2s_vcstrength.value = window.userSettings.vc_strength
setting_batch_json.checked = window.userSettings.batch_json
// setting_batch_fastmode.checked = window.userSettings.batch_fastMode // No more fast modde. TODO, remove completely
// setting_batch_maxFastModeParallelizations.value = window.userSettings.batch_fastModeMaxParallelizations // No more fast modde. TODO, remove completely
setting_batch_multip.checked = window.userSettings.batch_useMP
setting_batch_multip_count.value = window.userSettings.batch_MPCount
setting_batch_delimiter.value = window.userSettings.batch_delimiter
setting_batch_paginationSize.value = window.userSettings.batch_paginationSize
setting_batch_doGrouping.checked = window.userSettings.batch_doGrouping
setting_batch_doVocoderGrouping.checked = window.userSettings.batch_doVocoderGrouping
batch_batchSizeInput.value = parseInt(window.userSettings.batch_batchSize)
batch_skipExisting.checked = window.userSettings.batch_skipExisting
batch_clearDirFirstCkbx.checked = window.userSettings.batch_clearDirFirst
setting_256waveglow_path.value = window.userSettings.waveglow_path
setting_bigwaveglow_path.value = window.userSettings.bigwaveglow_path
setting_arpabet_paginationSize.value = window.userSettings.arpabet_paginationSize
setting_output_files_pagination_size.value = window.userSettings.output_files_pagination_size
setting_max_filename_chars.value = window.userSettings.max_filename_chars
setting_clear_text_after_synth.checked = window.userSettings.clear_text_after_synth
setting_do_model_version_highlight.checked = window.userSettings.do_model_version_highlight
setting_model_version_highlight.value = window.userSettings.model_version_highlight
setting_pitchrangeoverrideEnabledCkbx.checked = window.userSettings.do_pitchrangeoverride
setting_pitchrangeoverride.value = window.userSettings.pitchrangeoverride
const [height, width] = window.userSettings.customWindowSize.split(",").map(v => parseInt(v))
ipcRenderer.send("resize", {height, width})
}
updateUIWithSettings()
saveUserSettings()
// Add the SVG code this way, because otherwise the index.html file will be spammed with way too much svg code
Array.from(window.document.querySelectorAll(".svgButton")).forEach(svgButton => {
svgButton.innerHTML = `<svg class="openFolderSVG" width="400" height="350" viewBox="0, 0, 400,350"><g id="svgg" ><path id="path0" d="M39.960 53.003 C 36.442 53.516,35.992 53.635,30.800 55.422 C 15.784 60.591,3.913 74.835,0.636 91.617 C -0.372 96.776,-0.146 305.978,0.872 310.000 C 5.229 327.228,16.605 339.940,32.351 345.172 C 40.175 347.773,32.175 347.630,163.000 347.498 L 281.800 347.378 285.600 346.495 C 304.672 342.065,321.061 332.312,330.218 319.944 C 330.648 319.362,332.162 317.472,333.581 315.744 C 335.001 314.015,336.299 312.420,336.467 312.200 C 336.634 311.980,337.543 310.879,338.486 309.753 C 340.489 307.360,342.127 305.341,343.800 303.201 C 344.460 302.356,346.890 299.375,349.200 296.575 C 351.510 293.776,353.940 290.806,354.600 289.975 C 355.260 289.144,356.561 287.505,357.492 286.332 C 358.422 285.160,359.952 283.267,360.892 282.126 C 362.517 280.153,371.130 269.561,375.632 264.000 C 376.789 262.570,380.427 258.097,383.715 254.059 C 393.790 241.689,396.099 237.993,398.474 230.445 C 403.970 212.972,394.149 194.684,376.212 188.991 C 369.142 186.747,368.803 186.724,344.733 186.779 C 330.095 186.812,322.380 186.691,322.216 186.425 C 322.078 186.203,321.971 178.951,321.977 170.310 C 321.995 146.255,321.401 141.613,317.200 133.000 C 314.009 126.457,307.690 118.680,303.142 115.694 C 302.560 115.313,301.300 114.438,300.342 113.752 C 295.986 110.631,288.986 107.881,282.402 106.704 C 280.540 106.371,262.906 106.176,220.400 106.019 L 161.000 105.800 160.763 98.800 C 159.961 75.055,143.463 56.235,120.600 52.984 C 115.148 52.208,45.292 52.225,39.960 53.003 M120.348 80.330 C 130.472 83.988,133.993 90.369,133.998 105.071 C 134.003 120.968,137.334 127.726,147.110 131.675 L 149.400 132.600 213.800 132.807 C 272.726 132.996,278.392 133.071,280.453 133.690 C 286.872 135.615,292.306 141.010,294.261 147.400 C 294.928 149.578,294.996 151.483,294.998 168.000 L 295.000 186.200 292.800 186.449 C 291.590 186.585,254.330 186.725,210.000 186.759 C 163.866 186.795,128.374 186.977,127.000 187.186 C 115.800 188.887,104.936 192.929,96.705 198.458 C 95.442 199.306,94.302 200.000,94.171 200.000 C 93.815 200.000,89.287 203.526,87.000 205.583 C 84.269 208.039,80.083 212.649,76.488 217.159 C 72.902 221.657,72.598 222.031,70.800 224.169 C 70.030 225.084,68.770 226.620,68.000 227.582 C 67.230 228.544,66.054 229.977,65.387 230.766 C 64.720 231.554,62.727 234.000,60.957 236.200 C 59.188 238.400,56.346 241.910,54.642 244.000 C 52.938 246.090,50.163 249.510,48.476 251.600 C 44.000 257.146,36.689 266.126,36.212 266.665 C 35.985 266.921,34.900 268.252,33.800 269.623 C 32.700 270.994,30.947 273.125,29.904 274.358 C 28.861 275.591,28.006 276.735,28.004 276.900 C 28.002 277.065,27.728 277.200,27.395 277.200 C 26.428 277.200,26.700 96.271,27.670 93.553 C 30.020 86.972,35.122 81.823,40.800 80.300 C 44.238 79.378,47.793 79.296,81.800 79.351 L 117.800 79.410 120.348 80.330 M369.400 214.800 C 374.239 217.220,374.273 222.468,369.489 228.785 C 367.767 231.059,364.761 234.844,364.394 235.200 C 364.281 235.310,362.373 237.650,360.154 240.400 C 357.936 243.150,354.248 247.707,351.960 250.526 C 347.732 255.736,346.053 257.821,343.202 261.400 C 341.505 263.530,340.849 264.336,334.600 271.965 C 332.400 274.651,330.204 277.390,329.720 278.053 C 329.236 278.716,328.246 279.945,327.520 280.785 C 326.794 281.624,325.300 283.429,324.200 284.794 C 323.100 286.160,321.726 287.845,321.147 288.538 C 320.568 289.232,318.858 291.345,317.347 293.233 C 308.372 304.449,306.512 306.609,303.703 309.081 C 299.300 312.956,290.855 317.633,286.000 318.886 C 277.958 320.960,287.753 320.819,159.845 320.699 C 33.557 320.581,42.330 320.726,38.536 318.694 C 34.021 316.276,35.345 310.414,42.386 301.647 C 44.044 299.583,45.940 297.210,46.600 296.374 C 47.260 295.538,48.340 294.169,49.000 293.332 C 49.660 292.495,51.550 290.171,53.200 288.167 C 54.850 286.164,57.100 283.395,58.200 282.015 C 59.300 280.635,60.920 278.632,61.800 277.564 C 62.680 276.496,64.210 274.617,65.200 273.389 C 66.190 272.162,67.188 270.942,67.418 270.678 C 67.649 270.415,71.591 265.520,76.179 259.800 C 80.767 254.080,84.634 249.310,84.773 249.200 C 84.913 249.090,87.117 246.390,89.673 243.200 C 92.228 240.010,95.621 235.780,97.213 233.800 C 106.328 222.459,116.884 215.713,128.200 213.998 C 129.300 213.832,183.570 213.719,248.800 213.748 L 367.400 213.800 369.400 214.800 " stroke="none" fill="#fbfbfb" fill-rule="evenodd"></path><path id="path1" fill-opacity="0" d="M0.000 46.800 C 0.000 72.540,0.072 93.600,0.159 93.600 C 0.246 93.600,0.516 92.460,0.759 91.066 C 3.484 75.417,16.060 60.496,30.800 55.422 C 35.953 53.648,36.338 53.550,40.317 52.981 C 46.066 52.159,114.817 52.161,120.600 52.984 C 143.463 56.235,159.961 75.055,160.763 98.800 L 161.000 105.800 220.400 106.019 C 262.906 106.176,280.540 106.371,282.402 106.704 C 288.986 107.881,295.986 110.631,300.342 113.752 C 301.300 114.438,302.560 115.313,303.142 115.694 C 307.690 118.680,314.009 126.457,317.200 133.000 C 321.401 141.613,321.995 146.255,321.977 170.310 C 321.971 178.951,322.078 186.203,322.216 186.425 C 322.380 186.691,330.095 186.812,344.733 186.779 C 368.803 186.724,369.142 186.747,376.212 188.991 C 381.954 190.814,388.211 194.832,391.662 198.914 C 395.916 203.945,397.373 206.765,399.354 213.800 C 399.842 215.533,399.922 201.399,399.958 107.900 L 400.000 0.000 200.000 0.000 L 0.000 0.000 0.000 46.800 M44.000 79.609 C 35.903 81.030,30.492 85.651,27.670 93.553 C 26.700 96.271,26.428 277.200,27.395 277.200 C 27.728 277.200,28.002 277.065,28.004 276.900 C 28.006 276.735,28.861 275.591,29.904 274.358 C 30.947 273.125,32.700 270.994,33.800 269.623 C 34.900 268.252,35.985 266.921,36.212 266.665 C 36.689 266.126,44.000 257.146,48.476 251.600 C 50.163 249.510,52.938 246.090,54.642 244.000 C 56.346 241.910,59.188 238.400,60.957 236.200 C 62.727 234.000,64.720 231.554,65.387 230.766 C 66.054 229.977,67.230 228.544,68.000 227.582 C 68.770 226.620,70.030 225.084,70.800 224.169 C 72.598 222.031,72.902 221.657,76.488 217.159 C 80.083 212.649,84.269 208.039,87.000 205.583 C 89.287 203.526,93.815 200.000,94.171 200.000 C 94.302 200.000,95.442 199.306,96.705 198.458 C 104.936 192.929,115.800 188.887,127.000 187.186 C 128.374 186.977,163.866 186.795,210.000 186.759 C 254.330 186.725,291.590 186.585,292.800 186.449 L 295.000 186.200 294.998 168.000 C 294.996 151.483,294.928 149.578,294.261 147.400 C 292.306 141.010,286.872 135.615,280.453 133.690 C 278.392 133.071,272.726 132.996,213.800 132.807 L 149.400 132.600 147.110 131.675 C 137.334 127.726,134.003 120.968,133.998 105.071 C 133.993 90.369,130.472 83.988,120.348 80.330 L 117.800 79.410 81.800 79.351 C 62.000 79.319,44.990 79.435,44.000 79.609 M128.200 213.998 C 116.884 215.713,106.328 222.459,97.213 233.800 C 95.621 235.780,92.228 240.010,89.673 243.200 C 87.117 246.390,84.913 249.090,84.773 249.200 C 84.634 249.310,80.767 254.080,76.179 259.800 C 71.591 265.520,67.649 270.415,67.418 270.678 C 67.188 270.942,66.190 272.162,65.200 273.389 C 64.210 274.617,62.680 276.496,61.800 277.564 C 60.920 278.632,59.300 280.635,58.200 282.015 C 57.100 283.395,54.850 286.164,53.200 288.167 C 51.550 290.171,49.660 292.495,49.000 293.332 C 48.340 294.169,47.260 295.538,46.600 296.374 C 45.940 297.210,44.044 299.583,42.386 301.647 C 35.345 310.414,34.021 316.276,38.536 318.694 C 42.330 320.726,33.557 320.581,159.845 320.699 C 287.753 320.819,277.958 320.960,286.000 318.886 C 290.855 317.633,299.300 312.956,303.703 309.081 C 306.512 306.609,308.372 304.449,317.347 293.233 C 318.858 291.345,320.568 289.232,321.147 288.538 C 321.726 287.845,323.100 286.160,324.200 284.794 C 325.300 283.429,326.794 281.624,327.520 280.785 C 328.246 279.945,329.236 278.716,329.720 278.053 C 330.204 277.390,332.400 274.651,334.600 271.965 C 340.849 264.336,341.505 263.530,343.202 261.400 C 346.053 257.821,347.732 255.736,351.960 250.526 C 354.248 247.707,357.936 243.150,360.154 240.400 C 362.373 237.650,364.281 235.310,364.394 235.200 C 364.761 234.844,367.767 231.059,369.489 228.785 C 374.273 222.468,374.239 217.220,369.400 214.800 L 367.400 213.800 248.800 213.748 C 183.570 213.719,129.300 213.832,128.200 213.998 M399.600 225.751 C 399.600 231.796,394.623 240.665,383.715 254.059 C 380.427 258.097,376.789 262.570,375.632 264.000 C 371.130 269.561,362.517 280.153,360.892 282.126 C 359.952 283.267,358.422 285.160,357.492 286.332 C 356.561 287.505,355.260 289.144,354.600 289.975 C 353.940 290.806,351.510 293.776,349.200 296.575 C 346.890 299.375,344.460 302.356,343.800 303.201 C 342.127 305.341,340.489 307.360,338.486 309.753 C 337.543 310.879,336.634 311.980,336.467 312.200 C 336.299 312.420,335.001 314.015,333.581 315.744 C 332.162 317.472,330.648 319.362,330.218 319.944 C 321.061 332.312,304.672 342.065,285.600 346.495 L 281.800 347.378 163.000 347.498 C 32.175 347.630,40.175 347.773,32.351 345.172 C 16.471 339.895,3.810 325.502,0.820 309.326 C 0.591 308.085,0.312 306.979,0.202 306.868 C 0.091 306.757,-0.000 327.667,-0.000 353.333 L 0.000 400.000 200.000 400.000 L 400.000 400.000 400.000 312.400 C 400.000 264.220,399.910 224.800,399.800 224.800 C 399.690 224.800,399.600 225.228,399.600 225.751 " stroke="none" fill="#050505" fill-rule="evenodd"></path></g></svg>`
})
// Installation sever handling
// =========================
settings_installation.innerHTML = window.userSettings.installation=="cpu" ? `CPU` : "CPU+GPU"
setting_change_installation.innerHTML = window.userSettings.installation=="cpu" ? `Change to CPU+GPU` : `Change to CPU`
setting_change_installation.addEventListener("click", () => {
spinnerModal("Changing installation sever...")
doFetch(`http://localhost:8008/stopServer`, {
method: "Post",
body: JSON.stringify({})
}).then(r=>r.text()).then(console.log) // The server stopping should mean this never runs
.catch(() => {
if (window.userSettings.installation=="cpu") {
window.userSettings.installation = "gpu"
useGPUCbx.disabled = false
settings_installation.innerHTML = `GPU`
setting_change_installation.innerHTML = `Change to CPU`
} else {
doFetch(`http://localhost:8008/setDevice`, {
method: "Post",
body: JSON.stringify({device: "cpu"})
})
window.userSettings.installation = "cpu"
useGPUCbx.checked = false
useGPUCbx.disabled = true
window.userSettings.useGPU = false
settings_installation.innerHTML = `CPU`
setting_change_installation.innerHTML = `Change to CPU+GPU`
}
saveUserSettings()
// Start the new server
if (window.PRODUCTION) {
window.appLogger.log(window.userSettings.installation)
window.pythonProcess = spawn(`${path}/cpython_${window.userSettings.installation}/server.exe`, {stdio: "ignore"})
} else {
window.pythonProcess = spawn("python", [`${path}/server.py`], {stdio: "ignore"})
}
window.currentModel = undefined
titleName.innerHTML = window.i18n.SELECT_VOICE_TYPE
keepSampleButton.style.display = "none"
wavesurferContainer.innerHTML = ""
generateVoiceButton.dataset.modelQuery = "null"
generateVoiceButton.dataset.modelIDLoaded = undefined
generateVoiceButton.innerHTML = window.i18n.LOAD_MODEL
generateVoiceButton.disabled = true
window.serverIsUp = false
window.doWeirdServerStartupCheck(`${window.i18n.LOADING}...<br>${window.i18n.MAY_TAKE_A_MINUTE}<br><br>${window.i18n.STARTING_PYTHON}...`)
})
})
// =========================
// Audio hardware
// ==============
navigator.mediaDevices.enumerateDevices().then(devices => {
devices = devices.filter(device => device.kind=="audiooutput" && device.deviceId!="communications")
// Base device
devices.forEach(device => {
const option = createElem("option", device.label)
option.value = device.deviceId
setting_base_speaker.appendChild(option)
})
setting_base_speaker.addEventListener("change", () => {
window.userSettings.base_speaker = setting_base_speaker.value
window.saveUserSettings()
window.document.querySelectorAll("audio").forEach(audioElem => {
audioElem.setSinkId(window.userSettings.base_speaker)
})
})
if (Object.keys(window.userSettings).includes("base_speaker")) {
setting_base_speaker.value = window.userSettings.base_speaker
} else {
window.userSettings.base_speaker = setting_base_speaker.value
window.saveUserSettings()
}
// Alternate device
devices.forEach(device => {
const option = createElem("option", device.label)
option.value = device.deviceId
setting_alt_speaker.appendChild(option)
})
setting_alt_speaker.addEventListener("change", () => {
window.userSettings.alt_speaker = setting_alt_speaker.value
window.saveUserSettings()
})
if (Object.keys(window.userSettings).includes("alt_speaker")) {
setting_alt_speaker.value = window.userSettings.alt_speaker
} else {
window.userSettings.alt_speaker = setting_alt_speaker.value
window.saveUserSettings()
}
})
// Settings Menu
// =============
useGPUCbx.addEventListener("change", () => {
spinnerModal(window.i18n.CHANGING_DEVICE)
doFetch(`http://localhost:8008/setDevice`, {
method: "Post",
body: JSON.stringify({device: useGPUCbx.checked ? "gpu" : "cpu"})
}).then(r=>r.text()).then(res => {
window.closeModal(undefined, settingsContainer)
window.userSettings.useGPU = useGPUCbx.checked
saveUserSettings()
}).catch(e => {
console.log(e)
if (e.code =="ENOENT") {
window.closeModal(undefined, settingsContainer).then(() => {
window.errorModal(window.i18n.THERE_WAS_A_PROBLEM)
})
}
})
})
const initMenuSetting = (elem, setting, type, callback=undefined, valFn=undefined) => {
valFn = valFn ? valFn : x=>x
if (type=="checkbox") {
elem.addEventListener("click", () => {
if (setting.includes(".")) {
window.userSettings[setting.split(".")[0]][setting.split(".")[1]] = valFn(elem.checked)
} else {
window.userSettings[setting] = valFn(elem.checked)
}
saveUserSettings()
if (callback) callback()
})
} else {
elem.addEventListener("change", () => {
if (setting.includes(".")) {
window.userSettings[setting.split(".")[0]][setting.split(".")[1]] = valFn(elem.value)
} else {
window.userSettings[setting] = valFn(elem.value)
}
saveUserSettings()
if (callback) callback()
})
}
}
window.initFilePickerButton = (button, input, setting, properties, filters=undefined, defaultPath=undefined, callback=undefined) => {
button.addEventListener("click", () => {
const defaultPath = input.value.replace(/\//g, "\\")
er.dialog.showOpenDialog({ properties, filters, defaultPath}).then(filePath => {
if (filePath) {
filePath = filePath.filePaths[0].replace(/\\/g, "/")
input.value = filePath.replace(/\\/g, "/")
setting = typeof(setting)=="function" ? setting() : setting
window.userSettings[setting] = filePath
saveUserSettings()
if (callback) {
callback()
}
}
})
})
}
const setPromptTheme = () => {
// if (window.userSettings.darkPrompt) {
// dialogueInput.style.backgroundColor = "rgba(25,25,25,0.9)"
// dialogueInput.style.color = "white"
// } else {
// dialogueInput.style.backgroundColor = "rgba(255,255,255,0.9)"
// dialogueInput.style.color = "black"
// }
}
const updateDiscord = () => {
let gameName = undefined
if (window.userSettings.showDiscordStatus && window.currentGame) {
gameName = window.currentGame.gameName
}
ipcRenderer.send('updateDiscord', {details: gameName})
}
const setPromptFontSize = () => {
dialogueInput.style.fontSize = `${window.userSettings.prompt_fontSize}pt`
}
const updateBackground = () => {
const background = `linear-gradient(0deg, rgba(128,128,128,${window.userSettings.bg_gradient_opacity}) 0px, rgba(0,0,0,0)), url("assets/${window.currentGame.assetFile}")`
// Fade the background image transition
rightBG1.style.background = background
rightBG2.style.opacity = 0
setTimeout(() => {
rightBG2.style.background = rightBG1.style.background
rightBG2.style.opacity = 1
}, 1000)
}
initMenuSetting(setting_autoplaygenCbx, "autoPlayGen", "checkbox")
// initMenuSetting(setting_slidersTooltip, "sliderTooltip", "checkbox")
initMenuSetting(setting_defaultToHiFi, "defaultToHiFi", "checkbox")
initMenuSetting(setting_keepPaceOnNew, "keepPaceOnNew", "checkbox")
initMenuSetting(setting_areload_voices, "autoReloadVoices", "checkbox")
initMenuSetting(setting_output_json, "outputJSON", "checkbox")
initMenuSetting(setting_keepEditorOnVoiceChange, "keepEditorOnVoiceChange", "checkbox")
initMenuSetting(setting_output_num_seq, "filenameNumericalSeq", "checkbox")
initMenuSetting(setting_space_padding, "spacePadding", "checkbox")
// initMenuSetting(setting_darkprompt, "darkPrompt", "checkbox", setPromptTheme)
initMenuSetting(setting_show_discord_status, "showDiscordStatus", "checkbox", updateDiscord)
initMenuSetting(setting_prompt_fontSize, "prompt_fontSize", "number", setPromptFontSize)
initMenuSetting(setting_bg_gradient_opacity, "bg_gradient_opacity", "number", updateBackground)
initMenuSetting(setting_use_error_sound, "useErrorSound", "checkbox")
initMenuSetting(setting_error_sound_file, "errorSoundFile", "text")
initFilePickerButton(setting_errorSoundFileBtn, setting_error_sound_file, "errorSoundFile", ["openFile"], [{name: "Audio", extensions: ["wav", "mp3", "ogg"]}])
initMenuSetting(setting_showTipOfTheDay, "showTipOfTheDay", "checkbox", () => {
totdShowTips.checked = setting_showTipOfTheDay.checked
})
initMenuSetting(totdShowTips, "showTipOfTheDay", "checkbox", () => {
setting_showTipOfTheDay.checked = totdShowTips.checked
})
initMenuSetting(setting_showUnseenTipOfTheDay, "showUnseenTipOfTheDay", "checkbox", () => {
totdShowOnlyUnseenTips.checked = setting_showUnseenTipOfTheDay.checked
})
initMenuSetting(totdShowOnlyUnseenTips, "showUnseenTipOfTheDay", "checkbox", () => {
setting_showUnseenTipOfTheDay.checked = totdShowOnlyUnseenTips.checked
})
initMenuSetting(setting_playChangedAudio, "playChangedAudio", "checkbox")
initMenuSetting(setting_external_audio_editor, "externalAudioEditor", "text")
initFilePickerButton(setting_externalEditorButton, setting_external_audio_editor, "externalAudioEditor", ["openFile"])
initMenuSetting(setting_audio_ffmpeg, "audio.ffmpeg", "checkbox", () => {
// setting_audio_ffmpeg_preview.checked = window.userSettings.audio.ffmpeg && window.userSettings.audio.ffmpeg_preview
// setting_audio_ffmpeg_preview.disabled = !window.userSettings.audio.ffmpeg
setting_audio_useNR.checked = window.userSettings.audio.ffmpeg && window.userSettings.audio.useNR
setting_audio_useNR.disabled = !window.userSettings.audio.ffmpeg
setting_audio_format.disabled = !window.userSettings.audio.ffmpeg
setting_audio_hz.disabled = !window.userSettings.audio.ffmpeg
setting_audio_pad_start.disabled = !window.userSettings.audio.ffmpeg
setting_audio_pad_end.disabled = !window.userSettings.audio.ffmpeg
setting_audio_pitchMult.disabled = !window.userSettings.audio.ffmpeg
setting_audio_tempo.disabled = !window.userSettings.audio.ffmpeg
setting_audio_deessing.disabled = !window.userSettings.audio.ffmpeg
setting_audio_nr.disabled = !window.userSettings.audio.ffmpeg
setting_audio_nf.disabled = !window.userSettings.audio.ffmpeg
setting_audio_bitdepth.disabled = !window.userSettings.audio.ffmpeg
setting_audio_amplitude.disabled = !window.userSettings.audio.ffmpeg
setting_editor_audio_amplitude.disabled = !window.userSettings.audio.ffmpeg
})
// initMenuSetting(setting_audio_ffmpeg_preview, "audio.ffmpeg_preview", "checkbox")
initMenuSetting(setting_audio_useNR, "audio.useNR", "checkbox")
initMenuSetting(setting_audio_format, "audio.format", "text")
initMenuSetting(setting_audio_hz, "audio.hz", "text", undefined, parseInt)
initMenuSetting(setting_audio_pad_start, "audio.padStart", "text", undefined, parseInt)
initMenuSetting(setting_audio_pad_end, "audio.padEnd", "text", undefined, parseInt)
initMenuSetting(setting_audio_pitchMult, "audio.pitchMult", "number", undefined, parseFloat)
initMenuSetting(setting_audio_tempo, "audio.tempo", "number", undefined, parseFloat)
initMenuSetting(setting_audio_deessing, "audio.deessing", "number", undefined, parseFloat)
initMenuSetting(setting_audio_nr, "audio.nr", "number", undefined, parseFloat)
initMenuSetting(setting_audio_nf, "audio.nf", "number", undefined, parseFloat)
initMenuSetting(setting_audio_bitdepth, "audio.bitdepth", "select")
initMenuSetting(setting_audio_amplitude, "audio.amplitude", "number", () => {
setting_editor_audio_amplitude.value = setting_audio_amplitude.value
}, parseFloat)
initMenuSetting(setting_editor_audio_amplitude, "audio.amplitude", "number", () => {
setting_audio_amplitude.value = setting_editor_audio_amplitude.value
}, parseFloat)
initMenuSetting(setting_show_editor_ffmpegamplitude, "showEditorFFMPEGAmplitude", "checkbox", () => {
editor_amplitude_options.style.display = window.userSettings.showEditorFFMPEGAmplitude ? "flex" : "none"
})
initMenuSetting(setting_batch_json, "batch_json", "checkbox")
// initMenuSetting(setting_batch_fastmode, "batch_fastMode", "checkbox") // No more fast modde. TODO, remove completely
// initMenuSetting(setting_batch_maxFastModeParallelizations, "batch_fastModeMaxParallelizations", "number") // No more fast modde. TODO, remove completely
initMenuSetting(setting_batch_multip, "batch_useMP", "checkbox")
initMenuSetting(setting_batch_multip_count, "batch_MPCount", "number", undefined, parseInt)
initMenuSetting(setting_batch_doGrouping, "batch_doGrouping", "checkbox")
initMenuSetting(setting_batch_doVocoderGrouping, "batch_doVocoderGrouping", "checkbox")
initMenuSetting(batch_clearDirFirstCkbx, "batch_clearDirFirst", "checkbox")
initMenuSetting(batch_skipExisting, "batch_skipExisting", "checkbox")
initMenuSetting(batch_batchSizeInput, "batch_batchSize", "text", undefined, parseInt)
initMenuSetting(setting_batch_delimiter, "batch_delimiter")
initMenuSetting(setting_batch_paginationSize, "batch_paginationSize", "number", undefined, parseInt)
// initMenuSetting(setting_s2s_autogenerate, "s2s_autogenerate", "checkbox")
// initMenuSetting(setting_s2s_prePitchShift, "s2s_prePitchShift", "checkbox")
// initMenuSetting(setting_s2s_removeNoise, "s2s_removeNoise", "checkbox")
// initMenuSetting(setting_s2s_noiseRemStrength, "s2s_noiseRemStrength", "number", undefined, parseFloat)
initMenuSetting(setting_s2s_vcstrength, "vc_strength", "number", undefined, parseFloat)
initMenuSetting(setting_256waveglow_path, "waveglow_path", "text")
initFilePickerButton(setting_waveglowPathButton, setting_256waveglow_path, "waveglow_path", ["openFile"], [{name: "Pytorch checkpoint", extensions: ["pt"]}])
initMenuSetting(setting_bigwaveglow_path, "bigwaveglow_path", "text")
initFilePickerButton(setting_bigwaveglowPathButton, setting_bigwaveglow_path, "bigwaveglow_path", ["openFile"], [{name: "Pytorch checkpoint", extensions: ["pt"]}])
initFilePickerButton(setting_modelsPathButton, setting_models_path_input, ()=>`modelspath_${window.currentGame.gameId}`, ["openDirectory"], undefined, undefined, ()=>window.updateGameList())
initFilePickerButton(setting_outPathButton, setting_out_path_input, ()=>`outpath_${window.currentGame.gameId}`, ["openDirectory"], undefined, undefined, ()=>{
if (window.currentModelButton) {
window.currentModelButton.click()
}
})
initMenuSetting(setting_arpabet_paginationSize, "arpabet_paginationSize", "number", undefined, parseInt)
initMenuSetting(setting_output_files_pagination_size, "output_files_pagination_size", "number", () => {
window.resetPagination()
window.refreshRecordsList()
}, parseInt)
initMenuSetting(setting_max_filename_chars, "max_filename_chars", "number", undefined, parseInt)
initMenuSetting(setting_clear_text_after_synth, "clear_text_after_synth", "checkbox")
initMenuSetting(setting_do_model_version_highlight, "do_model_version_highlight", "checkbox", ()=>window.changeGame(window.currentGame))
initMenuSetting(setting_model_version_highlight, "model_version_highlight", "number", ()=>window.changeGame(window.currentGame), parseFloat)
const updateSequenceEditorRange = () => {
if (window.sequenceEditor.isCreated && window.currentModel) {
const pitchRange = window.userSettings.pitchrangeoverride ? window.userSettings.pitchrangeoverride : window.sequenceEditor.pitchSliderRange
// Make sure to cap the existing values if upding the range to be smaller than the current values
if (window.userSettings.pitchrangeoverride) {
window.sequenceEditor.pitchNew.forEach((val,vi) => {
if (Math.abs(val)>window.userSettings.pitchrangeoverride) {
val = Math.max(-window.userSettings.pitchrangeoverride, Math.min(window.userSettings.pitchrangeoverride, val))
window.sequenceEditor.pitchNew[vi] = val
}
})
}
window.sequenceEditor.update(window.currentModel.modelType, pitchRange)
}
}
initMenuSetting(setting_pitchrangeoverrideEnabledCkbx, "do_pitchrangeoverride", "checkbox", updateSequenceEditorRange)
initMenuSetting(setting_pitchrangeoverride, "pitchrangeoverride", "number", updateSequenceEditorRange, parseFloat)
setPromptTheme()
setPromptFontSize()
setting_audio_format.disabled = !window.userSettings.audio.ffmpeg
setting_audio_hz.disabled = !window.userSettings.audio.ffmpeg
setting_audio_pad_start.disabled = !window.userSettings.audio.ffmpeg
setting_audio_pad_end.disabled = !window.userSettings.audio.ffmpeg
setting_audio_pitchMult.disabled = !window.userSettings.audio.ffmpeg
setting_audio_tempo.disabled = !window.userSettings.audio.ffmpeg
setting_audio_deessing.disabled = !window.userSettings.audio.ffmpeg
setting_audio_nr.disabled = !window.userSettings.audio.ffmpeg
setting_audio_nf.disabled = !window.userSettings.audio.ffmpeg
setting_audio_bitdepth.disabled = !window.userSettings.audio.ffmpeg
setting_audio_amplitude.disabled = !window.userSettings.audio.ffmpeg
setting_editor_audio_amplitude.disabled = !window.userSettings.audio.ffmpeg
openDiscord.addEventListener("click", () => {
shell.openExternal("https://discord.gg/nv7c6E2TzV")
})
setting_models_path_input.addEventListener("change", () => {
const gameFolder = window.currentGame.gameId
setting_models_path_input.value = setting_models_path_input.value.replace(/\/\//g, "/").replace(/\\/g,"/")
window.userSettings[`modelspath_${gameFolder}`] = setting_models_path_input.value
window.saveUserSettings()
window.loadAllModels().then(() => {
window.changeGame(window.currentGame)
})
if (!window.watchedModelsDirs.includes(setting_models_path_input.value)) {
window.watchedModelsDirs.push(setting_models_path_input.value)
fs.watch(setting_models_path_input.value, {recursive: false, persistent: true}, (eventType, filename) => {
window.changeGame(window.currentGame)
})
}
window.updateGameList()
// Gather the model paths to send to the server
const modelsPaths = {}
Object.keys(window.userSettings).filter(key => key.includes("modelspath_")).forEach(key => {
modelsPaths[key.split("_")[1]] = window.userSettings[key]
})
doFetch(`http://localhost:8008/setAvailableVoices`, {
method: "Post",
body: JSON.stringify({
modelsPaths: JSON.stringify(modelsPaths)
})
})
})
// Output path
fs.readdir(`${window.path}/models`, (err, gameDirs) => {
gameDirs.filter(name => !name.includes(".")).forEach(gameFolder => {
// Initialize the default output directory setting for this game
if (!Object.keys(window.userSettings).includes(`outpath_${gameFolder}`)) {
window.userSettings[`outpath_${gameFolder}`] = `${__dirname.replace(/\\/g,"/")}/output/${gameFolder}`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
window.saveUserSettings()
}
})
})
setting_out_path_input.addEventListener("change", () => {
const gameFolder = window.currentGame.gameId
setting_out_path_input.value = setting_out_path_input.value.replace(/\/\//g, "/").replace(/\\/g,"/")
window.userSettings[`outpath_${gameFolder}`] = setting_out_path_input.value
saveUserSettings()
if (window.currentModelButton) {
window.currentModelButton.click()
}
})
// Models path
const assetFiles = fs.readdirSync(`${window.path}/assets`)
assetFiles.filter(fn=>fn.endsWith(".json")).forEach(assetFileName => {
const gameId = assetFileName.split(".json")[0]
// Initialize the default models directory setting for this game
if (!Object.keys(window.userSettings).includes(`modelspath_${gameId}`)) {
window.userSettings[`modelspath_${gameId}`] = `${__dirname.replace(/\\/g,"/")}/models/${gameId}`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
window.userSettings[`outpath_${gameId}`] = `${__dirname.replace(/\\/g,"/")}/output/${gameId}`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
saveUserSettings()
}
})
// Batch stuff
// Output folder
batch_outputFolderInput.addEventListener("change", () => {
if (batch_outputFolderInput.value.length==0) {
window.errorModal(window.i18n.ENTER_DIR_PATH)
batch_outputFolderInput.value = window.userSettings.batchOutFolder
} else {
window.userSettings.batchOutFolder = batch_outputFolderInput.value
saveUserSettings()
}
})
batch_outputFolderInput.value = window.userSettings.batchOutFolder
// ======
reset_settings_btn.addEventListener("click", () => {
window.confirmModal(window.i18n.SURE_RESET_SETTINGS).then(confirmation => {
if (confirmation) {
window.userSettings.audio.format = "wav"
window.userSettings.audio.hz = 44100
window.userSettings.audio.padStart = 0
window.userSettings.audio.padEnd = 0
window.userSettings.audio.pitchMult = 1
window.userSettings.audio.tempo = 1
window.userSettings.audio.deessing = 0.1
window.userSettings.audio.nr = 5
window.userSettings.audio.nf = -20
window.userSettings.audio.ffmpeg = true
// window.userSettings.audio.ffmpeg_preview = true
window.userSettings.audio.useNR = true
window.userSettings.audio.amplitude = 1
window.userSettings.autoPlayGen = true
window.userSettings.autoReloadVoices = false
window.userSettings.autoplay = true
// window.userSettings.darkPrompt = false
window.userSettings.showDiscordStatus = true
window.userSettings.prompt_fontSize = 15
window.userSettings.bg_gradient_opacity = 13
window.userSettings.outputJSON = true
window.userSettings.keepEditorOnVoiceChange = false
window.userSettings.filenameNumericalSeq = false
window.userSettings.spacePadding = true
window.userSettings.useErrorSound = false
window.userSettings.showTipOfTheDay = true
window.userSettings.showUnseenTipOfTheDay = false
window.userSettings.playChangedAudio = false
window.userSettings.plugins = {}
window.userSettings.plugins.loadOrder = ""
window.userSettings.externalAudioEditor = ""
window.userSettings.s2s_autogenerate = true // TODO, remove
window.userSettings.s2s_prePitchShift = false // TODO, remove
window.userSettings.s2s_removeNoise = false // TODO, remove
window.userSettings.s2s_noiseRemStrength = 0.25 // TODO, remove
window.userSettings.vc_strength = 2
window.userSettings.defaultToHiFi = true
window.userSettings.keepPaceOnNew = true
window.userSettings.sliderTooltip = true
window.userSettings.audio.bitdepth = "pcm_s32le"
window.userSettings.showEditorFFMPEGAmplitude = false
window.userSettings.vocoder = "256_waveglow"
window.userSettings.max_filename_chars = 70
window.userSettings.clear_text_after_synth = false
window.userSettings.do_model_version_highlight = false
window.userSettings.model_version_highlight = 3.0
window.userSettings.do_pitchrangeoverride = false
window.userSettings.pitchrangeoverride = 6.0
window.userSettings.keepPaceOnNew = true
window.userSettings.arpabet_paginationSize = 200
window.userSettings.output_files_pagination_size = 25
window.userSettings.batch_clearDirFirst = false
window.userSettings.batch_fastMode = false
window.userSettings.batch_batchSize = 1
window.userSettings.batch_skipExisting = true
window.userSettings.batch_fastModeMaxParallelizations = 1000
window.userSettings.batch_json = false
window.userSettings.batch_useMP = false
window.userSettings.batch_MPCount = 0
window.userSettings.batch_doGrouping = true
window.userSettings.batch_doVocoderGrouping = false
window.userSettings.batch_delimiter = ","
window.userSettings.batch_paginationSize = 100
updateUIWithSettings()
saveUserSettings()
}
})
})
reset_paths_btn.addEventListener("click", () => {
window.confirmModal(window.i18n.SURE_RESET_PATHS).then(confirmation => {
if (confirmation) {
const pathKeys = Object.keys(window.userSettings).filter(key => key.includes("modelspath_"))
pathKeys.forEach(key => {
delete window.userSettings[key]
})
const currGame = window.currentGame ? window.currentGame.gameId : undefined
// Models and output paths
const assetFiles = fs.readdirSync(`${path}/assets`)
assetFiles.filter(fn=>fn.endsWith(".json")).forEach(jsonFileName => {
const gameId = jsonFileName.split(".")[0]
window.userSettings[`modelspath_${gameId}`] = `${__dirname.replace(/\\/g,"/")}/models/${gameId}`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
window.userSettings[`outpath_${gameId}`] = `${__dirname.replace(/\\/g,"/")}/output/${gameId}`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
if (gameId==currGame) {
setting_models_path_input.value = window.userSettings[`modelspath_${gameId}`]
setting_out_path_input.value = window.userSettings[`outpath_${gameId}`]
}
})
if (window.currentModelButton) {
window.currentModelButton.click()
}
window.userSettings.errorSoundFile = `${__dirname.replace(/\\/g,"/")}/lib/xp_error.mp3`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
window.userSettings.batchOutFolder = `${__dirname.replace(/\\/g,"/")}/batch`.replace(/\/\//g, "/").replace("resources/app/resources/app", "resources/app").replace("/javascript", "")
batch_outputFolderInput.value = window.userSettings.batchOutFolder
window.loadAllModels().then(() => {
if (currGame) {
window.changeGame(window.currentGame)
}
})
saveUserSettings()
// Gather the model paths to send to the server
const modelsPaths = {}
Object.keys(window.userSettings).filter(key => key.includes("modelspath_")).forEach(key => {
modelsPaths[key.split("_")[1]] = window.userSettings[key]
})
doFetch(`http://localhost:8008/setAvailableVoices`, {
method: "Post",
body: JSON.stringify({
modelsPaths: JSON.stringify(modelsPaths)
})
})
}
})
})
// Search settings
const settingItems = Array.from(settingsOptionsContainer.children)
searchSettingsInput.addEventListener("keyup", () => {
const query = searchSettingsInput.value.trim().toLowerCase()
const filteredItems = settingItems.map(el => {
if (el.tagName=="HR") {return [el, true]}
if (el.tagName=="DIV") {
if (!query.length || el.children[0].innerHTML.toLowerCase().includes(query)) {
return [el, true]
}
}
return [el, false]
})
let lastIsHR = false
filteredItems.forEach(elem => {
const [el, showIt] = elem
if (el.tagName=="HR") {
if (lastIsHR) {
el.style.display = "none"
return
}
lastIsHR = true
el.style.display = "flex"
} else {
if (showIt) {
el.style.display = "flex"
lastIsHR = false
} else {
el.style.display = "none"
}
}
})
})
const currentWindow = er.getCurrentWindow()
currentWindow.on("move", () => {
const bounds = er.getCurrentWindow().webContents.getOwnerBrowserWindow().getBounds()
window.userSettings.customWindowPosition = `${bounds.x},${bounds.y}`
saveUserSettings()
})
if (window.userSettings.customWindowPosition) {
ipcRenderer.send('updatePosition', {details: window.userSettings.customWindowPosition.split(",")})
}
window.saveUserSettings = saveUserSettings
exports.saveUserSettings = saveUserSettings
exports.deleteFolderRecursive = deleteFolderRecursive