{"id":"d3d68a48-46c5-4308-b392-a5969e896778","shortId":"fmLyYA","kind":"skill","title":"videodb","tagline":"Video and audio perception, indexing, and editing. Ingest files/URLs/live streams, build visual/spoken indexes, search with timestamps, edit timelines, add overlays/subtitles, generate media, and create real-time alerts.","description":"# VideoDB Skill\n\n**Perception + memory + actions for video, live streams, and desktop sessions.**\n\nUse this skill when you need to:\n\n## When to Use\n- You need video or audio perception, indexing, search, or timeline editing from files, URLs, desktop sessions, or live streams.\n- The task involves timestamps, searchable evidence, subtitles, clips, overlays, or real-time monitoring alerts.\n- You want one workflow that combines ingestion, understanding, retrieval, and media actions.\n\n## 1) Desktop Perception\n- Start/stop a **desktop session** capturing **screen, mic, and system audio**\n- Stream **live context** and store **episodic session memory**\n- Run **real-time alerts/triggers** on what's spoken and what's happening on screen\n- Produce **session summaries**, a searchable timeline, and **playable evidence links**\n\n## 2) Video ingest + stream\n- Ingest a **file or URL** and return a **playable web stream link**\n- Transcode/normalize: **codec, bitrate, fps, resolution, aspect ratio**\n\n## 3) Index + search (timestamps + evidence)\n- Build **visual**, **spoken**, and **keyword** indexes\n- Search and return exact moments with **timestamps** and **playable evidence**\n- Auto-create **clips** from search results\n\n## 4) Timeline editing + generation\n- Subtitles: **generate**, **translate**, **burn-in**\n- Overlays: **text/image/branding**, motion captions\n- Audio: **background music**, **voiceover**, **dubbing**\n- Programmatic composition and exports via **timeline operations**\n\n## 5) Live streams (RTSP) + monitoring\n- Connect **RTSP/live feeds**\n- Run **real-time visual and spoken understanding** and emit **events/alerts** for monitoring workflows\n\n---\n\n## Common inputs\n- Local **file path**, public **URL**, or **RTSP URL**\n- Desktop capture request: **start / stop / summarize session**\n- Desired operations: get context for understanding, transcode spec, index spec, search query, clip ranges, timeline edits, alert rules\n\n## Common outputs\n- **Stream URL**\n- Search results with **timestamps** and **evidence links**\n- Generated assets: subtitles, audio, images, clips\n- **Event/alert payloads** for live streams\n- Desktop **session summaries** and memory entries\n\n---\n\n## Canonical prompts (examples)\n- \"Start desktop capture and alert when a password field appears.\"\n- \"Record my session and produce an actionable summary when it ends.\"\n- \"Ingest this file and return a playable stream link.\"\n- \"Index this folder and find every scene with people, return timestamps.\"\n- \"Generate subtitles, burn them in, and add light background music.\"\n- \"Connect this RTSP URL and alert when a person enters the zone.\"\n\n## Running Python code\n\nBefore running any VideoDB code, change to the project directory and load environment variables:\n\n```python\nfrom dotenv import load_dotenv\nload_dotenv(\".env\")\n\nimport videodb\nconn = videodb.connect()\n```\n\nThis reads `VIDEO_DB_API_KEY` from:\n1. Environment (if already exported)\n2. Project's `.env` file in current directory\n\nIf the key is missing, `videodb.connect()` raises `AuthenticationError` automatically.\n\nDo NOT write a script file when a short inline command works.\n\nWhen writing inline Python (`python -c \"...\"`), always use properly formatted code — use semicolons to separate statements and keep it readable. For anything longer than ~3 statements, use a heredoc instead:\n\n```bash\npython << 'EOF'\nfrom dotenv import load_dotenv\nload_dotenv(\".env\")\n\nimport videodb\nconn = videodb.connect()\ncoll = conn.get_collection()\nprint(f\"Videos: {len(coll.get_videos())}\")\nEOF\n```\n\n## Setup\n\nWhen the user asks to \"setup videodb\" or similar:\n\n### 1. Install SDK\n\n```bash\npip install \"videodb[capture]\" python-dotenv\n```\n\nIf `videodb[capture]` fails on Linux, install without the capture extra:\n\n```bash\npip install videodb python-dotenv\n```\n\n### 2. Configure API key\n\nThe user must set `VIDEO_DB_API_KEY` using **either** method:\n\n- **Export in terminal** (before starting Claude): `export VIDEO_DB_API_KEY=your-key`\n- **Project `.env` file**: Save `VIDEO_DB_API_KEY=your-key` in the project's `.env` file\n\nGet a free API key at https://console.videodb.io (50 free uploads, no credit card).\n\n**Do NOT** read, write, or handle the API key yourself. Always let the user set it.\n\n## Quick Reference\n\n### Upload media\n\n```python\n# URL\nvideo = coll.upload(url=\"https://example.com/video.mp4\")\n\n# YouTube\nvideo = coll.upload(url=\"https://www.youtube.com/watch?v=VIDEO_ID\")\n\n# Local file\nvideo = coll.upload(file_path=\"/path/to/video.mp4\")\n```\n\n### Transcript + subtitle\n\n```python\n# force=True skips the error if the video is already indexed\nvideo.index_spoken_words(force=True)\ntext = video.get_transcript_text()\nstream_url = video.add_subtitle()\n```\n\n### Search inside videos\n\n```python\nfrom videodb.exceptions import InvalidRequestError\n\nvideo.index_spoken_words(force=True)\n\n# search() raises InvalidRequestError when no results are found.\n# Always wrap in try/except and treat \"No results found\" as empty.\ntry:\n    results = video.search(\"product demo\")\n    shots = results.get_shots()\n    stream_url = results.compile()\nexcept InvalidRequestError as e:\n    if \"No results found\" in str(e):\n        shots = []\n    else:\n        raise\n```\n\n### Scene search\n\n```python\nimport re\nfrom videodb import SearchType, IndexType, SceneExtractionType\nfrom videodb.exceptions import InvalidRequestError\n\n# index_scenes() has no force parameter — it raises an error if a scene\n# index already exists. Extract the existing index ID from the error.\ntry:\n    scene_index_id = video.index_scenes(\n        extraction_type=SceneExtractionType.shot_based,\n        prompt=\"Describe the visual content in this scene.\",\n    )\nexcept Exception as e:\n    match = re.search(r\"id\\s+([a-f0-9]+)\", str(e))\n    if match:\n        scene_index_id = match.group(1)\n    else:\n        raise\n\n# Use score_threshold to filter low-relevance noise (recommended: 0.3+)\ntry:\n    results = video.search(\n        query=\"person writing on a whiteboard\",\n        search_type=SearchType.semantic,\n        index_type=IndexType.scene,\n        scene_index_id=scene_index_id,\n        score_threshold=0.3,\n    )\n    shots = results.get_shots()\n    stream_url = results.compile()\nexcept InvalidRequestError as e:\n    if \"No results found\" in str(e):\n        shots = []\n    else:\n        raise\n```\n\n### Timeline editing\n\n**Important:** Always validate timestamps before building a timeline:\n- `start` must be >= 0 (negative values are silently accepted but produce broken output)\n- `start` must be < `end`\n- `end` must be <= `video.length`\n\n```python\nfrom videodb.timeline import Timeline\nfrom videodb.asset import VideoAsset, TextAsset, TextStyle\n\ntimeline = Timeline(conn)\ntimeline.add_inline(VideoAsset(asset_id=video.id, start=10, end=30))\ntimeline.add_overlay(0, TextAsset(text=\"The End\", duration=3, style=TextStyle(fontsize=36)))\nstream_url = timeline.generate_stream()\n```\n\n### Transcode video (resolution / quality change)\n\n```python\nfrom videodb import TranscodeMode, VideoConfig, AudioConfig\n\n# Change resolution, quality, or aspect ratio server-side\njob_id = conn.transcode(\n    source=\"https://example.com/video.mp4\",\n    callback_url=\"https://example.com/webhook\",\n    mode=TranscodeMode.economy,\n    video_config=VideoConfig(resolution=720, quality=23, aspect_ratio=\"16:9\"),\n    audio_config=AudioConfig(mute=False),\n)\n```\n\n### Reframe aspect ratio (for social platforms)\n\n**Warning:** `reframe()` is a slow server-side operation. For long videos it can take\nseveral minutes and may time out. Best practices:\n- Always limit to a short segment using `start`/`end` when possible\n- For full-length videos, use `callback_url` for async processing\n- Trim the video on a `Timeline` first, then reframe the shorter result\n\n```python\nfrom videodb import ReframeMode\n\n# Always prefer reframing a short segment:\nreframed = video.reframe(start=0, end=60, target=\"vertical\", mode=ReframeMode.smart)\n\n# Async reframe for full-length videos (returns None, result via webhook):\nvideo.reframe(target=\"vertical\", callback_url=\"https://example.com/webhook\")\n\n# Presets: \"vertical\" (9:16), \"square\" (1:1), \"landscape\" (16:9)\nreframed = video.reframe(start=0, end=60, target=\"square\")\n\n# Custom dimensions\nreframed = video.reframe(start=0, end=60, target={\"width\": 1280, \"height\": 720})\n```\n\n### Generative media\n\n```python\nimage = coll.generate_image(\n    prompt=\"a sunset over mountains\",\n    aspect_ratio=\"16:9\",\n)\n```\n\n## Error handling\n\n```python\nfrom videodb.exceptions import AuthenticationError, InvalidRequestError\n\ntry:\n    conn = videodb.connect()\nexcept AuthenticationError:\n    print(\"Check your VIDEO_DB_API_KEY\")\n\ntry:\n    video = coll.upload(url=\"https://example.com/video.mp4\")\nexcept InvalidRequestError as e:\n    print(f\"Upload failed: {e}\")\n```\n\n### Common pitfalls\n\n| Scenario | Error message | Solution |\n|----------|--------------|----------|\n| Indexing an already-indexed video | `Spoken word index for video already exists` | Use `video.index_spoken_words(force=True)` to skip if already indexed |\n| Scene index already exists | `Scene index with id XXXX already exists` | Extract the existing `scene_index_id` from the error with `re.search(r\"id\\s+([a-f0-9]+)\", str(e))` |\n| Search finds no matches | `InvalidRequestError: No results found` | Catch the exception and treat as empty results (`shots = []`) |\n| Reframe times out | Blocks indefinitely on long videos | Use `start`/`end` to limit segment, or pass `callback_url` for async |\n| Negative timestamps on Timeline | Silently produces broken stream | Always validate `start >= 0` before creating `VideoAsset` |\n| `generate_video()` / `create_collection()` fails | `Operation not allowed` or `maximum limit` | Plan-gated features — inform the user about plan limits |\n\n## Additional docs\n\nReference documentation is in the `reference/` directory adjacent to this SKILL.md file. Use the Glob tool to locate it if needed.\n\n- [reference/api-reference.md](reference/api-reference.md) - Complete VideoDB Python SDK API reference\n- [reference/search.md](reference/search.md) - In-depth guide to video search (spoken word and scene-based)\n- [reference/editor.md](reference/editor.md) - Timeline editing, assets, and composition\n- [reference/streaming.md](reference/streaming.md) - HLS streaming and instant playback\n- [reference/generative.md](reference/generative.md) - AI-powered media generation (images, video, audio)\n- [reference/rtstream.md](reference/rtstream.md) - Live stream ingestion workflow (RTSP/RTMP)\n- [reference/rtstream-reference.md](reference/rtstream-reference.md) - RTStream SDK methods and AI pipelines\n- [reference/capture.md](reference/capture.md) - Desktop capture workflow\n- [reference/capture-reference.md](reference/capture-reference.md) - Capture SDK and WebSocket events\n- [reference/use-cases.md](reference/use-cases.md) - Common video processing patterns and examples\n\n## Screen Recording (Desktop Capture)\n\nUse `ws_listener.py` to capture WebSocket events during recording sessions. Desktop capture supports **macOS** only.\n\n### Quick Start\n\n1. **Start listener**: `python scripts/ws_listener.py &`\n2. **Get WebSocket ID**: `cat /tmp/videodb_ws_id`\n3. **Run capture code** (see reference/capture.md for full workflow)\n4. **Events written to**: `/tmp/videodb_events.jsonl`\n\n### Query Events\n\n```python\nimport json\nevents = [json.loads(l) for l in open(\"/tmp/videodb_events.jsonl\")]\n\n# Get all transcripts\ntranscripts = [e[\"data\"][\"text\"] for e in events if e.get(\"channel\") == \"transcript\"]\n\n# Get visual descriptions from last 5 minutes\nimport time\ncutoff = time.time() - 300\nrecent_visual = [e for e in events \n                 if e.get(\"channel\") == \"visual_index\" and e[\"unix_ts\"] > cutoff]\n```\n\n### Utility Scripts\n\n- [scripts/ws_listener.py](scripts/ws_listener.py) - WebSocket event listener (dumps to JSONL)\n\nFor complete capture workflow, see [reference/capture.md](reference/capture.md).\n\n**Do not use ffmpeg, moviepy, or local encoding tools** when VideoDB supports the operation. The following are all handled server-side by VideoDB — trimming, combining clips, overlaying audio or music, adding subtitles, text/image overlays, transcoding, resolution changes, aspect-ratio conversion, resizing for platform requirements, transcription, and media generation. Only fall back to local tools for operations listed under Limitations in reference/editor.md (transitions, speed changes, crop/zoom, colour grading, volume mixing).\n\n### When to use what\n\n| Problem | VideoDB solution |\n|---------|-----------------|\n| Platform rejects video aspect ratio or resolution | `video.reframe()` or `conn.transcode()` with `VideoConfig` |\n| Need to resize video for Twitter/Instagram/TikTok | `video.reframe(target=\"vertical\")` or `target=\"square\"` |\n| Need to change resolution (e.g. 1080p → 720p) | `conn.transcode()` with `VideoConfig(resolution=720)` |\n| Need to overlay audio/music on video | `AudioAsset` on a `Timeline` |\n| Need to add subtitles | `video.add_subtitle()` or `CaptionAsset` |\n| Need to combine/trim clips | `VideoAsset` on a `Timeline` |\n| Need to generate voiceover, music, or SFX | `coll.generate_voice()`, `generate_music()`, `generate_sound_effect()` |\n\n## Repository\n\nhttps://github.com/video-db/skills\n\n**Maintained By:** [VideoDB](https://github.com/video-db)\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["videodb","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity-skills"],"capabilities":["skill","source-sickn33","skill-videodb","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/videodb","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34404 github stars · SKILL.md body (13,603 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:51:56.559Z","embedding":null,"createdAt":"2026-04-18T21:47:14.575Z","updatedAt":"2026-04-22T00:51:56.559Z","lastSeenAt":"2026-04-22T00:51:56.559Z","tsv":"'/path/to/video.mp4':637 '/tmp/videodb_events.jsonl':1450,1463 '/tmp/videodb_ws_id':1436 '/video-db)':1688 '/video-db/skills':1682 '/video.mp4':623,957,1157 '/watch?v=video_id':630 '/webhook':962,1084 '0':871,915,1058,1098,1108,1276 '0.3':813,837 '1':98,409,508,800,1090,1091,1426 '10':910 '1080p':1632 '1280':1113 '16':974,1088,1093,1129 '2':144,414,537,1431 '23':971 '3':167,467,921,1437 '30':912 '300':1490 '36':925 '4':195,1446 '5':221,1484 '50':590 '60':1060,1100,1110 '720':969,1115,1638 '720p':1633 '9':791,975,1087,1094,1130,1225 'a-f0':788,1222 'accept':876 'action':34,97,325 'ad':1556 'add':20,356,1651 'addit':1301 'adjac':1310 'ai':1364,1384 'ai-pow':1363 'alert':29,85,276,313,365 'alerts/triggers':123 'allow':1287 'alreadi':412,650,751,1176,1184,1195,1199,1206 'already-index':1175 'alway':449,606,686,861,1010,1049,1273 'anyth':464 'api':406,539,547,561,572,586,603,1149,1330 'appear':318 'ask':502,1722 'aspect':165,946,972,982,1127,1564,1606 'aspect-ratio':1563 'asset':290,906,1351 'async':1030,1065,1264 'audio':4,56,110,209,292,976,1370,1553 'audio/music':1642 'audioasset':1645 'audioconfig':941,978 'authenticationerror':429,1137,1143 'auto':189 'auto-cr':188 'automat':430 'back':1577 'background':210,358 'base':770,1346 'bash':473,511,530 'best':1008 'bitrat':162 'block':1248 'boundari':1730 'broken':879,1271 'build':12,172,865 'burn':203,352 'burn-in':202 'c':448 'callback':958,1027,1080,1261 'canon':306 'caption':208 'captionasset':1656 'captur':105,254,311,515,521,528,1389,1393,1409,1413,1420,1439,1520 'card':595 'cat':1435 'catch':1236 'chang':380,934,942,1562,1590,1629 'channel':1477,1500 'check':1145 'clarif':1724 'claud':557 'clear':1697 'clip':78,191,272,294,1551,1660 'code':374,379,453,1440 'codec':161 'coll':488 'coll.generate':1120,1672 'coll.get':495 'coll.upload':619,626,634,1153 'collect':490,1283 'colour':1592 'combin':91,1550 'combine/trim':1659 'command':441 'common':243,278,1167,1400 'complet':1326,1519 'composit':215,1353 'config':966,977 'configur':538 'conn':400,486,902,1140 'conn.get':489 'conn.transcode':953,1612,1634 'connect':226,360 'console.videodb.io':589 'content':775 'context':113,263 'convers':1566 'creat':25,190,1278,1282 'credit':594 'criteria':1733 'crop/zoom':1591 'current':420 'custom':1103 'cutoff':1488,1507 'data':1469 'db':405,546,560,571,1148 'demo':701 'depth':1336 'describ':772,1701 'descript':1481 'desir':260 'desktop':40,66,99,103,253,300,310,1388,1408,1419 'dimens':1104 'directori':384,421,1309 'doc':1302 'document':1304 'dotenv':391,394,396,477,480,482,518,536 'dub':213 'dump':1515 'durat':920 'e':711,718,782,793,847,854,1161,1166,1227,1468,1472,1493,1495,1504 'e.g':1631 'e.get':1476,1499 'edit':8,18,62,197,275,859,1350 'effect':1678 'either':550 'els':720,801,856 'emit':238 'empti':696,1242 'encod':1532 'end':329,884,885,911,919,1018,1059,1099,1109,1255 'enter':369 'entri':305 'env':397,417,483,567,581 'environ':387,410,1713 'environment-specif':1712 'eof':475,497 'episod':116 'error':645,746,760,1131,1170,1216 'event':1397,1415,1447,1452,1456,1474,1497,1513 'event/alert':295 'events/alerts':239 'everi':344 'evid':76,142,171,187,287 'exact':181 'exampl':308,1405 'example.com':622,956,961,1083,1156 'example.com/video.mp4':621,955,1155 'example.com/webhook':960,1082 'except':708,779,780,844,1142,1158,1238 'exist':752,755,1185,1200,1207,1210 'expert':1718 'export':217,413,552,558 'extra':529 'extract':753,767,1208 'f':492,1163 'f0':790,1224 'fail':522,1165,1284 'fall':1576 'fals':980 'featur':1294 'feed':228 'ffmpeg':1528 'field':317 'file':64,150,246,332,418,436,568,582,632,635,1314 'files/urls/live':10 'filter':807 'find':343,1229 'first':1038 'folder':341 'follow':1540 'fontsiz':924 'forc':641,655,676,741,1190 'format':452 'found':685,694,715,851,1235 'fps':163 'free':585,591 'full':1023,1069,1444 'full-length':1022,1068 'gate':1293 'generat':22,198,200,289,350,1116,1280,1367,1574,1667,1674,1676 'get':262,583,1432,1464,1479 'github.com':1681,1687 'github.com/video-db)':1686 'github.com/video-db/skills':1680 'glob':1317 'grade':1593 'guid':1337 'handl':601,1132,1543 'happen':131 'height':1114 'heredoc':471 'hls':1356 'id':757,764,786,798,831,834,907,952,1204,1213,1220,1434 'imag':293,1119,1121,1368 'import':392,398,478,484,671,725,729,735,860,892,896,938,1047,1136,1454,1486 'in-depth':1334 'indefinit':1249 'index':6,14,58,168,177,268,339,651,737,750,756,763,797,826,830,833,1173,1177,1181,1196,1198,1202,1212,1502 'indextyp':731 'indextype.scene':828 'inform':1295 'ingest':9,92,146,148,330,1375 'inlin':440,445,904 'input':244,1727 'insid':666 'instal':509,513,525,532 'instant':1359 'instead':472 'invalidrequesterror':672,680,709,736,845,1138,1159,1232 'involv':73 'job':951 'json':1455 'json.loads':1457 'jsonl':1517 'keep':460 'key':407,424,540,548,562,565,573,576,587,604,1150 'keyword':176 'l':1458,1460 'landscap':1092 'last':1483 'len':494 'length':1024,1070 'let':607 'light':357 'limit':1011,1257,1290,1300,1585,1689 'link':143,159,288,338 'linux':524 'list':1583 'listen':1428,1514 'live':37,69,112,222,298,1373 'load':386,393,395,479,481 'local':245,631,1531,1579 'locat':1320 'long':997,1251 'longer':465 'low':809 'low-relev':808 'maco':1422 'maintain':1683 'match':783,795,1231,1698 'match.group':799 'maximum':1289 'may':1005 'media':23,96,615,1117,1366,1573 'memori':33,118,304 'messag':1171 'method':551,1382 'mic':107 'minut':1003,1485 'miss':426,1735 'mix':1595 'mode':963,1063 'moment':182 'monitor':84,225,241 'motion':207 'mountain':1126 'moviepi':1529 'music':211,359,1555,1669,1675 'must':543,869,882,886 'mute':979 'need':47,53,1323,1615,1627,1639,1649,1657,1665 'negat':872,1265 'nois':811 'none':1073 'one':88 'open':1462 'oper':220,261,995,1285,1538,1582 'output':279,880,1707 'overlay':79,205,914,1552,1559,1641 'overlays/subtitles':21 'paramet':742 'pass':1260 'password':316 'path':247,636 'pattern':1403 'payload':296 'peopl':347 'percept':5,32,57,100 'permiss':1728 'person':368,818 'pip':512,531 'pipelin':1385 'pitfal':1168 'plan':1292,1299 'plan-gat':1291 'platform':986,1569,1603 'playabl':141,156,186,336 'playback':1360 'possibl':1020 'power':1365 'practic':1009 'prefer':1050 'preset':1085 'print':491,1144,1162 'problem':1600 'process':1031,1402 'produc':134,323,878,1270 'product':700 'programmat':214 'project':383,415,566,579 'prompt':307,771,1122 'proper':451 'public':248 'python':373,389,446,447,474,517,535,616,640,668,724,889,935,1044,1118,1133,1328,1429,1453 'python-dotenv':516,534 'qualiti':933,944,970 'queri':271,817,1451 'quick':612,1424 'r':785,1219 'rais':428,679,721,744,802,857 'rang':273 'ratio':166,947,973,983,1128,1565,1607 're':726 're.search':784,1218 'read':403,598 'readabl':462 'real':27,82,121,231 'real-tim':26,81,120,230 'recent':1491 'recommend':812 'record':319,1407,1417 'refer':613,1303,1308,1331 'reference/api-reference.md':1324,1325 'reference/capture-reference.md':1391,1392 'reference/capture.md':1386,1387,1442,1523,1524 'reference/editor.md':1347,1348,1587 'reference/generative.md':1361,1362 'reference/rtstream-reference.md':1378,1379 'reference/rtstream.md':1371,1372 'reference/search.md':1332,1333 'reference/streaming.md':1354,1355 'reference/use-cases.md':1398,1399 'refram':981,988,1040,1051,1055,1066,1095,1105,1245 'reframemod':1048 'reframemode.smart':1064 'reject':1604 'relev':810 'repositori':1679 'request':255 'requir':1570,1726 'resiz':1567,1617 'resolut':164,932,943,968,1561,1609,1630,1637 'result':194,283,683,693,698,714,815,850,1043,1074,1234,1243 'results.compile':707,843 'results.get':703,839 'retriev':94 'return':154,180,334,348,1072 'review':1719 'rtsp':224,251,362 'rtsp/live':227 'rtsp/rtmp':1377 'rtstream':1380 'rule':277 'run':119,229,372,376,1438 'safeti':1729 'save':569 'scenario':1169 'scene':345,722,738,749,762,766,778,796,829,832,1197,1201,1211,1345 'scene-bas':1344 'sceneextractiontyp':732 'sceneextractiontype.shot':769 'scope':1700 'score':804,835 'screen':106,133,1406 'script':435,1509 'scripts/ws_listener.py':1430,1510,1511 'sdk':510,1329,1381,1394 'search':15,59,169,178,193,270,282,665,678,723,823,1228,1340 'searchabl':75,138 'searchtyp':730 'searchtype.semantic':825 'see':1441,1522 'segment':1015,1054,1258 'semicolon':455 'separ':457 'server':949,993,1545 'server-sid':948,992,1544 'session':41,67,104,117,135,259,301,321,1418 'set':544,610 'setup':498,504 'sever':1002 'sfx':1671 'short':439,1014,1053 'shorter':1042 'shot':702,704,719,838,840,855,1244 'side':950,994,1546 'silent':875,1269 'similar':507 'skill':31,44,1692 'skill-videodb' 'skill.md':1313 'skip':643,1193 'slow':991 'social':985 'solut':1172,1602 'sound':1677 'sourc':954 'source-sickn33' 'spec':267,269 'specif':1714 'speed':1589 'spoken':127,174,235,653,674,1179,1188,1341 'squar':1089,1102,1626 'start':256,309,556,868,881,909,1017,1057,1097,1107,1254,1275,1425,1427 'start/stop':101 'statement':458,468 'stop':257,1720 'store':115 'str':717,792,853,1226 'stream':11,38,70,111,147,158,223,280,299,337,661,705,841,926,929,1272,1357,1374 'style':922 'substitut':1710 'subtitl':77,199,291,351,639,664,1557,1652,1654 'success':1732 'summar':258 'summari':136,302,326 'sunset':1124 'support':1421,1536 'system':109 'take':1001 'target':1061,1078,1101,1111,1622,1625 'task':72,1696 'termin':554 'test':1716 'text':657,660,917,1470 'text/image':1558 'text/image/branding':206 'textasset':898,916 'textstyl':899,923 'threshold':805,836 'time':28,83,122,232,1006,1246,1487 'time.time':1489 'timelin':19,61,139,196,219,274,858,867,893,900,901,1037,1268,1349,1648,1664 'timeline.add':903,913 'timeline.generate':928 'timestamp':17,74,170,184,285,349,863,1266 'tool':1318,1533,1580 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'transcod':266,930,1560 'transcode/normalize':160 'transcodemod':939 'transcodemode.economy':964 'transcript':638,659,1466,1467,1478,1571 'transit':1588 'translat':201 'treat':691,1240,1705 'tri':697,761,814,1139,1151 'trim':1032,1549 'true':642,656,677,1191 'try/except':689 'ts':1506 'twitter/instagram/tiktok':1620 'type':768,824,827 'understand':93,236,265 'unix':1505 'upload':592,614,1164 'url':65,152,249,252,281,363,617,620,627,662,706,842,927,959,1028,1081,1154,1262 'use':42,51,450,454,469,549,803,1016,1026,1186,1253,1315,1410,1527,1598,1690 'user':501,542,609,1297 'util':1508 'valid':862,1274,1715 'valu':873 'variabl':388 'vertic':1062,1079,1086,1623 'via':218,1075 'video':2,36,54,145,404,493,496,545,559,570,618,625,633,648,667,931,965,998,1025,1034,1071,1147,1152,1178,1183,1252,1281,1339,1369,1401,1605,1618,1644 'video.add':663,1653 'video.get':658 'video.id':908 'video.index':652,673,765,1187 'video.length':888 'video.reframe':1056,1077,1096,1106,1610,1621 'video.search':699,816 'videoasset':897,905,1279,1661 'videoconfig':940,967,1614,1636 'videodb':1,30,378,399,485,505,514,520,533,728,937,1046,1327,1535,1548,1601,1685 'videodb.asset':895 'videodb.connect':401,427,487,1141 'videodb.exceptions':670,734,1135 'videodb.timeline':891 'visual':173,233,774,1480,1492,1501 'visual/spoken':13 'voic':1673 'voiceov':212,1668 'volum':1594 'want':87 'warn':987 'web':157 'webhook':1076 'websocket':1396,1414,1433,1512 'whiteboard':822 'width':1112 'without':526 'word':654,675,1180,1189,1342 'work':442 'workflow':89,242,1376,1390,1445,1521 'wrap':687 'write':433,444,599,819 'written':1448 'ws_listener.py':1411 'www.youtube.com':629 'www.youtube.com/watch?v=video_id':628 'xxxx':1205 'your-key':563,574 'youtub':624 'zone':371","prices":[{"id":"dddb3118-97b0-44f9-8e4b-0bd093949776","listingId":"d3d68a48-46c5-4308-b392-a5969e896778","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:47:14.575Z"}],"sources":[{"listingId":"d3d68a48-46c5-4308-b392-a5969e896778","source":"github","sourceId":"sickn33/antigravity-awesome-skills/videodb","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/videodb","isPrimary":false,"firstSeenAt":"2026-04-18T21:47:14.575Z","lastSeenAt":"2026-04-22T00:51:56.559Z"}],"details":{"listingId":"d3d68a48-46c5-4308-b392-a5969e896778","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"videodb","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34404,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-21T16:43:40Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"fb2f37e48f14d2164161cdfa3a3939b4245ac200","skill_md_path":"skills/videodb/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/videodb"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"videodb","description":"Video and audio perception, indexing, and editing. Ingest files/URLs/live streams, build visual/spoken indexes, search with timestamps, edit timelines, add overlays/subtitles, generate media, and create real-time alerts."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/videodb"},"updatedAt":"2026-04-22T00:51:56.559Z"}}