Class: ImageToVideoAI::Client
- Inherits:
-
Object
- Object
- ImageToVideoAI::Client
- Defined in:
- lib/image_to_video_ai/client.rb
Constant Summary collapse
- DEFAULT_BASE_URL =
"https://imagetovideoai.pro"
Instance Method Summary collapse
- #create_video(image_url:, prompt:, model: "seedance-1.5-pro", duration: 5, aspect_ratio: "1:1", resolution: nil, generate_audio: nil, tail_image_url: nil, audio_url: nil) ⇒ Object
-
#initialize(api_key: , base_url: DEFAULT_BASE_URL, open_timeout: 10, read_timeout: 90, transport: nil) ⇒ Client
constructor
A new instance of Client.
- #result(task_id:) ⇒ Object
- #wait_for_result(task_id:, interval: 5, timeout: 600) ⇒ Object
Constructor Details
#initialize(api_key: , base_url: DEFAULT_BASE_URL, open_timeout: 10, read_timeout: 90, transport: nil) ⇒ Client
Returns a new instance of Client.
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/image_to_video_ai/client.rb', line 45 def initialize(api_key: ENV["IMAGE_TO_VIDEO_AI_API_KEY"], base_url: DEFAULT_BASE_URL, open_timeout: 10, read_timeout: 90, transport: nil) @api_key = api_key.to_s.strip @base_url = URI(base_url) @open_timeout = open_timeout @read_timeout = read_timeout @transport = transport raise ArgumentError, "api_key is required" if @api_key.empty? unless @base_url.is_a?(URI::HTTP) && @base_url.host raise ArgumentError, "base_url must be an HTTP or HTTPS URL" end end |
Instance Method Details
#create_video(image_url:, prompt:, model: "seedance-1.5-pro", duration: 5, aspect_ratio: "1:1", resolution: nil, generate_audio: nil, tail_image_url: nil, audio_url: nil) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/image_to_video_ai/client.rb', line 59 def create_video(image_url:, prompt:, model: "seedance-1.5-pro", duration: 5, aspect_ratio: "1:1", resolution: nil, generate_audio: nil, tail_image_url: nil, audio_url: nil) raise ArgumentError, "image_url is required" if image_url.to_s.strip.empty? raise ArgumentError, "prompt is required" if prompt.to_s.strip.empty? payload = { url: image_url, prompt: prompt, model: model, duration: duration, aspectRatio: aspect_ratio } payload[:resolution] = resolution if resolution payload[:generateAudio] = generate_audio unless generate_audio.nil? payload[:tailImageUrl] = tail_image_url if tail_image_url payload[:audioUrl] = audio_url if audio_url Task.new(request("/api/image2video-figma/create", payload)) end |
#result(task_id:) ⇒ Object
80 81 82 83 84 |
# File 'lib/image_to_video_ai/client.rb', line 80 def result(task_id:) raise ArgumentError, "task_id is required" if task_id.to_s.strip.empty? Task.new(request("/api/image2video-figma/result", taskId: task_id)) end |
#wait_for_result(task_id:, interval: 5, timeout: 600) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/image_to_video_ai/client.rb', line 86 def wait_for_result(task_id:, interval: 5, timeout: 600) deadline = monotonic_time + timeout loop do task = result(task_id: task_id) return task if task.complete? raise Error, "timed out waiting for video task #{task_id}" if monotonic_time >= deadline sleep interval end end |