agentsclimarketplace

Fal ai skill

Skill lunaticfluker/fal-ai-skill

Generate images, videos, and audio using the fal.ai API. Use when the user works with fal.ai, fal_client, @fal-ai/client, Flux Pro, Kling video, or mentions AI image/video generation with fal.From its SKILL.md

Install
npx -y skills add lunaticfluker/fal-ai-skill

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

7.3 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it

fal.ai — Image, Video & Audio Generation

Generate images, videos, and audio using fal.ai's model library (600+ models). Covers Python and JavaScript SDKs, model selection, prompt engineering, and production patterns.

Setup

Python:

pip install fal-client
import fal_client
# Requires FAL_KEY environment variable

JavaScript/TypeScript:

npm install @fal-ai/client
import * as fal from "@fal-ai/client";
// Requires FAL_KEY environment variable

Models — Quick Reference

Image Generation

ModelIDSpeedBest For
Flux Pro v1.1fal-ai/flux-pro/v1.1~3-6sProduction images
Flux Pro Ultrafal-ai/flux-pro/v1.1-ultra~8-12sMaximum detail
Flux Schnellfal-ai/flux/schnell~1-4sFast prototyping
Flux Devfal-ai/flux/dev~3-5sBalanced quality/speed

Video Generation

ModelIDBest For
Kling 1.6 T2Vfal-ai/kling-video/v1.6/standard/text-to-videoText to video
Kling 1.6 I2Vfal-ai/kling-video/v1.6/standard/image-to-videoAnimate a still image
Kling 2.6 Profal-ai/kling-video/v2.6/pro/image-to-videoProfessional quality

Audio

ModelIDBest For
ElevenLabs TTSfal-ai/elevenlabs/tts/multilingual-v2Text to speech

Image Generation

Python

result = fal_client.subscribe(
    "fal-ai/flux-pro/v1.1",
    arguments={
        "prompt": "dark figure dissolving into void, motion blur, crushed blacks, cinematic B&W",
        "image_size": "square_hd",
        "num_images": 1,
        "num_inference_steps": 28,
        "guidance_scale": 3.5,
        "enable_safety_checker": False,
    },
)
image_url = result["images"][0]["url"]

JavaScript

const result = await fal.run("fal-ai/flux-pro/v1.1", {
  input: {
    prompt: "dark figure dissolving into void, motion blur, crushed blacks, cinematic B&W",
    image_size: "square_hd",
    num_images: 1,
    num_inference_steps: 28,
    guidance_scale: 3.5,
    enable_safety_checker: false,
  },
});
const imageUrl = result.images[0].url;

Image Size Options

  • Presets: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9
  • Custom: { "width": 1080, "height": 1350 } (must be multiples of 8)

Parameters

ParamDefaultRangeEffect
num_inference_steps2810-50Quality (higher = slower + better)
guidance_scale3.51-10Prompt adherence (lower = creative)
num_images11-4Batch size
seedrandomany intReproducibility

Video Generation

Image-to-Video (recommended — better quality)

result = fal_client.subscribe(
    "fal-ai/kling-video/v1.6/standard/image-to-video",
    arguments={
        "prompt": "slow camera drift, subtle motion blur, atmospheric",
        "image_url": "https://v3.fal.media/files/...",
        "duration": "5",
        "aspect_ratio": "9:16",
    },
)
video_url = result["video"]["url"]

Text-to-Video

result = fal_client.subscribe(
    "fal-ai/kling-video/v1.6/standard/text-to-video",
    arguments={
        "prompt": "dark figure walking through fog, cinematic slow motion",
        "duration": "5",
        "aspect_ratio": "16:9",
    },
)

Duration & Aspect

  • Duration: "5" or "10" seconds (5s produces more focused results)
  • Aspect: "16:9", "9:16", "1:1"

File Upload

Upload local files to fal CDN for use in image-to-video or image-to-image:

cdn_url = fal_client.upload_file("path/to/image.png")
# Returns: https://v3.fal.media/files/{prefix}/{id}.{ext}
const cdnUrl = await fal.storage.upload(file);

Async / Queue Pattern

For long-running tasks (video generation), use the queue:

Python

# Submit to queue
handle = fal_client.submit(
    "fal-ai/kling-video/v1.6/standard/image-to-video",
    arguments={...},
)

# Check status
status = fal_client.status("fal-ai/kling-video/v1.6/standard/image-to-video", handle.request_id)

# Get result when done
result = fal_client.result("fal-ai/kling-video/v1.6/standard/image-to-video", handle.request_id)

JavaScript

const handle = await fal.queue.submit("fal-ai/kling-video/v1.6/standard/image-to-video", {
  input: {...},
});

// Stream status updates
for await (const status of fal.queue.streamStatus(handle.request_id)) {
  console.log(status);
}

const result = await fal.queue.result(handle.request_id);

Webhook Pattern

fal_client.subscribe(
    "fal-ai/flux-pro/v1.1",
    arguments={...},
    webhook_url="https://your-server.com/webhook/fal",
)
# Server receives POST with:
# Header: X-Fal-Webhook-Signature (verify for security)
# Body: { "request_id": "...", "status": "OK", "result": {...} }

Timeout & Error Handling

Python — Timeout Wrapper

import concurrent.futures

def fal_with_timeout(model, arguments, timeout=300):
    with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
        future = executor.submit(fal_client.subscribe, model, arguments=arguments)
        try:
            return future.result(timeout=timeout)
        except concurrent.futures.TimeoutError:
            raise TimeoutError(f"fal.ai {model} timed out after {timeout}s")

Error Types

try:
    result = fal_client.subscribe(model, arguments=args)
except fal_client.ValidationError:
    # Content policy violation or bad params — don't retry
    pass
except fal_client.RateLimitError:
    # Too many requests — exponential backoff
    import time, random
    time.sleep((2 ** attempt) + random.uniform(0, 1))
except fal_client.FalClientTimeoutError:
    # Timeout — may be transient, retry
    pass

The platform auto-retries up to 10 times on 503/504/connection errors.

Rate Limits

  • New accounts: 2 concurrent requests
  • Scales up to 40 as you purchase credits
  • Requests exceeding the limit are queued automatically

Prompt Engineering

Structure

[Subject] + [Environment/Mood] + [Style] + [Technical/Camera]

Example

dark figure dissolving into void, motion blur and ghosting,
crushed blacks and high contrast | moody electronic aesthetic |
wide frame from waist up | 28mm lens, cinematic, B&W editorial

Tips

  • Keep under 100 words — every word should serve a purpose
  • Be specific about lighting: "golden hour", "dramatic side lighting", "soft diffused"
  • Style modifiers: "cinematic", "photorealistic", "editorial", "minimalist"
  • Camera language: "28mm lens", "macro", "aerial view", "shallow depth of field"
  • Flux models don't support negative_prompt — describe what you want, not what to avoid

Response Structure

Image

{
  "images": [{ "url": "https://v3.fal.media/...", "width": 1024, "height": 1024 }],
  "seed": 12345
}

Video

{
  "video": { "url": "https://v3.fal.media/...", "content_type": "video/mp4" }
}

CDN URLs persist and are reusable across requests.

What ships with it: 1 file

1.1 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,422. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.