diff --git a/extensions.json b/extensions.json index 4f8448f6..d435e593 100644 --- a/extensions.json +++ b/extensions.json @@ -149,6 +149,21 @@ "website": "https://github.com/rsxdalv/extension_huggingface_cache_manager", "extension_website": "https://github.com/rsxdalv/extension_huggingface_cache_manager", "extension_platform_version": "0.0.1" + }, + { + "package_name": "extension_xtts_simple", + "name": "XTTS-Simple", + "version": "0.0.1", + "requirements": "git+https://github.com/rsxdalv/extension_xtts_rvc_ui@simple", + "description": "XTTS-Simple is a Gradio UI for XTTSv2", + "extension_type": "interface", + "extension_class": "text-to-speech", + "author": "rsxdalv", + "extension_author": "rsxdalv", + "license": "MIT", + "website": "https://github.com/rsxdalv/extension_xtts_rvc_ui", + "extension_website": "https://github.com/rsxdalv/extension_xtts_rvc_ui", + "extension_platform_version": "0.0.1" } ], "post_generation_extensions": [ diff --git a/extensions/builtin/extension_gallery_history/main.py b/extensions/builtin/extension_gallery_history/main.py index 51e9dadc..4f3a8042 100644 --- a/extensions/builtin/extension_gallery_history/main.py +++ b/extensions/builtin/extension_gallery_history/main.py @@ -45,16 +45,16 @@ def get_wav_files_img(directory: str): def clear_audio(): return [ - gr.Audio.update(value=None), - gr.Image.update(value=None), - gr.JSON.update(value=None), - gr.Button.update(visible=False), + gr.Audio(value=None), + gr.Image(value=None), + gr.JSON(value=None), + gr.Button(visible=False), ] def save_to_voices_cb(npz_filename: str): shutil.copy(npz_filename, "voices/") - return gr.Button.update(value="Saved") + return gr.Button(value="Saved") def history_content(directory, show_collections): @@ -66,7 +66,7 @@ def history_content(directory, show_collections): visible=show_collections, ) collections_directories_atom.change( - fn=lambda x: gr.Dropdown.update(choices=x), + fn=lambda x: gr.Dropdown(choices=x), inputs=[collections_directories_atom], outputs=[directory_dropdown], ) @@ -141,18 +141,18 @@ def history_content(directory, show_collections): def _select_audio_history(filename: str, json_text): return { - history_bundle_name: gr.Textbox.update(value=os.path.dirname(filename)), + history_bundle_name: gr.Textbox(value=os.path.dirname(filename)), history_bundle_name_data: os.path.dirname(filename), - history_audio: gr.Audio.update(value=filename, label=filename), - history_image: gr.Image.update(value=filename.replace(".wav", ".png")), - history_json: gr.JSON.update(value=json_text), - history_npz: gr.Textbox.update(value=filename.replace(".wav", ".npz")), - delete_from_history: gr.Button.update(visible=True), - save_to_favorites_history: gr.Button.update( + history_audio: gr.Audio(value=filename, label=filename), + history_image: gr.Image(value=filename.replace(".wav", ".png")), + history_json: gr.JSON(value=json_text), + history_npz: gr.Textbox(value=filename.replace(".wav", ".npz")), + delete_from_history: gr.Button(visible=True), + save_to_favorites_history: gr.Button( visible=directory != "favorites", value="Save to favorites" ), - save_to_voices: gr.Button.update(visible=True, value="Save to voices"), - open_folder_button: gr.Button.update(visible=True), + save_to_voices: gr.Button(visible=True, value="Save to voices"), + open_folder_button: gr.Button(visible=True), } def select_audio_history2(_list, evt: gr.SelectData): @@ -183,7 +183,7 @@ def select_audio_history2(_list, evt: gr.SelectData): def update_history_tab(directory: str): global audio_list_img audio_list_img = get_wav_files_img(directory) - return gr.Gallery.update(value=audio_list_img) + return gr.Gallery(value=audio_list_img) delete_from_history.click( fn=clear_audio, @@ -228,7 +228,7 @@ def save_to_collection_ui( ) directories_state.change( - fn=lambda x: gr.Dropdown.update(choices=x), + fn=lambda x: gr.Dropdown(choices=x), inputs=[directories_state], outputs=[move_to_collection], ) @@ -241,13 +241,13 @@ def create_collection(new_collection_name): os.makedirs(os.path.join("collections", new_collection_name)) return [ get_collections(), - gr.Button.update(value="Created"), + gr.Button(value="Created"), ] create_collection_button = gr.Button(value="Create collection") new_collection_name.change( - fn=lambda: gr.Button.update(value="Create collection"), + fn=lambda: gr.Button(value="Create collection"), outputs=[create_collection_button], ) create_collection_button.click( diff --git a/extensions/builtin/extension_huggingface_cache_manager/main.py b/extensions/builtin/extension_huggingface_cache_manager/main.py index 041c0d4f..35e005f3 100644 --- a/extensions/builtin/extension_huggingface_cache_manager/main.py +++ b/extensions/builtin/extension_huggingface_cache_manager/main.py @@ -78,11 +78,8 @@ def scan_cache_ui(): api_name="scan_huggingface_cache", ) - # scan_cache_json_api = gr.JSON(visible=False) - # scan_cache_button_api = gr.Button("API_SCAN_CACHE", visible=False) - # visible - scan_cache_json_api = gr.JSON(visible=True) - scan_cache_button_api = gr.Button("API_SCAN_CACHE_JSON", visible=True) + scan_cache_json_api = gr.JSON(visible=False) + scan_cache_button_api = gr.Button("API_SCAN_CACHE", visible=False) scan_cache_button_api.click( fn=scan_cache_json, outputs=[scan_cache_json_api], @@ -91,10 +88,9 @@ def scan_cache_ui(): gr.Markdown("Delete revisions") - # delete_revision_id = gr.Textbox(label="Revision ID", value="") delete_revision_id = gr.Dropdown( label="Revision ID", - choices=[], + choices=[""], value="", show_label=True, interactive=True, @@ -110,7 +106,7 @@ def refresh_revision_id_button_fn(): for repo in hf_cache_info.repos for revision in repo.revisions ] - return gr.Dropdown.update(choices=revision_ids) + return gr.Dropdown(choices=revision_ids) refresh_revision_id_button.click( diff --git a/extensions/builtin/extension_simple_remixer/main.py b/extensions/builtin/extension_simple_remixer/main.py index 8b610ede..773d0975 100644 --- a/extensions/builtin/extension_simple_remixer/main.py +++ b/extensions/builtin/extension_simple_remixer/main.py @@ -40,42 +40,16 @@ def create_slot(id=0): elem_classes="tts-slot", ): audio = gr.Audio(label=f"Slot {str(id)}", elem_classes="tts-audio") - image = gr.Image( - show_label=False, - elem_classes="tts-image-tiny", - interactive=False, - ) - audio.change( - fn=lambda x: ( - image.update( - plot_waveform_as_image(x[1]), - ) - if x is not None - else None - ), - inputs=[audio], - outputs=[image], - ) with gr.Row(): clear = gr_mini_button("delete").click( - fn=lambda: [ - audio.update(None), - image.update(None), - ], - outputs=[audio, image], + fn=lambda: [gr.Audio(None)], + outputs=[audio], ) copy_from_input = gr_mini_button("keyboard_return").click( - fn=lambda input_value: [ - audio.update(input_value), - image.update(plot_waveform_as_image(input_value[1])), - ], + fn=lambda input_value: [gr.Audio(input_value)], inputs=[input_audio], - # outputs=[audio], - outputs=[ - audio, - image, - ], + outputs=[audio], ) return audio @@ -131,11 +105,11 @@ def mix_audio(x): merged_audios = [mix_audio(x) for x in stacked_audios] if non_null_audios := [x for x in merged_audios if x is not None]: - return output_audio.update( + return gr.Audio( (sample_rate, torch.cat(non_null_audios).cpu().numpy()) ) else: - return output_audio.update(None) + return gr.Audio(None) def resample_from_to(in_sr: int, out_sr: int, in_wav): return torchaudio.transforms.Resample(in_sr, out_sr)( @@ -151,7 +125,7 @@ def resample_from_to(in_sr: int, out_sr: int, in_wav): send_to_input = gr.Button("Send to input") send_to_input.click( - fn=lambda x: input_audio.update(x), + fn=lambda x: gr.Audio(x), inputs=output_audio, outputs=input_audio, ) diff --git a/extensions/builtin/extension_whisper/main.py b/extensions/builtin/extension_whisper/main.py index 4db452e5..567ab8e5 100644 --- a/extensions/builtin/extension_whisper/main.py +++ b/extensions/builtin/extension_whisper/main.py @@ -90,7 +90,7 @@ def transcribe_ui(): audio = gr.Audio( label="Audio", type="filepath", - source="upload", + sources="upload", elem_classes="tts-audio", ) model_dropdown = gr.Dropdown( @@ -117,7 +117,7 @@ def transcribe_ui(): outputs=[text], api_name="whisper_transcribe", ).then( - fn=lambda: gr.Button.update(value="Unload models"), + fn=lambda: gr.Button(value="Unload models"), outputs=[unload_models_button], ) diff --git a/installer_scripts/versions.json b/installer_scripts/versions.json index 21611f70..d96a5830 100644 --- a/installer_scripts/versions.json +++ b/installer_scripts/versions.json @@ -1,6 +1,6 @@ { "version": "0.0.2", - "pip_packages": 2, - "npm_packages": 1, - "react_ui": 1 + "pip_packages": 3, + "npm_packages": 2, + "react_ui": 2 } \ No newline at end of file diff --git a/react-ui/package-lock.json b/react-ui/package-lock.json index 09238822..59abe129 100644 --- a/react-ui/package-lock.json +++ b/react-ui/package-lock.json @@ -11,7 +11,7 @@ "@emotion/css": "^11.10.8", "@emotion/react": "^11.10.8", "@emotion/styled": "^11.10.8", - "@gradio/client": "^0.6.0", + "@gradio/client": "^1.4.0", "@material-design-icons/svg": "^0.14.7", "@types/node": "20.0.0", "@types/react": "18.2.5", @@ -187,6 +187,31 @@ "node": ">=6.9.0" } }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", + "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "dependencies": { + "cookie": "^0.5.0" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.10.8", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz", @@ -385,12 +410,18 @@ } }, "node_modules/@gradio/client": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@gradio/client/-/client-0.6.0.tgz", - "integrity": "sha512-32hebS7FlHfqkt1z8hp8ixLThkdAkMQSFeL5bBBQvgM+1kiM6u/J2jV/rjGJFi3szmkyG8/NiE+yBdHkRhoM8A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gradio/client/-/client-1.4.0.tgz", + "integrity": "sha512-4QrJrUz0j75/2SpiHfhQmKmEuFcTbbuA8hpPFb+G0fvT1kd9fRPf1LhrwvsxFQaP3byZs+IeiV0dzCLveHgtfA==", "dependencies": { + "@types/eventsource": "^1.1.15", "bufferutil": "^4.0.7", + "eventsource": "^2.0.2", + "fetch-event-stream": "^0.1.5", + "msw": "^2.2.1", "semiver": "^1.1.0", + "textlinestream": "^1.1.1", + "typescript": "^5.0.0", "ws": "^8.13.0" }, "engines": { @@ -427,6 +458,79 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "node_modules/@inquirer/confirm": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", + "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "dependencies": { + "@inquirer/core": "^9.0.10", + "@inquirer/type": "^1.5.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz", + "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==", + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.2", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.1.0", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "dependencies": { + "undici-types": "~6.13.0" + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", + "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", + "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -480,6 +584,22 @@ "resolved": "https://registry.npmjs.org/@material-design-icons/svg/-/svg-0.14.7.tgz", "integrity": "sha512-r3mDjzAJ1EsErok8c2wMPmeGnjX2iF+RgvvbP/5OdZrygszE77syTy9XdcRtfU2f0b0iQ24lXE76F8xmkq0y6w==" }, + "node_modules/@mswjs/interceptors": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", + "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@next/env": { "version": "13.4.1", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.1.tgz", @@ -660,6 +780,25 @@ "node": ">= 8" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==" + }, "node_modules/@pkgr/utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.0.tgz", @@ -725,6 +864,16 @@ "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, + "node_modules/@types/eventsource": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.15.tgz", + "integrity": "sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA==" + }, "node_modules/@types/express": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", @@ -766,6 +915,14 @@ "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", "dev": true }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "20.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.0.0.tgz", @@ -837,6 +994,21 @@ "@types/node": "*" } }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" + }, "node_modules/@typescript-eslint/parser": { "version": "5.59.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz", @@ -987,6 +1159,31 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1470,11 +1667,59 @@ "node": ">= 6" } }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "engines": { + "node": ">= 12" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2360,6 +2605,14 @@ "node": ">= 0.6" } }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/execa": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", @@ -2485,6 +2738,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-event-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/fetch-event-stream/-/fetch-event-stream-0.1.5.tgz", + "integrity": "sha512-V1PWovkspxQfssq/NnxoEyQo1DV+MRK/laPuPblIZmSjMN8P5u46OhlFQznSr9p/t0Sp8Uc6SbM3yCMfr0KU8g==" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2674,6 +2932,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", @@ -2819,6 +3085,14 @@ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, + "node_modules/graphql": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2893,6 +3167,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==" + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -3157,6 +3436,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3204,6 +3491,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3652,6 +3944,64 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/msw": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.5.tgz", + "integrity": "sha512-+GUI4gX5YC5Bv33epBrD+BGdmDvBg2XGruiWnI3GbIbRmMMBeZ5gs3mJ51OWSGHgJKztZ8AtZeYMMNMVrje2/Q==", + "hasInstallScript": true, + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^3.0.0", + "@mswjs/interceptors": "^0.29.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.2", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.7.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", + "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/music-metadata": { "version": "8.1.4", "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-8.1.4.tgz", @@ -3673,6 +4023,14 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -4032,6 +4390,11 @@ "node": ">= 0.8.0" } }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4336,6 +4699,11 @@ "node": ">= 0.10" } }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -4358,6 +4726,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4495,6 +4868,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -4875,6 +5261,11 @@ "node": ">=10.0.0" } }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4883,6 +5274,24 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", @@ -5154,6 +5563,11 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "node_modules/textlinestream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/textlinestream/-/textlinestream-1.1.1.tgz", + "integrity": "sha512-iBHbi7BQxrFmwZUQJsT0SjNzlLLsXhvW/kg7EyOMVMBIrlnj/qYofwo1LVLZi+3GbUEo96Iu2eqToI2+lZoAEQ==" + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -5227,6 +5641,20 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -5348,6 +5776,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -5401,6 +5842,15 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5497,6 +5947,19 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -5522,6 +5985,14 @@ } } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -5535,6 +6006,31 @@ "node": ">= 14" } }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5546,6 +6042,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.21.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", @@ -5666,6 +6173,31 @@ "to-fast-properties": "^2.0.0" } }, + "@bundled-es-modules/cookie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", + "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "requires": { + "cookie": "^0.5.0" + } + }, + "@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "requires": { + "statuses": "^2.0.1" + } + }, + "@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "requires": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, "@emotion/babel-plugin": { "version": "11.10.8", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz", @@ -5827,12 +6359,18 @@ "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==" }, "@gradio/client": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@gradio/client/-/client-0.6.0.tgz", - "integrity": "sha512-32hebS7FlHfqkt1z8hp8ixLThkdAkMQSFeL5bBBQvgM+1kiM6u/J2jV/rjGJFi3szmkyG8/NiE+yBdHkRhoM8A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gradio/client/-/client-1.4.0.tgz", + "integrity": "sha512-4QrJrUz0j75/2SpiHfhQmKmEuFcTbbuA8hpPFb+G0fvT1kd9fRPf1LhrwvsxFQaP3byZs+IeiV0dzCLveHgtfA==", "requires": { + "@types/eventsource": "^1.1.15", "bufferutil": "^4.0.7", + "eventsource": "^2.0.2", + "fetch-event-stream": "^0.1.5", + "msw": "^2.2.1", "semiver": "^1.1.0", + "textlinestream": "^1.1.1", + "typescript": "^5.0.0", "ws": "^8.13.0" } }, @@ -5856,6 +6394,63 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "@inquirer/confirm": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", + "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "requires": { + "@inquirer/core": "^9.0.10", + "@inquirer/type": "^1.5.2" + } + }, + "@inquirer/core": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz", + "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==", + "requires": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.2", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.1.0", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "dependencies": { + "@types/node": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "requires": { + "undici-types": "~6.13.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } + } + }, + "@inquirer/figures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", + "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==" + }, + "@inquirer/type": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", + "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", + "requires": { + "mute-stream": "^1.0.0" + } + }, "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -5902,6 +6497,19 @@ "resolved": "https://registry.npmjs.org/@material-design-icons/svg/-/svg-0.14.7.tgz", "integrity": "sha512-r3mDjzAJ1EsErok8c2wMPmeGnjX2iF+RgvvbP/5OdZrygszE77syTy9XdcRtfU2f0b0iQ24lXE76F8xmkq0y6w==" }, + "@mswjs/interceptors": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", + "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", + "requires": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.5.1" + } + }, "@next/env": { "version": "13.4.1", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.1.tgz", @@ -5992,6 +6600,25 @@ "fastq": "^1.6.0" } }, + "@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" + }, + "@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "requires": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==" + }, "@pkgr/utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.0.tgz", @@ -6051,6 +6678,16 @@ "@types/node": "*" } }, + "@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, + "@types/eventsource": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.15.tgz", + "integrity": "sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA==" + }, "@types/express": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", @@ -6092,6 +6729,14 @@ "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", "dev": true }, + "@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "requires": { + "@types/node": "*" + } + }, "@types/node": { "version": "20.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.0.0.tgz", @@ -6163,6 +6808,21 @@ "@types/node": "*" } }, + "@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==" + }, + "@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, + "@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" + }, "@typescript-eslint/parser": { "version": "5.59.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz", @@ -6247,6 +6907,21 @@ "uri-js": "^4.2.2" } }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6575,11 +7250,43 @@ } } }, + "cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" + }, + "cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==" + }, "client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -7243,6 +7950,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==" + }, "execa": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", @@ -7357,6 +8069,11 @@ "reusify": "^1.0.4" } }, + "fetch-event-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/fetch-event-stream/-/fetch-event-stream-0.1.5.tgz", + "integrity": "sha512-V1PWovkspxQfssq/NnxoEyQo1DV+MRK/laPuPblIZmSjMN8P5u46OhlFQznSr9p/t0Sp8Uc6SbM3yCMfr0KU8g==" + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -7495,6 +8212,11 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", @@ -7592,6 +8314,11 @@ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, + "graphql": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -7636,6 +8363,11 @@ "has-symbols": "^1.0.2" } }, + "headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==" + }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -7807,6 +8539,11 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -7833,6 +8570,11 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, + "is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8144,6 +8886,42 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "msw": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.5.tgz", + "integrity": "sha512-+GUI4gX5YC5Bv33epBrD+BGdmDvBg2XGruiWnI3GbIbRmMMBeZ5gs3mJ51OWSGHgJKztZ8AtZeYMMNMVrje2/Q==", + "requires": { + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^3.0.0", + "@mswjs/interceptors": "^0.29.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.2", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + }, + "type-fest": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", + "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==" + } + } + }, "music-metadata": { "version": "8.1.4", "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-8.1.4.tgz", @@ -8158,6 +8936,11 @@ "token-types": "^5.0.1" } }, + "mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==" + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -8380,6 +9163,11 @@ "word-wrap": "^1.2.3" } }, + "outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==" + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8558,6 +9346,11 @@ "ipaddr.js": "1.9.1" } }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -8571,6 +9364,11 @@ "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8663,6 +9461,16 @@ "functions-have-names": "^1.2.3" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -8921,6 +9729,11 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, + "strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -8929,6 +9742,23 @@ "safe-buffer": "~5.2.0" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + } + } + }, "string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", @@ -9110,6 +9940,11 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "textlinestream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/textlinestream/-/textlinestream-1.1.1.tgz", + "integrity": "sha512-iBHbi7BQxrFmwZUQJsT0SjNzlLLsXhvW/kg7EyOMVMBIrlnj/qYofwo1LVLZi+3GbUEo96Iu2eqToI2+lZoAEQ==" + }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -9158,6 +9993,17 @@ "ieee754": "^1.2.1" } }, + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -9249,6 +10095,16 @@ "which-boxed-primitive": "^1.0.2" } }, + "undici-types": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -9276,6 +10132,15 @@ "punycode": "^2.1.0" } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -9345,6 +10210,16 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -9356,6 +10231,11 @@ "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "requires": {} }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -9366,11 +10246,35 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==" }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, + "yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==" + }, "zod": { "version": "3.21.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", diff --git a/react-ui/package.json b/react-ui/package.json index ae7ebd6d..9bf5951d 100644 --- a/react-ui/package.json +++ b/react-ui/package.json @@ -13,7 +13,7 @@ "@emotion/css": "^11.10.8", "@emotion/react": "^11.10.8", "@emotion/styled": "^11.10.8", - "@gradio/client": "^0.6.0", + "@gradio/client": "^1.4.0", "@material-design-icons/svg": "^0.14.7", "@types/node": "20.0.0", "@types/react": "18.2.5", diff --git a/react-ui/src/components/AudioComponents.tsx b/react-ui/src/components/AudioComponents.tsx index 644bba52..93f685f8 100644 --- a/react-ui/src/components/AudioComponents.tsx +++ b/react-ui/src/components/AudioComponents.tsx @@ -53,7 +53,7 @@ export const AudioOutput = ({

{label}

{audioOutput && ( +}) => ( +); export const BarkInputs = ({ barkGenerationParams, - setBarkVoiceGenerationParams, handleChange, - data, }: { barkGenerationParams: BarkGenerationParams; - setBarkVoiceGenerationParams: React.Dispatch< - React.SetStateAction - >; handleChange: HandleChange; - data: BarkResult | null; }) => (
@@ -96,12 +90,7 @@ export const BarkInputs = ({ handleChange={handleChange} />
- +
); diff --git a/react-ui/src/components/CardBig.tsx b/react-ui/src/components/CardBig.tsx index 9a9277a5..8c4431b7 100644 --- a/react-ui/src/components/CardBig.tsx +++ b/react-ui/src/components/CardBig.tsx @@ -24,7 +24,7 @@ import { parseMetadataDate } from "./parseMetadataDate"; import { Metadata, Row } from "./Metadata"; import { sendToBarkAsVoice } from "../tabs/BarkGenerationParams"; import { NPZ, NPZOptional } from "../types/NPZ"; -import { barkFavorite } from "../functions/barkFavorite"; +import { favorite } from "../functions/favorite"; import { saveToVoices } from "../functions/saveToVoices"; const ActionButton = ({ @@ -223,7 +223,7 @@ export const HistoryCard = ({ }; const addFavorite = () => - barkFavorite("", { + favorite("", { history_bundle_name_data, }); diff --git a/react-ui/src/components/GenerationHistory.tsx b/react-ui/src/components/GenerationHistory.tsx index 19101214..16d26f2f 100644 --- a/react-ui/src/components/GenerationHistory.tsx +++ b/react-ui/src/components/GenerationHistory.tsx @@ -22,7 +22,7 @@ export const GenerationHistorySimple = ({ return ( setHistoryData([])} + clearHistory={() => setHistoryData(x => x.slice(0, 1))} showLast={showLast} setShowLast={setShowLast} {...props} diff --git a/react-ui/src/components/HyperParameters.tsx b/react-ui/src/components/HyperParameters.tsx index 13d25817..de397afe 100644 --- a/react-ui/src/components/HyperParameters.tsx +++ b/react-ui/src/components/HyperParameters.tsx @@ -1,64 +1,175 @@ import React from "react"; import { Progress } from "./Progress"; +import useLocalStorage from "../hooks/useLocalStorage"; +import { extractTexts, initialHyperParams } from "../data/hyperParamsUtils"; +import { applySeed } from "../data/applySeed"; +import { useInterrupt } from "../hooks/useInterrupt"; -export const HyperParameters = < - T extends { - iterations: number; - splitByLines: boolean; +const getParams = ( + texts: string[], + iterations: number, + params: T +) => + Array(iterations) + .fill(0) + .flatMap((_, iteration) => + texts.map((text) => ({ + ...params, + text, + seed: params.seed + iteration, + })) + ); + +const progressMiddleware = (setProgress, max) => + function* (next) { + setProgress({ current: 0, max }); + for (const params of next) { + yield params; + setProgress(({ current, max }) => ({ + current: current + 1, + max, + params, + })); + } + setProgress({ current: 0, max: 0 }); + }; + +const interruptionMiddleware = (interrupted) => + function* (next) { + for (const params of next) { + if (interrupted.current) { + break; + } + yield params; + } + }; + +const logMiddleware = () => + function* (next) { + for (const params of next) { + console.log("Before generation", params); + yield params; + console.log("After generation", params); + } + }; + +const pipe = + (...middlewares) => + (iterator) => + middlewares.reduceRight((next, middleware) => middleware(next), iterator); + +const finalPipe = async ( + consumerFn, + sourceIterator, + ...iteratorMiddlewares +) => { + for (const params of pipe(...iteratorMiddlewares)(sourceIterator)) { + await consumerFn(params); } ->({ - params, - setParams, - progress, - progressMax, - isInterrupted: interrupted, - interrupt, +}; + +const batchRunner2 = (interrupted, consume, paramsList, setProgress) => + finalPipe( + consume, + paramsList, + progressMiddleware(setProgress, paramsList.length), + interruptionMiddleware(interrupted), + logMiddleware() + ); + +// export const HyperParameters = < +// T extends { +// iterations: number; +// splitByLines: boolean; +// } +// >({ +export const HyperParameters = ({ + // params, + // setParams, + // progress, + // progressMax, + // isInterrupted: interrupted, + // interrupt, + consumer, + prefix, + genParams, }: { - params: T; - setParams: React.Dispatch>; - progress: number; - progressMax: number; - isInterrupted: boolean; - interrupt: () => void; -}) => ( -
- -
- - { - setParams({ - ...params, - iterations: Number(event.target.value), - }); - }} - className="border border-gray-300 p-2 rounded" - min="1" - max="10" - step="1" - /> -
-
-
Each line as a separate prompt:
- { - setParams({ - ...params, - splitByLines: event.target.checked, - }); - }} + // params: T; + // setParams: React.Dispatch>; + // progress: number; + // progressMax: number; + // isInterrupted: boolean; + // interrupt: () => void; + genParams: { text: string; seed: number; use_random_seed: boolean }; + consumer: (x: any) => Promise; + prefix?: string; +}) => { + const [params, setParams] = useLocalStorage( + prefix + "HyperParams", + initialHyperParams + ); + const { interrupted, resetInterrupt, interrupt } = useInterrupt(); + const [progress, setProgress] = React.useState({ current: 0, max: 0 }); + + const generate = resetInterrupt(() => + batchRunner2( + interrupted, + consumer, + getParams( + extractTexts(genParams.text, params), + params.iterations, + applySeed(genParams) + ), + setProgress + ) + ); + + return ( +
+ +
+ + { + setParams({ + ...params, + iterations: Number(event.target.value), + }); + }} + className="border border-gray-300 p-2 rounded" + min="1" + max="10" + step="1" + /> +
+
+
Each line as a separate prompt:
+ { + setParams({ + ...params, + splitByLines: event.target.checked, + }); + }} + className="border border-gray-300 p-2 rounded" + /> +
+ + +
- - -
-); + ); +}; diff --git a/react-ui/src/components/MMSInputs.tsx b/react-ui/src/components/MMSInputs.tsx index 089e255a..23aadaae 100644 --- a/react-ui/src/components/MMSInputs.tsx +++ b/react-ui/src/components/MMSInputs.tsx @@ -37,7 +37,7 @@ export const MMSInputs = ({ mmsParams: MMSParams; handleChange: HandleChange; setMmsParams: React.Dispatch>; - data: MMSResult | null; + data?: MMSResult | null; }) => (
diff --git a/react-ui/src/components/MagnetInputs.tsx b/react-ui/src/components/MagnetInputs.tsx index 63e4d898..a4189b77 100644 --- a/react-ui/src/components/MagnetInputs.tsx +++ b/react-ui/src/components/MagnetInputs.tsx @@ -1,181 +1,183 @@ import React from "react"; -import { MagnetParams, MagnetResult } from "../tabs/MagnetParams"; +import { MagnetParams } from "../tabs/MagnetParams"; import { MagnetModelSelector } from "./MagnetModelSelector"; import { GenericSlider } from "./GenericSlider"; import { HandleChange } from "../types/HandleChange"; import { PromptTextArea } from "./PromptTextArea"; import { SeedInput } from "./SeedInput"; +import { SimpleGroup } from "./SimpleGroup"; export const MagnetInputs = ({ magnetParams, handleChange, - setMagnetParams, - data, }: { magnetParams: MagnetParams; handleChange: HandleChange; - setMagnetParams: React.Dispatch>; - data: MagnetResult | null; }) => ( -
-
- - - -
-
- - - - x.toFixed(2)} - name="top_p" - params={magnetParams} - handleChange={handleChange} - min="0" - max="1.5" - step="0.01" - /> - - x.toFixed(2)} - name="temperature" - params={magnetParams} - handleChange={handleChange} - min="0" - max="10" - step="0.01" - /> - -
- x.toFixed(1)} - name="min_cfg_coef" - params={magnetParams} +
+
+
+ - x.toFixed(1)} - name="max_cfg_coef" - params={magnetParams} - handleChange={handleChange} - className="w-1/2" - min="0" - max="100" - step="0.1" - /> -
- - - - - - - -
- -
- {["nonoverlap", "overlap"].map((type) => ( -
+ +
+
+ -
- ))} -
+ x.toFixed(2)} + name="top_p" + params={magnetParams} + handleChange={handleChange} + className="w-1/2" + min="0" + max="1.5" + step="0.01" + /> + x.toFixed(2)} + name="temperature" + params={magnetParams} + handleChange={handleChange} + className="w-1/2" + min="0" + max="10" + step="0.01" + /> +
+
+ x.toFixed(1)} + name="min_cfg_coef" + params={magnetParams} + handleChange={handleChange} + className="w-1/2" + min="0" + max="100" + step="0.1" + /> + x.toFixed(1)} + name="max_cfg_coef" + params={magnetParams} + handleChange={handleChange} + className="w-1/2" + min="0" + max="100" + step="0.1" + /> +
+
- -
- - +
+ +
+ + +
+
+ + +
+
+ +
+ {["nonoverlap", "overlap"].map((type) => ( +
+ + +
+ ))} +
+
+
+ + +
+
- -
+
); diff --git a/react-ui/src/components/MagnetModelSelector.tsx b/react-ui/src/components/MagnetModelSelector.tsx index aef6955f..09a33755 100644 --- a/react-ui/src/components/MagnetModelSelector.tsx +++ b/react-ui/src/components/MagnetModelSelector.tsx @@ -1,16 +1,19 @@ import React from "react"; import { MagnetParams } from "../tabs/MagnetParams"; +import { HandleChange } from "../types/HandleChange"; const modelMap = { Small: { size: "small", 10: true, 30: true }, Medium: { size: "medium", 10: true, 30: true }, Audio: { size: "audio", 10: true, 30: false }, }; + const canUseDuration = (type: string, isAudio: boolean, duration: string) => { const subType = isAudio ? "Audio" : type; const { [duration]: canUse } = modelMap[subType]; return canUse; }; + const modelToType = { "facebook/magnet-small-10secs": "Small", "facebook/magnet-medium-10secs": "Medium", @@ -19,6 +22,7 @@ const modelToType = { "facebook/audio-magnet-small": "Small", "facebook/audio-magnet-medium": "Medium", }; + const computeModel = (type: string, isAudio: boolean, duration: number) => { const lowerType = type.toLowerCase(); const durationSuffix = duration === 30 ? "-30secs" : "-10secs"; @@ -27,36 +31,65 @@ const computeModel = (type: string, isAudio: boolean, duration: number) => { ? `facebook/audio-magnet-${lowerType}` : `facebook/magnet-${lowerType}${durationSuffix}`; }; + const getType = (model: string) => { return modelToType[model] || "Small"; }; + const decomputeModel = ( model: string -): { type: string; isAudio: boolean; duration: number; } => { +): { type: string; isAudio: boolean; duration: number } => { const type = getType(model); const duration = model.includes("-30secs") ? 30 : 10; const isAudio = model.includes("audio"); return { type, isAudio, duration }; }; + export const MagnetModelSelector = ({ - magnetParams, setMagnetParams, + magnetParams, + handleChange, }: { magnetParams: MagnetParams; - setMagnetParams: React.Dispatch>; + handleChange: HandleChange; }) => { const { - type: modelType, isAudio, duration, + type: modelType, + isAudio, + duration, } = decomputeModel(magnetParams.model); + const handleSize = (event: React.ChangeEvent): void => + handleChange({ + target: { + name: "model", + value: computeModel(event.target.value, isAudio, duration), + }, + }); + + const handleAudio = (event: React.ChangeEvent): void => + handleChange({ + target: { + name: "model", + value: computeModel( + modelType, + event.target.value === "Audio", + duration + ), + }, + }); + + const handleDuration = (event: React.ChangeEvent): void => + handleChange({ + target: { + name: "model", + value: computeModel(modelType, isAudio, Number(event.target.value)), + }, + }); + return (
Model:
- setMagnetParams({ - ...magnetParams, - model: event.target.value, - })} /> +
@@ -68,11 +101,9 @@ export const MagnetModelSelector = ({ id={type} value={type} checked={modelType === type} - onChange={(event) => setMagnetParams({ - ...magnetParams, - model: computeModel(event.target.value, isAudio, duration), - })} - className="border border-gray-300 p-2 rounded" /> + onChange={handleSize} + className="border border-gray-300 p-2 rounded" + /> @@ -80,23 +111,6 @@ export const MagnetModelSelector = ({ ))}
- {/*
- - - setMagnetParams({ - ...magnetParams, - model: computeModel(modelType, event.target.checked, duration), - }) - } - className="border border-gray-300 p-2 rounded" - /> -
*/} - {/* Instead of a checkbox make it a radio between Audio and Music */}
@@ -108,15 +122,9 @@ export const MagnetModelSelector = ({ id={type} value={type} checked={isAudio === (type === "Audio")} - onChange={(event) => setMagnetParams({ - ...magnetParams, - model: computeModel( - modelType, - event.target.value === "Audio", - duration - ), - })} - className="border border-gray-300 p-2 rounded" /> + onChange={handleAudio} + className="border border-gray-300 p-2 rounded" + /> @@ -135,16 +143,10 @@ export const MagnetModelSelector = ({ id={d} value={d} checked={d === String(duration)} - onChange={(event) => setMagnetParams({ - ...magnetParams, - model: computeModel( - modelType, - isAudio, - Number(event.target.value) - ), - })} + onChange={handleDuration} className="border border-gray-300 p-2 rounded" - disabled={!canUseDuration(modelType, isAudio, d)} /> + disabled={!canUseDuration(modelType, isAudio, d)} + /> @@ -155,15 +157,13 @@ export const MagnetModelSelector = ({
); }; + const Model = ({ - params, handleChange, + params, + handleChange, }: { params: MagnetParams; - handleChange: ( - event: React.ChangeEvent | - React.ChangeEvent | - React.ChangeEvent - ) => void; + handleChange: HandleChange; }) => { const [options, setOptions] = React.useState([]); const [loading, setLoading] = React.useState(false); diff --git a/react-ui/src/components/MahaInputs.tsx b/react-ui/src/components/MahaInputs.tsx index b824d955..9f9fb947 100644 --- a/react-ui/src/components/MahaInputs.tsx +++ b/react-ui/src/components/MahaInputs.tsx @@ -79,13 +79,11 @@ const Speaker = ({ export const MahaInputs = ({ mahaParams, handleChange, - setMahaParams, - data, + resetParams, }: { mahaParams: MahaParams; handleChange: HandleChange; - setMahaParams: React.Dispatch>; - data: MahaResult | null; + resetParams: () => void; }) => (
@@ -93,7 +91,7 @@ export const MahaInputs = ({ params={mahaParams} handleChange={handleChange} label="Text" - name="maha_tts_input" + name="text" />
@@ -114,9 +112,11 @@ export const MahaInputs = ({ onChange={(event) => { console.log(event.target.value); if (event.target.value === "Smolie-en") { - setMahaParams({ - ...mahaParams, - maha_tts_language: "english", + handleChange({ + target: { + name: "maha_tts_language", + value: "english", + }, }); } handleChange(event); @@ -170,12 +170,7 @@ export const MahaInputs = ({ - +
@@ -199,15 +194,7 @@ export const MahaInputs = ({
-
diff --git a/react-ui/src/components/MusicgenInputs.tsx b/react-ui/src/components/MusicgenInputs.tsx index eb376804..aa5319ec 100644 --- a/react-ui/src/components/MusicgenInputs.tsx +++ b/react-ui/src/components/MusicgenInputs.tsx @@ -20,7 +20,7 @@ export const MusicgenInputs = ({ musicgenParams: MusicgenParams; handleChange: HandleChange; setMusicgenParams: React.Dispatch>; - musicgenResult: MusicgenResult | null; + musicgenResult?: MusicgenResult | null; }) => (
@@ -107,9 +107,7 @@ export const MusicgenInputs = ({
diff --git a/react-ui/src/components/RVCInputs.tsx b/react-ui/src/components/RVCInputs.tsx index b0e07f4d..9aea9d69 100644 --- a/react-ui/src/components/RVCInputs.tsx +++ b/react-ui/src/components/RVCInputs.tsx @@ -246,8 +246,8 @@ export const RVCInputs = ({ - -
+ {/* */} + {/*
-
+
*/}
{!hideAudioInput && ( ({ - params, setParams, initialParams, + params, + setParams, + initialParams, }: { params: T; setParams: React.Dispatch>; @@ -10,10 +12,12 @@ export const ResetButton = ({ }) => ( diff --git a/react-ui/src/components/SeedInput.tsx b/react-ui/src/components/SeedInput.tsx index dbbfb16e..5a1d4906 100644 --- a/react-ui/src/components/SeedInput.tsx +++ b/react-ui/src/components/SeedInput.tsx @@ -1,17 +1,18 @@ import React from "react"; import { HandleChange } from "../types/HandleChange"; -export const SeedInput = ({ +export const SeedInput = < + T extends { + use_random_seed: boolean; + seed: number | string | undefined; + } +>({ params, handleChange, - setParams, - seed, className, }: { params: T; handleChange: HandleChange; - setParams: React.Dispatch>; - seed: number | string | undefined; className?: string; }) => (
@@ -24,17 +25,13 @@ export const SeedInput = ({ maxLength={10} className="border border-gray-300 p-2 rounded text-base w-36" /> - - + />
); diff --git a/react-ui/src/components/SimpleGroup.tsx b/react-ui/src/components/SimpleGroup.tsx new file mode 100644 index 00000000..ecad82d7 --- /dev/null +++ b/react-ui/src/components/SimpleGroup.tsx @@ -0,0 +1,6 @@ +import React from "react"; +import { commonBorder } from "./commonBorder"; + +export const SimpleGroup = ({ children }: { children: React.ReactNode }) => ( +
{children}
+); diff --git a/react-ui/src/components/Template.tsx b/react-ui/src/components/Template.tsx index f236fa77..6d9da7b3 100644 --- a/react-ui/src/components/Template.tsx +++ b/react-ui/src/components/Template.tsx @@ -1,10 +1,17 @@ import React from "react"; +import Head from "next/head"; import { FavoritesProvider } from "./FavoritesProvider"; import { LocalVotesProvider, VotesProvider } from "@/components/VotesProvider"; import { Header } from "./Header"; import { inter } from "../pages/generations"; -export const Template = ({ children }: { children: React.ReactNode }) => ( +export const Template = ({ + children, + title, +}: { + children: React.ReactNode; + title?: string; +}) => ( @@ -12,6 +19,11 @@ export const Template = ({ children }: { children: React.ReactNode }) => ( className={`flex min-h-screen flex-col items-center justify-start px-8 py-6 gap-y-2 ${inter.className}`} >
+ {title && ( + + {`${title} - TTS Generation Webui`} + + )} {children} diff --git a/react-ui/src/components/TortoiseInput.tsx b/react-ui/src/components/TortoiseInput.tsx index 46b67d46..90226d13 100644 --- a/react-ui/src/components/TortoiseInput.tsx +++ b/react-ui/src/components/TortoiseInput.tsx @@ -7,6 +7,7 @@ import { HandleChange } from "../types/HandleChange"; import { PromptTextArea } from "./PromptTextArea"; import { SeedInput } from "./SeedInput"; import { splitAndRecombineText } from "../data/split-and-recombine"; +import { SimpleGroup } from "./SimpleGroup"; const presets = { ultra_fast: { @@ -28,12 +29,6 @@ const presets = { }, }; -const SimpleGroup = ({ children }: { children: React.ReactNode }) => ( -
- {children} -
-); - export const TortoiseInput = ({ tortoiseGenerationParams, setTortoiseGenerationParams, @@ -91,11 +86,17 @@ export const TortoiseInput = ({ tortoiseGenerationParams={tortoiseGenerationParams} handleChange={handleChange} /> + + @@ -107,7 +108,7 @@ export const TortoiseInput = ({
{ handleChange({ target: { - name: "prompt", - value: splitAndRecombineText(tortoiseGenerationParams.prompt).join( + name: "text", + value: splitAndRecombineText(tortoiseGenerationParams.text).join( "\n" ), }, @@ -470,6 +471,16 @@ const Model = ({ > {applyModelSettingsLoading ? "Applying..." : "Apply Model Settings"} +
); diff --git a/react-ui/src/components/VallexInputs.tsx b/react-ui/src/components/VallexInputs.tsx index 94e20223..02e37186 100644 --- a/react-ui/src/components/VallexInputs.tsx +++ b/react-ui/src/components/VallexInputs.tsx @@ -171,7 +171,7 @@ export const VallexInputs = ({ vallexParams: VallexParams; handleChange: HandleChange; setVallexParams: React.Dispatch>; - data: VallexResult | null; + data?: VallexResult | null; }) => (
diff --git a/react-ui/src/data/applySeed.tsx b/react-ui/src/data/applySeed.tsx new file mode 100644 index 00000000..4ea5b357 --- /dev/null +++ b/react-ui/src/data/applySeed.tsx @@ -0,0 +1,10 @@ +export const applySeed = < + T extends { use_random_seed?: boolean; seed?: number } +>( + params: T +) => + params.use_random_seed + ? { ...params, seed: getRandomSeed() } + : params; + +const getRandomSeed = () => Math.floor(Math.random() * 2 ** 32 - 1); diff --git a/react-ui/src/data/getBarkFuncs.tsx b/react-ui/src/data/getBarkFuncs.tsx index 3270c8f6..b8f06c22 100644 --- a/react-ui/src/data/getBarkFuncs.tsx +++ b/react-ui/src/data/getBarkFuncs.tsx @@ -1,7 +1,7 @@ import React from "react"; import { BarkGenerationParams } from "../tabs/BarkGenerationParams"; import { BarkResult } from "../tabs/BarkResult"; -import { barkFavorite } from "../functions/barkFavorite"; +import { favorite } from "../functions/favorite"; export function getBarkFuncs( setBarkVoiceGenerationParams: React.Dispatch< @@ -28,22 +28,22 @@ export function getBarkFuncs( }; const useSeed = (_url: string, data?: BarkResult) => { - const seed_input = data?.json_text?.seed; + const seed_input = data?.metadata?.seed; if (!seed_input) return; setBarkVoiceGenerationParams({ ...barkGenerationParams, - seed: seed_input, + seed: Number(seed_input), }); }; const useParametersTest = (_url: string, data?: BarkResult) => { const { prompt, language, speaker_id, text_temp, waveform_temp, history_prompt, history_prompt_npz, semantic_prompt, coarse_prompt, - } = (data?.json_text)!; + } = (data?.metadata)!; if (!prompt) return; setBarkVoiceGenerationParams({ ...barkGenerationParams, - prompt, + text: prompt, languageRadio: language, speakerIdRadio: speaker_id, text_temp, @@ -53,8 +53,8 @@ export function getBarkFuncs( history_prompt_semantic_dropdown: semantic_prompt, burn_in_prompt: coarse_prompt, long_prompt_radio: "Short prompt (<15s)", - seed: data?.json_text?.seed ?? "-1", - useV2: data?.json_text?.history_prompt?.includes("v2") ?? true, + seed: Number(data?.metadata?.seed ?? "-1"), + useV2: data?.metadata?.history_prompt?.includes("v2") ?? true, }); }; @@ -62,7 +62,7 @@ export function getBarkFuncs( useAsHistory, useAsHistoryPromptSemantic, useSeed, - favorite: barkFavorite, + favorite: favorite, useParametersTest, }; } diff --git a/react-ui/src/functions/barkFavorite.tsx b/react-ui/src/functions/favorite.tsx similarity index 91% rename from react-ui/src/functions/barkFavorite.tsx rename to react-ui/src/functions/favorite.tsx index 4c11c46a..6b34f77f 100644 --- a/react-ui/src/functions/barkFavorite.tsx +++ b/react-ui/src/functions/favorite.tsx @@ -1,4 +1,4 @@ -export const barkFavorite = async ( +export const favorite = async ( _url: string, data?: { history_bundle_name_data?: string; diff --git a/react-ui/src/functions/generateWithBark.tsx b/react-ui/src/functions/generateWithBark.tsx index 02f02f79..372e4290 100644 --- a/react-ui/src/functions/generateWithBark.tsx +++ b/react-ui/src/functions/generateWithBark.tsx @@ -1,11 +1,8 @@ import { BarkGenerationParams } from "../tabs/BarkGenerationParams"; import { BarkResult } from "../tabs/BarkResult"; -export async function generateWithBark(barkGenerationParams: BarkGenerationParams) { - const response = await fetch("/api/gradio/bark", { +export const generateWithBark = (barkGenerationParams: BarkGenerationParams) => + fetch("/api/gradio/bark", { method: "POST", body: JSON.stringify(barkGenerationParams), - }); - - return (await response.json()) as BarkResult; -} + }).then((response) => response.json() as Promise); diff --git a/react-ui/src/functions/generateWithTortoise.tsx b/react-ui/src/functions/generateWithTortoise.tsx index 4cf55fd3..5c711029 100644 --- a/react-ui/src/functions/generateWithTortoise.tsx +++ b/react-ui/src/functions/generateWithTortoise.tsx @@ -9,5 +9,5 @@ export async function generateWithTortoise( body: JSON.stringify(tortoiseGenerationParams), }); - return response.json() as Promise; + return response.json() as Promise; } diff --git a/react-ui/src/functions/results/useSeedHelper.tsx b/react-ui/src/functions/results/useSeedHelper.tsx new file mode 100644 index 00000000..dedb4a9f --- /dev/null +++ b/react-ui/src/functions/results/useSeedHelper.tsx @@ -0,0 +1,16 @@ +export const useSeedHelper = + ( + setParams: React.Dispatch> + ) => + ( + _url: string, + data?: { + metadata: { + seed: string | number; + }; + } + ) => { + const seed = data?.metadata?.seed; + if (!seed) return; + setParams((x) => ({ ...x, seed: Number(seed) })); + }; diff --git a/react-ui/src/hooks/useHistory.tsx b/react-ui/src/hooks/useHistory.tsx new file mode 100644 index 00000000..56700230 --- /dev/null +++ b/react-ui/src/hooks/useHistory.tsx @@ -0,0 +1,6 @@ +import useLocalStorage from "../hooks/useLocalStorage"; + +const initialHistory = []; // prevent infinite loop + +export const useHistory = (prefix: string) => + useLocalStorage(prefix + "GenerationHistory", initialHistory); diff --git a/react-ui/src/hooks/useLocalStorage.ts b/react-ui/src/hooks/useLocalStorage.ts index 8087c2ff..46248f81 100644 --- a/react-ui/src/hooks/useLocalStorage.ts +++ b/react-ui/src/hooks/useLocalStorage.ts @@ -8,14 +8,14 @@ import { export const defaultNamespace = "tts-generation-webui__"; -const readLocalStorage = (key: string) => { - const prefixedKey = defaultNamespace + key; +export const readLocalStorage = (key: string, namespace = defaultNamespace) => { + const prefixedKey = namespace + key; const item = localStorage.getItem(prefixedKey); return item ? (JSON.parse(item) as any) : undefined; }; -const updateLocalStorage = (key: string, value: any) => { - const prefixedKey = defaultNamespace + key; +const updateLocalStorage = (key: string, value: any, namespace = defaultNamespace) => { + const prefixedKey = namespace + key; localStorage.setItem(prefixedKey, JSON.stringify(value)); }; diff --git a/react-ui/src/pages/api/gradio/[name].tsx b/react-ui/src/pages/api/gradio/[name].tsx index 19f16911..132012e9 100644 --- a/react-ui/src/pages/api/gradio/[name].tsx +++ b/react-ui/src/pages/api/gradio/[name].tsx @@ -1,10 +1,21 @@ -import { client } from "@gradio/client"; +import { Client } from "@gradio/client"; import type { NextApiRequest, NextApiResponse } from "next"; import { getFile } from "../../../backend-utils/getFile"; import { GradioFile } from "../../../types/GradioFile"; +import { PayloadMessage, PredictFunction } from "@gradio/client/dist/types"; type Data = { data: any }; +// import { Client, handle_file } from "@gradio/client"; + +// const response = await fetch( +// "https://audio-samples.github.io/samples/mp3/blizzard_unconditional/sample-0.mp3" +// ); +// const audio_file = await response.blob(); + +// const app = await Client.connect("abidlabs/whisper"); +// const result = await app.predict("/predict", [handle_file(audio_file)]); + export default async function handler( req: NextApiRequest, res: NextApiResponse @@ -28,7 +39,8 @@ const defaultBackend = process.env.GRADIO_BACKEND || process.env.GRADIO_BACKEND_AUTOMATIC || "http://127.0.0.1:7770/"; -const getClient = () => client(defaultBackend, {}); + +const getClient = () => Client.connect(defaultBackend, {}); type GradioChoices = { choices: string[]; @@ -37,9 +49,11 @@ type GradioChoices = { const extractChoices = ({ choices }: GradioChoices) => choices.map((x) => x[0]); -const gradioPredict = ( - ...args: Parameters>["predict"]> -) => getClient().then((app) => app.predict(...args)) as Promise<{ data: T }>; +const gradioPredict = (...args: Parameters) => + getClient().then((app) => app.predict(...args)) as Promise<{ data: T }>; + +const gradioSubmit = (...args: Parameters) => + getClient().then((app) => app.submit(...args)); async function demucs({ file }: { file: string }) { const audioBlob = await getFile(file); @@ -107,11 +121,11 @@ async function musicgen({ melody, ...params }) { params.seed, // number in 'Seed' Slider component params.use_multi_band_diffusion, // boolean in 'Use Multi-Band Diffusion' Checkbox component ]); - const [audio, history_bundle_name_data, , , json] = result?.data; + const [audio, history_bundle_name_data, , , metadata] = result?.data; return { audio, history_bundle_name_data, - json, + metadata, }; } @@ -143,7 +157,7 @@ async function bark_voice_generate({ audio, use_gpu }) { async function bark({ burn_in_prompt, - prompt, + text, history_setting, languageRadio, speakerIdRadio, @@ -167,13 +181,13 @@ async function bark({ Object, // buttons_row null, // npz null, // seed - null, // json_text + null, // json_text -> metadata null // history_bundle_name_data // note - ignore other 8 rows of data ] >("/bark", [ burn_in_prompt, - prompt, + text, history_setting, languageRadio, speakerIdRadio, @@ -188,7 +202,7 @@ async function bark({ max_gen_duration_s, ]); - const [audio_update, npz, json_text, history_bundle_name_data] = result?.data; + const [audio_update, npz, metadata, history_bundle_name_data] = result?.data; const audio = audio_update.value; const fixedAudio = { @@ -198,7 +212,7 @@ async function bark({ return { audio: fixedAudio, npz, - json_text, + metadata, history_bundle_name_data, }; } @@ -213,8 +227,18 @@ const bark_favorite = async ({ history_bundle_name_data }) => (result) => result?.data ); +async function Array__fromAsync(gen: AsyncIterable): Promise { + let out: T[] = []; + for await (const x of gen) { + // Oh how I love you V8 with your bugs. This prevents invalid memory deduplication when adding the output to an array in a complicated system. + let y = JSON.parse(JSON.stringify(x)); + out.push(y as any); + } + return out; +} + async function tortoise({ - prompt, + text, speaker, preset, seed, @@ -232,18 +256,17 @@ async function tortoise({ diffusion_temperature, model, generation_name, + // use_random_seed, + candidates, }) { - const result = await gradioPredict< + const job = await gradioSubmit< [ GradioFile, // audio - string, // image - Object, // save_button - string, // seed string, // bundle_name Object // metadata ] - >("/generate_tortoise_1", [ - prompt, // string in 'Prompt' Textbox component + >("/generate_tortoise_" + candidates, [ + text, // string in 'Prompt' Textbox component speaker, // string (Option from: ['random', 'angie', 'applejack', 'cond_latent_example', 'daniel', 'deniro', 'emma', 'freeman', 'geralt', 'halle', 'jlaw', 'lj', 'mol', 'myself', 'pat', 'pat2', 'rainbow', 'snakes', 'tim_reynolds', 'tom', 'train_atkins', 'train_daws', 'train_dotrice', 'train_dreams', 'train_empire', 'train_grace', 'train_kennard', 'train_lescault', 'train_mouse', 'weaver', 'william', 'freeman_2a', 'freeman_3', 'pat4']) in 'parameter_2502' Dropdown component preset, // string (Option from: ['ultra_fast', 'fast', 'standard', 'high_quality']) in 'parameter_2507' Dropdown component seed, // number in 'parameter_2521' Number component @@ -263,17 +286,45 @@ async function tortoise({ generation_name, // string in 'Generation Name' Textbox component ]); - const [audio, image, save_button, seed2, bundle_name, metadata] = - result?.data; - - return { - audio, - image, - save_button, - seed: seed2, - bundle_name, - metadata, - }; + const events = await Array__fromAsync(job); + const results = events + .filter((x): x is PayloadMessage => x.type === "data") + .map((x: PayloadMessage) => { + const [audio, bundle_name, metadata] = x.data; + return { + audio, + seed, + bundle_name, + metadata, + // metadata: { + // _version: "", + // _hash_version: "", + // _type: "", + // text, + // speaker, + // preset, + // seed, + // cvvp_amount, + // split_prompt, + // samples, + // diffusion_iterations, + // temperature, + // length_penalty, + // repetition_penalty, + // top_p, + // max_mel_tokens, + // cond_free, + // cond_free_k, + // diffusion_temperature, + // model, + // generation_name, + // // use_random_seed, + // candidates, + // }, + }; + }); + // remove last element due to return {} in generate_tortoise_long + return results.slice(0, -1); } const tortoise_refresh_models = () => @@ -322,8 +373,8 @@ async function rvc({ pitch_collection_method, model, search_feature_ratio, - device, - use_half_precision_model, + // device, + // use_half_precision_model, filter_radius_pitch, resample_sample_rate, voice_envelope_normalizaiton, @@ -338,8 +389,8 @@ async function rvc({ pitch_collection_method, // string (Option from: ['harvest', 'reaper', 'melodia']) in 'Pitch Collection Method' Radio component model, // string in 'Model' Dropdown component search_feature_ratio, // number (numeric value between 0.0 and 1.0) in 'Search Feature Ratio' Slider component - device, // string (Option from: ['cuda:0', 'cpu', 'mps']) in 'Device' Dropdown component - use_half_precision_model, // boolean in 'Use half precision model (Depends on GPU support)' Checkbox component + // device, // string (Option from: ['cuda:0', 'cpu', 'mps']) in 'Device' Dropdown component + // use_half_precision_model, // boolean in 'Use half precision model (Depends on GPU support)' Checkbox component filter_radius_pitch, // number (numeric value between 0 and 10) in 'Filter Radius (Pitch)' Slider component resample_sample_rate, // number (numeric value between 0 and 48000) in 'Resample Sample-rate (Bug)' Slider component voice_envelope_normalizaiton, // number (numeric value between 0.0 and 1.0) in 'Voice Envelope Normalizaiton' Slider component @@ -488,11 +539,11 @@ async function magnet({ span_arrangement, ]); - const [audio, history_bundle_name_data, , , json] = result?.data; + const [audio, history_bundle_name_data, , , metadata] = result?.data; return { audio, history_bundle_name_data, - json, + metadata, }; } @@ -504,7 +555,7 @@ const magnet_get_models = () => const magnet_open_model_dir = () => gradioPredict<[]>("/magnet_open_model_dir"); const maha = ({ - maha_tts_input, + text, model_language, maha_tts_language, speaker_name, @@ -512,7 +563,7 @@ const maha = ({ device, }) => gradioPredict<[GradioFile, Object]>("/maha_tts", [ - maha_tts_input, // string in 'Input' Textbox component + text, // string in 'Input' Textbox component model_language, // string (Option from: ['en', 'de', 'es', 'fr', 'it', 'nl', 'pl', 'pt', 'ru', 'tr', 'zh']) in 'Model language' Dropdown component maha_tts_language, // string (Option from: ['en', 'de', 'es', 'fr', 'it', 'nl', 'pl', 'pt', 'ru', 'tr', 'zh']) in 'TTS language' Dropdown component speaker_name, // string in 'Speaker name' Textbox component @@ -618,6 +669,8 @@ const scan_huggingface_cache_api = () => const delete_huggingface_cache_revisions = ({ commit_hash }) => gradioPredict<[]>("/delete_huggingface_cache_revisions", [commit_hash]); +const tortoise_unload_model = () => gradioPredict<[]>("/tortoise_unload_model"); + const endpoints = { maha, maha_tts_refresh_voices, @@ -666,4 +719,6 @@ const endpoints = { scan_huggingface_cache_api, delete_huggingface_cache_revisions, + + tortoise_unload_model, }; diff --git a/react-ui/src/pages/bark.tsx b/react-ui/src/pages/bark.tsx index 04816ac3..d9fcb49c 100644 --- a/react-ui/src/pages/bark.tsx +++ b/react-ui/src/pages/bark.tsx @@ -1,71 +1,41 @@ import React from "react"; import { Template } from "../components/Template"; -import useLocalStorage from "../hooks/useLocalStorage"; import { AudioOutput } from "../components/AudioComponents"; -import Head from "next/head"; -import { BarkResult } from "../tabs/BarkResult"; import { BarkInputs } from "../components/BarkInputs"; -import { getBarkFuncs } from "../data/getBarkFuncs"; -import { generateWithBark } from "../functions/generateWithBark"; -import { - useBarkGenerationParams, - useBarkResult, -} from "../tabs/BarkGenerationParams"; -import { parseFormChange } from "../data/parseFormChange"; +import { useBarkPage } from "../tabs/BarkGenerationParams"; import { GenerationHistorySimple } from "../components/GenerationHistory"; +import { HyperParameters } from "../components/HyperParameters"; -const initialHistory = []; // prevent infinite loop const BarkGenerationPage = () => { - const [historyData, setHistoryData] = useLocalStorage( - "barkGenerationHistory", - initialHistory - ); - const [barkResult, setBarkResult] = useBarkResult(); - const [barkGenerationParams, setBarkVoiceGenerationParams] = - useBarkGenerationParams(); - const [loading, setLoading] = React.useState(false); - - async function bark() { - setLoading(true); - const result = await generateWithBark(barkGenerationParams); - setBarkResult(result); - setHistoryData((historyData) => [result, ...historyData]); - setLoading(false); - } - - const funcs = getBarkFuncs( - setBarkVoiceGenerationParams, - barkGenerationParams - ); - - const handleChange = parseFormChange(setBarkVoiceGenerationParams); + const { + barkGenerationParams, + historyData, + setHistoryData, + handleChange, + consumer, + funcs, + } = useBarkPage(); return ( -