Spaces:
Build error
Build error
Upload 10 files
Browse files- app.py +67 -0
- assets/config.json +10 -0
- assets/i18n/i18n.py +52 -0
- assets/i18n/languages/en_US.json +89 -0
- assets/i18n/languages/id_ID.py +89 -0
- assets/i18n/languages/pt_BR.json +89 -0
- assets/i18n/scan.py +71 -0
- assets/themes/loadThemes.py +119 -0
- assets/themes/themes_list.json +81 -0
- requirements.txt +0 -1
app.py
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import sys, os
|
3 |
+
from tabs.full_inference import full_inference_tab
|
4 |
+
from tabs.download_model import download_model_tab
|
5 |
+
from tabs.download_music import download_music_tab
|
6 |
+
from tabs.settings import select_themes_tab, lang_tab, restart_tab
|
7 |
+
|
8 |
+
now_dir = os.getcwd()
|
9 |
+
sys.path.append(now_dir)
|
10 |
+
DEFAULT_PORT = 7755
|
11 |
+
MAX_PORT_ATTEMPTS = 10
|
12 |
+
|
13 |
+
from assets.i18n.i18n import I18nAuto
|
14 |
+
|
15 |
+
i18n = I18nAuto()
|
16 |
+
|
17 |
+
import assets.themes.loadThemes as loadThemes
|
18 |
+
|
19 |
+
rvc_theme = loadThemes.load_json() or "NoCrypt/miku"
|
20 |
+
|
21 |
+
with gr.Blocks(
|
22 |
+
theme=rvc_theme, title="Advanced-RVC-Inference"
|
23 |
+
) as rvc:
|
24 |
+
gr.Markdown("# Advanced-RVC-Inference")
|
25 |
+
with gr.Tab(i18n("Full Inference")):
|
26 |
+
full_inference_tab()
|
27 |
+
with gr.Tab(i18n("Download Music")):
|
28 |
+
download_music_tab()
|
29 |
+
with gr.Tab(i18n("Download Model")):
|
30 |
+
download_model_tab()
|
31 |
+
with gr.Tab(i18n("Settings")):
|
32 |
+
select_themes_tab()
|
33 |
+
lang_tab()
|
34 |
+
restart_tab()
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
def launch(port):
|
39 |
+
rvc.launch(
|
40 |
+
share="--share" in sys.argv,
|
41 |
+
inbrowser="--open" in sys.argv,
|
42 |
+
server_port=port,
|
43 |
+
)
|
44 |
+
|
45 |
+
|
46 |
+
def get_port_from_args():
|
47 |
+
if "--port" in sys.argv:
|
48 |
+
port_index = sys.argv.index("--port") + 1
|
49 |
+
if port_index < len(sys.argv):
|
50 |
+
return int(sys.argv[port_index])
|
51 |
+
return DEFAULT_PORT
|
52 |
+
|
53 |
+
|
54 |
+
if __name__ == "__main__":
|
55 |
+
port = get_port_from_args()
|
56 |
+
for _ in range(MAX_PORT_ATTEMPTS):
|
57 |
+
try:
|
58 |
+
launch(port)
|
59 |
+
break
|
60 |
+
except OSError:
|
61 |
+
print(
|
62 |
+
f"Failed to launch on port {port}, trying again on port {port - 1}..."
|
63 |
+
)
|
64 |
+
port -= 1
|
65 |
+
except Exception as error:
|
66 |
+
print(f"An error occurred launching Gradio: {error}")
|
67 |
+
break
|
assets/config.json
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"theme": {
|
3 |
+
"file": null,
|
4 |
+
"class": "NeoPy/Syne"
|
5 |
+
},
|
6 |
+
"lang": {
|
7 |
+
"override": false,
|
8 |
+
"selected_lang": "en_US"
|
9 |
+
}
|
10 |
+
}
|
assets/i18n/i18n.py
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os, sys
|
2 |
+
import json
|
3 |
+
from pathlib import Path
|
4 |
+
from locale import getdefaultlocale
|
5 |
+
|
6 |
+
now_dir = os.getcwd()
|
7 |
+
sys.path.append(now_dir)
|
8 |
+
|
9 |
+
|
10 |
+
class I18nAuto:
|
11 |
+
LANGUAGE_PATH = os.path.join(now_dir, "assets", "i18n", "languages")
|
12 |
+
|
13 |
+
def __init__(self, language=None):
|
14 |
+
with open(
|
15 |
+
os.path.join(now_dir, "assets", "config.json"), "r", encoding="utf8"
|
16 |
+
) as file:
|
17 |
+
config = json.load(file)
|
18 |
+
override = config["lang"]["override"]
|
19 |
+
lang_prefix = config["lang"]["selected_lang"]
|
20 |
+
|
21 |
+
self.language = lang_prefix
|
22 |
+
|
23 |
+
if override == False:
|
24 |
+
language = language or getdefaultlocale()[0]
|
25 |
+
lang_prefix = language[:2] if language is not None else "en"
|
26 |
+
available_languages = self._get_available_languages()
|
27 |
+
matching_languages = [
|
28 |
+
lang for lang in available_languages if lang.startswith(lang_prefix)
|
29 |
+
]
|
30 |
+
self.language = matching_languages[0] if matching_languages else "en_US"
|
31 |
+
|
32 |
+
self.language_map = self._load_language_list()
|
33 |
+
|
34 |
+
def _load_language_list(self):
|
35 |
+
try:
|
36 |
+
file_path = Path(self.LANGUAGE_PATH) / f"{self.language}.json"
|
37 |
+
with open(file_path, "r", encoding="utf-8") as file:
|
38 |
+
return json.load(file)
|
39 |
+
except FileNotFoundError:
|
40 |
+
raise FileNotFoundError(
|
41 |
+
f"Failed to load language file for {self.language}. Check if the correct .json file exists."
|
42 |
+
)
|
43 |
+
|
44 |
+
def _get_available_languages(self):
|
45 |
+
language_files = [path.stem for path in Path(self.LANGUAGE_PATH).glob("*.json")]
|
46 |
+
return language_files
|
47 |
+
|
48 |
+
def _language_exists(self, language):
|
49 |
+
return (Path(self.LANGUAGE_PATH) / f"{language}.json").exists()
|
50 |
+
|
51 |
+
def __call__(self, key):
|
52 |
+
return self.language_map.get(key, key)
|
assets/i18n/languages/en_US.json
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"Voice Model": "Voice Model",
|
3 |
+
"Select the voice model to use for the conversion.": "Select the voice model to use for the conversion.",
|
4 |
+
"Index File": "Index File",
|
5 |
+
"Select the index file to use for the conversion.": "Select the index file to use for the conversion.",
|
6 |
+
"Refresh": "Refresh",
|
7 |
+
"Unload Voice": "Unload Voice",
|
8 |
+
"Upload Audio": "Upload Audio",
|
9 |
+
"Select Audio": "Select Audio",
|
10 |
+
"Select the audio to convert.": "Select the audio to convert.",
|
11 |
+
"Advanced Settings": "Advanced Settings",
|
12 |
+
"RVC Settings": "RVC Settings",
|
13 |
+
"Output Path": "Output Path",
|
14 |
+
"Enter output path": "Enter output path",
|
15 |
+
"The path where the output audio will be saved, by default in audio_files/rvc/output.wav": "The path where the output audio will be saved, by default in audio_files/rvc/output.wav",
|
16 |
+
"Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Deletes all audios in assets/audios)",
|
17 |
+
"Export Format": "Export Format",
|
18 |
+
"Select the format to export the audio.": "Select the format to export the audio.",
|
19 |
+
"Split Audio": "Split Audio",
|
20 |
+
"Split the audio into chunks for inference to obtain better results in some cases.": "Split the audio into chunks for inference to obtain better results in some cases.",
|
21 |
+
"Pitch Extractor": "Pitch Extractor",
|
22 |
+
"Pitch extract Algorith.": "Pitch extract Algorith.",
|
23 |
+
"Hop Length": "Hop Length",
|
24 |
+
"Hop length for pitch extraction.": "Hop length for pitch extraction.",
|
25 |
+
"Embedder Model": "Embedder Model",
|
26 |
+
"Model used for learning speaker embedding.": "Model used for learning speaker embedding.",
|
27 |
+
"Autotune": "Autotune",
|
28 |
+
"Apply a soft autotune to your inferences, recommended for singing conversions.": "Apply a soft autotune to your inferences, recommended for singing conversions.",
|
29 |
+
"Pitch": "Pitch",
|
30 |
+
"Adjust the pitch of the audio.": "Adjust the pitch of the audio.",
|
31 |
+
"Filter Radius": "Filter Radius",
|
32 |
+
"If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.",
|
33 |
+
"Search Feature Ratio": "Search Feature Ratio",
|
34 |
+
"Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.",
|
35 |
+
"Volume Envelope": "Volume Envelope",
|
36 |
+
"Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.",
|
37 |
+
"Protect Voiceless Consonants": "Protect Voiceless Consonants",
|
38 |
+
"Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.",
|
39 |
+
"Audio Separation Settings": "Audio Separation Settings",
|
40 |
+
"Use TTA": "Use TTA",
|
41 |
+
"Use Test Time Augmentation.": "Use Test Time Augmentation.",
|
42 |
+
"Batch Size": "Batch Size",
|
43 |
+
"Set the batch size for the separation.": "Set the batch size for the separation.",
|
44 |
+
"Vocals Model": "Vocals Model",
|
45 |
+
"Select the vocals model to use for the separation.": "Select the vocals model to use for the separation.",
|
46 |
+
"Karaoke Model": "Karaoke Model",
|
47 |
+
"Select the karaoke model to use for the separation.": "Select the karaoke model to use for the separation.",
|
48 |
+
"Dereverb Model": "Dereverb Model",
|
49 |
+
"Select the dereverb model to use for the separation.": "Select the dereverb model to use for the separation.",
|
50 |
+
"Deeecho": "Deeecho",
|
51 |
+
"Apply deeecho to the audio.": "Apply deeecho to the audio.",
|
52 |
+
"Deeecho Model": "Deeecho Model",
|
53 |
+
"Select the deeecho model to use for the separation.": "Select the deeecho model to use for the separation.",
|
54 |
+
"Denoise": "Denoise",
|
55 |
+
"Apply denoise to the audio.": "Apply denoise to the audio.",
|
56 |
+
"Denoise Model": "Denoise Model",
|
57 |
+
"Select the denoise model to use for the separation.": "Select the denoise model to use for the separation.",
|
58 |
+
"Audio post-process Settings": "Audio post-process Settings",
|
59 |
+
"Delete Audios": "Delete Audios",
|
60 |
+
"Delete the audios after the conversion.": "Delete the audios after the conversion.",
|
61 |
+
"Reverb": "Reverb",
|
62 |
+
"Apply reverb to the audio.": "Apply reverb to the audio.",
|
63 |
+
"Reverb Room Size": "Reverb Room Size",
|
64 |
+
"Set the room size of the reverb.": "Set the room size of the reverb.",
|
65 |
+
"Reverb Damping": "Reverb Damping",
|
66 |
+
"Set the damping of the reverb.": "Set the damping of the reverb.",
|
67 |
+
"Reverb Wet Gain": "Reverb Wet Gain",
|
68 |
+
"Set the wet gain of the reverb.": "Set the wet gain of the reverb.",
|
69 |
+
"Reverb Dry Gain": "Reverb Dry Gain",
|
70 |
+
"Set the dry gain of the reverb.": "Set the dry gain of the reverb.",
|
71 |
+
"Reverb Width": "Reverb Width",
|
72 |
+
"Set the width of the reverb.": "Set the width of the reverb.",
|
73 |
+
"Vocals Volume": "Vocals Volume",
|
74 |
+
"Adjust the volume of the vocals.": "Adjust the volume of the vocals.",
|
75 |
+
"Instrumentals Volume": "Instrumentals Volume",
|
76 |
+
"Adjust the volume of the Instrumentals.": "Adjust the volume of the Instrumentals.",
|
77 |
+
"Backing Vocals Volume": "Backing Vocals Volume",
|
78 |
+
"Adjust the volume of the backing vocals.": "Adjust the volume of the backing vocals.",
|
79 |
+
"Device Settings": "Device Settings",
|
80 |
+
"Device": "Device",
|
81 |
+
"Select the device to use for the conversion. 0 to ∞ separated by - and for CPU leave only an -": "Select the device to use for the conversion. 0 to ∞ separated by - and for CPU leave only an -",
|
82 |
+
"Convert": "Convert",
|
83 |
+
"Output Information": "Output Information",
|
84 |
+
"The output information will be displayed here.": "The output information will be displayed here.",
|
85 |
+
"Export Audio": "Export Audio",
|
86 |
+
"Music URL": "Music URL",
|
87 |
+
"Download": "Download",
|
88 |
+
"Model URL": "Model URL"
|
89 |
+
}
|
assets/i18n/languages/id_ID.py
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"Voice Model": "Model Suara",
|
3 |
+
"Select the voice model to use for the conversion.": "Pilih model suara untuk digunakan dalam konversi.",
|
4 |
+
"Index File": "Berkas Indeks",
|
5 |
+
"Select the index file to use for the conversion.": "Pilih berkas indeks untuk digunakan dalam konversi.",
|
6 |
+
"Refresh": "Muat Ulang",
|
7 |
+
"Unload Voice": "Hapus Muatan Suara",
|
8 |
+
"Upload Audio": "Unggah Audio",
|
9 |
+
"Select Audio": "Pilih Audio",
|
10 |
+
"Select the audio to convert.": "Pilih audio untuk dikonversi.",
|
11 |
+
"Advanced Settings": "Pengaturan Lanjutan",
|
12 |
+
"RVC Settings": "Pengaturan RVC",
|
13 |
+
"Output Path": "Jalur Keluaran",
|
14 |
+
"Enter output path": "Masukkan jalur keluaran",
|
15 |
+
"The path where the output audio will be saved, by default in audio_files/rvc/output.wav": "Jalur tempat audio keluaran akan disimpan, secara default di audio_files/rvc/output.wav",
|
16 |
+
"Clear Outputs (Deletes all audios in assets/audios)": "Bersihkan Keluaran (Menghapus semua audio di assets/audios)",
|
17 |
+
"Export Format": "Format Ekspor",
|
18 |
+
"Select the format to export the audio.": "Pilih format untuk mengekspor audio.",
|
19 |
+
"Split Audio": "Pisahkan Audio",
|
20 |
+
"Split the audio into chunks for inference to obtain better results in some cases.": "Pisahkan audio menjadi beberapa bagian untuk mendapatkan hasil yang lebih baik dalam beberapa kasus.",
|
21 |
+
"Pitch Extractor": "Ekstraktor Pitch",
|
22 |
+
"Pitch extract Algorith.": "Algoritma ekstraksi pitch.",
|
23 |
+
"Hop Length": "Panjang Hop",
|
24 |
+
"Hop length for pitch extraction.": "Panjang hop untuk ekstraksi pitch.",
|
25 |
+
"Embedder Model": "Model Embedder",
|
26 |
+
"Model used for learning speaker embedding.": "Model yang digunakan untuk mempelajari embedding pembicara.",
|
27 |
+
"Autotune": "Autotune",
|
28 |
+
"Apply a soft autotune to your inferences, recommended for singing conversions.": "Terapkan autotune ringan pada inferensi Anda, disarankan untuk konversi nyanyian.",
|
29 |
+
"Pitch": "Pitch",
|
30 |
+
"Adjust the pitch of the audio.": "Sesuaikan pitch audio.",
|
31 |
+
"Filter Radius": "Radius Filter",
|
32 |
+
"If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jika angkanya lebih besar atau sama dengan tiga, menerapkan penyaringan median pada hasil nada yang dikumpulkan dapat mengurangi pernapasan.",
|
33 |
+
"Search Feature Ratio": "Rasio Fitur Pencarian",
|
34 |
+
"Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Pengaruh yang diberikan oleh berkas indeks; nilai yang lebih tinggi berarti pengaruh lebih besar. Namun, memilih nilai lebih rendah dapat membantu mengurangi artefak dalam audio.",
|
35 |
+
"Volume Envelope": "Envelope Volume",
|
36 |
+
"Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Ganti atau padukan dengan envelope volume keluaran. Semakin dekat rasio ke 1, semakin banyak envelope keluaran yang digunakan.",
|
37 |
+
"Protect Voiceless Consonants": "Lindungi Konsonan Tak Bersuara",
|
38 |
+
"Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Lindungi konsonan khas dan suara napas untuk mencegah distorsi elektroakustik dan artefak lainnya. Mengatur parameter ke nilai maksimum 0.5 memberikan perlindungan penuh. Namun, mengurangi nilai ini dapat mengurangi perlindungan sambil berpotensi mengurangi efek pengindeksan.",
|
39 |
+
"Audio Separation Settings": "Pengaturan Pemisahan Audio",
|
40 |
+
"Use TTA": "Gunakan TTA",
|
41 |
+
"Use Test Time Augmentation.": "Gunakan Test Time Augmentation.",
|
42 |
+
"Batch Size": "Ukuran Batch",
|
43 |
+
"Set the batch size for the separation.": "Atur ukuran batch untuk pemisahan.",
|
44 |
+
"Vocals Model": "Model Vokal",
|
45 |
+
"Select the vocals model to use for the separation.": "Pilih model vokal untuk digunakan dalam pemisahan.",
|
46 |
+
"Karaoke Model": "Model Karaoke",
|
47 |
+
"Select the karaoke model to use for the separation.": "Pilih model karaoke untuk digunakan dalam pemisahan.",
|
48 |
+
"Dereverb Model": "Model Dereverb",
|
49 |
+
"Select the dereverb model to use for the separation.": "Pilih model dereverb untuk digunakan dalam pemisahan.",
|
50 |
+
"Deeecho": "Deeecho",
|
51 |
+
"Apply deeecho to the audio.": "Terapkan deeecho pada audio.",
|
52 |
+
"Deeecho Model": "Model Deeecho",
|
53 |
+
"Select the deeecho model to use for the separation.": "Pilih model deeecho untuk digunakan dalam pemisahan.",
|
54 |
+
"Denoise": "Hilangkan Noise",
|
55 |
+
"Apply denoise to the audio.": "Terapkan penghilangan noise pada audio.",
|
56 |
+
"Denoise Model": "Model Denoise",
|
57 |
+
"Select the denoise model to use for the separation.": "Pilih model denoise untuk digunakan dalam pemisahan.",
|
58 |
+
"Audio post-process Settings": "Pengaturan Pasca-Proses Audio",
|
59 |
+
"Delete Audios": "Hapus Audio",
|
60 |
+
"Delete the audios after the conversion.": "Hapus audio setelah konversi.",
|
61 |
+
"Reverb": "Reverb",
|
62 |
+
"Apply reverb to the audio.": "Terapkan reverb pada audio.",
|
63 |
+
"Reverb Room Size": "Ukuran Ruangan Reverb",
|
64 |
+
"Set the room size of the reverb.": "Atur ukuran ruangan untuk reverb.",
|
65 |
+
"Reverb Damping": "Peredaman Reverb",
|
66 |
+
"Set the damping of the reverb.": "Atur peredaman reverb.",
|
67 |
+
"Reverb Wet Gain": "Gain Basah Reverb",
|
68 |
+
"Set the wet gain of the reverb.": "Atur gain basah untuk reverb.",
|
69 |
+
"Reverb Dry Gain": "Gain Kering Reverb",
|
70 |
+
"Set the dry gain of the reverb.": "Atur gain kering untuk reverb.",
|
71 |
+
"Reverb Width": "Lebar Reverb",
|
72 |
+
"Set the width of the reverb.": "Atur lebar reverb.",
|
73 |
+
"Vocals Volume": "Volume Vokal",
|
74 |
+
"Adjust the volume of the vocals.": "Sesuaikan volume vokal.",
|
75 |
+
"Instrumentals Volume": "Volume Instrumen",
|
76 |
+
"Adjust the volume of the Instrumentals.": "Sesuaikan volume instrumen.",
|
77 |
+
"Backing Vocals Volume": "Volume Vokal Latar",
|
78 |
+
"Adjust the volume of the backing vocals.": "Sesuaikan volume vokal latar.",
|
79 |
+
"Device Settings": "Pengaturan Perangkat",
|
80 |
+
"Device": "Perangkat",
|
81 |
+
"Select the device to use for the conversion. 0 to ∞ separated by - and for CPU leave only an -": "Pilih perangkat untuk digunakan dalam konversi. 0 hingga ∞ dipisahkan dengan - dan untuk CPU biarkan hanya -",
|
82 |
+
"Convert": "Konversi",
|
83 |
+
"Output Information": "Informasi Keluaran",
|
84 |
+
"The output information will be displayed here.": "Informasi keluaran akan ditampilkan di sini.",
|
85 |
+
"Export Audio": "Ekspor Audio",
|
86 |
+
"Music URL": "URL Musik",
|
87 |
+
"Download": "Unduh",
|
88 |
+
"Model URL": "URL Model"
|
89 |
+
}
|
assets/i18n/languages/pt_BR.json
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"Voice Model": "Modelo de Voz",
|
3 |
+
"Select the voice model to use for the conversion.": "Selecione o modelo de voz a ser usado para a conversão.",
|
4 |
+
"Index File": "Arquivo Index",
|
5 |
+
"Select the index file to use for the conversion.": "Selecione o arquivo Index a ser usado para a conversão.",
|
6 |
+
"Refresh": "Atualizar",
|
7 |
+
"Unload Voice": "Descarregar Voz",
|
8 |
+
"Upload Audio": "Carregar Áudio",
|
9 |
+
"Select Audio": "Selecionar Áudio",
|
10 |
+
"Select the audio to convert.": "Selecione o áudio a ser convertido.",
|
11 |
+
"Advanced Settings": "Configurações Avançadas",
|
12 |
+
"RVC Settings": "Configurações RVC",
|
13 |
+
"Output Path": "Caminho de Saída",
|
14 |
+
"Enter output path": "Insira o caminho de saída",
|
15 |
+
"The path where the output audio will be saved, by default in audio_files/rvc/output.wav": "O caminho onde o áudio de saída será salvo, por padrão em audio_files/rvc/output.wav",
|
16 |
+
"Clear Outputs (Deletes all audios in assets/audios)": "Limpar Saídas (Exclui todos os áudios em assets/audios)",
|
17 |
+
"Export Format": "Formato de Exportação",
|
18 |
+
"Select the format to export the audio.": "Selecione o formato para exportar o áudio.",
|
19 |
+
"Split Audio": "Dividir Áudio",
|
20 |
+
"Split the audio into chunks for inference to obtain better results in some cases.": "Divida o áudio em partes para inferência para obter melhores resultados em alguns casos.",
|
21 |
+
"Pitch Extractor": "Extrator de Pitch",
|
22 |
+
"Pitch extract Algorith.": "Algoritmo de Extração de Pitch",
|
23 |
+
"Hop Length": "Hop Length",
|
24 |
+
"Hop length for pitch extraction.": "Hop Length para extração de pitch.",
|
25 |
+
"Embedder Model": "Modelo de Embedding",
|
26 |
+
"Model used for learning speaker embedding.": "Modelo usado para aprendizado de embedding de locutor.",
|
27 |
+
"Autotune": "Autotune",
|
28 |
+
"Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique um autotune suave às suas inferências, recomendado para conversões de canto.",
|
29 |
+
"Pitch": "Pitch",
|
30 |
+
"Adjust the pitch of the audio.": "Ajuste o pitch do áudio.",
|
31 |
+
"Filter Radius": "Raio do Filtro",
|
32 |
+
"If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Se o número for maior ou igual a três, o uso de filtragem mediana nos resultados de tom coletados tem o potencial de diminuir a respiração.",
|
33 |
+
"Search Feature Ratio": "Proporção da Função de Busca",
|
34 |
+
"Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influência exercida pelo arquivo de índice; um valor mais alto corresponde a maior influência. No entanto, optar por valores mais baixos pode ajudar a mitigar artefatos presentes no áudio.",
|
35 |
+
"Volume Envelope": "Envelope de Volume",
|
36 |
+
"Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitua ou misture com o envelope de volume da saída. Quanto mais próximo o valor estiver de 1, mais o envelope de saída será empregado.",
|
37 |
+
"Protect Voiceless Consonants": "Proteger Consoantes Surdas",
|
38 |
+
"Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja consoantes distintas e sons de respiração para evitar rasgos eletroacústicos e outros artefatos. Ajustar o parâmetro para seu valor máximo de 0,5 oferece proteção abrangente. No entanto, reduzir esse valor pode diminuir a extensão da proteção enquanto potencialmente mitiga o efeito de indexação.",
|
39 |
+
"Audio Separation Settings": "Configurações de Separação de Áudio",
|
40 |
+
"Use TTA": "Usar TTA",
|
41 |
+
"Use Test Time Augmentation.": "Usar Aumento de Tempo de Teste.",
|
42 |
+
"Batch Size": "Batch Size",
|
43 |
+
"Set the batch size for the separation.": "Defina o Batch Size para a separação.",
|
44 |
+
"Vocals Model": "Modelo de Vocais",
|
45 |
+
"Select the vocals model to use for the separation.": "Selecione o modelo de vocais a ser usado para a separação.",
|
46 |
+
"Karaoke Model": "Modelo de Karaokê",
|
47 |
+
"Select the karaoke model to use for the separation.": "Selecione o modelo de karaokê a ser usado para a separação.",
|
48 |
+
"Dereverb Model": "Modelo de Dereverb",
|
49 |
+
"Select the dereverb model to use for the separation.": "Selecione o modelo de dereverb a ser usado para a separação.",
|
50 |
+
"Deeecho": "Deeecho",
|
51 |
+
"Apply deeecho to the audio.": "Aplicar deeecho ao áudio.",
|
52 |
+
"Deeecho Model": "Modelo de Deeecho",
|
53 |
+
"Select the deeecho model to use for the separation.": "Selecione o modelo de deeecho a ser usado para a separação.",
|
54 |
+
"Denoise": "Redução de Ruído",
|
55 |
+
"Apply denoise to the audio.": "Aplicar redução de ruído ao áudio.",
|
56 |
+
"Denoise Model": "Modelo de Redução de Ruído",
|
57 |
+
"Select the denoise model to use for the separation.": "Selecione o modelo de redução de ruído a ser usado para a separação.",
|
58 |
+
"Audio post-process Settings": "Configurações de Pós-processamento de Áudio",
|
59 |
+
"Delete Audios": "Excluir Áudios",
|
60 |
+
"Delete the audios after the conversion.": "Excluir os áudios após a conversão.",
|
61 |
+
"Reverb": "Reverberação",
|
62 |
+
"Apply reverb to the audio.": "Aplicar reverberação ao áudio.",
|
63 |
+
"Reverb Room Size": "Tamanho da Sala de Reverberação",
|
64 |
+
"Set the room size of the reverb.": "Definir o tamanho da sala de reverberação.",
|
65 |
+
"Reverb Damping": "Amortecimento da Reverberação",
|
66 |
+
"Set the damping of the reverb.": "Definir o amortecimento da reverberação.",
|
67 |
+
"Reverb Wet Gain": "Ganho Molhado da Reverberação",
|
68 |
+
"Set the wet gain of the reverb.": "Definir o ganho molhado da reverberação.",
|
69 |
+
"Reverb Dry Gain": "Ganho Seco da Reverberação",
|
70 |
+
"Set the dry gain of the reverb.": "Definir o ganho seco da reverberação.",
|
71 |
+
"Reverb Width": "Largura da Reverberação",
|
72 |
+
"Set the width of the reverb.": "Definir a largura da reverberação.",
|
73 |
+
"Vocals Volume": "Volume dos Vocais",
|
74 |
+
"Adjust the volume of the vocals.": "Ajustar o volume dos vocais.",
|
75 |
+
"Instrumentals Volume": "Volume dos Instrumentais",
|
76 |
+
"Adjust the volume of the Instrumentals.": "Ajustar o volume dos instrumentais.",
|
77 |
+
"Backing Vocals Volume": "Volume dos Vocais de Apoio",
|
78 |
+
"Adjust the volume of the backing vocals.": "Ajustar o volume dos vocais de apoio.",
|
79 |
+
"Device Settings": "Configurações do Dispositivo",
|
80 |
+
"Device": "Dispositivo",
|
81 |
+
"Select the device to use for the conversion. 0 to ∞ separated by - and for CPU leave only an -": "Selecione o dispositivo a ser usado para a conversão. 0 a ∞ separados por - e para CPU deixe apenas um -",
|
82 |
+
"Convert": "Converter",
|
83 |
+
"Output Information": "Informações de Saída",
|
84 |
+
"The output information will be displayed here.": "As informações de saída serão exibidas aqui.",
|
85 |
+
"Export Audio": "Exportar Áudio",
|
86 |
+
"Music URL": "URL da Música",
|
87 |
+
"Download": "Baixar",
|
88 |
+
"Model URL": "URL do Modelo"
|
89 |
+
}
|
assets/i18n/scan.py
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import ast
|
2 |
+
import json
|
3 |
+
from pathlib import Path
|
4 |
+
from collections import OrderedDict
|
5 |
+
|
6 |
+
|
7 |
+
def extract_i18n_strings(node):
|
8 |
+
i18n_strings = []
|
9 |
+
|
10 |
+
if (
|
11 |
+
isinstance(node, ast.Call)
|
12 |
+
and isinstance(node.func, ast.Name)
|
13 |
+
and node.func.id == "i18n"
|
14 |
+
):
|
15 |
+
for arg in node.args:
|
16 |
+
if isinstance(arg, ast.Str):
|
17 |
+
i18n_strings.append(arg.s)
|
18 |
+
|
19 |
+
for child_node in ast.iter_child_nodes(node):
|
20 |
+
i18n_strings.extend(extract_i18n_strings(child_node))
|
21 |
+
|
22 |
+
return i18n_strings
|
23 |
+
|
24 |
+
|
25 |
+
def process_file(file_path):
|
26 |
+
with open(file_path, "r", encoding="utf8") as file:
|
27 |
+
code = file.read()
|
28 |
+
if "I18nAuto" in code:
|
29 |
+
tree = ast.parse(code)
|
30 |
+
i18n_strings = extract_i18n_strings(tree)
|
31 |
+
print(file_path, len(i18n_strings))
|
32 |
+
return i18n_strings
|
33 |
+
return []
|
34 |
+
|
35 |
+
|
36 |
+
# Use pathlib for file handling
|
37 |
+
py_files = Path(".").rglob("*.py")
|
38 |
+
|
39 |
+
# Use a set to store unique strings
|
40 |
+
code_keys = set()
|
41 |
+
|
42 |
+
for py_file in py_files:
|
43 |
+
strings = process_file(py_file)
|
44 |
+
code_keys.update(strings)
|
45 |
+
|
46 |
+
print()
|
47 |
+
print("Total unique:", len(code_keys))
|
48 |
+
|
49 |
+
standard_file = "languages/en_US.json"
|
50 |
+
with open(standard_file, "r", encoding="utf-8") as file:
|
51 |
+
standard_data = json.load(file, object_pairs_hook=OrderedDict)
|
52 |
+
standard_keys = set(standard_data.keys())
|
53 |
+
|
54 |
+
# Combine unused and missing keys sections
|
55 |
+
unused_keys = standard_keys - code_keys
|
56 |
+
missing_keys = code_keys - standard_keys
|
57 |
+
|
58 |
+
print("Unused keys:", len(unused_keys))
|
59 |
+
for unused_key in unused_keys:
|
60 |
+
print("\t", unused_key)
|
61 |
+
|
62 |
+
print("Missing keys:", len(missing_keys))
|
63 |
+
for missing_key in missing_keys:
|
64 |
+
print("\t", missing_key)
|
65 |
+
|
66 |
+
code_keys_dict = OrderedDict((s, s) for s in code_keys)
|
67 |
+
|
68 |
+
# Use context manager for writing back to the file
|
69 |
+
with open(standard_file, "w", encoding="utf-8") as file:
|
70 |
+
json.dump(code_keys_dict, file, ensure_ascii=False, indent=4, sort_keys=True)
|
71 |
+
file.write("\n")
|
assets/themes/loadThemes.py
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import os
|
3 |
+
import importlib
|
4 |
+
import gradio as gr
|
5 |
+
|
6 |
+
now_dir = os.getcwd()
|
7 |
+
|
8 |
+
folder = os.path.join(now_dir, "assets", "themes")
|
9 |
+
config_file = os.path.join(now_dir, "assets", "config.json")
|
10 |
+
|
11 |
+
import sys
|
12 |
+
|
13 |
+
sys.path.append(folder)
|
14 |
+
|
15 |
+
|
16 |
+
def get_class(filename):
|
17 |
+
with open(filename, "r", encoding="utf8") as file:
|
18 |
+
for line_number, line in enumerate(file, start=1):
|
19 |
+
if "class " in line:
|
20 |
+
found = line.split("class ")[1].split(":")[0].split("(")[0].strip()
|
21 |
+
return found
|
22 |
+
break
|
23 |
+
return None
|
24 |
+
|
25 |
+
|
26 |
+
def get_list():
|
27 |
+
|
28 |
+
themes_from_files = [
|
29 |
+
os.path.splitext(name)[0]
|
30 |
+
for root, _, files in os.walk(folder, topdown=False)
|
31 |
+
for name in files
|
32 |
+
if name.endswith(".py") and root == folder and name != "loadThemes.py"
|
33 |
+
]
|
34 |
+
|
35 |
+
json_file_path = os.path.join(folder, "themes_list.json")
|
36 |
+
|
37 |
+
try:
|
38 |
+
with open(json_file_path, "r", encoding="utf8") as json_file:
|
39 |
+
themes_from_url = [item["id"] for item in json.load(json_file)]
|
40 |
+
except FileNotFoundError:
|
41 |
+
themes_from_url = []
|
42 |
+
|
43 |
+
combined_themes = set(themes_from_files + themes_from_url)
|
44 |
+
|
45 |
+
return list(combined_themes)
|
46 |
+
|
47 |
+
|
48 |
+
def select_theme(name):
|
49 |
+
selected_file = name + ".py"
|
50 |
+
full_path = os.path.join(folder, selected_file)
|
51 |
+
|
52 |
+
if not os.path.exists(full_path):
|
53 |
+
with open(config_file, "r", encoding="utf8") as json_file:
|
54 |
+
config_data = json.load(json_file)
|
55 |
+
|
56 |
+
config_data["theme"]["file"] = None
|
57 |
+
config_data["theme"]["class"] = name
|
58 |
+
|
59 |
+
with open(config_file, "w", encoding="utf8") as json_file:
|
60 |
+
json.dump(config_data, json_file, indent=2)
|
61 |
+
print(f"Theme {name} successfully selected, restart the App.")
|
62 |
+
gr.Info(f"Theme {name} successfully selected, restart the App.")
|
63 |
+
return
|
64 |
+
|
65 |
+
class_found = get_class(full_path)
|
66 |
+
if class_found:
|
67 |
+
with open(config_file, "r", encoding="utf8") as json_file:
|
68 |
+
config_data = json.load(json_file)
|
69 |
+
|
70 |
+
config_data["theme"]["file"] = selected_file
|
71 |
+
config_data["theme"]["class"] = class_found
|
72 |
+
|
73 |
+
with open(config_file, "w", encoding="utf8") as json_file:
|
74 |
+
json.dump(config_data, json_file, indent=2)
|
75 |
+
print(f"Theme {name} successfully selected, restart the App.")
|
76 |
+
gr.Info(f"Theme {name} successfully selected, restart the App.")
|
77 |
+
else:
|
78 |
+
print(f"Theme {name} was not found.")
|
79 |
+
|
80 |
+
|
81 |
+
def read_json():
|
82 |
+
try:
|
83 |
+
with open(config_file, "r", encoding="utf8") as json_file:
|
84 |
+
data = json.load(json_file)
|
85 |
+
selected_file = data["theme"]["file"]
|
86 |
+
class_name = data["theme"]["class"]
|
87 |
+
|
88 |
+
if selected_file is not None and class_name:
|
89 |
+
return class_name
|
90 |
+
elif selected_file == None and class_name:
|
91 |
+
return class_name
|
92 |
+
else:
|
93 |
+
return "ParityError/Interstellar"
|
94 |
+
except Exception as error:
|
95 |
+
print(f"An error occurred loading the theme: {error}")
|
96 |
+
return "ParityError/Interstellar"
|
97 |
+
|
98 |
+
|
99 |
+
def load_json():
|
100 |
+
try:
|
101 |
+
with open(config_file, "r", encoding="utf8") as json_file:
|
102 |
+
data = json.load(json_file)
|
103 |
+
selected_file = data["theme"]["file"]
|
104 |
+
class_name = data["theme"]["class"]
|
105 |
+
|
106 |
+
if selected_file is not None and class_name:
|
107 |
+
module = importlib.import_module(selected_file[:-3])
|
108 |
+
obtained_class = getattr(module, class_name)
|
109 |
+
instance = obtained_class()
|
110 |
+
print(f"Theme {class_name} successfully loaded.")
|
111 |
+
return instance
|
112 |
+
elif selected_file == None and class_name:
|
113 |
+
return class_name
|
114 |
+
else:
|
115 |
+
print("The theme is incorrect.")
|
116 |
+
return None
|
117 |
+
except Exception as error:
|
118 |
+
print(f"An error occurred loading the theme: {error}")
|
119 |
+
return None
|
assets/themes/themes_list.json
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{"id": "freddyaboulton/dracula_revamped"},
|
3 |
+
{"id": "freddyaboulton/bad-theme-space"},
|
4 |
+
{"id": "gradio/dracula_revamped"},
|
5 |
+
{"id": "abidlabs/dracula_revamped"},
|
6 |
+
{"id": "gradio/dracula_test"},
|
7 |
+
{"id": "abidlabs/dracula_test"},
|
8 |
+
{"id": "gradio/seafoam"},
|
9 |
+
{"id": "gradio/glass"},
|
10 |
+
{"id": "gradio/monochrome"},
|
11 |
+
{"id": "gradio/soft"},
|
12 |
+
{"id": "gradio/default"},
|
13 |
+
{"id": "gradio/base"},
|
14 |
+
{"id": "abidlabs/pakistan"},
|
15 |
+
{"id": "dawood/microsoft_windows"},
|
16 |
+
{"id": "ysharma/steampunk"},
|
17 |
+
{"id": "ysharma/huggingface"},
|
18 |
+
{"id": "gstaff/xkcd"},
|
19 |
+
{"id": "JohnSmith9982/small_and_pretty"},
|
20 |
+
{"id": "abidlabs/Lime"},
|
21 |
+
{"id": "freddyaboulton/this-theme-does-not-exist-2"},
|
22 |
+
{"id": "aliabid94/new-theme"},
|
23 |
+
{"id": "aliabid94/test2"},
|
24 |
+
{"id": "aliabid94/test3"},
|
25 |
+
{"id": "aliabid94/test4"},
|
26 |
+
{"id": "abidlabs/banana"},
|
27 |
+
{"id": "freddyaboulton/test-blue"},
|
28 |
+
{"id": "gstaff/sketch"},
|
29 |
+
{"id": "gstaff/whiteboard"},
|
30 |
+
{"id": "ysharma/llamas"},
|
31 |
+
{"id": "abidlabs/font-test"},
|
32 |
+
{"id": "YenLai/Superhuman"},
|
33 |
+
{"id": "bethecloud/storj_theme"},
|
34 |
+
{"id": "sudeepshouche/minimalist"},
|
35 |
+
{"id": "knotdgaf/gradiotest"},
|
36 |
+
{"id": "ParityError/Interstellar"},
|
37 |
+
{"id": "ParityError/Anime"},
|
38 |
+
{"id": "Ajaxon6255/Emerald_Isle"},
|
39 |
+
{"id": "ParityError/LimeFace"},
|
40 |
+
{"id": "finlaymacklon/smooth_slate"},
|
41 |
+
{"id": "finlaymacklon/boxy_violet"},
|
42 |
+
{"id": "derekzen/stardust"},
|
43 |
+
{"id": "EveryPizza/Cartoony-Gradio-Theme"},
|
44 |
+
{"id": "Ifeanyi/Cyanister"},
|
45 |
+
{"id": "Tshackelton/IBMPlex-DenseReadable"},
|
46 |
+
{"id": "snehilsanyal/scikit-learn"},
|
47 |
+
{"id": "Himhimhim/xkcd"},
|
48 |
+
{"id": "shivi/calm_seafoam"},
|
49 |
+
{"id": "nota-ai/theme"},
|
50 |
+
{"id": "rawrsor1/Everforest"},
|
51 |
+
{"id": "SebastianBravo/simci_css"},
|
52 |
+
{"id": "rottenlittlecreature/Moon_Goblin"},
|
53 |
+
{"id": "abidlabs/test-yellow"},
|
54 |
+
{"id": "abidlabs/test-yellow3"},
|
55 |
+
{"id": "idspicQstitho/dracula_revamped"},
|
56 |
+
{"id": "kfahn/AnimalPose"},
|
57 |
+
{"id": "HaleyCH/HaleyCH_Theme"},
|
58 |
+
{"id": "simulKitke/dracula_test"},
|
59 |
+
{"id": "braintacles/CrimsonNight"},
|
60 |
+
{"id": "wentaohe/whiteboardv2"},
|
61 |
+
{"id": "reilnuud/polite"},
|
62 |
+
{"id": "remilia/Ghostly"},
|
63 |
+
{"id": "Franklisi/darkmode"},
|
64 |
+
{"id": "coding-alt/soft"},
|
65 |
+
{"id": "xiaobaiyuan/theme_land"},
|
66 |
+
{"id": "step-3-profit/Midnight-Deep"},
|
67 |
+
{"id": "xiaobaiyuan/theme_demo"},
|
68 |
+
{"id": "Taithrah/Minimal"},
|
69 |
+
{"id": "Insuz/SimpleIndigo"},
|
70 |
+
{"id": "zkunn/Alipay_Gradio_theme"},
|
71 |
+
{"id": "Insuz/Mocha"},
|
72 |
+
{"id": "xiaobaiyuan/theme_brief"},
|
73 |
+
{"id": "Ama434/434-base-Barlow"},
|
74 |
+
{"id": "Ama434/def_barlow"},
|
75 |
+
{"id": "Ama434/neutral-barlow"},
|
76 |
+
{"id": "dawood/dracula_test"},
|
77 |
+
{"id": "nuttea/Softblue"},
|
78 |
+
{"id": "BlueDancer/Alien_Diffusion"},
|
79 |
+
{"id": "naughtondale/monochrome"},
|
80 |
+
{"id": "Dagfinn1962/standard"}
|
81 |
+
]
|
requirements.txt
CHANGED
@@ -31,4 +31,3 @@ pypresence
|
|
31 |
beautifulsoup4
|
32 |
flask
|
33 |
typing
|
34 |
-
browser_cookie3
|
|
|
31 |
beautifulsoup4
|
32 |
flask
|
33 |
typing
|
|