@farazirfan/costar-server-executor 1.7.37 → 1.7.39
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.
- package/dist/agent/agent.d.ts +90 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +606 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/pi-embedded-runner/run.d.ts.map +1 -1
- package/dist/agent/pi-embedded-runner/run.js +2 -1
- package/dist/agent/pi-embedded-runner/run.js.map +1 -1
- package/dist/agent/pi-embedded-runner/system-prompt.d.ts.map +1 -1
- package/dist/agent/pi-embedded-runner/system-prompt.js +16 -37
- package/dist/agent/pi-embedded-runner/system-prompt.js.map +1 -1
- package/dist/agent/pi-embedded-runner/tools.d.ts +4 -1
- package/dist/agent/pi-embedded-runner/tools.d.ts.map +1 -1
- package/dist/agent/pi-embedded-runner/tools.js +3 -1
- package/dist/agent/pi-embedded-runner/tools.js.map +1 -1
- package/dist/agent/pi-embedded-runner/types.d.ts +4 -0
- package/dist/agent/pi-embedded-runner/types.d.ts.map +1 -1
- package/dist/cli/env-loader.d.ts.map +1 -1
- package/dist/cli/env-loader.js +1 -0
- package/dist/cli/env-loader.js.map +1 -1
- package/dist/cli/setup.js +2 -2
- package/dist/cli/setup.js.map +1 -1
- package/dist/cron/normalize.d.ts +31 -0
- package/dist/cron/normalize.d.ts.map +1 -0
- package/dist/cron/normalize.js +211 -0
- package/dist/cron/normalize.js.map +1 -0
- package/dist/cron/scheduler.d.ts +33 -3
- package/dist/cron/scheduler.d.ts.map +1 -1
- package/dist/cron/scheduler.js +253 -48
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/heartbeat/runner.d.ts +27 -12
- package/dist/heartbeat/runner.d.ts.map +1 -1
- package/dist/heartbeat/runner.js +82 -104
- package/dist/heartbeat/runner.js.map +1 -1
- package/dist/infra/heartbeat-events-filter.d.ts +29 -0
- package/dist/infra/heartbeat-events-filter.d.ts.map +1 -0
- package/dist/infra/heartbeat-events-filter.js +80 -0
- package/dist/infra/heartbeat-events-filter.js.map +1 -0
- package/dist/infra/index.d.ts +9 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +9 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/infra/system-events.d.ts +58 -2
- package/dist/infra/system-events.d.ts.map +1 -1
- package/dist/infra/system-events.js +80 -14
- package/dist/infra/system-events.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -1
- package/dist/server.js.map +1 -1
- package/dist/services/platform-keys.d.ts +19 -0
- package/dist/services/platform-keys.d.ts.map +1 -0
- package/dist/services/platform-keys.js +74 -0
- package/dist/services/platform-keys.js.map +1 -0
- package/dist/subagent/registry.d.ts +96 -0
- package/dist/subagent/registry.d.ts.map +1 -0
- package/dist/subagent/registry.js +180 -0
- package/dist/subagent/registry.js.map +1 -0
- package/dist/tools/complete-turn.d.ts +2 -2
- package/dist/tools/complete-turn.js +10 -10
- package/dist/tools/complete-turn.js.map +1 -1
- package/dist/tools/contacts.d.ts +13 -0
- package/dist/tools/contacts.d.ts.map +1 -0
- package/dist/tools/contacts.js +80 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/cron.d.ts +17 -2
- package/dist/tools/cron.d.ts.map +1 -1
- package/dist/tools/cron.js +117 -35
- package/dist/tools/cron.js.map +1 -1
- package/dist/tools/google-maps.d.ts +6 -6
- package/dist/tools/google-maps.d.ts.map +1 -1
- package/dist/tools/google-maps.js +207 -262
- package/dist/tools/google-maps.js.map +1 -1
- package/dist/tools/index.d.ts +17 -7
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +40 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/phone-call.d.ts +11 -0
- package/dist/tools/phone-call.d.ts.map +1 -0
- package/dist/tools/phone-call.js +151 -0
- package/dist/tools/phone-call.js.map +1 -0
- package/dist/tools/sessions-spawn.d.ts +33 -0
- package/dist/tools/sessions-spawn.d.ts.map +1 -0
- package/dist/tools/sessions-spawn.js +164 -0
- package/dist/tools/sessions-spawn.js.map +1 -0
- package/dist/tools/spotify.d.ts +12 -0
- package/dist/tools/spotify.d.ts.map +1 -0
- package/dist/tools/spotify.js +251 -0
- package/dist/tools/spotify.js.map +1 -0
- package/dist/tools/subagents.d.ts +23 -0
- package/dist/tools/subagents.d.ts.map +1 -0
- package/dist/tools/subagents.js +209 -0
- package/dist/tools/subagents.js.map +1 -0
- package/dist/tools/whatsapp.d.ts +13 -0
- package/dist/tools/whatsapp.d.ts.map +1 -0
- package/dist/tools/whatsapp.js +215 -0
- package/dist/tools/whatsapp.js.map +1 -0
- package/dist/tools/youtube.d.ts +12 -0
- package/dist/tools/youtube.d.ts.map +1 -0
- package/dist/tools/youtube.js +218 -0
- package/dist/tools/youtube.js.map +1 -0
- package/dist/utils/asterizk-auth.d.ts +43 -0
- package/dist/utils/asterizk-auth.d.ts.map +1 -0
- package/dist/utils/asterizk-auth.js +125 -0
- package/dist/utils/asterizk-auth.js.map +1 -0
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +132 -0
- package/dist/web-server.js.map +1 -1
- package/dist/workspace/index.d.ts +3 -4
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +3 -4
- package/dist/workspace/index.js.map +1 -1
- package/dist/workspace/templates.d.ts +8 -7
- package/dist/workspace/templates.d.ts.map +1 -1
- package/dist/workspace/templates.js +18 -127
- package/dist/workspace/templates.js.map +1 -1
- package/dist/workspace/workspace.d.ts +2 -4
- package/dist/workspace/workspace.d.ts.map +1 -1
- package/dist/workspace/workspace.js +7 -16
- package/dist/workspace/workspace.js.map +1 -1
- package/package.json +1 -1
- package/public/index.html +231 -0
- package/skills/docx/SKILL.md +468 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/accept_changes.py +181 -0
- package/skills/docx/scripts/comment.py +347 -0
- package/skills/docx/scripts/helpers/__init__.py +0 -0
- package/skills/docx/scripts/helpers/merge_runs.py +231 -0
- package/skills/docx/scripts/helpers/simplify_redlines.py +240 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/scripts/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/scripts/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/scripts/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/scripts/ooxml/scripts/pack.py +159 -0
- package/skills/docx/scripts/ooxml/scripts/unpack.py +29 -0
- package/skills/docx/scripts/ooxml/scripts/validate.py +106 -0
- package/skills/docx/scripts/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/docx/scripts/ooxml/scripts/validation/base.py +1023 -0
- package/skills/docx/scripts/ooxml/scripts/validation/docx.py +519 -0
- package/skills/docx/scripts/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/docx/scripts/ooxml/scripts/validation/redlining.py +284 -0
- package/skills/docx/scripts/pack.py +166 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/docx/scripts/unpack.py +134 -0
- package/skills/longform-video-generation/SKILL.md +298 -0
- package/skills/longform-video-generation/references/advanced_techniques.md +474 -0
- package/skills/longform-video-generation/references/google_api_guide.md +288 -0
- package/skills/longform-video-generation/scripts/video_generator.py +579 -0
- package/skills/pdf/FORMS.md +305 -0
- package/skills/pdf/REFERENCE.md +612 -0
- package/skills/pdf/SKILL.md +293 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/pdf/scripts/create_validation_image.py +41 -0
- package/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/pdf/scripts/extract_form_structure.py +124 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +116 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +136 -0
- package/skills/pptx/SKILL.md +171 -0
- package/skills/pptx/editing.md +205 -0
- package/skills/pptx/pptxgenjs.md +377 -0
- package/skills/pptx/scripts/add_slide.py +225 -0
- package/skills/pptx/scripts/clean.py +309 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/scripts/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/scripts/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/scripts/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/scripts/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/scripts/ooxml/scripts/pack.py +159 -0
- package/skills/pptx/scripts/ooxml/scripts/unpack.py +29 -0
- package/skills/pptx/scripts/ooxml/scripts/validate.py +106 -0
- package/skills/pptx/scripts/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/pptx/scripts/ooxml/scripts/validation/base.py +1023 -0
- package/skills/pptx/scripts/ooxml/scripts/validation/docx.py +519 -0
- package/skills/pptx/scripts/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/pptx/scripts/ooxml/scripts/validation/redlining.py +284 -0
- package/skills/pptx/scripts/pack.py +168 -0
- package/skills/pptx/scripts/thumbnail.py +318 -0
- package/skills/pptx/scripts/unpack.py +86 -0
- package/skills/xlsx/SKILL.md +291 -0
- package/skills/xlsx/recalc.py +247 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Google Gemini API - Veo 3.1 Video Generation Guide
|
|
2
|
+
|
|
3
|
+
## Official Documentation (November 2025)
|
|
4
|
+
|
|
5
|
+
This guide is based on the official Google Gemini API documentation for Veo 3.1 video generation.
|
|
6
|
+
|
|
7
|
+
## Key Models
|
|
8
|
+
|
|
9
|
+
### Video Generation
|
|
10
|
+
- **veo-3.1-generate-preview** - Latest Veo model with audio, 8-second clips
|
|
11
|
+
- **veo-3.1-fast-generate-preview** - Faster generation, same quality
|
|
12
|
+
|
|
13
|
+
### Image Generation (for Reference Images)
|
|
14
|
+
- **gemini-2.5-flash-image** (Nano Banana) - Fast, 1K resolution
|
|
15
|
+
- **gemini-3-pro-image-preview** (Nano Banana Pro) - Professional, up to 4K resolution
|
|
16
|
+
|
|
17
|
+
## Image Generation for Reference Frames
|
|
18
|
+
|
|
19
|
+
### Nano Banana Pro (Recommended for Production)
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
from google import genai
|
|
23
|
+
from google.genai import types
|
|
24
|
+
|
|
25
|
+
client = genai.Client(api_key="your-api-key")
|
|
26
|
+
|
|
27
|
+
# Generate high-quality reference image
|
|
28
|
+
response = client.models.generate_content(
|
|
29
|
+
model="gemini-3-pro-image-preview",
|
|
30
|
+
contents="Cinematic still frame of tactical agent in dark alley, dramatic lighting",
|
|
31
|
+
config=types.GenerateContentConfig(
|
|
32
|
+
response_modalities=['IMAGE'],
|
|
33
|
+
image_config=types.ImageConfig(
|
|
34
|
+
aspect_ratio="16:9",
|
|
35
|
+
image_size="2K" # or "4K" for maximum quality
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# Save the image
|
|
41
|
+
for part in response.parts:
|
|
42
|
+
if image := part.as_image():
|
|
43
|
+
image.save("reference_frame.png")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Resolution Options
|
|
47
|
+
|
|
48
|
+
| Resolution | Dimensions (16:9) | Tokens | Cost | Use Case |
|
|
49
|
+
|------------|------------------|--------|------|----------|
|
|
50
|
+
| 1K | 1376×768 | ~800 | $0.024 | Testing |
|
|
51
|
+
| 2K | 2752×1536 | ~1200 | $0.036 | **Production** |
|
|
52
|
+
| 4K | 5504×3072 | ~2000 | $0.06 | Maximum quality |
|
|
53
|
+
|
|
54
|
+
## Smooth Video Transitions - SOLUTION TO JERKY CUTS
|
|
55
|
+
|
|
56
|
+
### Problem: Jerky Transitions Between Scenes
|
|
57
|
+
When concatenating videos with `-c copy`, there can be visible jumps or jerks at scene boundaries.
|
|
58
|
+
|
|
59
|
+
### Solution 1: Crossfade Transitions (Recommended)
|
|
60
|
+
|
|
61
|
+
Add a 0.5-second crossfade between scenes for smooth transitions:
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
def concatenate_with_crossfade(video_paths: List[str], output_path: str, fade_duration: float = 0.5):
|
|
65
|
+
"""Concatenate videos with crossfade transitions for smooth playback"""
|
|
66
|
+
|
|
67
|
+
if len(video_paths) == 1:
|
|
68
|
+
subprocess.run(['cp', video_paths[0], output_path])
|
|
69
|
+
return output_path
|
|
70
|
+
|
|
71
|
+
# Build filter complex for crossfades
|
|
72
|
+
filter_parts = []
|
|
73
|
+
|
|
74
|
+
for i, video_path in enumerate(video_paths):
|
|
75
|
+
if i == 0:
|
|
76
|
+
# First video: fade out at end
|
|
77
|
+
filter_parts.append(f"[{i}:v]fade=t=out:st=7.5:d={fade_duration}:alpha=1[v{i}]")
|
|
78
|
+
elif i == len(video_paths) - 1:
|
|
79
|
+
# Last video: fade in at start only
|
|
80
|
+
filter_parts.append(f"[{i}:v]fade=t=in:st=0:d={fade_duration}:alpha=1[v{i}]")
|
|
81
|
+
else:
|
|
82
|
+
# Middle videos: fade in and out
|
|
83
|
+
filter_parts.append(
|
|
84
|
+
f"[{i}:v]fade=t=in:st=0:d={fade_duration}:alpha=1,"
|
|
85
|
+
f"fade=t=out:st=7.5:d={fade_duration}:alpha=1[v{i}]"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
# Overlay videos with crossfades
|
|
89
|
+
overlay_chain = "[v0]"
|
|
90
|
+
for i in range(1, len(video_paths)):
|
|
91
|
+
overlay_chain += f"[v{i}]overlay"
|
|
92
|
+
if i < len(video_paths) - 1:
|
|
93
|
+
overlay_chain += f"[tmp{i}];[tmp{i}]"
|
|
94
|
+
overlay_chain += "[vout]"
|
|
95
|
+
|
|
96
|
+
filter_parts.append(overlay_chain)
|
|
97
|
+
|
|
98
|
+
# Audio concatenation
|
|
99
|
+
audio_inputs = "".join(f"[{i}:a]" for i in range(len(video_paths)))
|
|
100
|
+
filter_parts.append(f"{audio_inputs}concat=n={len(video_paths)}:v=0:a=1[aout]")
|
|
101
|
+
|
|
102
|
+
filter_complex = ";".join(filter_parts)
|
|
103
|
+
|
|
104
|
+
# Build ffmpeg command
|
|
105
|
+
cmd = ['ffmpeg']
|
|
106
|
+
for video_path in video_paths:
|
|
107
|
+
cmd.extend(['-i', video_path])
|
|
108
|
+
|
|
109
|
+
cmd.extend([
|
|
110
|
+
'-filter_complex', filter_complex,
|
|
111
|
+
'-map', '[vout]',
|
|
112
|
+
'-map', '[aout]',
|
|
113
|
+
'-c:v', 'libx264',
|
|
114
|
+
'-c:a', 'aac',
|
|
115
|
+
'-y',
|
|
116
|
+
output_path
|
|
117
|
+
])
|
|
118
|
+
|
|
119
|
+
subprocess.run(cmd, check=True, capture_output=True)
|
|
120
|
+
return output_path
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Solution 2: Re-encode with Matching Parameters
|
|
124
|
+
|
|
125
|
+
Re-encode all clips to ensure consistent frame timing:
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
def concatenate_smooth(video_paths: List[str], output_path: str):
|
|
129
|
+
"""Re-encode for smooth concatenation"""
|
|
130
|
+
|
|
131
|
+
# Create concat file
|
|
132
|
+
list_file = 'concat_list.txt'
|
|
133
|
+
with open(list_file, 'w') as f:
|
|
134
|
+
for video_path in video_paths:
|
|
135
|
+
f.write(f"file '{os.path.abspath(video_path)}'\n")
|
|
136
|
+
|
|
137
|
+
# Re-encode with matching parameters
|
|
138
|
+
subprocess.run([
|
|
139
|
+
'ffmpeg',
|
|
140
|
+
'-f', 'concat',
|
|
141
|
+
'-safe', '0',
|
|
142
|
+
'-i', list_file,
|
|
143
|
+
'-c:v', 'libx264', # Re-encode video
|
|
144
|
+
'-preset', 'fast',
|
|
145
|
+
'-crf', '18', # High quality
|
|
146
|
+
'-c:a', 'aac', # Re-encode audio
|
|
147
|
+
'-b:a', '192k',
|
|
148
|
+
'-y',
|
|
149
|
+
output_path
|
|
150
|
+
], check=True, capture_output=True)
|
|
151
|
+
|
|
152
|
+
os.remove(list_file)
|
|
153
|
+
return output_path
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Solution 3: Frame Blending at Boundaries
|
|
157
|
+
|
|
158
|
+
Use xfade filter for professional transitions:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
ffmpeg -i scene1.mp4 -i scene2.mp4 -i scene3.mp4 \
|
|
162
|
+
-filter_complex "\
|
|
163
|
+
[0:v][1:v]xfade=transition=fade:duration=0.5:offset=7.5[v01]; \
|
|
164
|
+
[v01][2:v]xfade=transition=fade:duration=0.5:offset=15.5[vout]; \
|
|
165
|
+
[0:a][1:a][2:a]concat=n=3:v=0:a=1[aout]" \
|
|
166
|
+
-map "[vout]" -map "[aout]" output.mp4
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Video Generation
|
|
170
|
+
|
|
171
|
+
### Text-to-Video
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
operation = client.models.generate_videos(
|
|
175
|
+
model="veo-3.1-generate-preview",
|
|
176
|
+
prompt="A cinematic shot of a tactical agent running through an alley",
|
|
177
|
+
config=types.GenerateVideosConfig(
|
|
178
|
+
duration_seconds=8, # 4, 6, or 8
|
|
179
|
+
aspect_ratio="16:9", # or "9:16"
|
|
180
|
+
resolution="720p" # or "1080p" (only for 8s duration)
|
|
181
|
+
)
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# Poll until complete
|
|
185
|
+
while not operation.done:
|
|
186
|
+
time.sleep(10)
|
|
187
|
+
operation = client.operations.get(operation)
|
|
188
|
+
|
|
189
|
+
# Download video
|
|
190
|
+
video = operation.response.generated_videos[0]
|
|
191
|
+
client.files.download(file=video.video)
|
|
192
|
+
video.video.save("output.mp4")
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Image-to-Video (CORRECT METHOD)
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
# Load reference image using types.Image.from_file()
|
|
199
|
+
reference_img = types.Image.from_file(location="reference_frame.png")
|
|
200
|
+
|
|
201
|
+
operation = client.models.generate_videos(
|
|
202
|
+
model="veo-3.1-generate-preview",
|
|
203
|
+
prompt="The agent continues running, dodging obstacles",
|
|
204
|
+
image=reference_img, # Use as starting frame
|
|
205
|
+
config=types.GenerateVideosConfig(
|
|
206
|
+
duration_seconds=8,
|
|
207
|
+
aspect_ratio="16:9",
|
|
208
|
+
resolution="720p"
|
|
209
|
+
)
|
|
210
|
+
)
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Best Practices for Smooth Videos
|
|
214
|
+
|
|
215
|
+
### 1. Use Frame Chaining
|
|
216
|
+
```python
|
|
217
|
+
# Extract last frame from previous scene
|
|
218
|
+
last_frame = extract_last_frame("scene_01.mp4")
|
|
219
|
+
|
|
220
|
+
# Use as starting frame for next scene
|
|
221
|
+
next_scene = generate_video(
|
|
222
|
+
prompt="Next action...",
|
|
223
|
+
image=types.Image.from_file(location=last_frame)
|
|
224
|
+
)
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 2. Maintain Consistent Styling
|
|
228
|
+
```python
|
|
229
|
+
character = "A tactical agent in black gear"
|
|
230
|
+
style = "Cinematic action movie, dramatic lighting"
|
|
231
|
+
|
|
232
|
+
# Use same character/style in ALL scenes
|
|
233
|
+
for scene_action in actions:
|
|
234
|
+
prompt = f"{character}, {style}. {scene_action}"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 3. Add Crossfade Transitions
|
|
238
|
+
Use the crossfade concatenation method above for professional results.
|
|
239
|
+
|
|
240
|
+
### 4. Optimize Prompts for Continuity
|
|
241
|
+
```python
|
|
242
|
+
# Good: Mentions continuity
|
|
243
|
+
"The agent continues running from the alley into the street..."
|
|
244
|
+
|
|
245
|
+
# Bad: No continuity reference
|
|
246
|
+
"The agent is in the street..."
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Cost Estimates (November 2025)
|
|
250
|
+
|
|
251
|
+
### Nano Banana Pro Images
|
|
252
|
+
- 1K: ~$0.024 per image
|
|
253
|
+
- 2K: ~$0.036 per image
|
|
254
|
+
- 4K: ~$0.06 per image
|
|
255
|
+
|
|
256
|
+
### Veo 3.1 Videos
|
|
257
|
+
- 8-second clip: ~$0.15 per video
|
|
258
|
+
- Audio included automatically
|
|
259
|
+
|
|
260
|
+
### Example: 24-Second Enhanced Video with Smooth Transitions
|
|
261
|
+
- 1x Nano Banana Pro (2K): $0.036
|
|
262
|
+
- 3x Veo 3.1 (8s each): $0.45
|
|
263
|
+
- **Total: ~$0.49**
|
|
264
|
+
|
|
265
|
+
## Common Issues & Solutions
|
|
266
|
+
|
|
267
|
+
### Issue: Jerky Transitions ✅ SOLVED
|
|
268
|
+
**Solution**: Use crossfade transitions (see above) or xfade filter
|
|
269
|
+
|
|
270
|
+
### Issue: Character Inconsistency
|
|
271
|
+
**Solution**: Use identical character description in all prompts
|
|
272
|
+
|
|
273
|
+
### Issue: Low Quality Output
|
|
274
|
+
**Solution**: Use Nano Banana Pro for reference images (2K or 4K)
|
|
275
|
+
|
|
276
|
+
### Issue: Audio Pops at Transitions
|
|
277
|
+
**Solution**: Use audio crossfade in filter_complex
|
|
278
|
+
|
|
279
|
+
## Reference Links
|
|
280
|
+
|
|
281
|
+
- Official Veo Documentation: https://ai.google.dev/gemini-api/docs/video
|
|
282
|
+
- Image Generation: https://ai.google.dev/gemini-api/docs/image-generation
|
|
283
|
+
- Pricing: https://ai.google.dev/gemini-api/docs/pricing
|
|
284
|
+
- FFmpeg Crossfade: https://ffmpeg.org/ffmpeg-filters.html#xfade
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
Last Updated: November 2025 - Added smooth transition solutions
|