Skip to content

feat: image file support (sync spec v0.7.8) - #66

Merged
kdr merged 1 commit into
mainfrom
kdr-image
Jun 30, 2026
Merged

feat: image file support (sync spec v0.7.8)#66
kdr merged 1 commit into
mainfrom
kdr-image

Conversation

@kdr

@kdr kdr commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Syncs the SDK to API spec v0.7.8, which adds image as a supported media type. The change is additive — no new endpoints or parameters.

  • Regenerated the low-level SDK from spec v0.7.8:
    • media_type enum gains image; media_info width/height now cover images
    • POST /files accepts video, audio, or image uploads
    • describe / extract url accept public direct image URLs
  • Updated high-level wrapper docstrings to reflect image support: files.upload, files.sync_from_url, describe.create/run, extract.create/run.

Images are processed at the file level only (no segmentation).

Testing

Verified end-to-end against a live account: image upload (returns media_type=image with width/height), and describe/extract over both an uploaded cloudglue:// URI and a public direct image URL; sync_from_url also materializes a direct image URL.


Note

Low Risk
Additive spec sync and docstring updates with no runtime logic changes in the high-level client beyond generated SDK types.

Overview
Syncs the Python client to OpenAPI v0.7.8 and bumps the package to 0.7.15, adding image as a first-class media type alongside video and audio.

The regenerated SDK reflects image on File.media_type, widens FileMediaInfo for image dimensions, and updates upload/describe/extract request docs to allow image uploads, cloudglue:// image URIs, and public JPEG/PNG/WebP URLs. High-level wrappers (files.upload, files.sync_from_url, describe.create/run, extract.create/run) now document that images are handled at file level only—segmentation and segment-thumbnail options do not apply.

No new endpoints or client parameters; behavior is additive documentation and generated types aligned with the backend spec.

Reviewed by Cursor Bugbot for commit d94b134. Bugbot is set up for automated code reviews on this repo. Configure here.

Regenerate the low-level SDK from API spec v0.7.8, which adds image as a
supported media type:
- `media_type` enum gains `image`; `media_info` width/height cover images
- `POST /files` accepts video, audio, or image uploads
- describe/extract `url` accept public direct image URLs

Update the high-level wrapper docstrings to reflect image support
(files.upload, files.sync_from_url, describe.create/run, extract.create/run).
Images are processed at the file level only (no segmentation).
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 277 files, which is 127 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 533a9d2f-6bb6-40ed-a3d7-4be9598ed946

📥 Commits

Reviewing files that changed from the base of the PR and between 7b92968 and d94b134.

