Compare commits

...
Author SHA1 Message Date
Brandon Thomas da4255ad9d 1080p support (quick) 2026-04-18 18:14:13 -04:00
3 changed files with 50 additions and 19 deletions
@@ -37,7 +37,7 @@ pub struct DistilledVideoRequest {
pub cost: VideoGenerationCostEstimate,
/// Execution plan as computed by the execution provider — what we hand to the router.
plan: VideoGenerationPlan,
pub plan: VideoGenerationPlan,
/// The provider used for execution (Fal, Seedance2Pro, etc.).
pub execution_provider: Provider,
@@ -11,11 +11,10 @@ use url::Url;
use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_video_cost_and_generate_request::OmniGenVideoCostAndGenerateRequest;
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
use enums::common::generation::common_generation_mode::CommonGenerationMode;
use enums::common::generation::common_resolution::CommonResolution;
use enums::common::generation::common_video_model::CommonVideoModel;
use seedance2pro_client::creds::seedance2pro_session::Seedance2ProSession;
use seedance2pro_client::requests::generate_video::generate_video::{
generate_video, GenerateVideoArgs, GenerateVideoRequest, KinoviBatchCount, KinoviModelType, KinoviAspectRatio,
};
use seedance2pro_client::requests::generate_video::generate_video::{generate_video, GenerateVideoArgs, GenerateVideoRequest, KinoviBatchCount, KinoviModelType, KinoviAspectRatio, KinoviOutputResolution};
use seedance2pro_client::requests::prepare_file_upload::prepare_file_upload::{
prepare_file_upload, PrepareFileUploadArgs,
};
@@ -104,24 +103,33 @@ pub(super) async fn execute_generation_kinovi(
_ => KinoviModelType::Seedance2Pro,
};
let output_resolution = match model_type {
KinoviModelType::Seedance2Pro => request.resolution.map(|res| map_common_resolution_to_kinovi_pro(res)),
KinoviModelType::Seedance2Fast => request.resolution.map(|res| map_common_resolution_to_kinovi_fast(res)),
};
let request = GenerateVideoRequest {
model_type,
prompt,
aspect_ratio,
duration_seconds,
batch_count,
start_frame_url,
end_frame_url,
reference_image_urls,
reference_video_urls,
reference_audio_urls,
character_ids: kinovi_character_ids,
use_face_blur_hack: None,
output_resolution,
};
info!("\n\nKinovi Request: {:?}\n\n", request);
let video_gen_args = GenerateVideoArgs {
session: &session,
host_override: None,
request: GenerateVideoRequest {
model_type,
prompt,
aspect_ratio,
duration_seconds,
batch_count,
start_frame_url,
end_frame_url,
reference_image_urls,
reference_video_urls,
reference_audio_urls,
character_ids: kinovi_character_ids,
use_face_blur_hack: None,
output_resolution: None,
},
request,
};
let gen_response = generate_video(video_gen_args).await
@@ -252,3 +260,22 @@ fn map_common_aspect_ratio_to_kinovi_resolution(aspect_ratio: Option<CommonAspec
_ => KinoviAspectRatio::Landscape16x9,
}
}
// TODO TEMP HACK
fn map_common_resolution_to_kinovi_pro(resolution: CommonResolution) -> KinoviOutputResolution {
match resolution {
CommonResolution::FourEightyP => KinoviOutputResolution::FourEightyP,
CommonResolution::SevenTwentyP => KinoviOutputResolution::SevenTwentyP,
CommonResolution::TenEightyP => KinoviOutputResolution::TenEightyP,
_ => KinoviOutputResolution::SevenTwentyP,
}
}
// TODO TEMP HACK
fn map_common_resolution_to_kinovi_fast(resolution: CommonResolution) -> KinoviOutputResolution {
match resolution {
CommonResolution::FourEightyP => KinoviOutputResolution::FourEightyP,
CommonResolution::SevenTwentyP => KinoviOutputResolution::SevenTwentyP,
_ => KinoviOutputResolution::SevenTwentyP,
}
}
@@ -63,6 +63,8 @@ pub async fn omni_gen_video_generate_handler(
request: Json<OmniGenVideoCostAndGenerateRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<OmniGenVideoGenerateResponse>, AdvancedCommonWebError> {
info!("request: {:?}", request);
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -174,6 +176,8 @@ pub async fn omni_gen_video_generate_handler(
let distilled = distill_video_request(&request, media_file_hydration_map.as_ref(), execution_provider)?;
info!("distilled plan: {:?}", distilled.plan);
// ==================== BILLING ==================== //
let cost = distilled.cost.cost_in_credits.unwrap_or(0);