{"id":44449386,"url":"https://github.com/video-db/videodb-python","last_synced_at":"2026-02-12T16:10:45.608Z","repository":{"id":213271319,"uuid":"733106316","full_name":"video-db/videodb-python","owner":"video-db","description":"VideoDB Python SDK","archived":false,"fork":false,"pushed_at":"2026-02-05T20:45:27.000Z","size":17552,"stargazers_count":87,"open_issues_count":2,"forks_count":14,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-05T21:54:29.058Z","etag":null,"topics":["agent","ai","copilot","database","gpt","infrastructure","llm","multimedia","multimodal","python","rag","sdk","video","video-processing"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/videodb","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/video-db.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-12-18T15:20:04.000Z","updated_at":"2026-01-22T01:24:30.000Z","dependencies_parsed_at":"2023-12-27T10:39:48.639Z","dependency_job_id":"81fb33af-afdd-4f13-be3f-d640551c9b93","html_url":"https://github.com/video-db/videodb-python","commit_stats":null,"previous_names":["video-db/videodb-python"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/video-db/videodb-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/video-db%2Fvideodb-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/video-db%2Fvideodb-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/video-db%2Fvideodb-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/video-db%2Fvideodb-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/video-db","download_url":"https://codeload.github.com/video-db/videodb-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/video-db%2Fvideodb-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29371745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","ai","copilot","database","gpt","infrastructure","llm","multimedia","multimodal","python","rag","sdk","video","video-processing"],"created_at":"2026-02-12T16:10:44.804Z","updated_at":"2026-02-12T16:10:45.602Z","avatar_url":"https://github.com/video-db.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!--\n*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\n--\u003e\n\n[![PyPI version][pypi-shield]][pypi-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![Website][website-shield]][website-url]\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://videodb.io/\"\u003e\n    \u003cimg src=\"https://codaio.imgix.net/docs/_s5lUnUCIU/blobs/bl-RgjcFrrJjj/d3cbc44f8584ecd42f2a97d981a144dce6a66d83ddd5864f723b7808c7d1dfbc25034f2f25e1b2188e78f78f37bcb79d3c34ca937cbb08ca8b3da1526c29da9a897ab38eb39d084fd715028b7cc60eb595c68ecfa6fa0bb125ec2b09da65664a4f172c2f\" alt=\"Logo\" width=\"300\" height=\"\"\u003e\n  \u003c/a\u003e\n\n  \u003ch3 align=\"center\"\u003eVideoDB Python SDK\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Video Database for your AI Applications\n    \u003cbr /\u003e\n    \u003ca href=\"https://docs.videodb.io\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/video-db/videodb-cookbook\"\u003eView Demo\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/video-db/videodb-python/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/video-db/videodb-python/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n# VideoDB Python SDK\n\nVideoDB Python SDK provides programmatic access to VideoDB's serverless video infrastructure. Build AI applications that understand and process video as structured data with support for semantic search, scene extraction, transcript generation, and multimodal content generation.\n\n## 📑 Table of Contents\n\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n    - [Establishing a Connection](#establishing-a-connection)\n    - [Uploading Media](#uploading-media)\n    - [Viewing and Streaming Videos](#viewing-and-streaming-videos)\n    - [Searching Inside Videos](#searching-inside-videos)\n    - [Working with Transcripts](#working-with-transcripts)\n    - [Scene Extraction and Indexing](#scene-extraction-and-indexing)\n    - [Adding Subtitles](#adding-subtitles)\n    - [Generating Thumbnails](#generating-thumbnails)\n- [Working with Collections](#working-with-collections)\n    - [Audio and Image Management](#audio-and-image-management)\n- [Advanced Features](#advanced-features)\n    - [Realtime Video Editor](#realtime-video-editor)\n    - [Real-Time Streams (RTStream)](#real-time-streams-rtstream)\n    - [Meeting Recording](#meeting-recording)\n    - [Generative Media](#generative-media)\n    - [Video Dubbing and Translation](#video-dubbing-and-translation)\n    - [Transcoding](#transcoding)\n    - [YouTube Integration](#youtube-integration)\n    - [Billing and Usage](#billing-and-usage)\n    - [Download Streams](#download-streams)\n- [Configuration Options](#configuration-options)\n    - [Subtitle Customization](#subtitle-customization)\n    - [Text Overlay Styling](#text-overlay-styling)\n- [Error Handling](#error-handling)\n- [API Reference](#api-reference)\n- [Examples and Tutorials](#examples-and-tutorials)\n- [Contributing](#contributing)\n- [Resources](#resources)\n- [License](#license)\n\n## Installation\n\n```bash\npip install videodb\n```\n\n**Requirements:**\n- Python 3.8 or higher\n- Dependencies: `requests\u003e=2.25.1`, `backoff\u003e=2.2.1`, `tqdm\u003e=4.66.1`\n\n## Quick Start\n\n### Establishing a Connection\n\nGet your API key from [VideoDB Console](https://console.videodb.io). Free for first 50 uploads (no credit card required).\n\n```python\nimport videodb\n\n# Connect using API key\nconn = videodb.connect(api_key=\"YOUR_API_KEY\")\n\n# Or set environment variable VIDEO_DB_API_KEY\n# conn = videodb.connect()\n```\n\n### Uploading Media\n\nUpload videos, audio files, or images from various sources:\n\n```python\n# Upload video from YouTube URL\nvideo = conn.upload(url=\"https://www.youtube.com/watch?v=VIDEO_ID\")\n\n# Upload from public URL\nvideo = conn.upload(url=\"https://example.com/video.mp4\")\n\n# Upload from local file\nvideo = conn.upload(file_path=\"./my_video.mp4\")\n\n# Upload with metadata\nvideo = conn.upload(\n    file_path=\"./video.mp4\",\n    name=\"My Video\",\n    description=\"Video description\"\n)\n```\n\nThe `upload()` method returns `Video`, `Audio`, or `Image` objects based on the media type.\n\n### Viewing and Streaming Videos\n\n```python\n# Generate stream URL\nstream_url = video.generate_stream()\n\n# Play stream using VideoDB player\nvideodb.play_stream(stream_url)\n\n# Play in browser/notebook\nvideo.play()\n```\n\n### Searching Inside Videos\n\nIndex and search video content semantically:\n\n```python\nfrom videodb import SearchType, IndexType\n\n# Index spoken words for semantic search\nvideo.index_spoken_words()\n\n# Search for content\nresults = video.search(\"morning sunlight\")\n\n# Access search results\nshots = results.get_shots()\nfor shot in shots:\n    print(f\"Found at {shot.start}s - {shot.end}s: {shot.text}\")\n\n# Play compiled results\nresults.play()\n```\n\n**Search Types:**\n- `SearchType.semantic` - Semantic search (default)\n- `SearchType.keyword` - Keyword-based search  \n- `SearchType.scene` - Visual scene search\n\n### Working with Transcripts\n\n```python\n# Generate transcript\nvideo.generate_transcript()\n\n# Get transcript with timestamps\ntranscript = video.get_transcript()\n\n# Get plain text transcript\ntext = video.get_transcript_text()\n\n# Get transcript for specific time range\ntranscript = video.get_transcript(start=10, end=60)\n\n# Translate transcript\ntranslated = video.translate_transcript(\n    language=\"Spanish\",\n    additional_notes=\"Formal tone\"\n)\n```\n\n**Segmentation Options:**\n- `videodb.Segmenter.word` - Word-level timestamps\n- `videodb.Segmenter.sentence` - Sentence-level timestamps\n- `videodb.Segmenter.time` - Time-based segments\n\n### Scene Extraction and Indexing\n\nExtract and analyze scenes from videos:\n\n```python\nfrom videodb import SceneExtractionType\n\n# Extract scenes using shot detection\nscene_collection = video.extract_scenes(\n    extraction_type=SceneExtractionType.shot_based,\n    extraction_config={\"threshold\": 20, \"frame_count\": 1}\n)\n\n# Extract scenes at time intervals\nscene_collection = video.extract_scenes(\n    extraction_type=SceneExtractionType.time_based,\n    extraction_config={\n        \"time\": 10,\n        \"frame_count\": 1,\n        \"select_frames\": [\"first\"]\n    }\n)\n\n# Index scenes for semantic search\nscene_index_id = video.index_scenes(\n    extraction_type=SceneExtractionType.shot_based,\n    prompt=\"Describe the visual content of this scene\"\n)\n\n# Search within scenes\nresults = video.search(\n    query=\"outdoor landscape\",\n    search_type=SearchType.scene,\n    index_type=IndexType.scene\n)\n\n# List scene indexes\nscene_indexes = video.list_scene_index()\n\n# Get specific scene index\nscenes = video.get_scene_index(scene_index_id)\n\n# Delete scene collection\nvideo.delete_scene_collection(scene_collection.id)\n```\n\n### Adding Subtitles\n\n```python\nfrom videodb import SubtitleStyle\n\n# Add subtitles with default style\nstream_url = video.add_subtitle()\n\n# Customize subtitle appearance\nstyle = SubtitleStyle(\n    font_name=\"Arial\",\n    font_size=24,\n    primary_colour=\"\u0026H00FFFFFF\",\n    bold=True\n)\nstream_url = video.add_subtitle(style=style)\n```\n\n### Generating Thumbnails\n\n```python\n# Get default thumbnail\nthumbnail_url = video.generate_thumbnail()\n\n# Generate thumbnail at specific timestamp\nthumbnail_image = video.generate_thumbnail(time=30.5)\n\n# Get all thumbnails\nthumbnails = video.get_thumbnails()\n```\n\n## Working with Collections\n\nOrganize and search across multiple videos:\n\n```python\n# Get default collection\ncoll = conn.get_collection()\n\n# Create new collection\ncoll = conn.create_collection(\n    name=\"My Collection\",\n    description=\"Collection description\",\n    is_public=False\n)\n\n# List all collections\ncollections = conn.get_collections()\n\n# Update collection\ncoll = conn.update_collection(\n    id=\"collection_id\",\n    name=\"Updated Name\",\n    description=\"Updated description\"\n)\n\n# Upload to collection\nvideo = coll.upload(url=\"https://example.com/video.mp4\")\n\n# Get videos in collection\nvideos = coll.get_videos()\nvideo = coll.get_video(video_id)\n\n# Search across collection\nresults = coll.search(query=\"specific content\")\n\n# Search by title\nresults = coll.search_title(\"video title\")\n\n# Make collection public/private\ncoll.make_public()\ncoll.make_private()\n\n# Delete collection\ncoll.delete()\n```\n\n### Audio and Image Management\n\n```python\n# Get audio files\naudios = coll.get_audios()\naudio = coll.get_audio(audio_id)\n\n# Generate audio URL\naudio_url = audio.generate_url()\n\n# Get images\nimages = coll.get_images()\nimage = coll.get_image(image_id)\n\n# Generate image URL\nimage_url = image.generate_url()\n\n# Delete media\naudio.delete()\nimage.delete()\n```\n\n## Advanced Features\n\n### Realtime Video Editor\n\nBuild multi-track video compositions programmatically using VideoDB's 4-layer architecture: **Assets** (raw media), **Clips** (how assets appear), **Tracks** (timeline lanes), and **Timeline** (final canvas).\n\n**Example: Video with background music**\n\n```python\nfrom videodb import connect\nfrom videodb.editor import Timeline, Track, Clip, VideoAsset, AudioAsset\n\nconn = connect(api_key=\"YOUR_API_KEY\")\nvideo = conn.upload(url=\"https://www.youtube.com/watch?v=VIDEO_ID\")\naudio = conn.upload(file_path=\"./music.mp3\")\n\n# Create timeline\ntimeline = Timeline(conn)\n\n# Video track\nvideo_track = Track()\nvideo_asset = VideoAsset(id=video.id, start=10)\nvideo_clip = Clip(asset=video_asset, duration=30)\nvideo_track.add_clip(0, video_clip)\n\n# Audio track\naudio_track = Track()\naudio_asset = AudioAsset(id=audio.id, start=0, volume=0.3)\naudio_clip = Clip(asset=audio_asset, duration=30)\naudio_track.add_clip(0, audio_clip)\n\n# Compose and render\ntimeline.add_track(video_track)\ntimeline.add_track(audio_track)\nstream_url = timeline.generate_stream()\n```\n\n**Asset Types:**\n- `VideoAsset` - Video clips with trim control (`start`, `volume`)\n- `AudioAsset` - Background music, voiceovers, sound effects\n- `ImageAsset` - Logos, watermarks, static overlays\n- `TextAsset` - Custom text with typography (`Font`, `Background`, `Alignment`)\n- `CaptionAsset` - Auto-generated subtitles synced to speech\n\n**Clip Controls:**\n- **Position \u0026 Scale**: `position=Position.topRight`, `scale=0.5`, `offset=Offset(x=0.1, y=-0.2)`\n- **Visual Effects**: `opacity=0.8`, `fit=Fit.cover`, `filter=Filter.greyscale`\n- **Transitions**: `transition=Transition(in_=\"fade\", out=\"fade\", duration=1)`\n\n**Track Layering:**\n- Clips on the same track play sequentially\n- Clips on different tracks at the same time play simultaneously (overlays)\n\nFor advanced patterns (picture-in-picture, multi-audio layers, auto-captions), see the [Editor SDK documentation](https://docs.videodb.io/realtime-video-editor-sdk-44).\n\n### Real-Time Streams (RTStream)\n\nProcess live video streams in real-time:\n\n```python\nfrom videodb import SceneExtractionType\n\n# Connect to real-time stream\nrtstream = coll.connect_rtstream(\n    url=\"rtsp://example.com/stream\",\n    name=\"Live Stream\"\n)\n\n# Start or Stop processing\nrtstream.stop()\nrtstream.start()\n\n# Index scenes from stream\nscene_index = rtstream.index_scenes(\n    extraction_type=SceneExtractionType.time_based,\n    extraction_config={\"time\": 2, \"frame_count\": 5},\n    prompt=\"Describe the scene\"\n)\n\n# Start or Stop scene indexing\nscene_index.stop()\nscene_index.start()\n\n# Get scenes\nscenes = scene_index.get_scenes(page=1, page_size=100)\n\n# Create alerts for events\nalert_id = scene_index.create_alert(\n    event_id=event_id,\n    callback_url=\"https://example.com/callback\"\n)\n\n# Enable/disable alerts\n\nscene_index.disable_alert(alert_id)\nscene_index.enable_alert(alert_id)\n\n\n# List streams\nstreams = coll.list_rtstreams()\n```\n\n### Meeting Recording\n\nRecord and process virtual meetings:\n\n```python\n# Start meeting recording\nmeeting = conn.record_meeting(\n    meeting_url=\"https://meet.google.com/xxx-yyyy-zzz\",\n    bot_name=\"Recorder Bot\",\n    meeting_title=\"Team Meeting\",\n    callback_url=\"https://example.com/callback\"\n)\n\n# Check meeting status\nmeeting.refresh()\nprint(meeting.status)  # initializing, processing, or done\n\n# Wait for completion\nmeeting.wait_for_status(\"done\", timeout=14400, interval=120)\n\n# Get meeting details\nif meeting.is_completed:\n    video_id = meeting.video_id\n    video = coll.get_video(video_id)\n    \n# Get meeting from video\nmeeting_info = video.get_meeting()\n```\n\n### Generative Media\n\nGenerate images, audio, and videos using AI:\n\n```python\n# Generate image\nimage = coll.generate_image(\n    prompt=\"A beautiful sunset over mountains\",\n    aspect_ratio=\"16:9\"\n)\n\n# Generate music\naudio = coll.generate_music(\n    prompt=\"Upbeat electronic music\",\n    duration=30\n)\n\n# Generate sound effects\naudio = coll.generate_sound_effect(\n    prompt=\"Door closing sound\",\n    duration=2\n)\n\n# Generate voice from text\naudio = coll.generate_voice(\n    text=\"Hello, welcome to VideoDB\",\n    voice_name=\"Default\"\n)\n\n# Generate video\nvideo = coll.generate_video(\n    prompt=\"A cat playing with a ball\",\n    duration=5\n)\n\n# Generate text using LLM\nresponse = coll.generate_text(\n    prompt=\"Summarize this content\",\n    model_name=\"pro\",  # basic, pro, or ultra\n    response_type=\"text\"  # text or json\n)\n```\n\n### Video Dubbing and Translation\n\n```python\n# Dub video to another language\ndubbed_video = coll.dub_video(\n    video_id=video.id,\n    language_code=\"es\",\n    callback_url=\"https://example.com/callback\"\n)\n```\n\n### Transcoding\n\n```python\nfrom videodb import TranscodeMode, VideoConfig, AudioConfig\n\n# Start transcoding job\njob_id = conn.transcode(\n    source=\"https://example.com/video.mp4\",\n    callback_url=\"https://example.com/callback\",\n    mode=TranscodeMode.economy,\n    video_config=VideoConfig(resolution=1080, quality=23),\n    audio_config=AudioConfig(mute=False)\n)\n\n# Check transcode status\nstatus = conn.get_transcode_details(job_id)\n```\n\n### YouTube Integration\n\n```python\n# Search YouTube\nresults = conn.youtube_search(\n    query=\"machine learning tutorial\",\n    result_threshold=10,\n    duration=\"medium\"\n)\n\nfor result in results:\n    print(result[\"title\"], result[\"url\"])\n```\n\n### Billing and Usage\n\n```python\n# Check usage\nusage = conn.check_usage()\n\n# Get invoices\ninvoices = conn.get_invoices()\n```\n\n### Download Streams\n\n```python\n# Download compiled stream\ndownload_info = conn.download(\n    stream_link=\"https://stream.videodb.io/...\",\n    name=\"my_compilation\"\n)\n```\n\n## Configuration Options\n\n### Subtitle Customization\n\n```python\nfrom videodb import SubtitleStyle, SubtitleAlignment, SubtitleBorderStyle\n\nstyle = SubtitleStyle(\n    font_name=\"Arial\",\n    font_size=18,\n    primary_colour=\"\u0026H00FFFFFF\",      # White\n    secondary_colour=\"\u0026H000000FF\",     # Blue\n    outline_colour=\"\u0026H00000000\",       # Black\n    back_colour=\"\u0026H00000000\",          # Black\n    bold=False,\n    italic=False,\n    underline=False,\n    strike_out=False,\n    scale_x=1.0,\n    scale_y=1.0,\n    spacing=0,\n    angle=0,\n    border_style=SubtitleBorderStyle.outline,\n    outline=1.0,\n    shadow=0.0,\n    alignment=SubtitleAlignment.bottom_center,\n    margin_l=10,\n    margin_r=10,\n    margin_v=10\n)\n```\n\n### Text Overlay Styling\n\n```python\nfrom videodb import TextStyle\n\nstyle = TextStyle(\n    fontsize=24,\n    fontcolor=\"black\",\n    font=\"Sans\",\n    box=True,\n    boxcolor=\"white\",\n    boxborderw=\"10\"\n)\n```\n\n## Error Handling\n\n```python\nfrom videodb.exceptions import (\n    VideodbError,\n    AuthenticationError,\n    InvalidRequestError,\n    SearchError\n)\n\ntry:\n    conn = videodb.connect(api_key=\"invalid_key\")\nexcept AuthenticationError as e:\n    print(f\"Authentication failed: {e}\")\n\ntry:\n    video = conn.upload(url=\"invalid_url\")\nexcept InvalidRequestError as e:\n    print(f\"Invalid request: {e}\")\n\ntry:\n    results = video.search(\"query\")\nexcept SearchError as e:\n    print(f\"Search error: {e}\")\n```\n\n## API Reference\n\n### Core Objects\n\n- **Connection**: Main client for API interaction\n- **Collection**: Container for organizing media\n- **Video**: Video file with processing methods\n- **Audio**: Audio file representation\n- **Image**: Image file representation\n- **Timeline**: Multi-track video editor\n- **SearchResult**: Search results with shots\n- **Shot**: Time-segmented video clip\n- **Scene**: Visual scene with frames\n- **SceneCollection**: Collection of extracted scenes\n- **Meeting**: Meeting recording session\n- **RTStream**: Real-time stream processor\n\n### Constants and Enums\n\n- `IndexType`: `spoken_word`, `scene`\n- `SearchType`: `semantic`, `keyword`, `scene`\n- `SceneExtractionType`: `shot_based`, `time_based`\n- `Segmenter`: `word`, `sentence`, `time`\n- `TranscodeMode`: `lightning`, `economy`\n- `MediaType`: `video`, `audio`, `image`\n\nFor detailed API documentation, visit [docs.videodb.io](https://docs.videodb.io).\n\n## Examples and Tutorials\n\nExplore practical examples and use cases in the [VideoDB Cookbook](https://github.com/video-db/videodb-cookbook):\n\n- Semantic video search\n- Scene-based indexing and retrieval\n- Custom video compilations\n- Meeting transcription and analysis\n- Real-time stream processing\n- Multi-language video dubbing\n\n## Contributing\n\nContributions are welcome! To contribute:\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## Resources\n\n- **Documentation**: [docs.videodb.io](https://docs.videodb.io)\n- **Console**: [console.videodb.io](https://console.videodb.io)\n- **Examples**: [github.com/video-db/videodb-cookbook](https://github.com/video-db/videodb-cookbook)\n- **Community**: [Discord](https://discord.gg/py9P639jGz)\n- **Issues**: [GitHub Issues](https://github.com/video-db/videodb-python/issues)\n\n## License\n\nApache License 2.0 - see [LICENSE](LICENSE) file for details.\n\n---\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\n[pypi-shield]: https://img.shields.io/pypi/v/videodb?style=for-the-badge\n[pypi-url]: https://pypi.org/project/videodb/\n[python-shield]: https://img.shields.io/pypi/pyversions/videodb?style=for-the-badge\n[stars-shield]: https://img.shields.io/github/stars/video-db/videodb-python.svg?style=for-the-badge\n[stars-url]: https://github.com/video-db/videodb-python/stargazers\n[issues-shield]: https://img.shields.io/github/issues/video-db/videodb-python.svg?style=for-the-badge\n[issues-url]: https://github.com/video-db/videodb-python/issues\n[website-shield]: https://img.shields.io/website?url=https%3A%2F%2Fvideodb.io%2F\u0026style=for-the-badge\u0026label=videodb.io\n[website-url]: https://videodb.io/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvideo-db%2Fvideodb-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvideo-db%2Fvideodb-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvideo-db%2Fvideodb-python/lists"}