From eachlabs-skills
Stabilize shaky video footage using each::sense AI. Remove camera shake from handheld footage, action cameras, drones, and more with intelligent motion correction.
npx claudepluginhub joshuarweaver/cascade-content-creation-misc-1 --plugin eachlabs-skillsThis skill uses the workspace's default tool permissions.
Stabilize shaky video footage using each::sense. This skill applies intelligent motion correction to remove camera shake, smooth handheld footage, and create professional-looking stable video from various sources.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Stabilize shaky video footage using each::sense. This skill applies intelligent motion correction to remove camera shake, smooth handheld footage, and create professional-looking stable video from various sources.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this shaky video, remove the camera shake"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/shaky-video.mp4"]
}'
| Mode | Description | Best For |
|---|---|---|
| Subtle | Light stabilization, keeps natural movement | Documentary, vlog style |
| Standard | Balanced shake removal | General purpose |
| Aggressive | Maximum stabilization, locked shot | Professional, tripod-like |
Simple camera shake correction for mildly unstable footage.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this video and remove the camera shake. Apply standard stabilization."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/shaky-footage.mp4"]
}'
Smooth out natural hand movement from smartphone or camera footage.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "This is handheld smartphone footage. Stabilize it to look smoother while keeping it natural, not too robotic. Remove the jitter from hand movement."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/handheld-phone-video.mp4"]
}'
Stabilize high-motion GoPro and action camera footage from extreme sports.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this GoPro action camera footage. It has significant shake from mountain biking. Apply strong stabilization to smooth out the bumps while preserving the sense of motion."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/gopro-mtb-footage.mp4"]
}'
Remove bounce and vertical shake from footage shot while moving on foot.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Fix this walking footage. Remove the up and down bounce from each step while keeping the forward motion smooth. The camera was handheld while walking through a market."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/walking-market-footage.mp4"]
}'
Smooth aerial footage affected by wind, vibration, or gimbal issues.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this drone footage. There is micro-vibration and some wind shake affecting the shot. Make it smooth and cinematic for a real estate showcase video."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/drone-aerial-footage.mp4"]
}'
Stabilize dashcam, in-car, or vehicle-mounted camera footage.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this dashcam footage from a car driving on rough roads. Remove the vibration and bumps from the road while keeping the driving perspective stable."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/dashcam-rough-road.mp4"]
}'
Handle shaky footage shot in challenging low-light conditions.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this low light concert footage. It was shot handheld at night with significant shake. Be careful with the stabilization as low light footage can show more artifacts. Prioritize smooth motion over aggressive correction."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/concert-lowlight-shaky.mp4"]
}'
Maximum stabilization for tripod-like locked shot results.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Apply aggressive stabilization to lock this shot completely. I want it to look like it was shot on a tripod. Remove all camera movement and shake. It is okay to crop more of the frame if needed for maximum stability."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/interview-handheld.mp4"]
}'
Preserve natural camera movement while only reducing noticeable shake.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Apply subtle stabilization to this documentary footage. I want to keep the natural handheld feel and intentional camera movements, but remove only the unwanted micro-shakes and jitter. Do not make it look too smooth or artificial."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/documentary-handheld.mp4"]
}'
Balance stabilization strength with minimal frame cropping.
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this footage but optimize for minimal cropping. The framing is important and I cannot lose too much of the edges. Find the best balance between stabilization quality and preserving the original frame as much as possible."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max",
"video_urls": ["https://example.com/tight-framing-shaky.mp4"]
}'
Ask your users before processing:
"Do you want fast processing or maximum quality?"
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final deliverables, professional projects | Slower | Highest |
eco | Quick previews, draft reviews, high volume | Faster | Good |
Use session_id to iterate on stabilization settings:
# Initial stabilization
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this shaky video footage"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "stabilize-project-001",
"video_urls": ["https://example.com/shaky-video.mp4"]
}'
# Request adjustment
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "The stabilization is too aggressive, it looks artificial. Can you apply a more subtle stabilization that keeps some natural movement?"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "stabilize-project-001"
}'
# Further refinement
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Good, but now there is too much cropping. Can you reduce the crop while maintaining similar stabilization?"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "stabilize-project-001"
}'
Process multiple videos with consistent settings:
# Video 1
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this video with medium strength stabilization"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco",
"video_urls": ["https://example.com/clip1.mp4"]
}'
# Video 2
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this video with medium strength stabilization"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco",
"video_urls": ["https://example.com/clip2.mp4"]
}'
# Video 3
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Stabilize this video with medium strength stabilization"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco",
"video_urls": ["https://example.com/clip3.mp4"]
}'
| Scenario | Recommended Approach |
|---|---|
| Interview/talking head | Aggressive/lock shot |
| Documentary/vlog | Subtle, natural feel |
| Sports/action | Medium, preserve motion |
| Drone/aerial | Medium to aggressive |
| Walking tour | Medium, reduce bounce |
| Low light | Subtle, avoid artifacts |
When requesting stabilization, include these details:
"Stabilize this [source type] footage.
The shake is caused by [cause].
I want [desired result] stabilization.
[Cropping preference].
This is for [use case]."
| Error | Cause | Solution |
|---|---|---|
Failed to create prediction: HTTP 422 | Insufficient balance | Top up at eachlabs.ai |
| Video format not supported | Incompatible codec | Convert to MP4/H.264 |
| Timeout | Long video processing | Set client timeout to minimum 10 minutes |
| Excessive cropping | Too much shake | Use subtle mode or accept more crop |
each-sense - Core API documentationvideo-edit - General video editing capabilitiesvideo-generation - AI video generation