skills/gemini-video/SKILL.md
Invoke Google Gemini for video understanding and analysis using the Python google-genai SDK. Supports gemini-3-pro-preview and gemini-2.5-flash for video analysis, transcription, and content extraction.
npx skillsauth add rdfitted/claude-code-setup gemini-videoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Invoke Google Gemini models for video understanding, analysis, transcription, and content extraction using the Python google-genai SDK.
| Model ID | Description | Best For |
|----------|-------------|----------|
| gemini-3-pro-preview | Best multimodal understanding | Complex video analysis, detailed descriptions |
| gemini-2.5-pro | Advanced reasoning | Deep video analysis with reasoning |
| gemini-2.5-flash | Fast processing | Quick video summaries, high throughput |
API Key: Set via $GEMINI_API_KEY environment variable
For local video files, use the File API to upload first:
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
# Upload video file
video_file = client.files.upload(file='VIDEO_PATH')
print(f'Uploaded file: {video_file.name}')
# Wait for processing
while video_file.state.name == 'PROCESSING':
print('Processing video...')
time.sleep(5)
video_file = client.files.get(name=video_file.name)
if video_file.state.name == 'FAILED':
raise ValueError('Video processing failed')
# Analyze video
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='Describe what happens in this video'),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
from google.genai import types
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
# For publicly accessible video URLs
video_url = 'VIDEO_URL_HERE'
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='Analyze this video and provide a detailed summary'),
types.Part(file_data=types.FileData(file_uri=video_url, mime_type='video/mp4'))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
# Upload video
video_file = client.files.upload(file='VIDEO_PATH')
while video_file.state.name == 'PROCESSING':
time.sleep(5)
video_file = client.files.get(name=video_file.name)
# Transcribe
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='Transcribe all spoken words in this video. Include timestamps if possible.'),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
When this skill is invoked:
Determine the task type:
Prepare the video:
Select the appropriate model:
gemini-3-pro-previewgemini-2.5-flashExecute and return results
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
video_file = client.files.upload(file='meeting_recording.mp4')
while video_file.state.name == 'PROCESSING':
time.sleep(5)
video_file = client.files.get(name=video_file.name)
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='''Summarize this meeting recording:
1. List all participants mentioned
2. Key discussion points
3. Action items and decisions made
4. Any deadlines mentioned'''),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
video_file = client.files.upload(file='tutorial.mp4')
while video_file.state.name == 'PROCESSING':
time.sleep(5)
video_file = client.files.get(name=video_file.name)
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='''Analyze this tutorial video and create:
1. A step-by-step guide based on the content
2. Key concepts explained
3. Any tips or best practices mentioned
4. Prerequisites needed to follow along'''),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
video_file = client.files.upload(file='coding_session.mp4')
while video_file.state.name == 'PROCESSING':
time.sleep(5)
video_file = client.files.get(name=video_file.name)
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='''Extract all code shown in this video:
1. Identify the programming language
2. Capture the complete code snippets
3. Note any explanations given for the code
4. List any libraries or dependencies mentioned'''),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
video_file = client.files.upload(file='presentation.mp4')
while video_file.state.name == 'PROCESSING':
time.sleep(5)
video_file = client.files.get(name=video_file.name)
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='''Create a timestamped outline of this video:
Format: [MM:SS] - Topic/Event
Include major topic changes, key points, and notable moments.'''),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
from google.genai import types
import time
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
video_file = client.files.upload(file='lecture.mp4')
while video_file.state.name == 'PROCESSING':
time.sleep(5)
video_file = client.files.get(name=video_file.name)
response = client.models.generate_content(
model='gemini-3-pro-preview',
contents=[
types.Content(parts=[
types.Part(text='YOUR_QUESTION_ABOUT_VIDEO_HERE'),
types.Part(file_data=types.FileData(file_uri=video_file.uri, mime_type=video_file.mime_type))
])
]
)
print(response.text)
"
python -c "
import os
from google import genai
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
for f in client.files.list():
print(f'{f.name}: {f.state.name} ({f.mime_type})')
"
python -c "
import os
from google import genai
client = genai.Client(api_key=os.environ['GEMINI_API_KEY'])
client.files.delete(name='files/FILE_ID_HERE')
print('File deleted')
"
video/mp4)video/quicktime)video/x-msvideo)video/x-flv)video/x-matroska)video/webm)video/x-ms-wmv)video/3gpp)Common errors and solutions:
development
Restore from the Kopia backup repo in one of two opinionated modes. **wikis** (frequent, default) syncs per-project `.ai-docs/` directories from backup to local project trees — used to move compound-knowledge wikis between machines via the backup drive as sneakernet. **full** (rare) restores all sources to original paths for greenfield machine rebuild. Use when the user says "restore wikis", "sync wikis from backup", "pull the wikis", "I plugged in the backup drive on this machine", "rebuild this machine", "greenfield restore", or "restore everything". For ad-hoc single-file restores, use `backup-ops restore` instead.
documentation
# /bp-iterate Iterate the Fitted Business Plan(s). Manages the **internal canonical** and the **external partner/investor variant**, snapshot-on-version-bump lineage, redaction enforcement between variants, and cross-document coupling. ## When this runs - User says `/bp-iterate`, "iterate the BP," "bump the BP," "update the business plan," "version up the BP," "create / update / refresh the external variant" - A material trigger fires per the BP's own Iteration Log (first 2 new closes / fundi
tools
Run Kopia-based backups of key Windows files and config to an external drive. Use when the user says "back up", "run a backup", "snapshot", "the backup drive is plugged in", or wants to set up / configure backups for the first time. Handles initial repo setup, drive detection by volume label, source enumeration, and snapshot creation with structured exclusions.
testing
Secondary backup operations against the Kopia repo — verify integrity, run maintenance/prune, mirror to a second destination, restore files/folders, or run a quick top-up snapshot of hot directories. Use when the user says "verify backups", "check backup integrity", "prune old snapshots", "restore from backup", "mirror backups to cloud", "quick backup", "top up the backup", or asks about backup health. For the primary backup run, use the `backup` skill instead.