From d849b8f2556f54a2105fcbee72e84e07c22cd3eb Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 22 Aug 2025 02:49:39 -0400 Subject: [PATCH] midjourney events (#776) Not sure I like generating batches clientside. We'll need to remove this later. --- .../upload_image_media_file_from_file.rs | 9 ++ .../recipes/upload_media_file_from_file.rs | 1 + .../handle_generic_bg_removal_artcraft.rs | 1 + .../fal_background_removal_command.rs | 1 + ...ybe_handle_text_to_image_complete_event.rs | 83 +++++++++++++++++++ .../services/midjourney/threads/events/mod.rs | 1 + .../threads/midjourney_long_polling_thread.rs | 21 +++++ .../src/services/midjourney/threads/mod.rs | 3 +- .../sora/threads/sora_task_polling_thread.rs | 1 + ...ybe_handle_text_to_image_complete_event.rs | 4 +- .../storyteller/threads/events/mod.rs | 6 +- .../insert_media_file_from_file_upload.rs | 4 + .../engine/create_scene_handler.rs | 1 + .../engine/process_upload_media_file.rs | 1 + .../upload_snapshot_media_file_handler.rs | 1 + .../upload/upload_audio_media_file_handler.rs | 1 + .../upload_engine_asset_media_file_handler.rs | 1 + .../process_upload_media_file.rs | 1 + .../upload/upload_image_media_file_handler.rs | 14 +++- ...oad_new_engine_asset_media_file_handler.rs | 1 + .../upload_new_scene_media_file_handler.rs | 1 + .../upload_pmx_media_file_handler.rs | 1 + ...pload_scene_snapshot_media_file_handler.rs | 1 + .../upload_new_video_media_file_handler.rs | 1 + .../upload_video_media_file_handler.rs | 1 + 25 files changed, 154 insertions(+), 7 deletions(-) create mode 100644 crates/desktop/artcraft/src/services/midjourney/threads/events/maybe_handle_text_to_image_complete_event.rs create mode 100644 crates/desktop/artcraft/src/services/midjourney/threads/events/mod.rs diff --git a/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs b/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs index fef5fb2b89..4585288b8d 100644 --- a/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs +++ b/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs @@ -47,6 +47,11 @@ pub struct UploadImageFromFileArgs<'a, P: AsRef> { // /// If provided, this is the service provider that created the image. // /// NOTE: Cannot set `is_intermediate_system_file = true` if this is set. // pub maybe_generation_provider: Option, + + /// If provided, this groups the file into a batch + /// TODO: This shouldn't be set clientside without the backend generating the token + /// and cryptographically securing it. But we need to go fast here. + pub maybe_batch_token: Option<&'a BatchGenerationToken>, } @@ -81,6 +86,10 @@ pub async fn upload_image_media_file_from_file>( if let Some(prompt_token) = &args.maybe_prompt_token { form = form.text("maybe_prompt_token", prompt_token.to_string()); } + + if let Some(batch_token) = &args.maybe_batch_token { + form = form.text("maybe_batch_token", batch_token.to_string()); + } let mut request_builder = client.post(url) .header("User-Agent", USER_AGENT) diff --git a/crates/api_clients/storyteller_client/src/recipes/upload_media_file_from_file.rs b/crates/api_clients/storyteller_client/src/recipes/upload_media_file_from_file.rs index ad68591cf3..e545c6f1e1 100644 --- a/crates/api_clients/storyteller_client/src/recipes/upload_media_file_from_file.rs +++ b/crates/api_clients/storyteller_client/src/recipes/upload_media_file_from_file.rs @@ -57,6 +57,7 @@ pub async fn upload_media_file_from_file>( path, is_intermediate_system_file: false, maybe_prompt_token, + maybe_batch_token: None, }).await; match result { Ok(result) => Ok(UploadMediaFileSuccessResponse { diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/generic/handle_generic_bg_removal_artcraft.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/generic/handle_generic_bg_removal_artcraft.rs index 26ba520514..b3113b4207 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/generic/handle_generic_bg_removal_artcraft.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/generic/handle_generic_bg_removal_artcraft.rs @@ -128,6 +128,7 @@ async fn upload_image_from_base64_bytes( path: temp_file, is_intermediate_system_file: true, // NB: Probably not essential to keep this. maybe_prompt_token: None, // NB: Not used for bg removal. + maybe_batch_token: None, // NB: Not used for bg removal. }).await .map_err(|err| { error!("Failed to upload image media file: {:?}", err); diff --git a/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs b/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs index 7c8ce5977d..b9bcd97af6 100644 --- a/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs +++ b/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs @@ -262,6 +262,7 @@ pub async fn remove_background( path: result_filename, is_intermediate_system_file: true, // NB: Probably not essential to keep this. maybe_prompt_token: None, // NB: Not used for bg removal. + maybe_batch_token: None, // NB: Not used for bg removal. }).await?; // TODO: Don't re-request to simply build MediaLinks (or CDN URL). Get those from the upload API in one turn. diff --git a/crates/desktop/artcraft/src/services/midjourney/threads/events/maybe_handle_text_to_image_complete_event.rs b/crates/desktop/artcraft/src/services/midjourney/threads/events/maybe_handle_text_to_image_complete_event.rs new file mode 100644 index 0000000000..a081f9b869 --- /dev/null +++ b/crates/desktop/artcraft/src/services/midjourney/threads/events/maybe_handle_text_to_image_complete_event.rs @@ -0,0 +1,83 @@ +use crate::core::events::basic_sendable_event_trait::BasicSendableEvent; +use crate::core::events::functional_events::text_to_image_generation_complete_event::{GeneratedImage, TextToImageGenerationCompleteEvent}; +use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; +use anyhow::anyhow; +use artcraft_api_defs::jobs::list_session_jobs::{ListSessionJobsItem, ListSessionResultDetailsResponse}; +use enums::tauri::tasks::task_type::TaskType; +use enums::tauri::ux::tauri_command_caller::TauriCommandCaller; +use errors::AnyhowResult; +use log::{error, warn}; +use sqlite_tasks::queries::list_tasks_by_provider_and_status::{list_tasks_by_provider_and_status, ListTasksByProviderAndStatusArgs, Task, TaskList}; +use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet; +use storyteller_client::media_files::list_batch_generated_redux_media_files::list_batch_generated_redux_media_files; +use tauri::AppHandle; +use tokens::tokens::batch_generations::BatchGenerationToken; +use tokens::tokens::media_files::MediaFileToken; + +pub async fn maybe_handle_text_to_image_complete_event( + app: &AppHandle, + app_env_configs: &AppEnvConfigs, + maybe_creds: Option<&StorytellerCredentialSet>, + task: &Task, + batch_token: &BatchGenerationToken, +) -> AnyhowResult<()> { + + match task.task_type { + TaskType::ImageGeneration => {} // NB: Fall-through + _ => return Ok(()), + } + + match task.frontend_caller { + Some(TauriCommandCaller::TextToImage) => {} // NB: Fall-through + _ => return Ok(()), + } + + let event = handle_batch( + app, + app_env_configs, + maybe_creds, + task, + batch_token, + ).await?; + + + if let Err(err) = event.send(&app) { + error!("Failed to send TextToImageGenerationCompleteEvent: {:?}", err); // Fail open + } + + Ok(()) +} + +async fn handle_batch( + app: &AppHandle, + app_env_configs: &AppEnvConfigs, + maybe_creds: Option<&StorytellerCredentialSet>, + task: &Task, + batch_token: &BatchGenerationToken, +) -> AnyhowResult { + + let result = list_batch_generated_redux_media_files( + &app_env_configs.storyteller_host, + maybe_creds, + batch_token, + ).await?; + + if result.media_files.is_empty() { + return Err(anyhow!("No media files found for batch token: {}", batch_token)); + } + + let media_files = result.media_files + .into_iter() + .map(|file| GeneratedImage { + media_token: file.token, + cdn_url: file.media_links.cdn_url, + maybe_thumbnail_template: file.media_links.maybe_thumbnail_template, + }) + .collect(); + + Ok(TextToImageGenerationCompleteEvent { + generated_images: media_files, + maybe_frontend_subscriber_id: task.frontend_subscriber_id.clone(), + maybe_frontend_subscriber_payload: task.frontend_subscriber_payload.clone(), + }) +} diff --git a/crates/desktop/artcraft/src/services/midjourney/threads/events/mod.rs b/crates/desktop/artcraft/src/services/midjourney/threads/events/mod.rs new file mode 100644 index 0000000000..3475003cdb --- /dev/null +++ b/crates/desktop/artcraft/src/services/midjourney/threads/events/mod.rs @@ -0,0 +1 @@ +pub (super) mod maybe_handle_text_to_image_complete_event; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/services/midjourney/threads/midjourney_long_polling_thread.rs b/crates/desktop/artcraft/src/services/midjourney/threads/midjourney_long_polling_thread.rs index 05acae1b14..a3ef41e179 100644 --- a/crates/desktop/artcraft/src/services/midjourney/threads/midjourney_long_polling_thread.rs +++ b/crates/desktop/artcraft/src/services/midjourney/threads/midjourney_long_polling_thread.rs @@ -6,6 +6,7 @@ use crate::core::state::data_dir::app_data_root::AppDataRoot; use crate::core::state::data_dir::trait_data_subdir::DataSubdir; use crate::core::state::task_database::TaskDatabase; use crate::services::midjourney::state::midjourney_credential_manager::MidjourneyCredentialManager; +use crate::services::midjourney::threads::events::maybe_handle_text_to_image_complete_event::maybe_handle_text_to_image_complete_event; use crate::services::midjourney::utils::download_midjourney_image::download_midjourney_image; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use artcraft_api_defs::prompts::create_prompt::CreatePromptRequest; @@ -35,6 +36,7 @@ use storyteller_client::error::storyteller_error::StorytellerError; use storyteller_client::media_files::upload_image_media_file_from_file::{upload_image_media_file_from_file, UploadImageFromFileArgs}; use storyteller_client::prompts::create_prompt::create_prompt; use tauri::AppHandle; +use tokens::tokens::batch_generations::BatchGenerationToken; use url::Url; static PENDING_STATUSES : Lazy> = Lazy::new(|| { @@ -263,6 +265,12 @@ async fn upload_midjourney_batch( info!("Created prompt: {:?}", &prompt_response.prompt_token); + // TODO: Move this from clientside to the backend. + // The first upload should produce a batch token that we can reuse. + let batch_token = BatchGenerationToken::generate(); + + info!("Using synthetic batch token: {:?}", &batch_token); + for index in 0..4 { info!("Downloading generated Midjourney file..."); @@ -297,6 +305,7 @@ async fn upload_midjourney_batch( path: &download_path, is_intermediate_system_file: false, maybe_prompt_token: Some(&prompt_response.prompt_token), + maybe_batch_token: Some(&batch_token), }).await; match result { @@ -345,6 +354,18 @@ async fn upload_midjourney_batch( error!("Failed to send GenerationCompleteEvent: {:?}", err); // Fail open } + let result = maybe_handle_text_to_image_complete_event( + app_handle, + app_env_configs, + Some(storyteller_creds), + local_task, + &batch_token, + ).await; + + if let Err(err) = result { + error!("Failed to send text-to-image complete event: {:?}", err); + } + Ok(()) } diff --git a/crates/desktop/artcraft/src/services/midjourney/threads/mod.rs b/crates/desktop/artcraft/src/services/midjourney/threads/mod.rs index 13b80af3cc..b4be5d8ad1 100644 --- a/crates/desktop/artcraft/src/services/midjourney/threads/mod.rs +++ b/crates/desktop/artcraft/src/services/midjourney/threads/mod.rs @@ -1 +1,2 @@ -pub mod midjourney_long_polling_thread; \ No newline at end of file +pub mod midjourney_long_polling_thread; +mod events; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs index 7a47726f38..042e0c33ad 100644 --- a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs +++ b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs @@ -141,6 +141,7 @@ async fn polling_loop( path: download_path, is_intermediate_system_file: false, maybe_prompt_token: None, // TODO: this should be added soon. + maybe_batch_token: None, // TODO: This should be added soon. }).await?; info!("Uploaded to API backend: {:?}", result.media_file_token); diff --git a/crates/desktop/artcraft/src/services/storyteller/threads/events/maybe_handle_text_to_image_complete_event.rs b/crates/desktop/artcraft/src/services/storyteller/threads/events/maybe_handle_text_to_image_complete_event.rs index 56952610bb..058ea60e4d 100644 --- a/crates/desktop/artcraft/src/services/storyteller/threads/events/maybe_handle_text_to_image_complete_event.rs +++ b/crates/desktop/artcraft/src/services/storyteller/threads/events/maybe_handle_text_to_image_complete_event.rs @@ -69,7 +69,7 @@ pub async fn maybe_handle_text_to_image_complete_event( Ok(()) } -pub async fn handle_single( +async fn handle_single( app: &AppHandle, task: &Task, job: &ListSessionJobsItem, @@ -86,7 +86,7 @@ pub async fn handle_single( }) } -pub async fn handle_batch( +async fn handle_batch( app: &AppHandle, app_env_configs: &AppEnvConfigs, maybe_creds: Option<&StorytellerCredentialSet>, diff --git a/crates/desktop/artcraft/src/services/storyteller/threads/events/mod.rs b/crates/desktop/artcraft/src/services/storyteller/threads/events/mod.rs index ca60c55645..fa576b10ce 100644 --- a/crates/desktop/artcraft/src/services/storyteller/threads/events/mod.rs +++ b/crates/desktop/artcraft/src/services/storyteller/threads/events/mod.rs @@ -1,3 +1,3 @@ -pub mod maybe_handle_inpainting_complete_event; -pub mod maybe_handle_text_to_image_complete_event; -pub mod maybe_send_background_removal_complete_event; \ No newline at end of file +pub (super) mod maybe_handle_inpainting_complete_event; +pub (super) mod maybe_handle_text_to_image_complete_event; +pub (super) mod maybe_send_background_removal_complete_event; \ No newline at end of file diff --git a/crates/schema/database/mysql_queries/src/queries/media_files/create/specialized_insert/insert_media_file_from_file_upload.rs b/crates/schema/database/mysql_queries/src/queries/media_files/create/specialized_insert/insert_media_file_from_file_upload.rs index 3a4fa234e9..f22c32ddfb 100644 --- a/crates/schema/database/mysql_queries/src/queries/media_files/create/specialized_insert/insert_media_file_from_file_upload.rs +++ b/crates/schema/database/mysql_queries/src/queries/media_files/create/specialized_insert/insert_media_file_from_file_upload.rs @@ -12,6 +12,7 @@ use enums::by_table::media_files::media_file_type::MediaFileType; use enums::common::visibility::Visibility; use errors::AnyhowResult; use tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken; +use tokens::tokens::batch_generations::BatchGenerationToken; use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::prompts::PromptToken; use tokens::tokens::users::UserToken; @@ -45,6 +46,7 @@ pub struct InsertMediaFileFromUploadArgs<'a> { pub sha256_checksum: &'a str, pub maybe_prompt_token: Option<&'a PromptToken>, + pub maybe_batch_token: Option<&'a BatchGenerationToken>, pub maybe_title: Option<&'a str>, pub maybe_duration_millis: Option, @@ -116,6 +118,7 @@ SET checksum_sha2 = ?, maybe_prompt_token = ?, + maybe_batch_token = ?, maybe_title = ?, maybe_duration_millis = ?, @@ -161,6 +164,7 @@ SET args.sha256_checksum, args.maybe_prompt_token.map(|t| t.as_str()), + args.maybe_batch_token.map(|t| t.as_str()), args.maybe_title, args.maybe_duration_millis, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs index 2a6dfbbf08..95a0cf722b 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs @@ -206,6 +206,7 @@ pub async fn create_scene_handler( maybe_animation_type: None, maybe_mime_type: Some(mime_type), maybe_prompt_token: None, + maybe_batch_token: None, file_size_bytes: file_size_bytes as u64, maybe_duration_millis: None, sha256_checksum: &hash, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/process_upload_media_file.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/process_upload_media_file.rs index f1f68be53e..d77545b1b9 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/process_upload_media_file.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/process_upload_media_file.rs @@ -333,6 +333,7 @@ pub async fn process_upload_media_file( maybe_engine_category: None, maybe_animation_type: None, maybe_prompt_token: None, + maybe_batch_token: None, maybe_mime_type: Some(mime_type), file_size_bytes: file_size_bytes as u64, maybe_duration_millis: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs index 0b966ce0bf..f343672924 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs @@ -247,6 +247,7 @@ pub async fn upload_snapshot_media_file_handler( maybe_engine_category: None, maybe_animation_type: None, maybe_prompt_token: None, + maybe_batch_token: None, maybe_mime_type: Some(&mimetype), file_size_bytes: file_size_bytes as u64, maybe_duration_millis: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs index 3079c1acef..a78bfeb073 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs @@ -325,6 +325,7 @@ pub async fn upload_audio_media_file_handler( maybe_engine_category: None, maybe_animation_type: None, maybe_prompt_token: None, + maybe_batch_token: None, maybe_mime_type: Some(&mimetype), file_size_bytes: file_size_bytes as u64, maybe_duration_millis, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs index 65dee3efd9..ebc3a97a67 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs @@ -210,6 +210,7 @@ pub async fn upload_engine_asset_media_file_handler( creator_ip_address: &ip_address, creator_set_visibility, maybe_prompt_token: None, + maybe_batch_token: None, upload_type: UploadType::Filesystem, maybe_engine_category: upload_media_request.maybe_engine_category, maybe_animation_type: upload_media_request.maybe_animation_type, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs index a2fa1063cd..7bc921644a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs @@ -365,6 +365,7 @@ pub async fn process_upload_media_file( upload_type, maybe_engine_category: None, maybe_prompt_token: None, + maybe_batch_token: None, maybe_animation_type: None, maybe_mime_type: Some(mime_type), file_size_bytes: file_size_bytes as u64, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs index d66d5f4b91..ac60314e40 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs @@ -26,6 +26,7 @@ use mimetypes::mimetype_for_bytes::get_mimetype_for_bytes; use mimetypes::mimetype_to_extension::mimetype_to_extension; use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_idempotency_token; use mysql_queries::queries::media_files::create::specialized_insert::insert_media_file_from_file_upload::{insert_media_file_from_file_upload, InsertMediaFileFromUploadArgs, UploadType}; +use tokens::tokens::batch_generations::BatchGenerationToken; use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::prompts::PromptToken; @@ -62,7 +63,13 @@ pub struct UploadImageMediaFileForm { #[schema(value_type = Option, format = Binary)] maybe_prompt_token: Option>, - /// Optional: Whether this is a system file (eg. cover files we should hide) + /// Optional: Batch associated with this image + /// NOTE: Cannot set `is_intermediate_system_file = true` if this is set. + #[multipart(limit = "2 KiB")] + #[schema(value_type = Option, format = Binary)] + maybe_batch_token: Option>, + + /// Optional: Whether this is a system file (e.g. cover files we should hide) #[multipart(limit = "2 KiB")] #[schema(value_type = Option, format = Binary)] is_intermediate_system_file: Option>, @@ -271,6 +278,10 @@ pub async fn upload_image_media_file_handler( let maybe_prompt_token = form.maybe_prompt_token .as_ref() .map(|token| token.0.clone()); + + let maybe_batch_token = form.maybe_batch_token + .as_ref() + .map(|token| token.0.clone()); let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { maybe_media_class: Some(MediaFileClass::Image), @@ -284,6 +295,7 @@ pub async fn upload_image_media_file_handler( maybe_animation_type: None, maybe_mime_type: Some(&mimetype), maybe_prompt_token: maybe_prompt_token.as_ref(), + maybe_batch_token: maybe_batch_token.as_ref(), file_size_bytes: file_size_bytes as u64, maybe_duration_millis: None, sha256_checksum: &hash, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs index a199f786f2..9b1f31f788 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs @@ -207,6 +207,7 @@ pub async fn upload_new_engine_asset_media_file_handler( creator_set_visibility: file_info.creator_set_visibility, upload_type: UploadType::Filesystem, maybe_prompt_token: None, + maybe_batch_token: None, maybe_engine_category: Some(file_info.engine_category), maybe_animation_type: file_info.maybe_animation_type, maybe_mime_type: Some(file_info.mimetype), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs index 89eb469615..c7fb4447b0 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs @@ -231,6 +231,7 @@ pub async fn upload_new_scene_media_file_handler( creator_ip_address: &ip_address, creator_set_visibility, maybe_prompt_token: None, + maybe_batch_token: None, upload_type: UploadType::Filesystem, maybe_engine_category: Some(MediaFileEngineCategory::Scene), maybe_animation_type: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs index a995b8916f..7f94b2d9a3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs @@ -265,6 +265,7 @@ pub async fn upload_pmx_media_file_handler( maybe_engine_category: Some(engine_category), maybe_animation_type, maybe_prompt_token: None, + maybe_batch_token: None, maybe_mime_type: Some("application/octet-stream"), file_size_bytes: pmx_details.file_size_bytes, maybe_duration_millis, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs index 1d026c9e40..b4c20a8822 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs @@ -225,6 +225,7 @@ pub async fn upload_scene_snapshot_media_file_handler( creator_set_visibility: Visibility::Hidden, upload_type: UploadType::Filesystem, maybe_prompt_token: None, + maybe_batch_token: None, maybe_engine_category: Some(MediaFileEngineCategory::Scene), maybe_animation_type: None, maybe_mime_type: Some(MIMETYPE), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs index 34fe9ed466..4506bf2bcd 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs @@ -372,6 +372,7 @@ pub async fn upload_new_video_media_file_handler( maybe_engine_category: None, maybe_animation_type: None, maybe_prompt_token: None, + maybe_batch_token: None, maybe_mime_type: Some(&mimetype), file_size_bytes: file_size_bytes as u64, maybe_duration_millis, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs index e82a3628e6..eedc88b4a7 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs @@ -228,6 +228,7 @@ pub async fn upload_video_media_file_handler( upload_type, maybe_engine_category: None, maybe_prompt_token: None, + maybe_batch_token: None, maybe_animation_type: None, maybe_mime_type: Some(mimetype), file_size_bytes: file_size_bytes as u64,