diff --git a/.idea/dictionaries/bt.xml b/.idea/dictionaries/bt.xml
index a9bebf1881..96e5c2a274 100644
--- a/.idea/dictionaries/bt.xml
+++ b/.idea/dictionaries/bt.xml
@@ -12,7 +12,9 @@
dalle
demuxer
dereferencing
+ downloaders
downvote
+ encodec
fakeyou
ffprobe
greenlight
diff --git a/crates/service/job/inference_job/src/job/job_types/vc/mod.rs b/crates/service/job/inference_job/src/job/job_types/vc/mod.rs
index 041ecf69a1..181429cc16 100644
--- a/crates/service/job/inference_job/src/job/job_types/vc/mod.rs
+++ b/crates/service/job/inference_job/src/job/job_types/vc/mod.rs
@@ -1,4 +1,5 @@
pub mod process_single_vc_job;
pub mod rvc_v2;
pub mod so_vits_svc;
-pub mod softvc;
\ No newline at end of file
+pub mod softvc;
+pub mod vall_e_x_temp;
diff --git a/crates/service/job/inference_job/src/job/job_types/vc/vall_e_x_temp/mod.rs b/crates/service/job/inference_job/src/job/job_types/vc/vall_e_x_temp/mod.rs
new file mode 100644
index 0000000000..d1186b0820
--- /dev/null
+++ b/crates/service/job/inference_job/src/job/job_types/vc/vall_e_x_temp/mod.rs
@@ -0,0 +1 @@
+pub mod model_downloaders;
\ No newline at end of file
diff --git a/crates/service/job/inference_job/src/job/job_types/vc/vall_e_x_temp/model_downloaders.rs b/crates/service/job/inference_job/src/job/job_types/vc/vall_e_x_temp/model_downloaders.rs
new file mode 100644
index 0000000000..e04841fc72
--- /dev/null
+++ b/crates/service/job/inference_job/src/job/job_types/vc/vall_e_x_temp/model_downloaders.rs
@@ -0,0 +1,62 @@
+use crate::util::model_downloader::ModelDownloader;
+
+// Core models
+
+crate::impl_model_downloader!(
+ VallExEncodec,
+ "vall-e-x encodec model",
+ "VALL_E_X_CLOUD_PATH_ENCODEC",
+ "/dependencies/zero_shot_tts/vall-e-x_1.0/encodec_pytorch_model.bin",
+ "VALL_E_X_FS_PATH_ENCODEC",
+ "/tmp/downloads/vall_e_x/encodec_pytorch_model.bin"
+);
+
+crate::impl_model_downloader!(
+ VallExModel,
+ "vall-e-x model",
+ "VALL_E_X_CLOUD_PATH_MODEL",
+ "/dependencies/zero_shot_tts/vall-e-x_1.0/vallex-checkpoint.pt",
+ "VALL_E_X_FS_PATH_MODEL",
+ "/tmp/downloads/vall_e_x/vallex-checkpoint.pt"
+);
+
+// Whisper (Medium)
+
+crate::impl_model_downloader!(
+ VallExWhisperMediumFlax,
+ "vall-e-x whisper medium flax_model.msgpack",
+ "VALL_E_X_CLOUD_PATH_WM_FLAX",
+ "/dependencies/zero_shot_tts/vall-e-x_1.0/whisper-medium/flax_model.msgpack ",
+ "VALL_E_X_FS_PATH_WM_FLAX",
+ "/tmp/downloads/vall_e_x/whisper-medium/flax_model.msgpack "
+);
+
+// TODO (remaining files)
+
+// Whisper (Large)
+
+// TODO (remaining files)
+
+pub struct VallExDownloaders {
+ pub encodec: VallExEncodec,
+ pub model: VallExModel,
+ pub whisper_medium_flax: VallExWhisperMediumFlax,
+}
+
+impl VallExDownloaders {
+ pub fn build_all_from_env() -> Self {
+ Self {
+ encodec: VallExEncodec::from_env(),
+ model: VallExModel::from_env(),
+ whisper_medium_flax: VallExWhisperMediumFlax::from_env(),
+ }
+ }
+
+ pub fn all_downloaders(&self) -> Vec<&dyn ModelDownloader> {
+ vec![
+ &self.encodec,
+ &self.model,
+ &self.whisper_medium_flax,
+ ]
+ }
+}