skillmake
← marketplace
creatorstoolsha:ba3ec83b774776f2manual

kling-motion-web-p

Use when building luxury landing pages with Kling image-to-video AI, GPT Image stills, pinned 'stop scroll' scenes, and scroll-driven frame sequences. Requires FAL_KEY env var (fal.ai) — ask user before any call.

Tutorials · creator-attached
One-line install
curl --create-dirs -fsSL https://skillmake.xyz/i/kling-motion-web-p -o ~/.claude/skills/kling-motion-web-p/SKILL.md

The hash above pins this exact content. The file we serve at /api/marketplace/kling-motion-web-p-ba3ec83b/raw always matches sha:ba3ec83b774776f2.

7,080 chars · ~1,770 tokens
---
name: kling-motion-web-p
description: "Use when building luxury landing pages with Kling image-to-video AI, GPT Image stills, pinned 'stop scroll' scenes, and scroll-driven frame sequences. Requires FAL_KEY env var (fal.ai) — ask user before any call."
source: https://fal.ai/models/fal-ai/kling-video
generated: 2026-05-07T20:57:38.203Z
category: tool
audience: creators
---

## Tutorials

- https://skillmake.xyz/v/kling-motion-web-p.mp4

## When to use

- Before any Kling/fal call: confirm FAL_KEY is set; if missing, stop and ask the user to set it (https://fal.ai/dashboard/keys) — do not silently fall back to another model
- Luxury or agency-style landing pages where motion sells the product
- Pinned 'stop scroll' storytelling sections with scroll-scrubbed video or frame sequences
- 3D product or architecture hero scenes (rotating globes, space stations, exploded views)
- AI-generated hero assets — GPT Image stills + Kling image-to-video — integrated as hero or sequence

## Key concepts

### FAL_KEY (required)

Every Kling generation goes through fal.ai, which authenticates via the FAL_KEY env var. The @fal-ai/client picks it up from process.env.FAL_KEY automatically; otherwise call fal.config({ credentials: process.env.FAL_KEY }). Before any generation step, verify FAL_KEY is set — if missing, halt and ask the user to grab one at https://fal.ai/dashboard/keys and export it. Never hard-code the key, never check it into source, and never silently substitute a different provider.

### stop scroll

A pinned/sticky storytelling section with extra parent height (250–400vh). The visual stage stays sticky at top:0 while scroll progress drives the animation. Text beats fade or translate in sequence as the asset frame changes. Always ship a reduced-motion fallback that stacks a still frame and the text vertically.

### Kling image-to-video

Generates short cinematic motion — hero loops, rotating objects, exploded views — from a single still. Prefer model id fal-ai/kling-video/v3/standard/image-to-video. Use it only when a still needs believable motion, camera movement, or stable rotation; not for primary content.

### scroll-scrubbed sequence

Drive video.currentTime from scroll progress for prototypes, or extract optimized JPEG/WebP frames and map frame index to scroll for production. Pause the video — never autoplay or loop a scroll-driven hero. Preload nearby frames and size them consistently so scrolling never causes layout shift.

### asset masking

Inward gradient masks blend the asset into the page background. Use the lightest mask that preserves text readability — heavy dark radials make product media look blurry or muddy. Match asset background to page background; otherwise strengthen top/bottom/side masks until no dividing band is visible.

### GPT Image source still

Generate source frames locally in Codex with the configured OpenAI GPT Image model (gpt-image-2 if exposed, else gpt-image-1.5 for quality or gpt-image-1-mini for cost). Kling adds motion afterward — never use Kling as the source-image step.

### fal canvas normalization

fal/Kling rejects images below its minimum dimensions. Pad small or oddly-shaped stills onto a 1280x720 or 1024x1024 canvas before upload. When using start_image_url + end_image_url, keep both images at identical dimensions and aspect ratio.

## API reference

```
FAL_KEY precondition (run first)
```

Before invoking any Kling/fal endpoint, fail fast when FAL_KEY is missing and surface a copy-pasteable instruction. Ask the user instead of silently degrading or switching models.

```
if (!process.env.FAL_KEY) {
  throw new Error(
    'FAL_KEY is required for Kling generation.\n' +
    'Get one at https://fal.ai/dashboard/keys, then:\n' +
    '  export FAL_KEY=fal-...'
  );
}
import { fal } from '@fal-ai/client';
fal.config({ credentials: process.env.FAL_KEY });
const result = await fal.subscribe(
  'fal-ai/kling-video/v3/standard/image-to-video',
  { input: { prompt, image_url } }
);
```

```
<video autoplay muted loop playsinline>
```

Standard hero-loop tag for Kling-generated 5-second cinematic videos with stable center mass.

```
<video
  autoplay
  muted
  loop
  playsinline
  src="/hero.mp4"
  class="hero-video"
></video>
```

```
Pinned scroll-scrubbed hero (sticky child + 180–240svh parent)
```

Wrap a sticky child in a taller parent so scroll progress can advance video.currentTime. Pause the video and set currentTime from progress — never autoplay or loop a scroll-driven hero.

```
<div style="min-height: 200svh">
  <div class="sticky top-0 h-screen">
    <video id="hero" muted playsinline preload="auto" src="/hero.mp4"></video>
  </div>
</div>
<script>
  const v = document.getElementById('hero');
  v.pause();
  const update = () => {
    const t = window.scrollY / (document.body.scrollHeight - innerHeight);
    if (v.duration) v.currentTime = v.duration * Math.min(Math.max(t, 0), 1);
  };
  v.addEventListener('loadedmetadata', update);
  window.addEventListener('scroll', update, { passive: true });
</script>
```

```
fal-ai/kling-video/v3/standard/image-to-video
```

Default model id for API-based Kling 3.0 image-to-video generation. Pass start_image_url for static-to-motion; add end_image_url when the model supports start-to-end reveals.

```
@media (prefers-reduced-motion: reduce)
```

Reduced-motion fallback: collapse the pinned hero, hide the video, and reveal a still fallback frame so the page is usable without scroll-driven animation.

```
@media (prefers-reduced-motion: reduce) {
  .scroll-hero { min-height: auto; }
  .scroll-hero .sticky-stage { position: static; height: auto; }
  .scroll-hero video { display: none; }
  .scroll-hero .fallback-still { display: block; }
}
```

## Gotchas

- FAL_KEY env var is required for every Kling/fal call. If it isn't set, stop and ask the user to set it (https://fal.ai/dashboard/keys) before retrying — never silently fall back to a different model.
- Never hard-code FAL_KEY or commit it. Read from process.env.FAL_KEY only; treat it like any other API secret.
- Heavy dark radial overlays make product media look muddy — use the lightest mask that preserves readability, and remove overlays entirely when inspecting the video.
- fal/Kling rejects images below its minimum dimensions; pad small or oddly-shaped stills onto a 1280x720 or 1024x1024 canvas before upload.
- Scroll-driven heroes must not autoplay or loop — pause the video and set currentTime from scroll progress.
- When using start_image_url + end_image_url, both images must have identical dimensions and aspect ratio.
- Test through a local HTTP server, not file://, when the site uses video, local APIs, or non-default MIME types.
- If the user asks to remove text, remove the DOM elements and JS references — don't just opacity:0 them.
- Match asset background to page background; otherwise strengthen top/bottom/side masks until no dividing band is visible.

---
Generated by SkillMake from https://fal.ai/models/fal-ai/kling-video on 2026-05-07T20:57:38.203Z.
Verify against source before relying on details.

File: ~/.claude/skills/kling-motion-web-p/SKILL.md