{"id":"2b4ea6b0-dbfa-4a24-ac1d-81ffa0213247","shortId":"N4JZKT","kind":"skill","title":"azure-ai-contentunderstanding-py","tagline":"Azure AI Content Understanding SDK for Python. Use for multimodal content extraction from documents, images, audio, and video.","description":"# Azure AI Content Understanding SDK for Python\n\nMultimodal AI service that extracts semantic content from documents, video, audio, and image files for RAG and automated workflows.\n\n## Installation\n\n```bash\npip install azure-ai-contentunderstanding\n```\n\n## Environment Variables\n\n```bash\nCONTENTUNDERSTANDING_ENDPOINT=https://<resource>.cognitiveservices.azure.com/\n```\n\n## Authentication\n\n```python\nimport os\nfrom azure.ai.contentunderstanding import ContentUnderstandingClient\nfrom azure.identity import DefaultAzureCredential\n\nendpoint = os.environ[\"CONTENTUNDERSTANDING_ENDPOINT\"]\ncredential = DefaultAzureCredential()\nclient = ContentUnderstandingClient(endpoint=endpoint, credential=credential)\n```\n\n## Core Workflow\n\nContent Understanding operations are asynchronous long-running operations:\n\n1. **Begin Analysis** — Start the analysis operation with `begin_analyze()` (returns a poller)\n2. **Poll for Results** — Poll until analysis completes (SDK handles this with `.result()`)\n3. **Process Results** — Extract structured results from `AnalyzeResult.contents`\n\n## Prebuilt Analyzers\n\n| Analyzer | Content Type | Purpose |\n|----------|--------------|---------|\n| `prebuilt-documentSearch` | Documents | Extract markdown for RAG applications |\n| `prebuilt-imageSearch` | Images | Extract content from images |\n| `prebuilt-audioSearch` | Audio | Transcribe audio with timing |\n| `prebuilt-videoSearch` | Video | Extract frames, transcripts, summaries |\n| `prebuilt-invoice` | Documents | Extract invoice fields |\n\n## Analyze Document\n\n```python\nimport os\nfrom azure.ai.contentunderstanding import ContentUnderstandingClient\nfrom azure.ai.contentunderstanding.models import AnalyzeInput\nfrom azure.identity import DefaultAzureCredential\n\nendpoint = os.environ[\"CONTENTUNDERSTANDING_ENDPOINT\"]\nclient = ContentUnderstandingClient(\n    endpoint=endpoint,\n    credential=DefaultAzureCredential()\n)\n\n# Analyze document from URL\npoller = client.begin_analyze(\n    analyzer_id=\"prebuilt-documentSearch\",\n    inputs=[AnalyzeInput(url=\"https://example.com/document.pdf\")]\n)\n\nresult = poller.result()\n\n# Access markdown content (contents is a list)\ncontent = result.contents[0]\nprint(content.markdown)\n```\n\n## Access Document Content Details\n\n```python\nfrom azure.ai.contentunderstanding.models import MediaContentKind, DocumentContent\n\ncontent = result.contents[0]\nif content.kind == MediaContentKind.DOCUMENT:\n    document_content: DocumentContent = content  # type: ignore\n    print(document_content.start_page_number)\n```\n\n## Analyze Image\n\n```python\nfrom azure.ai.contentunderstanding.models import AnalyzeInput\n\npoller = client.begin_analyze(\n    analyzer_id=\"prebuilt-imageSearch\",\n    inputs=[AnalyzeInput(url=\"https://example.com/image.jpg\")]\n)\nresult = poller.result()\ncontent = result.contents[0]\nprint(content.markdown)\n```\n\n## Analyze Video\n\n```python\nfrom azure.ai.contentunderstanding.models import AnalyzeInput\n\npoller = client.begin_analyze(\n    analyzer_id=\"prebuilt-videoSearch\",\n    inputs=[AnalyzeInput(url=\"https://example.com/video.mp4\")]\n)\n\nresult = poller.result()\n\n# Access video content (AudioVisualContent)\ncontent = result.contents[0]\n\n# Get transcript phrases with timing\nfor phrase in content.transcript_phrases:\n    print(f\"[{phrase.start_time} - {phrase.end_time}]: {phrase.text}\")\n\n# Get key frames (for video)\nfor frame in content.key_frames:\n    print(f\"Frame at {frame.time}: {frame.description}\")\n```\n\n## Analyze Audio\n\n```python\nfrom azure.ai.contentunderstanding.models import AnalyzeInput\n\npoller = client.begin_analyze(\n    analyzer_id=\"prebuilt-audioSearch\",\n    inputs=[AnalyzeInput(url=\"https://example.com/audio.mp3\")]\n)\n\nresult = poller.result()\n\n# Access audio transcript\ncontent = result.contents[0]\nfor phrase in content.transcript_phrases:\n    print(f\"[{phrase.start_time}] {phrase.text}\")\n```\n\n## Custom Analyzers\n\nCreate custom analyzers with field schemas for specialized extraction:\n\n```python\n# Create custom analyzer\nanalyzer = client.create_analyzer(\n    analyzer_id=\"my-invoice-analyzer\",\n    analyzer={\n        \"description\": \"Custom invoice analyzer\",\n        \"base_analyzer_id\": \"prebuilt-documentSearch\",\n        \"field_schema\": {\n            \"fields\": {\n                \"vendor_name\": {\"type\": \"string\"},\n                \"invoice_total\": {\"type\": \"number\"},\n                \"line_items\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"description\": {\"type\": \"string\"},\n                            \"amount\": {\"type\": \"number\"}\n                        }\n                    }\n                }\n            }\n        }\n    }\n)\n\n# Use custom analyzer\nfrom azure.ai.contentunderstanding.models import AnalyzeInput\n\npoller = client.begin_analyze(\n    analyzer_id=\"my-invoice-analyzer\",\n    inputs=[AnalyzeInput(url=\"https://example.com/invoice.pdf\")]\n)\n\nresult = poller.result()\n\n# Access extracted fields\nprint(result.fields[\"vendor_name\"])\nprint(result.fields[\"invoice_total\"])\n```\n\n## Analyzer Management\n\n```python\n# List all analyzers\nanalyzers = client.list_analyzers()\nfor analyzer in analyzers:\n    print(f\"{analyzer.analyzer_id}: {analyzer.description}\")\n\n# Get specific analyzer\nanalyzer = client.get_analyzer(\"prebuilt-documentSearch\")\n\n# Delete custom analyzer\nclient.delete_analyzer(\"my-custom-analyzer\")\n```\n\n## Async Client\n\n```python\nimport asyncio\nimport os\nfrom azure.ai.contentunderstanding.aio import ContentUnderstandingClient\nfrom azure.ai.contentunderstanding.models import AnalyzeInput\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def analyze_document():\n    endpoint = os.environ[\"CONTENTUNDERSTANDING_ENDPOINT\"]\n    credential = DefaultAzureCredential()\n    \n    async with ContentUnderstandingClient(\n        endpoint=endpoint,\n        credential=credential\n    ) as client:\n        poller = await client.begin_analyze(\n            analyzer_id=\"prebuilt-documentSearch\",\n            inputs=[AnalyzeInput(url=\"https://example.com/doc.pdf\")]\n        )\n        result = await poller.result()\n        content = result.contents[0]\n        return content.markdown\n\nasyncio.run(analyze_document())\n```\n\n## Content Types\n\n| Class | For | Provides |\n|-------|-----|----------|\n| `DocumentContent` | PDF, images, Office docs | Pages, tables, figures, paragraphs |\n| `AudioVisualContent` | Audio, video files | Transcript phrases, timing, key frames |\n\nBoth derive from `MediaContent` which provides basic info and markdown representation.\n\n## Model Imports\n\n```python\nfrom azure.ai.contentunderstanding.models import (\n    AnalyzeInput,\n    AnalyzeResult,\n    MediaContentKind,\n    DocumentContent,\n    AudioVisualContent,\n)\n```\n\n## Client Types\n\n| Client | Purpose |\n|--------|---------|\n| `ContentUnderstandingClient` | Sync client for all operations |\n| `ContentUnderstandingClient` (aio) | Async client for all operations |\n\n## Best Practices\n\n1. **Use `begin_analyze` with `AnalyzeInput`** — this is the correct method signature\n2. **Access results via `result.contents[0]`** — results are returned as a list\n3. **Use prebuilt analyzers** for common scenarios (document/image/audio/video search)\n4. **Create custom analyzers** only for domain-specific field extraction\n5. **Use async client** for high-throughput scenarios with `azure.identity.aio` credentials\n6. **Handle long-running operations** — video/audio analysis can take minutes\n7. **Use URL sources** when possible to avoid upload overhead\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\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":["azure","contentunderstanding","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-azure-ai-contentunderstanding-py","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/azure-ai-contentunderstanding-py","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 · 34964 github stars · SKILL.md body (7,948 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-25T00:50:30.856Z","embedding":null,"createdAt":"2026-04-18T21:31:53.271Z","updatedAt":"2026-04-25T00:50:30.856Z","lastSeenAt":"2026-04-25T00:50:30.856Z","tsv":"'/audio.mp3':375 '/doc.pdf':577 '/document.pdf':223 '/image.jpg':284 '/invoice.pdf':475 '/video.mp4':312 '0':235,250,289,321,383,583,670 '1':99,653 '2':112,665 '3':125,677 '4':686 '5':697 '6':709 '7':720 'access':226,238,315,378,478,666 'action':742 'ai':3,7,25,32,56 'aio':645 'amount':451 'analysi':101,104,118,716 'analyz':108,134,135,179,206,212,213,264,273,274,292,301,302,355,364,365,395,398,408,409,411,412,417,418,422,424,456,463,464,469,489,494,495,497,499,501,509,510,512,518,520,524,546,566,567,587,656,680,689 'analyzeinput':191,219,270,280,298,308,361,371,460,471,539,573,629,658 'analyzer.analyzer':504 'analyzer.description':506 'analyzeresult':630 'analyzeresult.contents':132 'applic':147,736 'array':443 'ask':780 'async':525,544,554,646,699 'asynchron':94 'asyncio':529 'asyncio.run':586 'audio':21,41,159,161,356,379,604 'audiosearch':158,369 'audiovisualcont':318,603,633 'authent':64 'autom':48 'avoid':727 'await':564,579 'azur':2,6,24,55 'azure-ai-contentunderstand':54 'azure-ai-contentunderstanding-pi':1 'azure.ai.contentunderstanding':69,185 'azure.ai.contentunderstanding.aio':533 'azure.ai.contentunderstanding.models':189,244,268,296,359,458,537,627 'azure.identity':73,193 'azure.identity.aio':541,707 'base':423 'bash':51,60 'basic':618 'begin':100,107,655 'best':651 'boundari':788 'clarif':782 'class':591 'clear':755 'client':82,200,526,562,634,636,640,647,700 'client.begin':211,272,300,363,462,565 'client.create':410 'client.delete':519 'client.get':511 'client.list':496 'cognitiveservices.azure.com':63 'common':682 'complet':119 'content':8,16,26,37,90,136,153,228,229,233,240,248,255,257,287,317,319,381,581,589 'content.key':347 'content.kind':252 'content.markdown':237,291,585 'content.transcript':330,387 'contentunderstand':4,57,61,78,198,550 'contentunderstandingcli':71,83,187,201,535,556,638,644 'core':88 'correct':662 'creat':396,406,687 'credenti':80,86,87,204,552,559,560,708 'criteria':791 'custom':394,397,407,420,455,517,523,688 'def':545 'defaultazurecredenti':75,81,195,205,543,553 'delet':516 'deriv':613 'describ':743,759 'descript':419,448 'detail':241 'doc':598 'document':19,39,142,175,180,207,239,254,547,588 'document/image/audio/video':684 'document_content.start':261 'documentcont':247,256,594,632 'documentsearch':141,217,428,515,571 'domain':693 'domain-specif':692 'endpoint':62,76,79,84,85,196,199,202,203,548,551,557,558 'environ':58,771 'environment-specif':770 'example.com':222,283,311,374,474,576 'example.com/audio.mp3':373 'example.com/doc.pdf':575 'example.com/document.pdf':221 'example.com/image.jpg':282 'example.com/invoice.pdf':473 'example.com/video.mp4':310 'execut':738 'expert':776 'extract':17,35,128,143,152,168,176,404,479,696 'f':333,350,390,503 'field':178,400,429,431,480,695 'figur':601 'file':44,606 'frame':169,341,345,348,351,611 'frame.description':354 'frame.time':353 'get':322,339,507 'handl':121,710 'high':703 'high-throughput':702 'id':214,275,303,366,413,425,465,505,568 'ignor':259 'imag':20,43,151,155,265,596 'imagesearch':150,278 'import':66,70,74,182,186,190,194,245,269,297,360,459,528,530,534,538,542,624,628 'info':619 'input':218,279,307,370,470,572,785 'instal':50,53 'invoic':174,177,416,421,436,468,487 'item':441,444 'key':340,610 'limit':747 'line':440 'list':232,492,676 'long':96,712 'long-run':95,711 'manag':490 'markdown':144,227,621 'match':756 'mediacont':615 'mediacontentkind':246,631 'mediacontentkind.document':253 'method':663 'minut':719 'miss':793 'model':623 'multimod':15,31 'my-custom-analyz':521 'my-invoice-analyz':414,466 'name':433,484 'number':263,439,453 'object':446 'offic':597 'oper':92,98,105,643,650,714 'os':67,183,531 'os.environ':77,197,549 'output':765 'overhead':729 'overview':746 'page':262,599 'paragraph':602 'pdf':595 'permiss':786 'phrase':324,328,331,385,388,608 'phrase.end':336 'phrase.start':334,391 'phrase.text':338,393 'pip':52 'poll':113,116 'poller':111,210,271,299,362,461,563 'poller.result':225,286,314,377,477,580 'possibl':725 'practic':652 'prebuilt':133,140,149,157,165,173,216,277,305,368,427,514,570,679 'prebuilt-audiosearch':156,367 'prebuilt-documentsearch':139,215,426,513,569 'prebuilt-imagesearch':148,276 'prebuilt-invoic':172 'prebuilt-videosearch':164,304 'print':236,260,290,332,349,389,481,485,502 'process':126 'properti':447 'provid':593,617 'purpos':138,637 'py':5 'python':12,30,65,181,242,266,294,357,405,491,527,625 'rag':46,146 'represent':622 'requir':784 'result':115,124,127,130,224,285,313,376,476,578,667,671 'result.contents':234,249,288,320,382,582,669 'result.fields':482,486 'return':109,584,673 'review':777 'run':97,713 'safeti':787 'scenario':683,705 'schema':401,430 'scope':758 'sdk':10,28,120 'search':685 'semant':36 'servic':33 'signatur':664 'skill':734,750 'skill-azure-ai-contentunderstanding-py' 'sourc':723 'source-sickn33' 'special':403 'specif':508,694,772 'start':102 'stop':778 'string':435,450 'structur':129 'substitut':768 'success':790 'summari':171 'sync':639 'tabl':600 'take':718 'task':754 'test':774 'throughput':704 'time':163,326,335,337,392,609 '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' 'total':437,488 'transcrib':160 'transcript':170,323,380,607 'treat':763 'type':137,258,434,438,442,445,449,452,590,635 'understand':9,27,91 'upload':728 'url':209,220,281,309,372,472,574,722 'use':13,454,654,678,698,721,732,748 'valid':773 'variabl':59 'vendor':432,483 'via':668 'video':23,40,167,293,316,343,605 'video/audio':715 'videosearch':166,306 'workflow':49,89,740","prices":[{"id":"f3153068-7229-4acf-8270-4c06185ad649","listingId":"2b4ea6b0-dbfa-4a24-ac1d-81ffa0213247","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:31:53.271Z"}],"sources":[{"listingId":"2b4ea6b0-dbfa-4a24-ac1d-81ffa0213247","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-ai-contentunderstanding-py","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-ai-contentunderstanding-py","isPrimary":false,"firstSeenAt":"2026-04-18T21:31:53.271Z","lastSeenAt":"2026-04-25T00:50:30.856Z"}],"details":{"listingId":"2b4ea6b0-dbfa-4a24-ac1d-81ffa0213247","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-ai-contentunderstanding-py","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34964,"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-24T06:41:17Z","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":"f846c04412a7ba93142639fe6f12479da7083410","skill_md_path":"skills/azure-ai-contentunderstanding-py/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-ai-contentunderstanding-py"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-ai-contentunderstanding-py","description":"Azure AI Content Understanding SDK for Python. Use for multimodal content extraction from documents, images, audio, and video."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-ai-contentunderstanding-py"},"updatedAt":"2026-04-25T00:50:30.856Z"}}