update client to handle audio urls

This commit is contained in:
Brandon Thomas committed 2026-03-15 21:11:14 -04:00
1 parent 10f9a9839a
commit 38fb6975cc
4 files changed
+25 -1

No files matched your search

@@ -32,6 +32,7 @@ pub (crate) fn estimate_video_cost_artcraft_seedance2p0(
end_frame_url: None,
reference_image_urls: None,
reference_video_urls: None,
reference_audio_urls: None,
use_face_blur_hack: None,
};
@@ -41,6 +41,11 @@ pub struct GenerateVideoArgs<'a> {
/// When present, takes priority over start/end frames.
pub reference_video_urls: Option<Vec<String>>,
/// Optional reference audio URLs (reference mode).
/// Audio is referenced in prompts as @audio1, @audio2, etc.
/// Sent in a separate `audioUrls` field (not in `uploadedUrls`).
pub reference_audio_urls: Option<Vec<String>>,
/// Controls the `faceBlurMode` field: true sends "on", false sends "off", None omits it.
pub use_face_blur_hack: Option<bool>,
}
@@ -138,7 +143,9 @@ pub struct GenerateVideoResponse {
pub async fn generate_video(args: GenerateVideoArgs<'_>) -> Result<GenerateVideoResponse, Seedance2ProError> {
let has_reference_images = args.reference_image_urls.as_ref().is_some_and(|urls| !urls.is_empty());
let has_reference_videos = args.reference_video_urls.as_ref().is_some_and(|urls| !urls.is_empty());
let is_reference_mode = has_reference_images || has_reference_videos;
let has_reference_audio = args.reference_audio_urls.as_ref().is_some_and(|urls| !urls.is_empty());
let is_reference_mode = has_reference_images || has_reference_videos || has_reference_audio;
let video_input_mode = if is_reference_mode { "reference" } else { "keyframe" };
@@ -162,6 +169,12 @@ pub async fn generate_video(args: GenerateVideoArgs<'_>) -> Result<GenerateVideo
if urls.is_empty() { None } else { Some(urls) }
};
let audio_urls: Option<Vec<String>> = if has_reference_audio {
args.reference_audio_urls
} else {
None
};
let face_blur_mode = match args.use_face_blur_hack {
Some(true) => Some("on"),
Some(false) => Some("off"),
@@ -191,6 +204,7 @@ pub async fn generate_video(args: GenerateVideoArgs<'_>) -> Result<GenerateVideo
mode: video_input_mode,
face_blur_mode,
uploaded_urls,
audio_urls,
batch_count,
},
},
@@ -290,6 +304,7 @@ mod tests {
end_frame_url: None,
reference_image_urls: None,
reference_video_urls: None,
reference_audio_urls: None,
use_face_blur_hack: None,
}
}
@@ -354,6 +369,7 @@ mod tests {
end_frame_url: None,
reference_image_urls: None,
reference_video_urls: None,
reference_audio_urls: None,
use_face_blur_hack: None,
};
let result = generate_video(args).await?;
@@ -380,6 +396,7 @@ mod tests {
end_frame_url: None,
reference_image_urls: None,
reference_video_urls: None,
reference_audio_urls: None,
use_face_blur_hack: None,
};
let result = generate_video(args).await?;
@@ -408,6 +425,7 @@ mod tests {
"https://static.seedance2-pro.com/materials/20260219/1771496300184-fb32e08c.jpg".to_string(),
]),
reference_video_urls: None,
reference_audio_urls: None,
use_face_blur_hack: None,
};
let result = generate_video(args).await?;
@@ -435,6 +453,7 @@ mod tests {
reference_video_urls: Some(vec![
"https://static.seedance2-pro.com/materials/20260315/1773594284659-3a46d231.mp4".to_string(),
]),
reference_audio_urls: None,
use_face_blur_hack: None,
};
let result = generate_video(args).await?;
@@ -464,6 +483,7 @@ mod tests {
reference_video_urls: Some(vec![
"https://static.seedance2-pro.com/materials/20260315/1773594284659-3a46d231.mp4".to_string(),
]),
reference_audio_urls: None,
use_face_blur_hack: None,
};
let result = generate_video(args).await?;
@@ -32,6 +32,8 @@ pub (super) struct ApiParams {
pub face_blur_mode: Option<&'static str>,
#[serde(rename = "uploadedUrls", skip_serializing_if = "Option::is_none")]
pub uploaded_urls: Option<Vec<String>>,
#[serde(rename = "audioUrls", skip_serializing_if = "Option::is_none")]
pub audio_urls: Option<Vec<String>>,
#[serde(rename = "batchCount", skip_serializing_if = "Option::is_none")]
pub batch_count: Option<u8>,
}
@@ -195,6 +195,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
end_frame_url,
reference_image_urls,
reference_video_urls: None, // TODO: Wire up video references from request
reference_audio_urls: None,
use_face_blur_hack: None,
};