diff --git a/crates/cli/dev-database-seed/src/seeding/model_weights.rs b/crates/cli/dev-database-seed/src/seeding/model_weights.rs index 171d3a5942..987fdea2bf 100644 --- a/crates/cli/dev-database-seed/src/seeding/model_weights.rs +++ b/crates/cli/dev-database-seed/src/seeding/model_weights.rs @@ -686,6 +686,7 @@ Noosphere by skumerz + dalcefoPainting + 饭特稀V08 by zhazhahui345 + GhostMix pub async fn seed_workflows_for_testing_inference(mysql_pool: &Pool, user_token: UserToken) -> AnyhowResult<()>{ let model_weight_token1 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously(); let model_weight_token2 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously(); + let model_weight_token3 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously(); let mut path_to_comfy = get_seed_tool_data_root(); path_to_comfy.push("models/workflows/comfyui/workflow_api.json"); @@ -1061,9 +1062,9 @@ pub async fn seed_weights(mysql_pool: &Pool) -> AnyhowResult<()> { // original_seed_weights(mysql_pool,user_token).await?; // seed_weights_for_user_token(mysql_pool, user_token).await?; // seed_weights_for_paging(mysql_pool,user_token).await?; - seed_weights_for_testing_inference(mysql_pool,user_token.clone()).await?; - println!("TESTING DOWLOAD"); - test_seed_weights_files().await?; - seed_workflows_for_testing_inference(mysql_pool,user_token.clone()).await?; + // seed_weights_for_testing_inference(mysql_pool,user_token.clone()).await?; + // println!("TESTING DOWLOAD"); + // test_seed_weights_files().await?; + // seed_workflows_for_testing_inference(mysql_pool,user_token.clone()).await?; Ok(()) } diff --git a/crates/lib/api_clients/cloud_storage/src/remote_file_manager/media_descriptor.rs b/crates/lib/api_clients/cloud_storage/src/remote_file_manager/media_descriptor.rs index d969193271..3e0c949642 100644 --- a/crates/lib/api_clients/cloud_storage/src/remote_file_manager/media_descriptor.rs +++ b/crates/lib/api_clients/cloud_storage/src/remote_file_manager/media_descriptor.rs @@ -1,4 +1,5 @@ use crate::remote_file_manager::file_descriptor::FileDescriptor; + // TODO ASK BRANDON WHAT path should this be? const MEDIA_FILE_DIRECTORY: &str = "/media"; @@ -20,3 +21,22 @@ impl FileDescriptor for MediaImagePngDescriptor { true } } + +pub struct MediaVideoMp4Descriptor; +impl FileDescriptor for MediaVideoMp4Descriptor { + fn remote_directory_path(&self) -> &str { + MEDIA_FILE_DIRECTORY + } + + fn get_suffix(&self) -> String { + "mp4".to_string() + } + + fn get_prefix(&self) -> String { + "video".to_string() + } + + fn is_public(&self) -> bool { + true + } +} diff --git a/crates/lib/api_clients/cloud_storage/src/remote_file_manager/remote_cloud_bucket_details.rs b/crates/lib/api_clients/cloud_storage/src/remote_file_manager/remote_cloud_bucket_details.rs index 9ea88495a7..c99b7391a8 100644 --- a/crates/lib/api_clients/cloud_storage/src/remote_file_manager/remote_cloud_bucket_details.rs +++ b/crates/lib/api_clients/cloud_storage/src/remote_file_manager/remote_cloud_bucket_details.rs @@ -1,3 +1,4 @@ +use crate::remote_file_manager::media_descriptor; use crate::remote_file_manager::weights_descriptor::{self}; use super::file_descriptor::FileDescriptor; @@ -28,6 +29,7 @@ impl RemoteCloudBucketDetails { pub fn file_descriptor_from_bucket_details(&self) -> Box { match self.prefix.as_str() { + // Weights "loRA" => Box::new(weights_descriptor::WeightsLoRADescriptor {}), "sd15" => Box::new(weights_descriptor::WeightsSD15Descriptor {}), "sdxl" => Box::new(weights_descriptor::WeightsSDXLDescriptor {}), @@ -41,6 +43,19 @@ impl RemoteCloudBucketDetails { }, "svc" => Box::new(weights_descriptor::WeightsSVCDescriptor {}), "workflow" => Box::new(weights_descriptor::WeightsWorkflowDescriptor {}), + // Media + "video" => { + match self.suffix.as_str() { + "mp4" => Box::new(media_descriptor::MediaVideoMp4Descriptor {}), + _ => panic!("Unknown suffix: {}",self.suffix) + } + }, + "image" => { + match self.suffix.as_str() { + "png" => Box::new(media_descriptor::MediaImagePngDescriptor {}), + _ => panic!("Unknown suffix: {}",self.suffix) + } + }, _ => panic!("Unknown prefix: {}", self.prefix) } } diff --git a/crates/lib/api_clients/cloud_storage/src/remote_file_manager/weights_descriptor.rs b/crates/lib/api_clients/cloud_storage/src/remote_file_manager/weights_descriptor.rs index 0bbbfac9ce..b5072ffa96 100644 --- a/crates/lib/api_clients/cloud_storage/src/remote_file_manager/weights_descriptor.rs +++ b/crates/lib/api_clients/cloud_storage/src/remote_file_manager/weights_descriptor.rs @@ -189,4 +189,4 @@ impl FileDescriptor for WeightsWorkflowDescriptor { fn is_public(&self) -> bool { true } -} \ No newline at end of file +} diff --git a/crates/lib/mysql_queries/src/payloads/generic_inference_args/workflow_payload.rs b/crates/lib/mysql_queries/src/payloads/generic_inference_args/workflow_payload.rs index 8f662a22b3..d60c9b1432 100644 --- a/crates/lib/mysql_queries/src/payloads/generic_inference_args/workflow_payload.rs +++ b/crates/lib/mysql_queries/src/payloads/generic_inference_args/workflow_payload.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::model_weights::ModelWeightToken; #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] @@ -27,4 +28,12 @@ pub struct WorkflowArgs { #[serde(rename = "json_modifications")] #[serde(skip_serializing_if = "Option::is_none")] pub maybe_json_modifications: Option>, + + #[serde(rename = "in")] + #[serde(skip_serializing_if = "Option::is_none")] + pub maybe_input_file: Option, + + #[serde(rename = "out")] + #[serde(skip_serializing_if = "Option::is_none")] + pub maybe_output_path: Option, } diff --git a/crates/service/job/inference_job/src/job/job_types/workflow/comfy_ui/validate_job.rs b/crates/service/job/inference_job/src/job/job_types/workflow/comfy_ui/validate_job.rs index 989a07e813..a82046ef20 100644 --- a/crates/service/job/inference_job/src/job/job_types/workflow/comfy_ui/validate_job.rs +++ b/crates/service/job/inference_job/src/job/job_types/workflow/comfy_ui/validate_job.rs @@ -4,16 +4,18 @@ use anyhow::anyhow; use mysql_queries::payloads::generic_inference_args::generic_inference_args::{InferenceCategoryAbbreviated, PolymorphicInferenceArgs}; use mysql_queries::payloads::generic_inference_args::workflow_payload::{NewValue}; use mysql_queries::queries::generic_inference::job::list_available_generic_inference_jobs::AvailableInferenceJob; +use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::model_weights::ModelWeightToken; use crate::job::job_loop::process_single_job_error::ProcessSingleJobError; pub struct JobArgs<'a> { pub workflow_source: &'a ModelWeightToken, + pub output_path: &'a String, pub maybe_json_modifications: &'a Option>, pub maybe_sd_model: &'a Option, pub maybe_lora_model: &'a Option, - + pub maybe_input_file: &'a Option, } pub fn validate_job(job: &AvailableInferenceJob) -> Result { @@ -58,11 +60,20 @@ pub fn validate_job(job: &AvailableInferenceJob) -> Result args, + None => { + return Err(ProcessSingleJobError::from_anyhow_error(anyhow!("No output file provided!"))); + } + }; + Ok(JobArgs { workflow_source, + output_path, maybe_sd_model: &inference_args.maybe_sd_model, maybe_lora_model: &inference_args.maybe_lora_model, maybe_json_modifications: &inference_args.maybe_json_modifications, + maybe_input_file: &inference_args.maybe_input_file, }) } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/workflows/enqueue_comfy_ui.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/workflows/enqueue_comfy_ui.rs index 02d8694a46..a796f1b2d4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/workflows/enqueue_comfy_ui.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/workflows/enqueue_comfy_ui.rs @@ -19,6 +19,7 @@ use mysql_queries::payloads::generic_inference_args::generic_inference_args::{Ge use mysql_queries::payloads::generic_inference_args::workflow_payload::{NewValue, WorkflowArgs}; use mysql_queries::queries::generic_inference::web::insert_generic_inference_job::{insert_generic_inference_job, InsertGenericInferenceArgs}; use tokens::tokens::generic_inference_jobs::InferenceJobToken; +use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::model_weights::ModelWeightToken; use tokens::tokens::users::UserToken; @@ -44,6 +45,8 @@ pub struct EnqueueComfyRequest { maybe_negative_prompt: Option, maybe_json_modifications: Option>, maybe_workflow_config: Option, + maybe_input_file: Option, + maybe_output_path: Option, creator_set_visibility: Option, } @@ -178,6 +181,8 @@ pub async fn enqueue_comfy_ui_handler( maybe_lora_model: request.maybe_lora_model.clone(), maybe_json_modifications: request.maybe_json_modifications.clone(), maybe_workflow_config: request.maybe_workflow_config.clone(), + maybe_input_file: request.maybe_input_file.clone(), + maybe_output_path: request.maybe_output_path.clone(), }; info!("Creating ComfyUI job record...");