@@ -46,7 +46,6 @@ def self.create_uploads!(
4646 def self . create_edited_upload! (
4747 images ,
4848 prompt ,
49- mask : nil ,
5049 model : "gpt-image-1" ,
5150 size : "auto" ,
5251 api_key : nil ,
@@ -60,7 +59,6 @@ def self.create_edited_upload!(
6059 edit_images (
6160 images ,
6261 prompt ,
63- mask : mask ,
6462 model : model ,
6563 size : size ,
6664 api_key : api_key ,
@@ -168,7 +166,6 @@ def self.generate_images_in_threads(
168166 def self . edit_images (
169167 images ,
170168 prompt ,
171- mask : nil ,
172169 model : "gpt-image-1" ,
173170 size : "auto" ,
174171 api_key : nil ,
@@ -196,7 +193,6 @@ def self.edit_images(
196193 perform_edit_api_call! (
197194 images ,
198195 prompt ,
199- mask : mask ,
200196 model : model ,
201197 size : size ,
202198 api_key : api_key ,
@@ -297,7 +293,6 @@ def self.perform_generation_api_call!(
297293 def self . perform_edit_api_call! (
298294 images ,
299295 prompt ,
300- mask : nil ,
301296 model : "gpt-image-1" ,
302297 size : "auto" ,
303298 api_key :,
@@ -326,6 +321,8 @@ def self.perform_edit_api_call!(
326321
327322 body << "#{ model } \r \n "
328323
324+ files_to_delete = [ ]
325+
329326 # Add images
330327 images . each do |image |
331328 image_data = nil
@@ -337,7 +334,10 @@ def self.perform_edit_api_call!(
337334 if image . local?
338335 Discourse . store . path_for ( image )
339336 else
340- Discourse . store . download_safe ( image , max_file_size_kb : MAX_IMAGE_SIZE ) &.path
337+ filename =
338+ Discourse . store . download_safe ( image , max_file_size_kb : MAX_IMAGE_SIZE ) &.path
339+ files_to_delete << filename if filename
340+ filename
341341 end
342342 image_data = File . read ( image_path )
343343 image_filename = File . basename ( image . url )
@@ -352,43 +352,6 @@ def self.perform_edit_api_call!(
352352 body << "\r \n "
353353 end
354354
355- # Add mask if provided
356- if mask
357- mask_data = nil
358- mask_filename = nil
359-
360- # Handle different mask input types (similar to images)
361- if mask . is_a? ( Upload )
362- mask_data = File . read ( Discourse . store . path_for ( mask ) )
363- mask_filename = File . basename ( mask . url )
364- elsif mask . is_a? ( File ) || mask . is_a? ( Tempfile )
365- mask_data = File . read ( mask . path )
366- mask_filename = File . basename ( mask . path )
367- elsif mask . is_a? ( String ) && File . exist? ( mask )
368- mask_data = File . read ( mask )
369- mask_filename = File . basename ( mask )
370- elsif mask . is_a? ( String ) && mask . start_with? ( "http" )
371- # Download mask from URL
372- mask_temp =
373- FileHelper . download (
374- mask ,
375- max_file_size : 4 . megabytes ,
376- tmp_file_name : "edit_mask_download" ,
377- follow_redirect : true ,
378- )
379- mask_data = File . read ( mask_temp )
380- mask_filename = File . basename ( mask )
381- else
382- raise "Unsupported mask format. Must be Upload, File, path string, or URL."
383- end
384-
385- body << "--#{ boundary } \r \n "
386- body << "Content-Disposition: form-data; name=\" mask\" ; filename=\" #{ mask_filename } \" \r \n "
387- body << "Content-Type: image/png\r \n \r \n "
388- body << mask_data
389- body << "\r \n "
390- end
391-
392355 # Add prompt
393356 body << "--#{ boundary } \r \n "
394357 body << "Content-Disposition: form-data; name=\" prompt\" \r \n \r \n "
@@ -452,6 +415,10 @@ def self.perform_edit_api_call!(
452415 end
453416 json
454417 end
418+ ensure
419+ if files_to_delete . present?
420+ files_to_delete . each { |file | File . delete ( file ) if File . exist? ( file ) }
421+ end
455422 end
456423 end
457424 end
0 commit comments