2025-07-11 18:02:44 +08:00
import requests
import json
import sys
import time
2025-08-01 08:57:32 +08:00
from settings . local import PORT
2025-07-11 18:02:44 +08:00
from util import timing_decorator
import functools
import threading
2025-08-01 08:57:32 +08:00
from pyJianYingDraft . text_segment import TextStyleRange , Text_style , Text_border
2025-08-03 16:15:55 +08:00
from util import hex_to_rgb
2025-07-11 18:02:44 +08:00
2025-08-05 12:22:12 +08:00
import shutil
import os
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Base URL of the service, please modify according to actual situation
2025-08-01 08:57:32 +08:00
BASE_URL = f " http://localhost: { PORT } "
2025-08-01 10:41:41 +08:00
LICENSE_KEY = " trial " # Trial license key
2025-08-03 16:15:55 +08:00
CAPCUT_DRAFT_FOLDER = " /Users/sunguannan/Movies/CapCut/User Data/Projects/com.lveditor.draft "
JIANYINGPRO_DRAFT_FOLDER = " /Users/sunguannan/Movies/JianyingPro/User Data/Projects/com.lveditor.draft "
2025-07-11 18:02:44 +08:00
def make_request ( endpoint , data , method = ' POST ' ) :
2025-07-13 15:54:21 +08:00
""" Send HTTP request to the server and handle the response """
2025-07-11 18:02:44 +08:00
url = f " { BASE_URL } / { endpoint } "
headers = { ' Content-Type ' : ' application/json ' }
try :
if method == ' POST ' :
response = requests . post ( url , data = json . dumps ( data ) , headers = headers )
elif method == ' GET ' :
response = requests . get ( url , params = data , headers = headers )
else :
2025-07-13 15:54:21 +08:00
raise ValueError ( f " Unsupported HTTP method: { method } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
response . raise_for_status ( ) # Raise an exception if the request fails
2025-07-11 18:02:44 +08:00
return response . json ( )
except requests . exceptions . RequestException as e :
2025-07-13 15:54:21 +08:00
print ( f " Request error: { e } " )
2025-07-11 18:02:44 +08:00
sys . exit ( 1 )
except json . JSONDecodeError :
2025-07-13 15:54:21 +08:00
print ( " Unable to parse server response " )
2025-07-11 18:02:44 +08:00
sys . exit ( 1 )
def add_audio_track ( audio_url , start , end , target_start , volume = 1.0 ,
speed = 1.0 , track_name = " main_audio " , effect_type = None , effect_params = None , draft_id = None ) :
2025-07-13 15:54:21 +08:00
""" API call to add audio track """
2025-07-11 18:02:44 +08:00
data = {
" audio_url " : audio_url ,
" start " : start ,
" end " : end ,
" target_start " : target_start ,
" volume " : volume ,
" speed " : speed ,
" track_name " : track_name ,
" effect_type " : effect_type ,
" effect_params " : effect_params
}
if draft_id :
data [ " draft_id " ] = draft_id
return make_request ( " add_audio " , data )
2025-08-01 08:57:32 +08:00
def add_text_impl ( text , start , end , font , font_color , font_size , track_name , draft_folder = " 123 " , draft_id = None ,
vertical = False , transform_x = 0 , transform_y = 0 , font_alpha = 1.0 ,
2025-07-11 18:02:44 +08:00
border_color = None , border_width = 0.0 , border_alpha = 1.0 ,
background_color = None , background_alpha = 1.0 , background_style = None ,
2025-08-01 08:57:32 +08:00
background_round_radius = 0.0 , background_height = 0.14 , background_width = 0.14 ,
background_horizontal_offset = 0.5 , background_vertical_offset = 0.5 ,
shadow_enabled = False , shadow_alpha = 0.9 , shadow_angle = - 45.0 ,
shadow_color = " #000000 " , shadow_distance = 5.0 , shadow_smoothing = 0.15 ,
2025-07-11 18:02:44 +08:00
bubble_effect_id = None , bubble_resource_id = None ,
2025-08-01 08:57:32 +08:00
effect_effect_id = None ,
intro_animation = None , intro_duration = 0.5 ,
outro_animation = None , outro_duration = 0.5 ,
width = 1080 , height = 1920 ,
fixed_width = - 1 , fixed_height = - 1 ,
text_styles = None ) :
2025-08-01 10:41:41 +08:00
""" Add text with support for multiple styles, shadows, and backgrounds """
2025-07-11 18:02:44 +08:00
data = {
" draft_folder " : draft_folder ,
" text " : text ,
" start " : start ,
" end " : end ,
" font " : font ,
2025-08-03 16:15:55 +08:00
" font_color " : font_color ,
" font_size " : font_size ,
2025-07-11 18:02:44 +08:00
" alpha " : font_alpha ,
" track_name " : track_name ,
" vertical " : vertical ,
" transform_x " : transform_x ,
" transform_y " : transform_y
}
2025-07-13 15:54:21 +08:00
# Add border parameters
2025-07-11 18:02:44 +08:00
if border_color :
data [ " border_color " ] = border_color
data [ " border_width " ] = border_width
data [ " border_alpha " ] = border_alpha
2025-07-13 15:54:21 +08:00
# Add background parameters
2025-07-11 18:02:44 +08:00
if background_color :
data [ " background_color " ] = background_color
data [ " background_alpha " ] = background_alpha
if background_style :
data [ " background_style " ] = background_style
2025-08-01 08:57:32 +08:00
data [ " background_round_radius " ] = background_round_radius
data [ " background_height " ] = background_height
data [ " background_width " ] = background_width
data [ " background_horizontal_offset " ] = background_horizontal_offset
data [ " background_vertical_offset " ] = background_vertical_offset
# Add shadow parameters
if shadow_enabled :
data [ " shadow_enabled " ] = shadow_enabled
data [ " shadow_alpha " ] = shadow_alpha
data [ " shadow_angle " ] = shadow_angle
data [ " shadow_color " ] = shadow_color
data [ " shadow_distance " ] = shadow_distance
data [ " shadow_smoothing " ] = shadow_smoothing
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Add bubble effect parameters
2025-07-11 18:02:44 +08:00
if bubble_effect_id :
data [ " bubble_effect_id " ] = bubble_effect_id
if bubble_resource_id :
data [ " bubble_resource_id " ] = bubble_resource_id
2025-07-13 15:54:21 +08:00
# Add text effect parameters
2025-07-11 18:02:44 +08:00
if effect_effect_id :
data [ " effect_effect_id " ] = effect_effect_id
2025-08-01 08:57:32 +08:00
# Add intro animation parameters
if intro_animation :
data [ " intro_animation " ] = intro_animation
data [ " intro_duration " ] = intro_duration
# Add outro animation parameters
2025-07-11 18:02:44 +08:00
if outro_animation :
data [ " outro_animation " ] = outro_animation
2025-08-01 08:57:32 +08:00
data [ " outro_duration " ] = outro_duration
# Add size parameters
data [ " width " ] = width
data [ " height " ] = height
# Add fixed size parameters
if fixed_width > 0 :
data [ " fixed_width " ] = fixed_width
if fixed_height > 0 :
data [ " fixed_height " ] = fixed_height
if draft_id :
data [ " draft_id " ] = draft_id
# Add text styles parameters
if text_styles :
data [ " text_styles " ] = text_styles
if draft_id :
data [ " draft_id " ] = draft_id
2025-07-11 18:02:44 +08:00
return make_request ( " add_text " , data )
2025-08-12 16:56:15 +08:00
def add_image_impl ( image_url , start , end , width = None , height = None , track_name = " image_main " , draft_id = None ,
2025-07-11 18:02:44 +08:00
transform_x = 0 , transform_y = 0 , scale_x = 1.0 , scale_y = 1.0 , transition = None , transition_duration = None ,
mask_type = None , mask_center_x = 0.0 , mask_center_y = 0.0 , mask_size = 0.5 ,
mask_rotation = 0.0 , mask_feather = 0.0 , mask_invert = False ,
2025-08-01 08:57:32 +08:00
mask_rect_width = None , mask_round_corner = None , background_blur = None ) :
2025-07-13 15:54:21 +08:00
""" API call to add image """
2025-07-11 18:02:44 +08:00
data = {
" image_url " : image_url ,
" width " : width ,
" height " : height ,
" start " : start ,
" end " : end ,
" track_name " : track_name ,
" transform_x " : transform_x ,
" transform_y " : transform_y ,
" scale_x " : scale_x ,
" scale_y " : scale_y ,
" transition " : transition ,
2025-07-13 15:54:21 +08:00
" transition_duration " : transition_duration or 0.5 , # Default transition duration is 0.5 seconds
# Add mask-related parameters
2025-07-11 18:02:44 +08:00
" mask_type " : mask_type ,
" mask_center_x " : mask_center_x ,
" mask_center_y " : mask_center_y ,
" mask_size " : mask_size ,
" mask_rotation " : mask_rotation ,
" mask_feather " : mask_feather ,
" mask_invert " : mask_invert ,
" mask_rect_width " : mask_rect_width ,
" mask_round_corner " : mask_round_corner
}
if draft_id :
data [ " draft_id " ] = draft_id
2025-08-01 08:57:32 +08:00
if background_blur :
data [ " background_blur " ] = background_blur
2025-07-11 18:02:44 +08:00
return make_request ( " add_image " , data )
def generate_image_impl ( prompt , width , height , start , end , track_name , draft_id = None ,
transform_x = 0 , transform_y = 0 , scale_x = 1.0 , scale_y = 1.0 , transition = None , transition_duration = None ) :
2025-07-13 15:54:21 +08:00
""" API call to add image """
2025-07-11 18:02:44 +08:00
data = {
" prompt " : prompt ,
" width " : width ,
" height " : height ,
" start " : start ,
" end " : end ,
" track_name " : track_name ,
" transform_x " : transform_x ,
" transform_y " : transform_y ,
" scale_x " : scale_x ,
" scale_y " : scale_y ,
" transition " : transition ,
2025-07-13 15:54:21 +08:00
" transition_duration " : transition_duration or 0.5 # Default transition duration is 0.5 seconds
2025-07-11 18:02:44 +08:00
}
if draft_id :
data [ " draft_id " ] = draft_id
return make_request ( " generate_image " , data )
def add_sticker_impl ( resource_id , start , end , draft_id = None , transform_x = 0 , transform_y = 0 ,
alpha = 1.0 , flip_horizontal = False , flip_vertical = False , rotation = 0.0 ,
scale_x = 1.0 , scale_y = 1.0 , track_name = " sticker_main " , relative_index = 0 ,
width = 1080 , height = 1920 ) :
2025-07-13 15:54:21 +08:00
""" API call to add sticker """
2025-07-11 18:02:44 +08:00
data = {
" sticker_id " : resource_id ,
" start " : start ,
" end " : end ,
" transform_x " : transform_x ,
" transform_y " : transform_y ,
" alpha " : alpha ,
" flip_horizontal " : flip_horizontal ,
" flip_vertical " : flip_vertical ,
" rotation " : rotation ,
" scale_x " : scale_x ,
" scale_y " : scale_y ,
" track_name " : track_name ,
" relative_index " : relative_index ,
" width " : width ,
" height " : height
}
if draft_id :
data [ " draft_id " ] = draft_id
return make_request ( " add_sticker " , data )
def add_video_keyframe_impl ( draft_id , track_name , property_type = None , time = None , value = None ,
property_types = None , times = None , values = None ) :
2025-07-13 15:54:21 +08:00
""" API call to add video keyframe
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
Supports two modes :
1. Single keyframe : using property_type , time , value parameters
2. Batch keyframes : using property_types , times , values parameters ( in list form )
2025-07-11 18:02:44 +08:00
"""
data = {
" draft_id " : draft_id ,
" track_name " : track_name
}
2025-07-13 15:54:21 +08:00
# Add single keyframe parameters (if provided)
2025-07-11 18:02:44 +08:00
if property_type is not None :
data [ " property_type " ] = property_type
if time is not None :
data [ " time " ] = time
if value is not None :
data [ " value " ] = value
2025-07-13 15:54:21 +08:00
# Add batch keyframe parameters (if provided)
2025-07-11 18:02:44 +08:00
if property_types is not None :
data [ " property_types " ] = property_types
if times is not None :
data [ " times " ] = times
if values is not None :
data [ " values " ] = values
return make_request ( " add_video_keyframe " , data )
def add_video_impl ( video_url , start = None , end = None , width = None , height = None , track_name = " main " ,
draft_id = None , transform_y = 0 , scale_x = 1 , scale_y = 1 , transform_x = 0 ,
speed = 1.0 , target_start = 0 , relative_index = 0 , transition = None , transition_duration = None ,
2025-07-13 15:54:21 +08:00
# Mask-related parameters
2025-07-11 18:02:44 +08:00
mask_type = None , mask_center_x = 0.5 , mask_center_y = 0.5 , mask_size = 1.0 ,
mask_rotation = 0.0 , mask_feather = 0.0 , mask_invert = False ,
2025-08-01 08:57:32 +08:00
mask_rect_width = None , mask_round_corner = None , background_blur = None ) :
2025-07-13 15:54:21 +08:00
""" API call to add video track """
2025-07-11 18:02:44 +08:00
data = {
" video_url " : video_url ,
" height " : height ,
2025-08-05 12:22:12 +08:00
" draft_id " : draft_id ,
2025-07-11 18:02:44 +08:00
" track_name " : track_name ,
" transform_y " : transform_y ,
" scale_x " : scale_x ,
" scale_y " : scale_y ,
" transform_x " : transform_x ,
" speed " : speed ,
" target_start " : target_start ,
" relative_index " : relative_index ,
" transition " : transition ,
2025-07-13 15:54:21 +08:00
" transition_duration " : transition_duration or 0.5 , # Default transition duration is 0.5 seconds
# Mask-related parameters
2025-07-11 18:02:44 +08:00
" mask_type " : mask_type ,
" mask_center_x " : mask_center_x ,
" mask_center_y " : mask_center_y ,
" mask_size " : mask_size ,
" mask_rotation " : mask_rotation ,
" mask_feather " : mask_feather ,
" mask_invert " : mask_invert ,
" mask_rect_width " : mask_rect_width ,
" mask_round_corner " : mask_round_corner
}
if start :
data [ " start " ] = start
if end :
data [ " end " ] = end
if width :
data [ " width " ] = width
if height :
data [ " height " ] = height
2025-08-01 08:57:32 +08:00
if background_blur :
data [ " background_blur " ] = background_blur
2025-07-11 18:02:44 +08:00
return make_request ( " add_video " , data )
def add_effect ( effect_type , start , end , draft_id = None , track_name = " effect_01 " ,
2025-08-05 12:22:12 +08:00
params = None , width = 1080 , height = 1920 , effect_category = None ) :
2025-07-13 15:54:21 +08:00
""" API call to add effect """
2025-07-11 18:02:44 +08:00
data = {
" effect_type " : effect_type ,
" start " : start ,
" end " : end ,
" track_name " : track_name ,
" params " : params or [ ] ,
" width " : width ,
" height " : height
}
2025-08-05 12:22:12 +08:00
if effect_category :
data [ " effect_category " ] = effect_category
2025-07-11 18:02:44 +08:00
if draft_id :
data [ " draft_id " ] = draft_id
return make_request ( " add_effect " , data )
def test_effect_01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding effect service """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding effect " )
2025-07-11 18:02:44 +08:00
effect_result = add_effect (
start = 0 ,
end = 5 ,
track_name = " effect_01 " ,
2025-07-13 15:54:21 +08:00
# effect_type="金粉闪闪", # Example using glow effect
2025-07-11 18:02:44 +08:00
effect_type = " Gold_Sparkles " ,
2025-07-13 15:54:21 +08:00
params = [ 100 , 50 , 34 ] # Example parameters, depending on the specific effect type
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Effect adding result: { effect_result } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( effect_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
2025-07-13 15:54:21 +08:00
# If needed, you can add other test cases here
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Return the first test result for subsequent operations (if any)
2025-07-11 18:02:44 +08:00
return effect_result
2025-08-05 12:22:12 +08:00
def test_effect_02 ( ) :
""" Test service for adding effects """
# draft_folder = "/Users/sunguannan/Movies/JianyingPro/User Data/Projects/com.lveditor.draft"
draft_folder = " /Users/sunguannan/Movies/CapCut/User Data/Projects/com.lveditor.draft "
print ( " \n Test: Adding effects " )
# First add video track
image_result = add_video_impl (
video_url = " https://pan.superbed.cn/share/1nbrg1fl/jimeng_daweidai.mp4 " ,
start = 0 ,
end = 3.0 ,
target_start = 0 ,
width = 1080 ,
height = 1920
)
print ( f " Video added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
image_result = add_video_impl (
video_url = " https://pan.superbed.cn/share/1nbrg1fl/jimeng_daweidai.mp4 " ,
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 3.0 ,
target_start = 3 ,
)
print ( f " Video added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
# Then add effect
effect_result = add_effect (
effect_type = " Like " ,
effect_category = " character " , # Explicitly specify as character effect
start = 3 ,
end = 6 ,
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
track_name = " effect_01 "
)
print ( f " Effect adding result: { effect_result } " )
print ( save_draft_impl ( effect_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
source_folder = os . path . join ( os . getcwd ( ) , effect_result [ ' output ' ] [ ' draft_id ' ] )
destination_folder = os . path . join ( draft_folder , effect_result [ ' output ' ] [ ' draft_id ' ] )
if os . path . exists ( source_folder ) :
print ( f " Moving { effect_result [ ' output ' ] [ ' draft_id ' ] } to { draft_folder } " )
shutil . move ( source_folder , destination_folder )
print ( " Folder moved successfully! " )
else :
print ( f " Source folder { source_folder } does not exist " )
# Add log to prompt user to find the draft in CapCut
print ( f " \n ===== IMPORTANT ===== \n Please open CapCut and find the draft named ' { effect_result [ ' output ' ] [ ' draft_id ' ] } ' \n ====================== " )
# Return the first test result for subsequent operations (if any)
return effect_result
2025-07-11 18:02:44 +08:00
def test_text ( ) :
2025-08-01 10:41:41 +08:00
""" Test adding text with various features """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 1: Basic text addition
print ( " \n Test: Adding basic text " )
2025-07-11 18:02:44 +08:00
text_result = add_text_impl (
2025-07-13 15:54:21 +08:00
text = " Hello, I am CapCut Assistant " ,
2025-07-11 18:02:44 +08:00
start = 0 ,
end = 3 ,
font = " 思源中宋 " ,
2025-07-13 15:54:21 +08:00
font_color = " #FF0000 " , # Red
2025-07-11 18:02:44 +08:00
track_name = " main_text " ,
transform_y = 0.8 ,
transform_x = 0.5 ,
font_size = 30.0
)
2025-07-13 15:54:21 +08:00
print ( " Test case 1 (Basic text) successful: " , text_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 2: Vertical text
2025-07-11 18:02:44 +08:00
result2 = add_text_impl (
draft_id = text_result [ ' output ' ] [ ' draft_id ' ] ,
2025-07-13 15:54:21 +08:00
text = " Vertical text demo " ,
2025-07-11 18:02:44 +08:00
start = 3 ,
end = 6 ,
font = " 云书法三行魏碑体 " ,
2025-07-13 15:54:21 +08:00
font_color = " #00FF00 " , # Green
2025-07-11 18:02:44 +08:00
font_size = 8.0 ,
track_name = " main_text " ,
2025-07-13 15:54:21 +08:00
vertical = True , # Enable vertical text
2025-07-11 18:02:44 +08:00
transform_y = - 0.5 ,
2025-07-13 15:54:21 +08:00
outro_animation = ' Blur '
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( " Test case 2 (Vertical text) successful: " , result2 )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 3: Text with border and background
2025-07-11 18:02:44 +08:00
result3 = add_text_impl (
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] ,
2025-07-13 15:54:21 +08:00
text = " Border and background test " ,
2025-07-11 18:02:44 +08:00
start = 6 ,
end = 9 ,
font = " 思源中宋 " ,
2025-07-13 15:54:21 +08:00
font_color = " #FFFFFF " , # White text
2025-07-11 18:02:44 +08:00
font_size = 24.0 ,
track_name = " main_text " ,
transform_y = 0.0 ,
transform_x = 0.5 ,
2025-08-01 10:41:41 +08:00
border_color = " #FF0000 " , # Red border
2025-07-11 18:02:44 +08:00
border_width = 20.0 ,
border_alpha = 1.0 ,
2025-07-13 15:54:21 +08:00
background_color = " #0000FF " , # Blue background
background_alpha = 0.5 , # Semi-transparent background
background_style = 0 # Bubble style background
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( " Test case 3 (Border and background) successful: " , result3 )
2025-07-11 18:02:44 +08:00
2025-08-01 10:41:41 +08:00
# Test case 4: Text with shadow effect
result4 = add_text_impl (
draft_id = result3 [ ' output ' ] [ ' draft_id ' ] ,
text = " Shadow effect test " ,
start = 9 ,
end = 12 ,
font = " 思源中宋 " ,
font_color = " #FFFFFF " , # White text
font_size = 28.0 ,
track_name = " main_text " ,
transform_y = - 0.3 ,
transform_x = 0.5 ,
shadow_enabled = True , # Enable shadow
shadow_alpha = 0.8 ,
shadow_angle = - 30.0 ,
shadow_color = " #000000 " , # Black shadow
shadow_distance = 8.0 ,
shadow_smoothing = 0.2
)
print ( " Test case 4 (Shadow effect) successful: " , result4 )
# Test case 5: Multi-style text using TextStyleRange
# Create different text styles
style1 = {
" start " : 0 ,
" end " : 5 ,
" style " : {
" color " : " #FF0000 " , # Red
" size " : 30 ,
" bold " : True
} ,
" border " : {
" color " : " #FFFFFF " , # White border
" width " : 40 ,
" alpha " : 1.0
} ,
" font " : " 思源中宋 "
}
style2 = {
" start " : 5 ,
" end " : 10 ,
" style " : {
" color " : " #00FF00 " , # Green
" size " : 25 ,
" italic " : True
} ,
" font " : " 挥墨体 "
}
style3 = {
" start " : 10 ,
" end " : 15 ,
" style " : {
" color " : " #0000FF " , # Blue
" size " : 20 ,
" underline " : True
} ,
" font " : " 金陵体 "
}
# Add multi-style text
result5 = add_text_impl (
draft_id = result4 [ ' output ' ] [ ' draft_id ' ] ,
text = " Multi-style text test " ,
start = 12 ,
end = 15 ,
font = " 思源粗宋 " ,
track_name = " main_text " ,
transform_y = 0.3 ,
transform_x = 0.5 ,
font_color = " #000000 " , # Default black
font_size = 20.0 ,
# Use dictionary list instead of TextStyleRange object list
text_styles = [ style1 , style2 , style3 ]
)
print ( " Test case 5 (Multi-style text) successful: " , result5 )
# Test case 6: Combined effects - shadow + background + multi-style
combined_style1 = {
" start " : 0 ,
" end " : 8 ,
" style " : {
" color " : " #FFD700 " , # Gold
" size " : 32 ,
" bold " : True
} ,
" border " : {
" color " : " #8B4513 " , # Brown border
" width " : 30 ,
" alpha " : 0.8
} ,
" font " : " 思源中宋 "
}
combined_style2 = {
" start " : 8 ,
" end " : 16 ,
" style " : {
" color " : " #FF69B4 " , # Hot pink
" size " : 28 ,
" italic " : True
} ,
" font " : " 挥墨体 "
}
result6 = add_text_impl (
draft_id = result5 [ ' output ' ] [ ' draft_id ' ] ,
text = " Combined effects demo " ,
start = 15 ,
end = 18 ,
font = " 思源粗宋 " ,
track_name = " main_text " ,
transform_y = - 0.6 ,
transform_x = 0.5 ,
font_color = " #FFFFFF " , # Default white
font_size = 24.0 ,
# Background settings
background_color = " #4169E1 " , # Royal blue background
background_alpha = 0.6 ,
background_style = 1 ,
background_round_radius = 0.3 ,
background_height = 0.18 ,
background_width = 0.8 ,
# Shadow settings
shadow_enabled = True ,
shadow_alpha = 0.7 ,
shadow_angle = - 60.0 ,
shadow_color = " #2F4F4F " , # Dark slate gray shadow
shadow_distance = 6.0 ,
shadow_smoothing = 0.25 ,
# Multi-style text
text_styles = [ combined_style1 , combined_style2 ]
)
print ( " Test case 6 (Combined effects) successful: " , result6 )
2025-07-13 15:54:21 +08:00
# Finally save and upload the draft
2025-08-01 10:41:41 +08:00
if result6 . get ( ' success ' ) and result6 . get ( ' output ' ) :
save_result = save_draft_impl ( result6 [ ' output ' ] [ ' draft_id ' ] , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Return the last test result for subsequent operations (if any)
2025-08-01 10:41:41 +08:00
return result6
2025-07-11 18:02:44 +08:00
2025-08-01 08:57:32 +08:00
def test_text_02 ( ) :
""" 测试添加文本 """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-08-01 08:57:32 +08:00
# 测试用例1: 基本文本添加
print ( " \n 测试:添加基本文本 " )
text_result = add_text_impl (
text = " 你好,我是剪映助手 " ,
start = 0 ,
end = 3 ,
font = " 思源中宋 " ,
font_color = " #FF0000 " , # 红色
track_name = " main_text " ,
transform_y = 0.8 ,
transform_x = 0.5 ,
font_size = 30.0
)
print ( " 测试用例1( 基本文本) 成功: " , text_result )
# 测试用例2: 竖排文本
result2 = add_text_impl (
draft_id = text_result [ ' output ' ] [ ' draft_id ' ] ,
text = " 竖排文本演示 " ,
start = 3 ,
end = 6 ,
font = " 云书法三行魏碑体 " ,
font_color = " #00FF00 " , # 绿色
font_size = 8.0 ,
track_name = " main_text " ,
vertical = True , # 启用竖排
transform_y = - 0.5 ,
outro_animation = ' 晕开 '
)
print ( " 测试用例2( 竖排文本) 成功: " , result2 )
# 测试用例3: 带描边和背景的文本
result3 = add_text_impl (
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] ,
text = " 描边和背景测试 " ,
start = 6 ,
end = 9 ,
font = " 思源中宋 " ,
font_color = " #FFFFFF " , # 白色文字
font_size = 24.0 ,
track_name = " main_text " ,
transform_y = 0.0 ,
transform_x = 0.5 ,
border_color = " #FF0000 " , # 红色描边
border_width = 20.0 ,
border_alpha = 1.0 ,
background_color = " #0000FF " , # 蓝色背景
background_alpha = 0.5 , # 半透明背景
background_style = 0 # 气泡样式背景
)
print ( " 测试用例3( 描边和背景) 成功: " , result3 )
# 测试用例4: 使用 TextStyleRange 的多样式文本
# 创建不同的文本样式
style1 = {
" start " : 0 ,
" end " : 2 ,
" style " : {
" color " : " #FF0000 " , # 红色
" size " : 30 ,
" bold " : True
} ,
" border " : {
" color " : " #FFFFFF " , # 白色描边
" width " : 40 ,
" alpha " : 1.0
} ,
" font " : " 思源中宋 "
}
style2 = {
" start " : 2 ,
" end " : 4 ,
" style " : {
" color " : " #00FF00 " , # 绿色
" size " : 25 ,
" italic " : True
} ,
" font " : " 挥墨体 "
}
style3 = {
" start " : 4 ,
" end " : 6 ,
" style " : {
" color " : " #0000FF " , # 蓝色
" size " : 20 ,
" underline " : True
} ,
" font " : " 金陵体 "
}
# 添加多样式文本
result4 = add_text_impl (
draft_id = result3 [ ' output ' ] [ ' draft_id ' ] ,
text = " 多样式 \n 文本测试 " ,
start = 9 ,
end = 12 ,
font = " 思源粗宋 " ,
track_name = " main_text " ,
transform_y = 0.5 ,
transform_x = 0.5 ,
font_color = " #000000 " , # 默认黑色
font_size = 20.0 ,
# 使用字典列表而不是 TextStyleRange 对象列表
text_styles = [ style1 , style2 , style3 ]
)
print ( " 测试用例4( 多样式文本) 成功: " , result4 )
# 最后保存并上传草稿
if result4 . get ( ' success ' ) and result4 . get ( ' output ' ) :
save_result = save_draft_impl ( result4 [ ' output ' ] [ ' draft_id ' ] , draft_folder )
print ( f " 草稿保存结果: { save_result } " )
# 返回最后一个测试结果用于后续操作(如果有的话)
return result4
def test_text_03 ( ) :
""" 测试添加文本 """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-08-01 08:57:32 +08:00
# 测试用例1: 基本文本添加
print ( " \n 测试:添加基本文本 " )
text_result = add_text_impl (
text = " 现在支持 " ,
start = 0 ,
end = 6 ,
font = " 挥墨体 " ,
font_color = " #FFFFFF " , # 红色
track_name = " text_01 " ,
transform_y = 0.58 ,
transform_x = 0 ,
font_size = 24.0 ,
intro_animation = " 弹入 " ,
intro_duration = 0.5
)
print ( " 测试用例1( 基本文本) 成功: " , text_result )
# 测试用例2: 带背景参数的文本
result2 = add_text_impl (
draft_id = text_result [ ' output ' ] [ ' draft_id ' ] ,
text = " 文字背景 " ,
start = 1.5 ,
end = 6 ,
font = " 思源中宋 " ,
font_color = " #FFFFFF " ,
font_size = 20.0 ,
track_name = " text_2 " ,
transform_y = 0.15 ,
transform_x = 0 ,
background_color = " #0000FF " , # 蓝色背景
background_alpha = 0.7 , # 70%透明度
background_style = 1 ,
background_round_radius = 0.5 , # 圆角半径
background_height = 0.2 , # 背景高度
background_width = 0.8 , # 背景宽度
background_horizontal_offset = 0.5 , # 水平居中
background_vertical_offset = 0.5 , # 垂直居中
intro_animation = " 弹入 " ,
intro_duration = 0.5
)
print ( " 测试用例2( 背景参数) 成功: " , result2 )
# 测试用例3: 带阴影参数的文本
result3 = add_text_impl (
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] ,
text = " 文字阴影 " ,
start = 3 ,
end = 6 ,
font = " 金陵体 " ,
font_color = " #FFFF00 " , # 黄色文字
font_size = 25.0 ,
track_name = " text3 " ,
transform_y = - 0.16 ,
transform_x = 0 ,
shadow_enabled = True , # 启用阴影
shadow_alpha = 0.8 , # 阴影透明度
shadow_angle = - 45.0 , # 阴影角度
shadow_color = " #0000FF " , # 蓝色阴影
shadow_distance = 10.0 , # 阴影距离
shadow_smoothing = 0.3 , # 阴影平滑度
intro_animation = " 弹入 " ,
intro_duration = 0.5
)
print ( " 测试用例3( 阴影参数) 成功: " , result3 )
# 测试用例4: 带描边和背景的文本
result4 = add_text_impl (
draft_id = result3 [ ' output ' ] [ ' draft_id ' ] ,
text = " 文字描边 " ,
start = 4.5 ,
end = 6 ,
font = " 思源中宋 " ,
font_color = " #FFFFFF " , # 白色文字
font_size = 24.0 ,
track_name = " text_4 " ,
transform_y = - 0.58 ,
border_color = " #FF0000 " , # 红色描边
border_width = 20.0 ,
border_alpha = 1.0 ,
intro_animation = " 弹入 " ,
intro_duration = 0.5
)
print ( " 测试用例4( 综合参数) 成功: " , result4 )
# 最后保存并上传草稿
if text_result . get ( ' success ' ) and text_result . get ( ' output ' ) :
save_result = save_draft_impl ( text_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
print ( f " 草稿保存结果: { save_result } " )
# 返回最后一个测试结果用于后续操作(如果有的话)
return text_result
2025-07-11 18:02:44 +08:00
def test_image01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding image """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 1 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 0 ,
end = 5.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
def test_image02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding multiple images """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 1 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 0 ,
end = 5.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 1 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 2 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 5 ,
end = 10.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 2 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
def test_image03 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding images to different tracks """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 1 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 0 ,
end = 5.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 1 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 2 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 5 ,
end = 10.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 2 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 3 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 10 ,
end = 15.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_2 " # Use different track name
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Image 3 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
query_draft_status_impl_polling ( image_result [ ' output ' ] [ ' draft_id ' ] )
save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
def test_image04 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding image """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 1 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 5.0 ,
end = 10.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " image_main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
2025-08-01 08:57:32 +08:00
def test_image05 ( ) :
""" 测试添加图片 """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-08-01 08:57:32 +08:00
print ( " \n 测试: 添加图片1 " )
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 1920 ,
height = 1080 ,
start = 5.0 ,
end = 10.0 ,
track_name = " image_main " ,
background_blur = 3
)
print ( f " 添加图片成功! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
print ( save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
2025-07-11 18:02:44 +08:00
def test_mask_01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding images to different tracks """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 1 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 0 ,
end = 5.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 1 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 2 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 5 ,
end = 10.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 2 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 3 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 10 ,
end = 15.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_2 " , # Use different track name
mask_type = " Circle " , # Add circular mask
mask_center_x = 0.5 , # Mask center X coordinate (0.5 means centered)
mask_center_y = 0.5 , # Mask center Y coordinate (0.5 means centered)
mask_size = 0.8 , # Mask size (0.8 means 80%)
mask_feather = 0.1 # Mask feathering (0.1 means 10%)
)
print ( f " Image 3 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
def test_mask_02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding videos to different tracks """
2025-08-01 10:41:41 +08:00
# Set draft folder path for saving
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-08-01 10:41:41 +08:00
# Define video URL for testing
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 "
2025-07-13 15:54:21 +08:00
draft_id = None # Initialize draft_id
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Add video to first track
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Pass in draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Use first 5 seconds of video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " First video addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Add video to second track
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Use previous draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Use first 5 seconds of video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_video_track_2 " , # Use different track name
speed = 1.0 , # Change playback speed
scale_x = 0.5 , # Reduce video width
transform_y = 0.5 # Place video at bottom of screen
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " Second video addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Third time add video to another track with circular mask
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Use previous draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Use first 5 seconds of video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_video_track_3 " , # Use third track
speed = 1.5 , # Faster playback speed
scale_x = 0.3 , # Smaller video width
transform_y = - 0.5 , # Place video at top of screen
mask_type = " Circle " , # Add circular mask
mask_center_x = 0.5 , # Mask center X coordinate
mask_center_y = 0.5 , # Mask center Y coordinate
mask_size = 0.8 , # Mask size
mask_feather = 0.1 # Mask feathering
)
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " Third video addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Finally save and upload draft
2025-07-11 18:02:44 +08:00
save_result = save_draft_impl ( draft_id , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test_audio01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding audio """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding audio " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 15 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
# effect_type="麦霸",
effect_type = " Tremble " ,
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result: { audio_result } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( audio_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
def test_audio02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding multiple audio segments """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding audio 1 " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 0 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
# effect_type="麦霸",
effect_type = " Tremble " ,
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 1: { audio_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding audio 2 " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 1.5 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
# effect_type="麦霸",
effect_type = " Tremble " ,
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 2: { audio_result } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( audio_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
def test_audio03 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding audio in a loop """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
draft_id = None # Initialize draft_id
2025-07-11 18:02:44 +08:00
for i in range ( 10 ) :
2025-07-13 15:54:21 +08:00
target_start = i * 1.5 # Increment by 1.5 seconds each time
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = target_start ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
# effect_type="麦霸",
effect_type = " Tremble " ,
effect_params = [ 90.0 , 50.0 ] ,
2025-07-13 15:54:21 +08:00
draft_id = draft_id # Pass the previous draft_id (None for the first time)
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " Audio addition result { i + 1 } : { audio_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Finally save and upload draft
2025-07-11 18:02:44 +08:00
save_result = save_draft_impl ( draft_id , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test_audio04 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding audio to different tracks """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding audio 1 " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 0 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
# effect_type="麦霸",
effect_type = " Tremble " ,
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 1: { audio_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding audio 2 " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 1.5 ,
volume = 0.8 ,
speed = 1.0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_audio102 " , # Use different track name
2025-07-11 18:02:44 +08:00
# effect_type="麦霸",
effect_type = " Tremble " ,
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 2: { audio_result } " )
2025-07-11 18:02:44 +08:00
query_draft_status_impl_polling ( audio_result [ ' output ' ] [ ' draft_id ' ] )
save_draft_impl ( audio_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
2025-08-06 18:13:38 +08:00
def add_subtitle_impl ( srt , draft_id = None , time_offset = 0.0 , font_size = 5.0 , font = " 思源粗宋 " ,
2025-07-11 18:02:44 +08:00
bold = False , italic = False , underline = False , font_color = " #ffffff " ,
transform_x = 0.0 , transform_y = 0.0 , scale_x = 1.0 , scale_y = 1.0 ,
vertical = False , track_name = " subtitle " , alpha = 1 ,
border_alpha = 1.0 , border_color = " #000000 " , border_width = 0.0 ,
background_color = " #000000 " , background_style = 1 , background_alpha = 0.0 ,
rotation = 0.0 , width = 1080 , height = 1920 ) :
2025-07-13 15:54:21 +08:00
""" API wrapper for add_subtitle service """
2025-07-11 18:02:44 +08:00
data = {
2025-07-13 15:54:21 +08:00
" license_key " : LICENSE_KEY , # Using trial version license key
" srt " : srt , # Modified parameter name to match server side
2025-07-11 18:02:44 +08:00
" draft_id " : draft_id ,
" time_offset " : time_offset ,
2025-08-06 18:13:38 +08:00
" font " : font ,
2025-07-11 18:02:44 +08:00
" font_size " : font_size ,
" bold " : bold ,
" italic " : italic ,
" underline " : underline ,
" font_color " : font_color ,
" transform_x " : transform_x ,
" transform_y " : transform_y ,
" scale_x " : scale_x ,
" scale_y " : scale_y ,
" vertical " : vertical ,
" track_name " : track_name ,
" alpha " : alpha ,
" border_alpha " : border_alpha ,
" border_color " : border_color ,
" border_width " : border_width ,
" background_color " : background_color ,
" background_style " : background_style ,
" background_alpha " : background_alpha ,
" rotation " : rotation ,
" width " : width ,
" height " : height
}
return make_request ( " add_subtitle " , data )
def save_draft_impl ( draft_id , draft_folder ) :
2025-07-13 15:54:21 +08:00
""" API wrapper for save_draft service """
2025-07-11 18:02:44 +08:00
data = {
2025-07-13 15:54:21 +08:00
" license_key " : LICENSE_KEY , # Using trial version license key
2025-07-11 18:02:44 +08:00
" draft_id " : draft_id ,
" draft_folder " : draft_folder
}
return make_request ( " save_draft " , data )
def query_script_impl ( draft_id ) :
2025-07-13 15:54:21 +08:00
""" API wrapper for query_script service """
2025-07-11 18:02:44 +08:00
data = {
" draft_id " : draft_id
}
return make_request ( " query_script " , data )
def query_draft_status_impl ( task_id ) :
2025-07-13 15:54:21 +08:00
""" API wrapper for query_draft_status service """
2025-07-11 18:02:44 +08:00
data = {
2025-07-13 15:54:21 +08:00
" license_key " : LICENSE_KEY , # Using trial version license key
2025-07-11 18:02:44 +08:00
" task_id " : task_id
}
return make_request ( " query_draft_status " , data )
def query_draft_status_impl_polling ( task_id , timeout = 300 , callback = None ) :
"""
2025-07-13 15:54:21 +08:00
Poll for draft download status , implemented with async thread to avoid blocking the main thread
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
: param task_id : task ID returned by save_draft_impl
: param timeout : timeout in seconds , default 5 minutes
: param callback : optional callback function called when task completes , fails or times out , with final status as parameter
: return : tuple of thread object and result container , can be used to get results later
2025-07-11 18:02:44 +08:00
"""
2025-07-13 15:54:21 +08:00
# Create result container to store final result
2025-07-11 18:02:44 +08:00
result_container = { " result " : None }
def _polling_thread ( ) :
start_time = time . time ( )
2025-07-13 15:54:21 +08:00
print ( f " Starting to query status for task { task_id } ... " )
2025-07-11 18:02:44 +08:00
while True :
try :
2025-07-13 15:54:21 +08:00
# Get current task status
2025-07-11 18:02:44 +08:00
task_status = query_draft_status_impl ( task_id ) . get ( " output " , { } )
2025-07-13 15:54:21 +08:00
# Print current status
2025-07-11 18:02:44 +08:00
status = task_status . get ( " status " , " unknown " )
message = task_status . get ( " message " , " " )
progress = task_status . get ( " progress " , 0 )
2025-07-13 15:54:21 +08:00
print ( f " Current status: { status } , progress: { progress } %, message: { message } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Check if completed or failed
2025-07-11 18:02:44 +08:00
if status == " completed " :
2025-07-13 15:54:21 +08:00
print ( f " Task completed! Draft URL: { task_status . get ( ' draft_url ' , ' Not provided ' ) } " )
result_container [ " result " ] = task_status . get ( ' draft_url ' , ' Not provided ' )
2025-07-11 18:02:44 +08:00
if callback :
2025-07-13 15:54:21 +08:00
callback ( task_status . get ( ' draft_url ' , ' Not provided ' ) )
2025-07-11 18:02:44 +08:00
break
elif status == " failed " :
2025-07-13 15:54:21 +08:00
print ( f " Task failed: { message } " )
2025-07-11 18:02:44 +08:00
result_container [ " result " ] = task_status
if callback :
callback ( task_status )
break
elif status == " not_found " :
2025-07-13 15:54:21 +08:00
print ( f " Task does not exist: { task_id } " )
2025-07-11 18:02:44 +08:00
result_container [ " result " ] = task_status
if callback :
callback ( task_status )
break
2025-07-13 15:54:21 +08:00
# Check if timed out
2025-07-11 18:02:44 +08:00
elapsed_time = time . time ( ) - start_time
if elapsed_time > timeout :
2025-07-13 15:54:21 +08:00
print ( f " Query timed out, waited { timeout } seconds " )
2025-07-11 18:02:44 +08:00
result_container [ " result " ] = task_status
if callback :
callback ( task_status )
break
except Exception as e :
2025-07-13 15:54:21 +08:00
# Catch all exceptions to prevent thread crash
print ( f " Exception occurred during query: { e } " )
time . sleep ( 1 ) # Wait 1 second before retrying after error
2025-07-11 18:02:44 +08:00
continue
2025-07-13 15:54:21 +08:00
# Wait 1 second before querying again
2025-07-11 18:02:44 +08:00
time . sleep ( 1 )
2025-07-13 15:54:21 +08:00
# Create and start thread
2025-07-11 18:02:44 +08:00
thread = threading . Thread ( target = _polling_thread )
2025-07-13 15:54:21 +08:00
# thread.daemon = True # Set as daemon thread, automatically terminates when main thread ends
2025-07-11 18:02:44 +08:00
thread . start ( )
2025-07-13 15:54:21 +08:00
# Return thread object and result container for external code to get results
2025-07-11 18:02:44 +08:00
return thread , result_container
def test_subtitle ( ) :
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case: Add text subtitles
print ( " \n Test: Adding text subtitles " )
2025-07-11 18:02:44 +08:00
text_result = add_subtitle_impl (
2025-07-13 15:54:21 +08:00
srt = " 1 \n 00:00:00,000 --> 00:00:04,433 \n Hello, I am the CapCut draft assistant developed by Sun Guannan. \n \n 2 \n 00:00:04,433 --> 00:00:11,360 \n I specialize in combining audio, video, and image materials to create CapCut drafts. \n " ,
2025-07-11 18:02:44 +08:00
font_size = 8.0 ,
bold = True ,
italic = True ,
underline = True ,
font_color = " #FF0000 " ,
transform_y = 0 ,
transform_x = 0.4 ,
time_offset = 42 ,
scale_x = 1.0 ,
scale_y = 2.0 ,
vertical = True ,
2025-07-13 15:54:21 +08:00
# Add background color parameters
background_color = " #FFFF00 " , # Yellow background
background_style = 1 , # Style 1 means rectangular background
background_alpha = 0.7 , # 70% opacity
# Add border parameters
border_color = " #0000FF " , # Blue border
border_width = 20.0 , # Border width 2
border_alpha = 1.0 # Fully opaque
)
print ( f " Text addition result: { text_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Save draft
2025-07-11 18:02:44 +08:00
if text_result . get ( ' success ' ) and text_result . get ( ' output ' ) :
save_result = save_draft_impl ( text_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test01 ( ) :
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Combined test
print ( " \n Test 2: Add audio " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 2 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio100 " ,
2025-07-13 15:54:21 +08:00
effect_type = " Tremble " ,
2025-07-11 18:02:44 +08:00
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 1: { audio_result } " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 4 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio100 " ,
2025-07-13 15:54:21 +08:00
effect_type = " Tremble " ,
2025-07-11 18:02:44 +08:00
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 2: { audio_result } " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 6 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
2025-07-13 15:54:21 +08:00
effect_type = " Tremble " ,
2025-07-11 18:02:44 +08:00
effect_params = [ 90.0 , 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 3: { audio_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 1: Basic text addition
2025-07-11 18:02:44 +08:00
text_result = add_text_impl (
draft_folder = draft_folder ,
2025-07-13 15:54:21 +08:00
text = " Test Text 1 " ,
2025-07-11 18:02:44 +08:00
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 3 ,
2025-07-13 15:54:21 +08:00
font = " 思源中宋 " , # Use Source Han Serif font
font_color = " #FF0000 " , # Red
2025-07-11 18:02:44 +08:00
track_name = " main_text " ,
transform_y = 0.8 ,
transform_x = 0.5 ,
font_size = 30.0
)
2025-07-13 15:54:21 +08:00
print ( " Test case 1 (Basic text) successful: " , text_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 2: Vertical text
2025-07-11 18:02:44 +08:00
result2 = add_text_impl (
draft_id = text_result [ ' output ' ] [ ' draft_id ' ] ,
2025-07-13 15:54:21 +08:00
text = " Vertical Text Test " ,
2025-07-11 18:02:44 +08:00
start = 3 ,
end = 6 ,
font = " 云书法三行魏碑体 " ,
2025-07-13 15:54:21 +08:00
font_color = " #00FF00 " , # Green
2025-07-11 18:02:44 +08:00
font_size = 8.0 ,
track_name = " main_text " ,
2025-07-13 15:54:21 +08:00
vertical = True , # Enable vertical text
2025-07-11 18:02:44 +08:00
transform_y = - 0.5 ,
2025-07-13 15:54:21 +08:00
outro_animation = ' Fade_Out '
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( " Test case 2 (Vertical text) successful: " , result2 )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " Test completed " )
# Test adding image
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
2025-07-13 15:54:21 +08:00
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] , # Replace with actual draft ID
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " , # Replace with actual image URL
2025-07-11 18:02:44 +08:00
width = 480 ,
height = 480 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Display for 5 seconds
2025-07-11 18:02:44 +08:00
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( " Image added successfully! " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test adding image
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
2025-07-13 15:54:21 +08:00
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] , # Replace with actual draft ID
image_url = " http://gips0.baidu.com/it/u=3602773692,1512483864&fm=3028&app=3028&f=JPEG&fmt=auto?w=960&h=1280 " , # Replace with actual image URL
2025-07-11 18:02:44 +08:00
width = 480 ,
height = 480 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Display for 5 seconds
2025-07-11 18:02:44 +08:00
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main_2 "
)
2025-07-13 15:54:21 +08:00
print ( " Image added successfully! " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
2025-07-13 15:54:21 +08:00
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] , # Replace with actual draft ID
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " , # Replace with actual image URL
2025-07-11 18:02:44 +08:00
width = 480 ,
height = 480 ,
start = 5 ,
2025-07-13 15:54:21 +08:00
end = 10.0 , # Display for 5 seconds
2025-07-11 18:02:44 +08:00
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( " Image 2 added successfully! " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test adding video keyframe
print ( " \n Test: Add video keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
2025-07-13 15:54:21 +08:00
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] , # Use existing draft ID
2025-07-11 18:02:44 +08:00
track_name = " main " ,
2025-07-13 15:54:21 +08:00
property_type = " position_y " , # Test opacity
time = 1.5 , # Add keyframe at 3.5 seconds
value = " 0.2 " # Move 300px
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Keyframe addition result: { keyframe_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add video keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
2025-07-13 15:54:21 +08:00
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] , # Use existing draft ID
2025-07-11 18:02:44 +08:00
track_name = " main " ,
2025-07-13 15:54:21 +08:00
property_type = " position_y " , # Test opacity
time = 3.5 , # Add keyframe at 3.5 seconds
value = " 0.4 " # Move 300px
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Keyframe addition result: { keyframe_result } " )
2025-07-11 18:02:44 +08:00
query_draft_status_impl_polling ( keyframe_result [ ' output ' ] [ ' draft_id ' ] )
save_draft_impl ( keyframe_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
def test02 ( ) :
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Combined test
print ( " \n Test 2: Add audio " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 2 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio100 " ,
effect_type = " Big_House " ,
effect_params = [ 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 1: { audio_result } " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 4 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio100 " ,
effect_type = " Big_House " ,
effect_params = [ 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 2: { audio_result } " )
2025-07-11 18:02:44 +08:00
audio_result = add_audio_track (
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
audio_url = " https://lf3-lv-music-tos.faceu.com/obj/tos-cn-ve-2774/oYACBQRCMlWBIrZipvQZhI5LAlUFYii0RwEPh " ,
start = 4 ,
end = 5 ,
target_start = 6 ,
volume = 0.8 ,
speed = 1.0 ,
track_name = " main_audio101 " ,
effect_type = " Big_House " ,
effect_params = [ 50.0 ]
)
2025-07-13 15:54:21 +08:00
print ( f " Audio addition result 3: { audio_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 1: Basic text addition
2025-07-11 18:02:44 +08:00
text_result = add_text_impl (
draft_folder = draft_folder ,
2025-07-13 15:54:21 +08:00
text = " Test Text 1 " ,
2025-07-11 18:02:44 +08:00
draft_id = audio_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 3 ,
2025-07-13 15:54:21 +08:00
font = " 思源中宋 " , # Use Source Han Serif font
font_color = " #FF0000 " , # Red
2025-07-11 18:02:44 +08:00
track_name = " main_text " ,
transform_y = 0.8 ,
transform_x = 0.5 ,
font_size = 30.0
)
2025-07-13 15:54:21 +08:00
print ( " Test case 1 (Basic text) successful: " , text_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test case 2: Vertical text
2025-07-11 18:02:44 +08:00
result2 = add_text_impl (
draft_id = text_result [ ' output ' ] [ ' draft_id ' ] ,
2025-07-13 15:54:21 +08:00
text = " Vertical Text Test " ,
2025-07-11 18:02:44 +08:00
start = 3 ,
end = 6 ,
font = " 云书法三行魏碑体 " ,
2025-07-13 15:54:21 +08:00
font_color = " #00FF00 " , # Green
2025-07-11 18:02:44 +08:00
font_size = 8.0 ,
track_name = " main_text " ,
2025-07-13 15:54:21 +08:00
vertical = True , # Enable vertical text
2025-07-11 18:02:44 +08:00
transform_y = - 0.5 ,
outro_animation = ' Throw_Back '
)
2025-07-13 15:54:21 +08:00
print ( " Test case 2 (Vertical text) successful: " , result2 )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " Test completed " )
# Test adding image
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
2025-07-13 15:54:21 +08:00
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] , # Replace with actual draft ID
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " , # Replace with actual image URL
2025-07-11 18:02:44 +08:00
width = 480 ,
height = 480 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Display for 5 seconds
2025-07-11 18:02:44 +08:00
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( " Image added successfully! " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test adding image
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
2025-07-13 15:54:21 +08:00
draft_id = result2 [ ' output ' ] [ ' draft_id ' ] , # Replace with actual draft ID
image_url = " http://gips0.baidu.com/it/u=3602773692,1512483864&fm=3028&app=3028&f=JPEG&fmt=auto?w=960&h=1280 " , # Replace with actual image URL
2025-07-11 18:02:44 +08:00
width = 480 ,
height = 480 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Display for 5 seconds
2025-07-11 18:02:44 +08:00
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main_2 "
)
2025-07-13 15:54:21 +08:00
print ( " Image added successfully! " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
2025-07-13 15:54:21 +08:00
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] , # Replace with actual draft ID
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " , # Replace with actual image URL
2025-07-11 18:02:44 +08:00
width = 480 ,
height = 480 ,
start = 5 ,
2025-07-13 15:54:21 +08:00
end = 10.0 , # Display for 5 seconds
2025-07-11 18:02:44 +08:00
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( " Image 2 added successfully! " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Test adding video keyframe
print ( " \n Test: Add video keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
2025-07-13 15:54:21 +08:00
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] , # Use existing draft ID
2025-07-11 18:02:44 +08:00
track_name = " main " ,
2025-07-13 15:54:21 +08:00
property_type = " position_y " , # Test opacity
time = 1.5 , # Add keyframe at 3.5 seconds
value = " 0.2 " # Move 300px
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Keyframe addition result: { keyframe_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add video keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
2025-07-13 15:54:21 +08:00
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] , # Use existing draft ID
2025-07-11 18:02:44 +08:00
track_name = " main " ,
2025-07-13 15:54:21 +08:00
property_type = " position_y " , # Test opacity
time = 3.5 , # Add keyframe at 3.5 seconds
value = " 0.4 " # Move 300px
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Keyframe addition result: { keyframe_result } " )
2025-07-11 18:02:44 +08:00
query_draft_status_impl_polling ( keyframe_result [ ' output ' ] [ ' draft_id ' ] )
save_draft_impl ( keyframe_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
def test_video_track01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding video track """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-13 15:54:21 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " # Replace with actual video URL
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Cut the first 5 seconds of the video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
print ( f " Video track addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
if video_result and ' output ' in video_result and ' draft_id ' in video_result [ ' output ' ] :
draft_id = video_result [ ' output ' ] [ ' draft_id ' ]
2025-07-13 15:54:21 +08:00
print ( f " Save draft: { save_draft_impl ( draft_id , draft_folder ) } " )
2025-07-11 18:02:44 +08:00
else :
2025-07-13 15:54:21 +08:00
print ( " Unable to get draft ID, skipping save operation. " )
2025-07-11 18:02:44 +08:00
def test_video_track02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding video tracks in a loop """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-13 15:54:21 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " # Replace with actual video URL
draft_id = None # Initialize draft_id
2025-07-11 18:02:44 +08:00
for i in range ( 5 ) :
2025-07-13 15:54:21 +08:00
target_start = i * 5 # Increment by 5 seconds each time
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Pass in draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Cut the first 5 seconds of the video
2025-07-11 18:02:44 +08:00
target_start = target_start ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " Video addition result { i + 1 } : { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Finally save and upload the draft
2025-07-11 18:02:44 +08:00
save_result = save_draft_impl ( draft_id , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test_video_track03 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding videos to different tracks """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-13 15:54:21 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " # Replace with actual video URL
draft_id = None # Initialize draft_id
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Add video to the first track
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Pass in draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Cut the first 5 seconds of the video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " First video addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Add video to the second track
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Use previous draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Cut the first 5 seconds of the video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_video_track_2 " , # Use different track name
speed = 1.0 , # Change playback speed
scale_x = 0.5 , # Reduce video width
transform_y = 0.5 # Position video at bottom of screen
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " Second video addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Third time add video to another track
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
draft_id = draft_id , # Use previous draft_id
2025-07-11 18:02:44 +08:00
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Cut the first 5 seconds of the video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
2025-07-13 15:54:21 +08:00
track_name = " main_video_track_3 " , # Use third track
speed = 1.5 , # Faster playback speed
scale_x = 0.3 , # Smaller video width
transform_y = - 0.5 # Position video at top of screen
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] # Update draft_id
print ( f " Third video addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Finally save and upload the draft
2025-07-11 18:02:44 +08:00
save_result = save_draft_impl ( draft_id , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test_video_track04 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding video track """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-13 15:54:21 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " # Replace with actual video URL
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = ' https://p26-bot-workflow-sign.byteimg.com/tos-cn-i-mdko3gqilj/07bf6797a1834d75beb05c63293af204.mp4~tplv-mdko3gqilj-image.image?rk3s=81d4c505&x-expires=1782141919&x-signature=2ETX83Swh %2F wKzHeWB %2F 9oGq9vqt4 % 3D&x-wf-file_name=output-997160b5.mp4 '
)
2025-07-13 15:54:21 +08:00
print ( f " Video track addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = ' https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 ' ,
2025-07-13 15:54:21 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] , # Use existing draft ID
2025-07-11 18:02:44 +08:00
target_start = 19.84
)
2025-07-13 15:54:21 +08:00
print ( f " Video track addition result: { video_result } " )
2025-07-11 18:02:44 +08:00
if video_result and ' output ' in video_result and ' draft_id ' in video_result [ ' output ' ] :
draft_id = video_result [ ' output ' ] [ ' draft_id ' ]
2025-07-13 15:54:21 +08:00
print ( f " Save draft: { save_draft_impl ( draft_id , draft_folder ) } " )
2025-07-11 18:02:44 +08:00
else :
2025-07-13 15:54:21 +08:00
print ( " Unable to get draft ID, skipping save operation. " )
2025-07-11 18:02:44 +08:00
2025-08-01 08:57:32 +08:00
def test_video_track05 ( ) :
""" 测试添加视频轨道 """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-08-01 08:57:32 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " # 替换为实际视频URL
print ( " \n 测试:添加视频轨道 " )
video_result = add_video_impl (
video_url = ' https://p26-bot-workflow-sign.byteimg.com/tos-cn-i-mdko3gqilj/07bf6797a1834d75beb05c63293af204.mp4~tplv-mdko3gqilj-image.image?rk3s=81d4c505&x-expires=1782141919&x-signature=2ETX83Swh %2F wKzHeWB %2F 9oGq9vqt4 % 3D&x-wf-file_name=output-997160b5.mp4 ' ,
background_blur = 2 ,
width = 1920 ,
height = 1080
)
print ( f " 视频轨道添加结果: { video_result } " )
if video_result and ' output ' in video_result and ' draft_id ' in video_result [ ' output ' ] :
draft_id = video_result [ ' output ' ] [ ' draft_id ' ]
print ( f " 保存草稿: { save_draft_impl ( draft_id , draft_folder ) } " )
else :
print ( " 无法获取草稿ID, 跳过保存操作。 " )
2025-07-11 18:02:44 +08:00
def test_keyframe ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding keyframes """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-13 15:54:21 +08:00
draft_id = None # Initialize draft_id
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add basic video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " ,
width = 1920 ,
height = 1080 ,
start = 0 ,
end = 10.0 ,
target_start = 0 ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
print ( " Video addition result: " , video_result )
2025-07-11 18:02:44 +08:00
if video_result . get ( ' success ' ) and video_result . get ( ' output ' ) :
draft_id = video_result [ ' output ' ] [ ' draft_id ' ]
2025-07-13 15:54:21 +08:00
print ( " Using existing draft_id: " , draft_id )
2025-07-11 18:02:44 +08:00
else :
2025-07-13 15:54:21 +08:00
print ( " Unable to get draft ID, terminating test. " )
2025-07-11 18:02:44 +08:00
return
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add opacity keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
draft_id = draft_id ,
track_name = " main_video_track " ,
property_type = " alpha " ,
time = 2.0 ,
value = " 1.0 "
)
2025-07-13 15:54:21 +08:00
print ( " Opacity keyframe addition result: " , keyframe_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add position Y keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
draft_id = draft_id ,
track_name = " main_video_track " ,
property_type = " position_y " ,
time = 2.0 ,
value = " 0.5 "
)
2025-07-13 15:54:21 +08:00
print ( " Position Y keyframe addition result: " , keyframe_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Add scale X keyframe " )
2025-07-11 18:02:44 +08:00
keyframe_result = add_video_keyframe_impl (
draft_id = draft_id ,
track_name = " main_video_track " ,
property_type = " position_y " ,
time = 4.0 ,
value = " -0.5 "
)
2025-07-13 15:54:21 +08:00
print ( " Scale X keyframe addition result: " , keyframe_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Final draft save " )
2025-07-11 18:02:44 +08:00
save_result = save_draft_impl ( draft_id , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft save result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test_keyframe_02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding keyframes - Batch adding to implement fade-in and zoom bounce effects """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-13 15:54:21 +08:00
draft_id = None # Initialize draft_id
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding basic video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " ,
width = 1920 ,
height = 1080 ,
start = 0 ,
end = 10.0 ,
target_start = 0 ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
print ( " Video adding result: " , video_result )
2025-07-11 18:02:44 +08:00
if video_result . get ( ' success ' ) and video_result . get ( ' output ' ) :
draft_id = video_result [ ' output ' ] [ ' draft_id ' ]
2025-07-13 15:54:21 +08:00
print ( " Using existing draft_id: " , draft_id )
2025-07-11 18:02:44 +08:00
else :
2025-07-13 15:54:21 +08:00
print ( " Unable to get draft ID, terminating test. " )
2025-07-11 18:02:44 +08:00
return
2025-07-13 15:54:21 +08:00
print ( " \n Test: Batch adding opacity keyframes - Implementing fade-in effect " )
# Add opacity keyframes to implement fade-in effect from invisible to visible
2025-07-11 18:02:44 +08:00
alpha_keyframe_result = add_video_keyframe_impl (
draft_id = draft_id ,
track_name = " main_video_track " ,
property_types = [ " alpha " , " alpha " , " alpha " , " alpha " ] ,
times = [ 0.0 , 1.0 , 2.0 , 3.0 ] ,
values = [ " 0.0 " , " 0.3 " , " 0.7 " , " 1.0 " ]
)
2025-07-13 15:54:21 +08:00
print ( " Opacity keyframe batch adding result: " , alpha_keyframe_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Batch adding scale keyframes - Implementing zoom bounce effect " )
# Add uniform scale keyframes to implement zoom bounce effect
2025-07-11 18:02:44 +08:00
scale_keyframe_result = add_video_keyframe_impl (
draft_id = draft_id ,
track_name = " main_video_track " ,
property_types = [ " uniform_scale " , " uniform_scale " , " uniform_scale " , " uniform_scale " , " uniform_scale " ] ,
times = [ 0.0 , 1.5 , 3.0 , 4.5 , 6.0 ] ,
values = [ " 0.8 " , " 1.3 " , " 1.0 " , " 1.2 " , " 1.0 " ]
)
2025-07-13 15:54:21 +08:00
print ( " Scale keyframe batch adding result: " , scale_keyframe_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Batch adding position Y keyframes - Implementing up and down floating effect " )
# Add position Y keyframes to implement up and down floating effect
2025-07-11 18:02:44 +08:00
position_y_keyframe_result = add_video_keyframe_impl (
draft_id = draft_id ,
track_name = " main_video_track " ,
property_types = [ " position_y " , " position_y " , " position_y " , " position_y " ] ,
times = [ 2.0 , 3.5 , 5.0 , 6.5 ] ,
values = [ " 0.0 " , " 0.2 " , " -0.2 " , " 0.0 " ]
)
2025-07-13 15:54:21 +08:00
print ( " Position Y keyframe batch adding result: " , position_y_keyframe_result )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Final draft saving " )
2025-07-11 18:02:44 +08:00
save_result = save_draft_impl ( draft_id , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft saving result: { save_result } " )
2025-07-11 18:02:44 +08:00
def test_subtitle_01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding text subtitles """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test 3: Adding text subtitles " )
2025-07-11 18:02:44 +08:00
text_result = add_subtitle_impl (
srt = " 1 \n 00:00:00,000 --> 00:00:04,433 \n 你333好, 我是孙关南开发的剪映草稿助手。 \n \n 2 \n 00:00:04,433 --> 00:00:11,360 \n 我擅长将音频、视频、图片素材拼接在一起剪辑输出剪映草稿。 \n " ,
font_size = 8.0 ,
bold = True ,
italic = True ,
underline = True ,
font_color = " #FF0000 " ,
transform_y = 0 ,
transform_x = 0.4 ,
time_offset = 42 ,
scale_x = 1.0 ,
scale_y = 2.0 ,
vertical = True
)
2025-07-13 15:54:21 +08:00
print ( f " Text adding result: { text_result } " )
2025-07-11 18:02:44 +08:00
if text_result . get ( ' success ' ) and text_result . get ( ' output ' ) :
save_result = save_draft_impl ( text_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft saving result: { save_result } " )
2025-07-11 18:02:44 +08:00
return text_result
def test_subtitle_02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding text subtitles via SRT URL """
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test 3: Adding text subtitles (from URL) " )
2025-07-11 18:02:44 +08:00
text_result = add_subtitle_impl (
srt = " https://oss-oversea-bucket.oss-cn-hongkong.aliyuncs.com/dfd_srt_1748575460_kmtu56iu.srt?Expires=1748707452&OSSAccessKeyId=TMP.3Km5TL5giRLgDkc3CamKPcWZTmSrLVeRxPWxEisNB2CTymvUxrpX8VXzy5r99F6bJkwjwFM5d1RsiV3cF18iaMriAPtA1y&Signature=4JzB4YGiChsxcTFuvUyZ0v3MjMI % 3D " ,
font_size = 8.0 ,
bold = True ,
italic = True ,
underline = True ,
font_color = " #FF0000 " ,
transform_y = 0 ,
transform_x = 0.4 ,
time_offset = 42 ,
scale_x = 1.0 ,
scale_y = 2.0 ,
vertical = True
)
2025-07-13 15:54:21 +08:00
print ( f " Text adding result: { text_result } " )
2025-07-11 18:02:44 +08:00
if text_result . get ( ' success ' ) and text_result . get ( ' output ' ) :
save_result = save_draft_impl ( text_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
2025-07-13 15:54:21 +08:00
print ( f " Draft saving result: { save_result } " )
2025-07-11 18:02:44 +08:00
return text_result
2025-08-01 10:41:41 +08:00
def test_video_01 ( ) :
""" Test adding single video with transform and speed parameters """
# Set draft folder path for saving
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding video " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
2025-07-13 15:54:21 +08:00
print ( f " Video adding result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
# Save draft
2025-07-11 18:02:44 +08:00
if video_result . get ( ' success ' ) and video_result . get ( ' output ' ) :
query_draft_status_impl_polling ( video_result [ ' output ' ] [ ' draft_id ' ] )
save_draft_impl ( video_result [ ' output ' ] [ ' draft_id ' ] , draft_folder )
def test_video_02 ( ) :
2025-08-01 10:41:41 +08:00
""" Test adding multiple videos with different resolutions to the same draft """
# Set draft folder path for saving
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding video " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
2025-07-13 15:54:21 +08:00
print ( f " Video adding result: { video_result } " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
2025-07-13 15:54:21 +08:00
video_url = " https://videos.pexels.com/video-files/3129769/3129769-hd_1280_720_30fps.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video_2 " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
video_result = add_video_impl (
2025-08-01 10:41:41 +08:00
video_url = " https://videos.pexels.com/video-files/3129769/3129769-uhd_3840_2160_30fps.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video_3 " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
video_result = add_video_impl (
2025-08-01 10:41:41 +08:00
video_url = " https://videos.pexels.com/video-files/3129769/3129769-sd_426_240_30fps.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video_4 " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
video_result = add_video_impl (
2025-08-01 10:41:41 +08:00
video_url = " https://videos.pexels.com/video-files/3129769/3129769-sd_640_360_30fps.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video_5 " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
video_result = add_video_impl (
2025-08-01 10:41:41 +08:00
video_url = " https://videos.pexels.com/video-files/3129769/3129769-uhd_2560_1440_30fps.mp4 " , # Replace with actual video URL
2025-07-11 18:02:44 +08:00
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] ,
start = 0 ,
end = 5 ,
width = 1920 ,
height = 1080 ,
track_name = " main_video_6 " ,
transform_y = 0.1 ,
scale_x = 0.8 ,
scale_y = 0.8 ,
transform_x = 0.1 ,
speed = 1.2 ,
target_start = 0 ,
relative_index = 0
)
if video_result . get ( ' success ' ) and video_result . get ( ' output ' ) :
print ( json . loads ( query_script_impl ( video_result [ ' output ' ] [ ' draft_id ' ] ) [ ' output ' ] ) )
# query_draft_status_impl_polling(video_result['output']['draft_id'])
# save_draft_impl(video_result['output']['draft_id'], draft_folder)
def test_stiker_01 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding stickers """
2025-08-03 16:15:55 +08:00
# Add stickers, test various parameters, only for jianyingpro
draft_folder = JIANYINGPRO_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
result = add_sticker_impl (
resource_id = " 7107529669750066445 " ,
start = 1.0 ,
end = 4.0 ,
2025-07-13 15:54:21 +08:00
transform_y = 0.3 , # Move up
transform_x = - 0.2 , # Move left
alpha = 0.8 , # Set transparency
rotation = 45.0 , # Rotate 45 degrees
scale_x = 1.5 , # Horizontal scale 1.5x
scale_y = 1.5 , # Vertical scale 1.5x
flip_horizontal = True # Horizontal flip
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Sticker adding result: { save_draft_impl ( result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) } " )
2025-07-11 18:02:44 +08:00
def test_stiker_02 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding stickers """
2025-08-03 16:15:55 +08:00
# Add stickers, test various parameters, only for jianyingpro
draft_folder = JIANYINGPRO_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
result = add_sticker_impl (
resource_id = " 7107529669750066445 " ,
start = 1.0 ,
end = 4.0 ,
2025-07-13 15:54:21 +08:00
transform_y = 0.3 , # Move up
transform_x = - 0.2 , # Move left
alpha = 0.8 , # Set transparency
rotation = 45.0 , # Rotate 45 degrees
scale_x = 1.5 , # Horizontal scale 1.5x
scale_y = 1.5 , # Vertical scale 1.5x
flip_horizontal = True # Horizontal flip
2025-07-11 18:02:44 +08:00
)
result = add_sticker_impl (
resource_id = " 7107529669750066445 " ,
draft_id = result [ ' output ' ] [ ' draft_id ' ] ,
start = 5.0 ,
end = 10.0 ,
2025-07-13 15:54:21 +08:00
transform_y = - 0.3 , # Move up
transform_x = 0.5 , # Move left
alpha = 0.1 , # Set transparency
rotation = 30.0 , # Rotate 30 degrees
scale_x = 1.5 , # Horizontal scale 1.5x
scale_y = 1.2 , # Vertical scale 1.2x
2025-07-11 18:02:44 +08:00
)
2025-07-13 15:54:21 +08:00
print ( f " Sticker adding result: { save_draft_impl ( result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) } " )
2025-07-11 18:02:44 +08:00
def test_stiker_03 ( ) :
2025-07-13 15:54:21 +08:00
""" Test adding stickers """
2025-08-03 16:15:55 +08:00
# Add stickers, test various parameters, only for jianyingpro
draft_folder = JIANYINGPRO_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
result = add_sticker_impl (
resource_id = " 7107529669750066445 " ,
start = 1.0 ,
end = 4.0 ,
2025-07-13 15:54:21 +08:00
transform_y = 0.3 , # Move up
transform_x = - 0.2 , # Move left
alpha = 0.8 , # Set transparency
rotation = 45.0 , # Rotate 45 degrees
scale_x = 1.5 , # Horizontal scale 1.5x
scale_y = 1.5 , # Vertical scale 1.5x
flip_horizontal = True , # Horizontal flip
2025-07-11 18:02:44 +08:00
track_name = " stiker_main " ,
relative_index = 999
)
result = add_sticker_impl (
resource_id = " 7107529669750066445 " ,
draft_id = result [ ' output ' ] [ ' draft_id ' ] ,
start = 5.0 ,
end = 10.0 ,
2025-07-13 15:54:21 +08:00
transform_y = - 0.3 , # Move up
transform_x = 0.5 , # Move left
alpha = 0.1 , # Set transparency
rotation = 30.0 , # Rotate 30 degrees
scale_x = 1.5 , # Horizontal scale 1.5x
scale_y = 1.2 , # Vertical scale 1.2x
2025-07-11 18:02:44 +08:00
track_name = " stiker_main_2 " ,
relative_index = 0
)
2025-07-13 15:54:21 +08:00
print ( f " Sticker adding result: { save_draft_impl ( result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) } " )
2025-07-11 18:02:44 +08:00
def test_transition_01 ( ) :
2025-08-01 10:41:41 +08:00
""" Test adding multiple images with dissolve transition effects """
# Set draft folder path for saving
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 1 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 0 ,
end = 5.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main " ,
2025-07-13 15:54:21 +08:00
transition = " Dissolve " ,
2025-07-11 18:02:44 +08:00
transition_duration = 1.0
)
2025-07-13 15:54:21 +08:00
print ( f " Image 1 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding image 2 " )
2025-07-11 18:02:44 +08:00
image_result = add_image_impl (
draft_id = image_result [ ' output ' ] [ ' draft_id ' ] ,
image_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_image_v2/d6e33c84d7554146a25b1093b012838b_0.png?x-oss-process=image/resize,w_500/watermark,image_aW1nL3dhdGVyMjAyNDExMjkwLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTQ1LGhfMjU=,t_80,g_se,x_10,y_10/format,webp " ,
width = 480 ,
height = 480 ,
start = 5 ,
end = 10.0 ,
transform_y = 0.7 ,
scale_x = 2.0 ,
scale_y = 1.0 ,
transform_x = 0 ,
track_name = " main "
)
2025-07-13 15:54:21 +08:00
print ( f " Image 2 added successfully! { image_result [ ' output ' ] [ ' draft_id ' ] } " )
2025-07-11 18:02:44 +08:00
print ( save_draft_impl ( image_result [ ' output ' ] [ ' draft_id ' ] , draft_folder ) )
def test_transition_02 ( ) :
2025-08-01 10:41:41 +08:00
""" Test adding video tracks with transition effects """
# Set draft folder path for saving
2025-08-03 16:15:55 +08:00
draft_folder = CAPCUT_DRAFT_FOLDER
2025-08-01 10:41:41 +08:00
# Define video URL for testing
video_url = " https://cdn.wanx.aliyuncs.com/wanx/1719234057367822001/text_to_video/092faf3c94244973ab752ee1280ba76f.mp4?spm=5176.29623064.0.0.41ed26d6cBOhV3&file=092faf3c94244973ab752ee1280ba76f.mp4 "
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = video_url ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Trim first 5 seconds of video
2025-07-11 18:02:44 +08:00
target_start = 0 ,
track_name = " main_video_track " ,
2025-07-13 15:54:21 +08:00
transition = " Dissolve " ,
2025-07-11 18:02:44 +08:00
transition_duration = 1.0
)
2025-07-13 15:54:21 +08:00
print ( f " Video track adding result: { video_result } " )
2025-07-11 18:02:44 +08:00
2025-07-13 15:54:21 +08:00
print ( " \n Test: Adding video track " )
2025-07-11 18:02:44 +08:00
video_result = add_video_impl (
video_url = video_url ,
draft_id = video_result [ ' output ' ] [ ' draft_id ' ] ,
width = 1920 ,
height = 1080 ,
start = 0 ,
2025-07-13 15:54:21 +08:00
end = 5.0 , # Trim first 5 seconds of video
2025-07-11 18:02:44 +08:00
target_start = 5.0 ,
track_name = " main_video_track "
)
2025-07-13 15:54:21 +08:00
print ( f " Video track adding result: { video_result } " )
2025-07-11 18:02:44 +08:00
if video_result and ' output ' in video_result and ' draft_id ' in video_result [ ' output ' ] :
draft_id = video_result [ ' output ' ] [ ' draft_id ' ]
2025-07-13 15:54:21 +08:00
print ( f " Saving draft: { save_draft_impl ( draft_id , draft_folder ) } " )
2025-07-11 18:02:44 +08:00
else :
2025-07-13 15:54:21 +08:00
print ( " Unable to get draft ID, skipping save operation. " )
2025-07-11 18:02:44 +08:00
if __name__ == " __main__ " :
2025-08-05 12:22:12 +08:00
# test01()
# test02()
# test_effect_01() # Run effect test
2025-08-06 18:13:38 +08:00
# test_effect_02()
2025-08-05 12:22:12 +08:00
# test_audio01()
# test_audio02()
# test_audio03()
# test_audio04()
# test_image01()
# test_image02()
# test_image03()
# test_image04()
# # test_video()
# test_video_02()
# test_text()
# test_video_track01()
# test_video_track02()
# test_video_track03()
# test_video_track04()
# test_keyframe()
# test_keyframe_02()
2025-08-06 18:13:38 +08:00
test_subtitle_01 ( )
2025-08-05 12:22:12 +08:00
# test_subtitle_02()
# test_subtitle()
# test_stiker_01()
# test_stiker_02()
# test_stiker_03()
# test_transition_01()
# test_transition_02()
# # test_generate_image01()
# # test_generate_image02()
# # test_speech_01()
# test_mask_01()
# test_mask_02()