agent-recipes 0.0.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agent_recipes/__init__.py +27 -0
- agent_recipes/recipe_runtime/__init__.py +28 -0
- agent_recipes/recipe_runtime/core.py +385 -0
- agent_recipes/templates/ai-ab-hook-tester/recipe.yaml +45 -0
- agent_recipes/templates/ai-ab-hook-tester/tools.py +169 -0
- agent_recipes/templates/ai-angle-generator/recipe.yaml +49 -0
- agent_recipes/templates/ai-angle-generator/tools.py +182 -0
- agent_recipes/templates/ai-api-doc-generator/README.md +59 -0
- agent_recipes/templates/ai-api-doc-generator/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-api-tester/README.md +60 -0
- agent_recipes/templates/ai-api-tester/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-audio-enhancer/README.md +59 -0
- agent_recipes/templates/ai-audio-enhancer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-audio-normalizer/README.md +13 -0
- agent_recipes/templates/ai-audio-normalizer/TEMPLATE.yaml +44 -0
- agent_recipes/templates/ai-audio-splitter/README.md +14 -0
- agent_recipes/templates/ai-audio-splitter/TEMPLATE.yaml +47 -0
- agent_recipes/templates/ai-background-music-generator/README.md +59 -0
- agent_recipes/templates/ai-background-music-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-background-remover/README.md +60 -0
- agent_recipes/templates/ai-background-remover/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-barcode-scanner/README.md +60 -0
- agent_recipes/templates/ai-barcode-scanner/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-blog-generator/README.md +59 -0
- agent_recipes/templates/ai-blog-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-brief-generator/recipe.yaml +52 -0
- agent_recipes/templates/ai-brief-generator/tools.py +231 -0
- agent_recipes/templates/ai-broll-builder/recipe.yaml +47 -0
- agent_recipes/templates/ai-broll-builder/tools.py +204 -0
- agent_recipes/templates/ai-calendar-scheduler/README.md +60 -0
- agent_recipes/templates/ai-calendar-scheduler/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-changelog-generator/README.md +14 -0
- agent_recipes/templates/ai-changelog-generator/TEMPLATE.yaml +46 -0
- agent_recipes/templates/ai-chart-generator/README.md +61 -0
- agent_recipes/templates/ai-chart-generator/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-code-documenter/README.md +12 -0
- agent_recipes/templates/ai-code-documenter/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-code-refactorer/README.md +59 -0
- agent_recipes/templates/ai-code-refactorer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-code-reviewer/README.md +59 -0
- agent_recipes/templates/ai-code-reviewer/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-color-palette-extractor/README.md +60 -0
- agent_recipes/templates/ai-color-palette-extractor/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-comment-miner/recipe.yaml +40 -0
- agent_recipes/templates/ai-comment-miner/tools.py +141 -0
- agent_recipes/templates/ai-commit-message-generator/README.md +59 -0
- agent_recipes/templates/ai-commit-message-generator/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-content-calendar/recipe.yaml +43 -0
- agent_recipes/templates/ai-content-calendar/tools.py +170 -0
- agent_recipes/templates/ai-context-enricher/recipe.yaml +48 -0
- agent_recipes/templates/ai-context-enricher/tools.py +258 -0
- agent_recipes/templates/ai-contract-analyzer/README.md +60 -0
- agent_recipes/templates/ai-contract-analyzer/TEMPLATE.yaml +34 -0
- agent_recipes/templates/ai-csv-cleaner/README.md +13 -0
- agent_recipes/templates/ai-csv-cleaner/TEMPLATE.yaml +45 -0
- agent_recipes/templates/ai-cta-generator/recipe.yaml +54 -0
- agent_recipes/templates/ai-cta-generator/tools.py +174 -0
- agent_recipes/templates/ai-daily-news-show/recipe.yaml +103 -0
- agent_recipes/templates/ai-daily-news-show/tools.py +308 -0
- agent_recipes/templates/ai-data-anonymizer/README.md +60 -0
- agent_recipes/templates/ai-data-anonymizer/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-data-profiler/README.md +14 -0
- agent_recipes/templates/ai-data-profiler/TEMPLATE.yaml +42 -0
- agent_recipes/templates/ai-dependency-auditor/README.md +12 -0
- agent_recipes/templates/ai-dependency-auditor/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-doc-translator/README.md +12 -0
- agent_recipes/templates/ai-doc-translator/TEMPLATE.yaml +41 -0
- agent_recipes/templates/ai-duplicate-finder/README.md +59 -0
- agent_recipes/templates/ai-duplicate-finder/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-ebook-converter/README.md +60 -0
- agent_recipes/templates/ai-ebook-converter/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-email-parser/README.md +59 -0
- agent_recipes/templates/ai-email-parser/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-etl-pipeline/README.md +60 -0
- agent_recipes/templates/ai-etl-pipeline/TEMPLATE.yaml +30 -0
- agent_recipes/templates/ai-excel-formula-generator/README.md +59 -0
- agent_recipes/templates/ai-excel-formula-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-face-blur/README.md +60 -0
- agent_recipes/templates/ai-face-blur/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-fact-checker/recipe.yaml +52 -0
- agent_recipes/templates/ai-fact-checker/tools.py +279 -0
- agent_recipes/templates/ai-faq-generator/README.md +59 -0
- agent_recipes/templates/ai-faq-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-file-organizer/README.md +59 -0
- agent_recipes/templates/ai-file-organizer/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-folder-packager/README.md +15 -0
- agent_recipes/templates/ai-folder-packager/TEMPLATE.yaml +48 -0
- agent_recipes/templates/ai-form-filler/README.md +60 -0
- agent_recipes/templates/ai-form-filler/TEMPLATE.yaml +30 -0
- agent_recipes/templates/ai-hashtag-optimizer/recipe.yaml +45 -0
- agent_recipes/templates/ai-hashtag-optimizer/tools.py +134 -0
- agent_recipes/templates/ai-hook-generator/recipe.yaml +50 -0
- agent_recipes/templates/ai-hook-generator/tools.py +177 -0
- agent_recipes/templates/ai-image-captioner/README.md +59 -0
- agent_recipes/templates/ai-image-captioner/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-image-cataloger/README.md +13 -0
- agent_recipes/templates/ai-image-cataloger/TEMPLATE.yaml +39 -0
- agent_recipes/templates/ai-image-optimizer/README.md +13 -0
- agent_recipes/templates/ai-image-optimizer/TEMPLATE.yaml +43 -0
- agent_recipes/templates/ai-image-resizer/README.md +12 -0
- agent_recipes/templates/ai-image-resizer/TEMPLATE.yaml +39 -0
- agent_recipes/templates/ai-image-tagger/README.md +59 -0
- agent_recipes/templates/ai-image-tagger/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-image-upscaler/README.md +60 -0
- agent_recipes/templates/ai-image-upscaler/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-invoice-processor/README.md +60 -0
- agent_recipes/templates/ai-invoice-processor/TEMPLATE.yaml +34 -0
- agent_recipes/templates/ai-json-to-csv/README.md +12 -0
- agent_recipes/templates/ai-json-to-csv/TEMPLATE.yaml +36 -0
- agent_recipes/templates/ai-log-analyzer/README.md +59 -0
- agent_recipes/templates/ai-log-analyzer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-markdown-to-pdf/README.md +12 -0
- agent_recipes/templates/ai-markdown-to-pdf/TEMPLATE.yaml +40 -0
- agent_recipes/templates/ai-meeting-summarizer/README.md +59 -0
- agent_recipes/templates/ai-meeting-summarizer/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-meta-tag-generator/README.md +59 -0
- agent_recipes/templates/ai-meta-tag-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-news-capture-pack/recipe.yaml +42 -0
- agent_recipes/templates/ai-news-capture-pack/tools.py +150 -0
- agent_recipes/templates/ai-news-crawler/recipe.yaml +99 -0
- agent_recipes/templates/ai-news-crawler/tools.py +417 -0
- agent_recipes/templates/ai-news-deduper/recipe.yaml +47 -0
- agent_recipes/templates/ai-news-deduper/tools.py +235 -0
- agent_recipes/templates/ai-newsletter-generator/README.md +59 -0
- agent_recipes/templates/ai-newsletter-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-note-summarizer/README.md +59 -0
- agent_recipes/templates/ai-note-summarizer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-pdf-summarizer/README.md +12 -0
- agent_recipes/templates/ai-pdf-summarizer/TEMPLATE.yaml +40 -0
- agent_recipes/templates/ai-pdf-to-markdown/README.md +19 -0
- agent_recipes/templates/ai-pdf-to-markdown/TEMPLATE.yaml +63 -0
- agent_recipes/templates/ai-performance-analyzer/recipe.yaml +45 -0
- agent_recipes/templates/ai-performance-analyzer/tools.py +159 -0
- agent_recipes/templates/ai-podcast-cleaner/README.md +117 -0
- agent_recipes/templates/ai-podcast-cleaner/TEMPLATE.yaml +117 -0
- agent_recipes/templates/ai-podcast-cleaner/agents.yaml +59 -0
- agent_recipes/templates/ai-podcast-cleaner/workflow.yaml +77 -0
- agent_recipes/templates/ai-podcast-transcriber/README.md +59 -0
- agent_recipes/templates/ai-podcast-transcriber/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-post-copy-generator/recipe.yaml +41 -0
- agent_recipes/templates/ai-post-copy-generator/tools.py +105 -0
- agent_recipes/templates/ai-product-description-generator/README.md +59 -0
- agent_recipes/templates/ai-product-description-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-publisher-pack/recipe.yaml +44 -0
- agent_recipes/templates/ai-publisher-pack/tools.py +252 -0
- agent_recipes/templates/ai-qr-code-generator/README.md +60 -0
- agent_recipes/templates/ai-qr-code-generator/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-regex-generator/README.md +59 -0
- agent_recipes/templates/ai-regex-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-repo-readme/README.md +13 -0
- agent_recipes/templates/ai-repo-readme/TEMPLATE.yaml +42 -0
- agent_recipes/templates/ai-report-generator/README.md +61 -0
- agent_recipes/templates/ai-report-generator/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-resume-parser/README.md +60 -0
- agent_recipes/templates/ai-resume-parser/TEMPLATE.yaml +33 -0
- agent_recipes/templates/ai-rss-aggregator/README.md +60 -0
- agent_recipes/templates/ai-rss-aggregator/TEMPLATE.yaml +30 -0
- agent_recipes/templates/ai-schema-generator/README.md +12 -0
- agent_recipes/templates/ai-schema-generator/TEMPLATE.yaml +34 -0
- agent_recipes/templates/ai-screen-recorder/recipe.yaml +43 -0
- agent_recipes/templates/ai-screen-recorder/tools.py +184 -0
- agent_recipes/templates/ai-screenshot-capture/recipe.yaml +45 -0
- agent_recipes/templates/ai-screenshot-capture/tools.py +231 -0
- agent_recipes/templates/ai-screenshot-ocr/README.md +12 -0
- agent_recipes/templates/ai-screenshot-ocr/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-script-writer/recipe.yaml +58 -0
- agent_recipes/templates/ai-script-writer/tools.py +297 -0
- agent_recipes/templates/ai-sentiment-analyzer/README.md +59 -0
- agent_recipes/templates/ai-sentiment-analyzer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-seo-optimizer/README.md +59 -0
- agent_recipes/templates/ai-seo-optimizer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-signal-ranker/recipe.yaml +54 -0
- agent_recipes/templates/ai-signal-ranker/tools.py +256 -0
- agent_recipes/templates/ai-sitemap-generator/README.md +59 -0
- agent_recipes/templates/ai-sitemap-generator/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-sitemap-scraper/README.md +13 -0
- agent_recipes/templates/ai-sitemap-scraper/TEMPLATE.yaml +41 -0
- agent_recipes/templates/ai-slide-generator/README.md +60 -0
- agent_recipes/templates/ai-slide-generator/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-slide-to-notes/README.md +12 -0
- agent_recipes/templates/ai-slide-to-notes/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-social-media-generator/README.md +59 -0
- agent_recipes/templates/ai-social-media-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-sql-generator/README.md +59 -0
- agent_recipes/templates/ai-sql-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-subtitle-generator/README.md +59 -0
- agent_recipes/templates/ai-subtitle-generator/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-test-generator/README.md +59 -0
- agent_recipes/templates/ai-test-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-translation-batch/README.md +59 -0
- agent_recipes/templates/ai-translation-batch/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-url-to-markdown/README.md +14 -0
- agent_recipes/templates/ai-url-to-markdown/TEMPLATE.yaml +44 -0
- agent_recipes/templates/ai-video-chapter-generator/README.md +59 -0
- agent_recipes/templates/ai-video-chapter-generator/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-video-compressor/README.md +59 -0
- agent_recipes/templates/ai-video-compressor/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-video-editor/README.md +254 -0
- agent_recipes/templates/ai-video-editor/TEMPLATE.yaml +139 -0
- agent_recipes/templates/ai-video-editor/agents.yaml +36 -0
- agent_recipes/templates/ai-video-editor/requirements.txt +8 -0
- agent_recipes/templates/ai-video-editor/scripts/run.sh +10 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__init__.py +45 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__main__.py +8 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/__init__.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/cli.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/config.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/ffmpeg_probe.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/heuristics.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/llm_plan.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/models.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/pipeline.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/render.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/timeline.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/transcribe.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/utils.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/cli.py +343 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/config.py +102 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/ffmpeg_probe.py +92 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/heuristics.py +119 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/llm_plan.py +277 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/models.py +343 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/pipeline.py +287 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/render.py +274 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/timeline.py +278 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/transcribe.py +233 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/utils.py +222 -0
- agent_recipes/templates/ai-video-editor/src/input.mov +0 -0
- agent_recipes/templates/ai-video-editor/src/out.mp4 +0 -0
- agent_recipes/templates/ai-video-editor/tests/test_heuristics.py +130 -0
- agent_recipes/templates/ai-video-editor/tests/test_models.py +152 -0
- agent_recipes/templates/ai-video-editor/tests/test_timeline.py +105 -0
- agent_recipes/templates/ai-video-editor/workflow.yaml +51 -0
- agent_recipes/templates/ai-video-highlight-extractor/README.md +60 -0
- agent_recipes/templates/ai-video-highlight-extractor/TEMPLATE.yaml +33 -0
- agent_recipes/templates/ai-video-merger/recipe.yaml +40 -0
- agent_recipes/templates/ai-video-merger/tools.py +172 -0
- agent_recipes/templates/ai-video-thumbnails/README.md +16 -0
- agent_recipes/templates/ai-video-thumbnails/TEMPLATE.yaml +53 -0
- agent_recipes/templates/ai-video-to-gif/README.md +14 -0
- agent_recipes/templates/ai-video-to-gif/TEMPLATE.yaml +64 -0
- agent_recipes/templates/ai-voice-cloner/README.md +59 -0
- agent_recipes/templates/ai-voice-cloner/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-voiceover-generator/recipe.yaml +41 -0
- agent_recipes/templates/ai-voiceover-generator/tools.py +194 -0
- agent_recipes/templates/ai-watermark-adder/README.md +59 -0
- agent_recipes/templates/ai-watermark-adder/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-watermark-remover/README.md +60 -0
- agent_recipes/templates/ai-watermark-remover/TEMPLATE.yaml +32 -0
- agent_recipes/templates/data-transformer/README.md +75 -0
- agent_recipes/templates/data-transformer/TEMPLATE.yaml +63 -0
- agent_recipes/templates/data-transformer/agents.yaml +70 -0
- agent_recipes/templates/data-transformer/workflow.yaml +92 -0
- agent_recipes/templates/shorts-generator/README.md +61 -0
- agent_recipes/templates/shorts-generator/TEMPLATE.yaml +65 -0
- agent_recipes/templates/shorts-generator/agents.yaml +66 -0
- agent_recipes/templates/shorts-generator/workflow.yaml +86 -0
- agent_recipes/templates/transcript-generator/README.md +103 -0
- agent_recipes/templates/transcript-generator/TEMPLATE.yaml +57 -0
- agent_recipes/templates/transcript-generator/agents.yaml +62 -0
- agent_recipes/templates/transcript-generator/workflow.yaml +82 -0
- agent_recipes/templates/video-editor/README.md +70 -0
- agent_recipes/templates/video-editor/TEMPLATE.yaml +55 -0
- agent_recipes/templates/video-editor/agents.yaml +68 -0
- agent_recipes/templates/video-editor/workflow.yaml +92 -0
- agent_recipes-0.0.5.dist-info/METADATA +145 -0
- agent_recipes-0.0.5.dist-info/RECORD +269 -0
- agent_recipes-0.0.5.dist-info/WHEEL +5 -0
- agent_recipes-0.0.5.dist-info/top_level.txt +1 -0
- /236/326/177nE/243/231/214/232/265/322m/201/253/353/022C/372/321/266/b/225^=/272/017t/262/3337/310@/315wb/341pB/277z/216/330/314/004/265B/213/375/236/203/026/373/307/354z41/347#/374q/262/22589/032/276 /277/244Vh/322/017/004/224/215/004/367/377/375/335/n +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Video Highlight Extractor
|
|
2
|
+
|
|
3
|
+
Auto-detect and extract key moments/highlights from long videos
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install agent-recipes
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CLI Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Basic usage
|
|
15
|
+
praison recipes run ai-video-highlight-extractor <input>
|
|
16
|
+
|
|
17
|
+
# With output directory
|
|
18
|
+
praison recipes run ai-video-highlight-extractor <input> --output ./output/
|
|
19
|
+
|
|
20
|
+
# Dry run (check dependencies only)
|
|
21
|
+
praison recipes run ai-video-highlight-extractor <input> --dry-run
|
|
22
|
+
|
|
23
|
+
# Show recipe info
|
|
24
|
+
praison recipes info ai-video-highlight-extractor
|
|
25
|
+
|
|
26
|
+
# Check dependencies
|
|
27
|
+
praison recipes doctor ai-video-highlight-extractor
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Python Usage
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from praisonaiagents import Agent
|
|
34
|
+
from agent_recipes import load_recipe
|
|
35
|
+
|
|
36
|
+
# Load and run recipe
|
|
37
|
+
recipe = load_recipe("ai-video-highlight-extractor")
|
|
38
|
+
result = recipe.run(input="<your-input>")
|
|
39
|
+
print(result)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
|
|
44
|
+
### Packages
|
|
45
|
+
- ffmpeg-python
|
|
46
|
+
- openai
|
|
47
|
+
|
|
48
|
+
### Environment Variables
|
|
49
|
+
- OPENAI_API_KEY
|
|
50
|
+
|
|
51
|
+
### External Tools
|
|
52
|
+
- ffmpeg
|
|
53
|
+
|
|
54
|
+
## Tags
|
|
55
|
+
|
|
56
|
+
`video`, `highlights`, `extraction`
|
|
57
|
+
|
|
58
|
+
## License
|
|
59
|
+
|
|
60
|
+
Apache-2.0
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: ai-video-highlight-extractor
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Auto-detect and extract key moments/highlights from long videos
|
|
4
|
+
author: praison
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
tags:
|
|
7
|
+
- video
|
|
8
|
+
- highlights
|
|
9
|
+
- extraction
|
|
10
|
+
|
|
11
|
+
requires:
|
|
12
|
+
tools:
|
|
13
|
+
- media_tool
|
|
14
|
+
- whisper_tool
|
|
15
|
+
- llm_tool
|
|
16
|
+
packages:
|
|
17
|
+
- ffmpeg-python
|
|
18
|
+
- openai
|
|
19
|
+
env:
|
|
20
|
+
- OPENAI_API_KEY
|
|
21
|
+
external:
|
|
22
|
+
- ffmpeg
|
|
23
|
+
|
|
24
|
+
cli:
|
|
25
|
+
command: praison recipes run ai-video-highlight-extractor
|
|
26
|
+
examples:
|
|
27
|
+
- praison recipes run ai-video-highlight-extractor <input>
|
|
28
|
+
- praison recipes run ai-video-highlight-extractor <input> --output ./output/
|
|
29
|
+
- praison recipes run ai-video-highlight-extractor <input> --dry-run
|
|
30
|
+
|
|
31
|
+
safety:
|
|
32
|
+
dry_run_default: true
|
|
33
|
+
overwrites_files: true
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: ai-video-merger
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: Merge voice audio with video, sync audio and video tracks
|
|
4
|
+
author: PraisonAI
|
|
5
|
+
tags:
|
|
6
|
+
- video
|
|
7
|
+
- audio
|
|
8
|
+
- merge
|
|
9
|
+
- sync
|
|
10
|
+
|
|
11
|
+
config:
|
|
12
|
+
output_format: mp4
|
|
13
|
+
audio_sync: true
|
|
14
|
+
normalize_audio: true
|
|
15
|
+
|
|
16
|
+
input:
|
|
17
|
+
type: object
|
|
18
|
+
properties:
|
|
19
|
+
video_path:
|
|
20
|
+
type: string
|
|
21
|
+
audio_path:
|
|
22
|
+
type: string
|
|
23
|
+
|
|
24
|
+
output:
|
|
25
|
+
type: object
|
|
26
|
+
properties:
|
|
27
|
+
merged_path:
|
|
28
|
+
type: string
|
|
29
|
+
|
|
30
|
+
requires:
|
|
31
|
+
external:
|
|
32
|
+
- ffmpeg
|
|
33
|
+
|
|
34
|
+
workflow:
|
|
35
|
+
agents:
|
|
36
|
+
- name: merger
|
|
37
|
+
role: Video Audio Merger
|
|
38
|
+
tools:
|
|
39
|
+
- merge_audio_video
|
|
40
|
+
- sync_tracks
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AI Video Merger Tools
|
|
3
|
+
|
|
4
|
+
Merge and sync audio with video:
|
|
5
|
+
- Audio/video merging
|
|
6
|
+
- Track synchronization
|
|
7
|
+
- Audio normalization
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
import subprocess
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
from typing import Any, Dict, Optional
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def merge_audio_video(
|
|
20
|
+
video_path: str,
|
|
21
|
+
audio_path: str,
|
|
22
|
+
output_path: Optional[str] = None,
|
|
23
|
+
replace_audio: bool = True,
|
|
24
|
+
normalize: bool = True,
|
|
25
|
+
) -> Dict[str, Any]:
|
|
26
|
+
"""
|
|
27
|
+
Merge audio track with video.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
video_path: Path to video file
|
|
31
|
+
audio_path: Path to audio file
|
|
32
|
+
output_path: Output file path
|
|
33
|
+
replace_audio: Replace existing audio
|
|
34
|
+
normalize: Normalize audio levels
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Dictionary with output info
|
|
38
|
+
"""
|
|
39
|
+
if not os.path.exists(video_path):
|
|
40
|
+
return {"error": f"Video not found: {video_path}"}
|
|
41
|
+
if not os.path.exists(audio_path):
|
|
42
|
+
return {"error": f"Audio not found: {audio_path}"}
|
|
43
|
+
|
|
44
|
+
if not output_path:
|
|
45
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
46
|
+
output_path = f"merged_{timestamp}.mp4"
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
if replace_audio:
|
|
50
|
+
# Replace audio entirely
|
|
51
|
+
cmd = [
|
|
52
|
+
"ffmpeg", "-y",
|
|
53
|
+
"-i", video_path,
|
|
54
|
+
"-i", audio_path,
|
|
55
|
+
"-c:v", "copy",
|
|
56
|
+
"-c:a", "aac",
|
|
57
|
+
"-map", "0:v:0",
|
|
58
|
+
"-map", "1:a:0",
|
|
59
|
+
"-shortest",
|
|
60
|
+
output_path
|
|
61
|
+
]
|
|
62
|
+
else:
|
|
63
|
+
# Mix audio tracks
|
|
64
|
+
cmd = [
|
|
65
|
+
"ffmpeg", "-y",
|
|
66
|
+
"-i", video_path,
|
|
67
|
+
"-i", audio_path,
|
|
68
|
+
"-filter_complex", "[0:a][1:a]amix=inputs=2:duration=first[a]",
|
|
69
|
+
"-c:v", "copy",
|
|
70
|
+
"-map", "0:v:0",
|
|
71
|
+
"-map", "[a]",
|
|
72
|
+
output_path
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
76
|
+
|
|
77
|
+
if result.returncode != 0:
|
|
78
|
+
logger.warning(f"FFmpeg stderr: {result.stderr}")
|
|
79
|
+
|
|
80
|
+
if os.path.exists(output_path):
|
|
81
|
+
return {
|
|
82
|
+
"path": output_path,
|
|
83
|
+
"video_source": video_path,
|
|
84
|
+
"audio_source": audio_path,
|
|
85
|
+
"size_bytes": os.path.getsize(output_path),
|
|
86
|
+
}
|
|
87
|
+
else:
|
|
88
|
+
return {"error": "Output file not created"}
|
|
89
|
+
|
|
90
|
+
except Exception as e:
|
|
91
|
+
logger.error(f"Error merging: {e}")
|
|
92
|
+
return {"error": str(e)}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def sync_tracks(
|
|
96
|
+
video_path: str,
|
|
97
|
+
audio_path: str,
|
|
98
|
+
output_path: Optional[str] = None,
|
|
99
|
+
audio_offset: float = 0.0,
|
|
100
|
+
) -> Dict[str, Any]:
|
|
101
|
+
"""
|
|
102
|
+
Sync audio track with video with offset adjustment.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
video_path: Path to video file
|
|
106
|
+
audio_path: Path to audio file
|
|
107
|
+
output_path: Output file path
|
|
108
|
+
audio_offset: Audio offset in seconds (positive = delay audio)
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
Dictionary with output info
|
|
112
|
+
"""
|
|
113
|
+
if not output_path:
|
|
114
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
115
|
+
output_path = f"synced_{timestamp}.mp4"
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
if audio_offset >= 0:
|
|
119
|
+
# Delay audio
|
|
120
|
+
cmd = [
|
|
121
|
+
"ffmpeg", "-y",
|
|
122
|
+
"-i", video_path,
|
|
123
|
+
"-itsoffset", str(audio_offset),
|
|
124
|
+
"-i", audio_path,
|
|
125
|
+
"-c:v", "copy",
|
|
126
|
+
"-c:a", "aac",
|
|
127
|
+
"-map", "0:v:0",
|
|
128
|
+
"-map", "1:a:0",
|
|
129
|
+
"-shortest",
|
|
130
|
+
output_path
|
|
131
|
+
]
|
|
132
|
+
else:
|
|
133
|
+
# Delay video (advance audio)
|
|
134
|
+
cmd = [
|
|
135
|
+
"ffmpeg", "-y",
|
|
136
|
+
"-itsoffset", str(-audio_offset),
|
|
137
|
+
"-i", video_path,
|
|
138
|
+
"-i", audio_path,
|
|
139
|
+
"-c:v", "copy",
|
|
140
|
+
"-c:a", "aac",
|
|
141
|
+
"-map", "0:v:0",
|
|
142
|
+
"-map", "1:a:0",
|
|
143
|
+
"-shortest",
|
|
144
|
+
output_path
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
subprocess.run(cmd, capture_output=True, check=True)
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
"path": output_path,
|
|
151
|
+
"audio_offset": audio_offset,
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
except Exception as e:
|
|
155
|
+
logger.error(f"Error syncing: {e}")
|
|
156
|
+
return {"error": str(e)}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def get_duration(file_path: str) -> float:
|
|
160
|
+
"""Get duration of audio/video file in seconds."""
|
|
161
|
+
try:
|
|
162
|
+
cmd = [
|
|
163
|
+
"ffprobe",
|
|
164
|
+
"-v", "error",
|
|
165
|
+
"-show_entries", "format=duration",
|
|
166
|
+
"-of", "default=noprint_wrappers=1:nokey=1",
|
|
167
|
+
file_path
|
|
168
|
+
]
|
|
169
|
+
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
|
|
170
|
+
return float(result.stdout.strip())
|
|
171
|
+
except Exception:
|
|
172
|
+
return 0.0
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# AI Video Thumbnails
|
|
2
|
+
|
|
3
|
+
Extract thumbnails from video with AI-selected best frame.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```bash
|
|
7
|
+
praison run ai-video-thumbnails video.mp4
|
|
8
|
+
praison run ai-video-thumbnails video.mp4 --count 10
|
|
9
|
+
praison run ai-video-thumbnails video.mp4 --interval 30
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Output
|
|
13
|
+
- `thumbnails/` - Extracted frames
|
|
14
|
+
- `best-frame.jpg` - AI-selected best thumbnail
|
|
15
|
+
- `grid.jpg` - Contact sheet
|
|
16
|
+
- `frames.json` - Frame metadata
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: ai-video-thumbnails
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Extract thumbnails from video with AI-selected best frame.
|
|
4
|
+
author: praisonai
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
tags: [video, thumbnails, frames, extraction]
|
|
7
|
+
|
|
8
|
+
requires:
|
|
9
|
+
tools: [shell_tool]
|
|
10
|
+
packages: [praisonai-tools]
|
|
11
|
+
env: [OPENAI_API_KEY]
|
|
12
|
+
external:
|
|
13
|
+
- name: ffmpeg
|
|
14
|
+
check: "ffmpeg -version"
|
|
15
|
+
|
|
16
|
+
config:
|
|
17
|
+
input:
|
|
18
|
+
type: string
|
|
19
|
+
required: true
|
|
20
|
+
output:
|
|
21
|
+
type: string
|
|
22
|
+
interval:
|
|
23
|
+
type: number
|
|
24
|
+
default: 10
|
|
25
|
+
count:
|
|
26
|
+
type: integer
|
|
27
|
+
|
|
28
|
+
cli:
|
|
29
|
+
command: ai-video-thumbnails
|
|
30
|
+
args:
|
|
31
|
+
- name: input
|
|
32
|
+
positional: true
|
|
33
|
+
required: true
|
|
34
|
+
- name: --output
|
|
35
|
+
short: -o
|
|
36
|
+
- name: --interval
|
|
37
|
+
default: "10"
|
|
38
|
+
- name: --count
|
|
39
|
+
examples:
|
|
40
|
+
- "praison run ai-video-thumbnails video.mp4"
|
|
41
|
+
- "praison run ai-video-thumbnails video.mp4 --count 10"
|
|
42
|
+
|
|
43
|
+
outputs:
|
|
44
|
+
- name: thumbnails/
|
|
45
|
+
type: directory
|
|
46
|
+
- name: best-frame.jpg
|
|
47
|
+
type: file
|
|
48
|
+
- name: grid.jpg
|
|
49
|
+
type: file
|
|
50
|
+
- name: frames.json
|
|
51
|
+
type: file
|
|
52
|
+
- name: run.json
|
|
53
|
+
type: file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# AI Video to GIF
|
|
2
|
+
|
|
3
|
+
Convert video to optimized GIF with palette optimization.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```bash
|
|
7
|
+
praison run ai-video-to-gif video.mp4
|
|
8
|
+
praison run ai-video-to-gif video.mp4 --start 10 --duration 3 --fps 15
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Output
|
|
12
|
+
- `output.gif` - Optimized GIF
|
|
13
|
+
- `thumbnail.jpg` - Best frame thumbnail
|
|
14
|
+
- `run.json` - Execution metadata
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: ai-video-to-gif
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: |
|
|
4
|
+
Convert video to optimized GIF with AI-selected best frames.
|
|
5
|
+
Creates high-quality GIFs with palette optimization.
|
|
6
|
+
|
|
7
|
+
author: praisonai
|
|
8
|
+
license: Apache-2.0
|
|
9
|
+
tags: [video, gif, conversion, optimization]
|
|
10
|
+
|
|
11
|
+
requires:
|
|
12
|
+
tools: [shell_tool]
|
|
13
|
+
packages: [praisonai-tools]
|
|
14
|
+
external:
|
|
15
|
+
- name: ffmpeg
|
|
16
|
+
check: "ffmpeg -version"
|
|
17
|
+
install_hint: "brew install ffmpeg"
|
|
18
|
+
|
|
19
|
+
config:
|
|
20
|
+
input:
|
|
21
|
+
type: string
|
|
22
|
+
required: true
|
|
23
|
+
output:
|
|
24
|
+
type: string
|
|
25
|
+
start:
|
|
26
|
+
type: number
|
|
27
|
+
default: 0
|
|
28
|
+
duration:
|
|
29
|
+
type: number
|
|
30
|
+
default: 5
|
|
31
|
+
fps:
|
|
32
|
+
type: integer
|
|
33
|
+
default: 10
|
|
34
|
+
width:
|
|
35
|
+
type: integer
|
|
36
|
+
default: 480
|
|
37
|
+
|
|
38
|
+
cli:
|
|
39
|
+
command: ai-video-to-gif
|
|
40
|
+
args:
|
|
41
|
+
- name: input
|
|
42
|
+
positional: true
|
|
43
|
+
required: true
|
|
44
|
+
- name: --output
|
|
45
|
+
short: -o
|
|
46
|
+
- name: --start
|
|
47
|
+
default: "0"
|
|
48
|
+
- name: --duration
|
|
49
|
+
default: "5"
|
|
50
|
+
- name: --fps
|
|
51
|
+
default: "10"
|
|
52
|
+
- name: --width
|
|
53
|
+
default: "480"
|
|
54
|
+
examples:
|
|
55
|
+
- "praison run ai-video-to-gif video.mp4"
|
|
56
|
+
- "praison run ai-video-to-gif video.mp4 --start 10 --duration 3"
|
|
57
|
+
|
|
58
|
+
outputs:
|
|
59
|
+
- name: output.gif
|
|
60
|
+
type: file
|
|
61
|
+
- name: thumbnail.jpg
|
|
62
|
+
type: file
|
|
63
|
+
- name: run.json
|
|
64
|
+
type: file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Voice Cloner
|
|
2
|
+
|
|
3
|
+
Clone voice from sample for TTS narration (CONSENT REQUIRED)
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install agent-recipes
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CLI Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Basic usage
|
|
15
|
+
praison recipes run ai-voice-cloner <input>
|
|
16
|
+
|
|
17
|
+
# With output directory
|
|
18
|
+
praison recipes run ai-voice-cloner <input> --output ./output/
|
|
19
|
+
|
|
20
|
+
# Dry run (check dependencies only)
|
|
21
|
+
praison recipes run ai-voice-cloner <input> --dry-run
|
|
22
|
+
|
|
23
|
+
# Show recipe info
|
|
24
|
+
praison recipes info ai-voice-cloner
|
|
25
|
+
|
|
26
|
+
# Check dependencies
|
|
27
|
+
praison recipes doctor ai-voice-cloner
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Python Usage
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from praisonaiagents import Agent
|
|
34
|
+
from agent_recipes import load_recipe
|
|
35
|
+
|
|
36
|
+
# Load and run recipe
|
|
37
|
+
recipe = load_recipe("ai-voice-cloner")
|
|
38
|
+
result = recipe.run(input="<your-input>")
|
|
39
|
+
print(result)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
|
|
44
|
+
### Packages
|
|
45
|
+
- openai
|
|
46
|
+
|
|
47
|
+
### Environment Variables
|
|
48
|
+
- OPENAI_API_KEY
|
|
49
|
+
|
|
50
|
+
### External Tools
|
|
51
|
+
- None
|
|
52
|
+
|
|
53
|
+
## Tags
|
|
54
|
+
|
|
55
|
+
`audio`, `voice`, `tts`, `cloning`
|
|
56
|
+
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
Apache-2.0
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: ai-voice-cloner
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Clone voice from sample for TTS narration (CONSENT REQUIRED)
|
|
4
|
+
author: praison
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
tags:
|
|
7
|
+
- audio
|
|
8
|
+
- voice
|
|
9
|
+
- tts
|
|
10
|
+
- cloning
|
|
11
|
+
|
|
12
|
+
requires:
|
|
13
|
+
tools:
|
|
14
|
+
- llm_tool
|
|
15
|
+
packages:
|
|
16
|
+
- openai
|
|
17
|
+
env:
|
|
18
|
+
- OPENAI_API_KEY
|
|
19
|
+
|
|
20
|
+
cli:
|
|
21
|
+
command: praison recipes run ai-voice-cloner
|
|
22
|
+
examples:
|
|
23
|
+
- praison recipes run ai-voice-cloner <input>
|
|
24
|
+
- praison recipes run ai-voice-cloner <input> --output ./output/
|
|
25
|
+
- praison recipes run ai-voice-cloner <input> --dry-run
|
|
26
|
+
|
|
27
|
+
safety:
|
|
28
|
+
dry_run_default: true
|
|
29
|
+
overwrites_files: true
|
|
30
|
+
requires_consent: true
|
|
31
|
+
consent_message: "Voice cloning requires explicit consent from the voice owner."
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: ai-voiceover-generator
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: Generate voice overs from text using TTS APIs
|
|
4
|
+
author: PraisonAI
|
|
5
|
+
tags:
|
|
6
|
+
- audio
|
|
7
|
+
- voice
|
|
8
|
+
- tts
|
|
9
|
+
- speech
|
|
10
|
+
|
|
11
|
+
config:
|
|
12
|
+
voice: alloy
|
|
13
|
+
model: tts-1
|
|
14
|
+
speed: 1.0
|
|
15
|
+
output_format: mp3
|
|
16
|
+
|
|
17
|
+
input:
|
|
18
|
+
type: object
|
|
19
|
+
properties:
|
|
20
|
+
text:
|
|
21
|
+
type: string
|
|
22
|
+
voice:
|
|
23
|
+
type: string
|
|
24
|
+
|
|
25
|
+
output:
|
|
26
|
+
type: object
|
|
27
|
+
properties:
|
|
28
|
+
audio_path:
|
|
29
|
+
type: string
|
|
30
|
+
|
|
31
|
+
requires:
|
|
32
|
+
env:
|
|
33
|
+
- OPENAI_API_KEY
|
|
34
|
+
|
|
35
|
+
workflow:
|
|
36
|
+
agents:
|
|
37
|
+
- name: voiceover_agent
|
|
38
|
+
role: Voice Over Generator
|
|
39
|
+
tools:
|
|
40
|
+
- generate_voiceover
|
|
41
|
+
- generate_speech
|