Class: ImageToVideoAI::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/image_to_video_ai/client.rb

Constant Summary collapse

DEFAULT_BASE_URL =
"https://imagetovideoai.pro"

Instance Method Summary collapse

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.

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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