Skip to main content
A style template is a video you upload to Clipzy whose visual and audio characteristics become the blueprint for processing your footage. When you pass a template_video_id in a job, Clipzy extracts a Style DNA from the template and applies it to your video.

What Clipzy extracts from a template

AttributeDescription
ColorColor palette, grading curves, saturation, and contrast.
PacingEdit rhythm — how quickly cuts happen throughout the video.
CutsCut style (hard cuts vs. match cuts) and timing patterns.
AudioBeat alignment, audio energy envelope, and silence patterns.
TransitionsTypes of transitions used and where they appear relative to beats.
The extracted data is stored in the style_json (Style DNA) object returned in the job result.

Tips for good template videos

The quality of the Style DNA depends directly on the quality of your template. Follow these guidelines for best results.
  • Use a video with a consistent, intentional style. Documentary footage, brand reels, or professionally edited videos work well. Raw, unedited footage produces poor style extraction.
  • Include representative clips. The template should cover the range of edits, cuts, and transitions you want applied — a single scene may not capture enough variation.
  • Match the intended mood. Clipzy maps energy and pacing from the template, so a high-energy action reel will produce very different results than a slow, cinematic template.
  • Minimum recommended length: 30 seconds. Shorter templates may not contain enough edit events to model pacing accurately.
  • Avoid mixed styles. If the template switches between very different editing styles, the extracted Style DNA may average them in ways you don’t expect.

End-to-end example

The steps below walk through a complete workflow: upload a template, upload your footage, create a job with the template, and retrieve the result.
1

Upload your template video

Upload the video whose style you want to use. This produces a template_video_id.
curl -X POST http://localhost:8000/api/v1/videos/upload \
  -F "file=@/path/to/template.mp4"
2

Upload your footage

Upload the video you want to process. This produces a separate video_id.
curl -X POST http://localhost:8000/api/v1/videos/upload \
  -F "file=@/path/to/footage.mp4"
3

Create a job with the template

Pass both video_id (your footage) and template_video_id when creating the job.
curl -X POST http://localhost:8000/api/v1/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "video_id": "vid_footage_id",
    "template_video_id": "vid_template_id",
    "config": {"quality": "high"},
    "webhook_url": "https://yourapp.com/webhooks/clipzy"
  }'
4

Wait for the job to complete

Poll the job or wait for your webhook. See Track progress for a polling loop example.During processing, Clipzy runs through: video_analysisaudio_analysismotion_analysisstyle_extractionstyle_applicationrenderingStyle DNA is built during style_extraction and applied during style_application.
5

Retrieve the result and inspect the Style DNA

Once status is "completed", fetch the result.
curl http://localhost:8000/api/v1/jobs/job_xyz789abc123/result
The response includes:
{
  "success": true,
  "message": "Job result retrieved",
  "data": {
    "job_id": "job_xyz789abc123",
    "status": "completed",
    "progress_percent": 100,
    "output_video_url": "file:///storage/job_xyz789abc123/output.mp4",
    "processing_time_seconds": 900.0,
    "style_json": {
      "version": "1.0",
      "color_grade": {
        "temperature": 10,
        "tint": 5,
        "saturation": 20,
        "contrast": 15,
        "highlights": 10,
        "shadows": -5
      },
      "aspect_ratio": "16:9",
      "frame_rate": 30,
      "audio_style": {
        "normalization_level": 0.85,
        "compression_ratio": 4.0,
        "bass_boost": 20,
        "enhance_speech": true
      },
      "cut_frequency": 3.5,
      "motion_intensity": 65,
      "zoom_usage": 30,
      "primary_transition": {
        "type": "fade",
        "duration_ms": 300,
        "easing": "ease-in-out"
      },
      "detected_beats": [
        { "timestamp_ms": 0, "confidence": 0.95, "frequency": "bass" }
      ],
      "tempo_bpm": 120.0,
      "music_genre": "pop",
      "created_at": "2024-04-05T10:30:00Z",
      "source_duration_seconds": 60.0,
      "extraction_confidence": 0.92
    }
  }
}
The style_json field contains the complete Style DNA extracted from your template video.

Reusing a template across jobs

A template video only needs to be uploaded once. Store the template_video_id and pass it to any number of jobs to apply the same style consistently.
Python
# Store once
BRAND_TEMPLATE_ID = "vid_template999"

# Reuse across multiple jobs
for footage_id in ["vid_clip1", "vid_clip2", "vid_clip3"]:
    resp = requests.post(
        "http://localhost:8000/api/v1/jobs",
        json={
            "video_id": footage_id,
            "template_video_id": BRAND_TEMPLATE_ID,
            "config": {"quality": "high"},
        },
    )
    resp.raise_for_status()
    print(f"Job created for {footage_id}: {resp.json()['data']['job_id']}")