📒 Files selected for processing (277)
  • cloudglue/client/resources/describe.py
  • cloudglue/client/resources/extract.py
  • cloudglue/client/resources/files.py
  • cloudglue/sdk/README.md
  • cloudglue/sdk/__init__.py
  • cloudglue/sdk/api/chat_api.py
  • cloudglue/sdk/api/collections_api.py
  • cloudglue/sdk/api/data_connectors_api.py
  • cloudglue/sdk/api/deep_search_api.py
  • cloudglue/sdk/api/describe_api.py
  • cloudglue/sdk/api/extract_api.py
  • cloudglue/sdk/api/face_detection_api.py
  • cloudglue/sdk/api/face_match_api.py
  • cloudglue/sdk/api/file_segments_api.py
  • cloudglue/sdk/api/files_api.py
  • cloudglue/sdk/api/frames_api.py
  • cloudglue/sdk/api/response_api.py
  • cloudglue/sdk/api/search_api.py
  • cloudglue/sdk/api/segmentations_api.py
  • cloudglue/sdk/api/segments_api.py
  • cloudglue/sdk/api/share_api.py
  • cloudglue/sdk/api/tags_api.py
  • cloudglue/sdk/api/thumbnails_api.py
  • cloudglue/sdk/api/transcribe_api.py
  • cloudglue/sdk/api/webhooks_api.py
  • cloudglue/sdk/api_client.py
  • cloudglue/sdk/configuration.py
  • cloudglue/sdk/exceptions.py
  • cloudglue/sdk/models/__init__.py
  • cloudglue/sdk/models/add_collection_file.py
  • cloudglue/sdk/models/add_you_tube_collection_file.py
  • cloudglue/sdk/models/chapter.py
  • cloudglue/sdk/models/chat_completion_list.py
  • cloudglue/sdk/models/chat_completion_list_data_inner.py
  • cloudglue/sdk/models/chat_completion_list_data_inner_choices_inner.py
  • cloudglue/sdk/models/chat_completion_list_data_inner_usage.py
  • cloudglue/sdk/models/chat_completion_payload.py
  • cloudglue/sdk/models/chat_completion_request.py
  • cloudglue/sdk/models/chat_completion_request_filter.py
  • cloudglue/sdk/models/chat_completion_request_filter_file_inner.py
  • cloudglue/sdk/models/chat_completion_request_filter_metadata_inner.py
  • cloudglue/sdk/models/chat_completion_request_filter_video_info_inner.py
  • cloudglue/sdk/models/chat_completion_response.py
  • cloudglue/sdk/models/chat_completion_response_choices_inner.py
  • cloudglue/sdk/models/chat_completion_response_choices_inner_citations_inner.py
  • cloudglue/sdk/models/chat_completion_response_choices_inner_citations_inner_all_of_end_time.py
  • cloudglue/sdk/models/chat_completion_response_choices_inner_citations_inner_all_of_relevant_sources_inner.py
  • cloudglue/sdk/models/chat_completion_response_choices_inner_citations_inner_all_of_start_time.py
  • cloudglue/sdk/models/chat_completion_response_usage.py
  • cloudglue/sdk/models/chat_message.py
  • cloudglue/sdk/models/collection.py
  • cloudglue/sdk/models/collection_delete.py
  • cloudglue/sdk/models/collection_describe_config.py
  • cloudglue/sdk/models/collection_entities_list.py
  • cloudglue/sdk/models/collection_entities_list_data_inner.py
  • cloudglue/sdk/models/collection_entities_list_data_inner_data.py
  • cloudglue/sdk/models/collection_entities_list_data_inner_data_segment_entities_inner.py
  • cloudglue/sdk/models/collection_extract_config.py
  • cloudglue/sdk/models/collection_face_detection_config.py
  • cloudglue/sdk/models/collection_face_detection_config_frame_extraction_config.py
  • cloudglue/sdk/models/collection_face_detection_config_frame_extraction_config_uniform_config.py
  • cloudglue/sdk/models/collection_face_detection_config_thumbnails_config.py
  • cloudglue/sdk/models/collection_file.py
  • cloudglue/sdk/models/collection_file_delete.py
  • cloudglue/sdk/models/collection_file_list.py
  • cloudglue/sdk/models/collection_file_segmentation.py
  • cloudglue/sdk/models/collection_list.py
  • cloudglue/sdk/models/collection_media_descriptions_list.py
  • cloudglue/sdk/models/collection_media_descriptions_list_data_inner.py
  • cloudglue/sdk/models/collection_media_descriptions_list_data_inner_data.py
  • cloudglue/sdk/models/collection_rich_transcripts_list.py
  • cloudglue/sdk/models/collection_rich_transcripts_list_data_inner.py
  • cloudglue/sdk/models/collection_rich_transcripts_list_data_inner_data.py
  • cloudglue/sdk/models/collection_transcribe_config.py
  • cloudglue/sdk/models/collection_update.py
  • cloudglue/sdk/models/create_deep_search_request.py
  • cloudglue/sdk/models/create_deep_search_request_knowledge_base.py
  • cloudglue/sdk/models/create_file_frame_extraction_request.py
  • cloudglue/sdk/models/create_file_segmentation_request.py
  • cloudglue/sdk/models/create_response_request.py
  • cloudglue/sdk/models/create_response_request_input.py
  • cloudglue/sdk/models/create_shareable_asset_request.py
  • cloudglue/sdk/models/create_video_tag_request.py
  • cloudglue/sdk/models/data_connector.py
  • cloudglue/sdk/models/data_connector_file.py
  • cloudglue/sdk/models/data_connector_file_list.py
  • cloudglue/sdk/models/data_connector_file_metadata.py
  • cloudglue/sdk/models/data_connector_list.py
  • cloudglue/sdk/models/deep_search.py
  • cloudglue/sdk/models/deep_search_error.py
  • cloudglue/sdk/models/deep_search_kb_collections.py
  • cloudglue/sdk/models/deep_search_kb_default.py
  • cloudglue/sdk/models/deep_search_kb_files.py
  • cloudglue/sdk/models/deep_search_list.py
  • cloudglue/sdk/models/deep_search_list_item.py
  • cloudglue/sdk/models/deep_search_result.py
  • cloudglue/sdk/models/deep_search_search_query_plan.py
  • cloudglue/sdk/models/deep_search_usage.py
  • cloudglue/sdk/models/default_segmentation_config.py
  • cloudglue/sdk/models/delete_deep_search_result.py
  • cloudglue/sdk/models/delete_describe200_response.py
  • cloudglue/sdk/models/delete_extract200_response.py
  • cloudglue/sdk/models/delete_face_detection200_response.py
  • cloudglue/sdk/models/delete_face_match200_response.py
  • cloudglue/sdk/models/delete_frame_extraction200_response.py
  • cloudglue/sdk/models/delete_response_result.py
  • cloudglue/sdk/models/delete_segmentation200_response.py
  • cloudglue/sdk/models/delete_segments200_response.py
  • cloudglue/sdk/models/delete_shareable_asset200_response.py
  • cloudglue/sdk/models/delete_tag200_response.py
  • cloudglue/sdk/models/describe.py
  • cloudglue/sdk/models/describe_config.py
  • cloudglue/sdk/models/describe_data.py
  • cloudglue/sdk/models/describe_data_all_of_segment_summary_inner.py
  • cloudglue/sdk/models/describe_describe_config.py
  • cloudglue/sdk/models/describe_list.py
  • cloudglue/sdk/models/describe_output.py
  • cloudglue/sdk/models/describe_output_part.py
  • cloudglue/sdk/models/detected_face.py
  • cloudglue/sdk/models/entity_backed_knowledge_config.py
  • cloudglue/sdk/models/entity_collection_config.py
  • cloudglue/sdk/models/error.py
  • cloudglue/sdk/models/extract.py
  • cloudglue/sdk/models/extract_chapters_inner.py
  • cloudglue/sdk/models/extract_data.py
  • cloudglue/sdk/models/extract_data_segment_entities_inner.py
  • cloudglue/sdk/models/extract_extract_config.py
  • cloudglue/sdk/models/extract_list.py
  • cloudglue/sdk/models/extract_shots_inner.py
  • cloudglue/sdk/models/face_bounding_box.py
  • cloudglue/sdk/models/face_detection.py
  • cloudglue/sdk/models/face_detection_data.py
  • cloudglue/sdk/models/face_detection_list_response.py
  • cloudglue/sdk/models/face_detection_list_response_all_of_data.py
  • cloudglue/sdk/models/face_detection_request.py
  • cloudglue/sdk/models/face_group_result.py
  • cloudglue/sdk/models/face_match.py
  • cloudglue/sdk/models/face_match_data.py
  • cloudglue/sdk/models/face_match_list_response.py
  • cloudglue/sdk/models/face_match_list_response_all_of_data.py
  • cloudglue/sdk/models/face_match_request.py
  • cloudglue/sdk/models/face_match_result.py
  • cloudglue/sdk/models/face_search_result.py
  • cloudglue/sdk/models/file.py
  • cloudglue/sdk/models/file_delete.py
  • cloudglue/sdk/models/file_entities.py
  • cloudglue/sdk/models/file_face_detections.py
  • cloudglue/sdk/models/file_face_detections_faces_inner.py
  • cloudglue/sdk/models/file_face_detections_faces_inner_face_bounding_box.py
  • cloudglue/sdk/models/file_list.py
  • cloudglue/sdk/models/file_media_info.py
  • cloudglue/sdk/models/file_search_result.py
  • cloudglue/sdk/models/file_segment.py
  • cloudglue/sdk/models/file_segment_list_response.py
  • cloudglue/sdk/models/file_segmentation_config.py
  • cloudglue/sdk/models/file_update.py
  • cloudglue/sdk/models/file_video_info.py
  • cloudglue/sdk/models/frame_extraction.py
  • cloudglue/sdk/models/frame_extraction_config.py
  • cloudglue/sdk/models/frame_extraction_data.py
  • cloudglue/sdk/models/frame_extraction_data_frames_inner.py
  • cloudglue/sdk/models/frame_extraction_list.py
  • cloudglue/sdk/models/frame_extraction_list_data_inner.py
  • cloudglue/sdk/models/frame_extraction_thumbnails_config.py
  • cloudglue/sdk/models/frame_extraction_uniform_config.py
  • cloudglue/sdk/models/grain_source_metadata.py
  • cloudglue/sdk/models/grain_source_metadata_ai_action_items_inner.py
  • cloudglue/sdk/models/grain_source_metadata_ai_action_items_inner_assignee.py
  • cloudglue/sdk/models/grain_source_metadata_ai_summary.py
  • cloudglue/sdk/models/grain_source_metadata_calendar_event.py
  • cloudglue/sdk/models/grain_source_metadata_hubspot.py
  • cloudglue/sdk/models/grain_source_metadata_meeting_type.py
  • cloudglue/sdk/models/grain_source_metadata_participants_inner.py
  • cloudglue/sdk/models/grain_source_metadata_teams_inner.py
  • cloudglue/sdk/models/keyframe_config.py
  • cloudglue/sdk/models/knowledge_base_collections.py
  • cloudglue/sdk/models/knowledge_base_default.py
  • cloudglue/sdk/models/knowledge_base_files.py
  • cloudglue/sdk/models/list_video_tags_response.py
  • cloudglue/sdk/models/media_description.py
  • cloudglue/sdk/models/narrative_config.py
  • cloudglue/sdk/models/new_collection.py
  • cloudglue/sdk/models/new_collection_describe_config.py
  • cloudglue/sdk/models/new_collection_extract_config.py
  • cloudglue/sdk/models/new_collection_face_detection_config.py
  • cloudglue/sdk/models/new_collection_transcribe_config.py
  • cloudglue/sdk/models/new_describe.py
  • cloudglue/sdk/models/new_describe_all_of_participants.py
  • cloudglue/sdk/models/new_extract.py
  • cloudglue/sdk/models/new_segments.py
  • cloudglue/sdk/models/new_transcribe.py
  • cloudglue/sdk/models/pagination_response.py
  • cloudglue/sdk/models/response.py
  • cloudglue/sdk/models/response_annotation.py
  • cloudglue/sdk/models/response_error.py
  • cloudglue/sdk/models/response_input_content.py
  • cloudglue/sdk/models/response_input_message.py
  • cloudglue/sdk/models/response_knowledge_base.py
  • cloudglue/sdk/models/response_list.py
  • cloudglue/sdk/models/response_list_item.py
  • cloudglue/sdk/models/response_output_content.py
  • cloudglue/sdk/models/response_output_message.py
  • cloudglue/sdk/models/response_tool_definition.py
  • cloudglue/sdk/models/response_usage.py
  • cloudglue/sdk/models/rich_transcript.py
  • cloudglue/sdk/models/search_filter.py
  • cloudglue/sdk/models/search_filter_criteria.py
  • cloudglue/sdk/models/search_filter_file_inner.py
  • cloudglue/sdk/models/search_filter_metadata_inner.py
  • cloudglue/sdk/models/search_filter_video_info_inner.py
  • cloudglue/sdk/models/search_request.py
  • cloudglue/sdk/models/search_request_source_image.py
  • cloudglue/sdk/models/search_response.py
  • cloudglue/sdk/models/search_response_list.py
  • cloudglue/sdk/models/search_response_list_data_inner.py
  • cloudglue/sdk/models/search_response_results_inner.py
  • cloudglue/sdk/models/search_tag_response.py
  • cloudglue/sdk/models/segment.py
  • cloudglue/sdk/models/segment_describe.py
  • cloudglue/sdk/models/segment_describe_data.py
  • cloudglue/sdk/models/segment_describe_json_data.py
  • cloudglue/sdk/models/segment_describe_list_response.py
  • cloudglue/sdk/models/segment_describe_markdown_data.py
  • cloudglue/sdk/models/segment_describe_output_entry.py
  • cloudglue/sdk/models/segment_describe_speech_entry.py
  • cloudglue/sdk/models/segment_group_result.py
  • cloudglue/sdk/models/segment_search_result.py
  • cloudglue/sdk/models/segment_search_result_keyframes_inner.py
  • cloudglue/sdk/models/segment_search_result_scene_text_inner.py
  • cloudglue/sdk/models/segment_search_result_speech_inner.py
  • cloudglue/sdk/models/segment_search_result_visual_description_inner.py
  • cloudglue/sdk/models/segmentation.py
  • cloudglue/sdk/models/segmentation_config.py
  • cloudglue/sdk/models/segmentation_data.py
  • cloudglue/sdk/models/segmentation_data_segments_inner.py
  • cloudglue/sdk/models/segmentation_list.py
  • cloudglue/sdk/models/segmentation_list_item.py
  • cloudglue/sdk/models/segmentation_manual_config.py
  • cloudglue/sdk/models/segmentation_manual_config_segments_inner.py
  • cloudglue/sdk/models/segmentation_shot_detector_config.py
  • cloudglue/sdk/models/segmentation_uniform_config.py
  • cloudglue/sdk/models/segments.py
  • cloudglue/sdk/models/segments_list.py
  • cloudglue/sdk/models/segments_list_item.py
  • cloudglue/sdk/models/shareable_asset.py
  • cloudglue/sdk/models/shareable_asset_list_response.py
  • cloudglue/sdk/models/shot.py
  • cloudglue/sdk/models/shot_config.py
  • cloudglue/sdk/models/source_image.py
  • cloudglue/sdk/models/source_metadata.py
  • cloudglue/sdk/models/source_metadata_response.py
  • cloudglue/sdk/models/speech_output_part.py
  • cloudglue/sdk/models/sync_data_connector_file_request.py
  • cloudglue/sdk/models/sync_file_from_url_request.py
  • cloudglue/sdk/models/thumbnail.py
  • cloudglue/sdk/models/thumbnail_list.py
  • cloudglue/sdk/models/thumbnails_config.py
  • cloudglue/sdk/models/transcribe.py
  • cloudglue/sdk/models/transcribe_data.py
  • cloudglue/sdk/models/transcribe_data_all_of_segment_summary_inner.py
  • cloudglue/sdk/models/transcribe_list.py
  • cloudglue/sdk/models/transcribe_transcribe_config.py
  • cloudglue/sdk/models/update_describe_request.py
  • cloudglue/sdk/models/update_file_segment_request.py
  • cloudglue/sdk/models/update_shareable_asset_request.py
  • cloudglue/sdk/models/update_video_tag_request.py
  • cloudglue/sdk/models/video_tag.py
  • cloudglue/sdk/models/webhook.py
  • cloudglue/sdk/models/webhook_create_request.py
  • cloudglue/sdk/models/webhook_delete_response.py
  • cloudglue/sdk/models/webhook_events.py
  • cloudglue/sdk/models/webhook_list.py
  • cloudglue/sdk/models/webhook_update_request.py
  • cloudglue/sdk/models/word_timestamp.py
  • cloudglue/sdk/rest.py
  • pyproject.toml
  • spec

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch kdr-image

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kdr
kdr requested a review from amyxst June 30, 2026 05:38
@kdr
kdr merged commit 61ac405 into main Jun 30, 2026
2 checks passed
@kdr
kdr deleted the kdr-image branch June 30, 2026 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants