This commit is contained in:
admin
2026-01-30 03:04:10 +00:00
parent bcc4d242c4
commit 2a3dedde11
1218 changed files with 214731 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
{
"source": "github.com/fal-ai-community/skills/tree/main/skills/claude.ai/fal-image-edit",
"type": "github-subdir",
"installed_at": "2026-01-30T02:27:17.884479548Z",
"repo_url": "https://github.com/fal-ai-community/skills.git",
"subdir": "skills/claude.ai/fal-image-edit",
"version": "69efe6e"
}

249
fal-image-edit/SKILL.md Normal file
View File

@@ -0,0 +1,249 @@
---
name: fal-image-edit
description: Edit images using AI on fal.ai. Style transfer, object removal, background changes, and more. Use when the user requests "Edit image", "Remove object", "Change background", "Apply style", or similar image editing tasks.
metadata:
author: fal-ai
version: "1.0.0"
---
# fal.ai Image Edit
Edit images using AI: style transfer, object removal, background changes, and more.
## How It Works
1. User provides image URL and editing instructions
2. Script selects appropriate model
3. Sends request to fal.ai API
4. Returns edited image URL
## Recommended Models
| Model | Best For |
|-------|----------|
| `fal-ai/nano-banana-pro` | **Best overall** - T2I and editing |
| `fal-ai/flux-kontext` | Background change, context-aware editing |
| `fal-ai/flux/dev/image-to-image` | Style transfer |
| `fal-ai/bria/fibo-edit` | Object removal |
| `fal-ai/flux/dev/inpainting` | Masked inpainting |
## Supported Operations
| Operation | Model | Description |
|-----------|-------|-------------|
| General Edit | `fal-ai/nano-banana-pro` | Best quality edits |
| Style Transfer | `fal-ai/flux/dev/image-to-image` | Apply style to image |
| Object Removal | `fal-ai/bria/fibo-edit` | Remove objects from image |
| Background Change | `fal-ai/flux-kontext` | Change/replace background |
| Inpainting | `fal-ai/flux/dev/inpainting` | Fill in masked areas |
## Usage
```bash
bash /mnt/skills/user/fal-image-edit/scripts/edit-image.sh [options]
```
**Arguments:**
- `--image-url` - URL of image to edit (required)
- `--prompt` - Description of desired edit (required)
- `--operation` - Edit operation: `style`, `remove`, `background`, `inpaint` (default: `style`)
- `--mask-url` - URL of mask image (required for inpainting/removal)
- `--strength` - Edit strength 0.0-1.0 (default: 0.75)
**Examples:**
```bash
# Style transfer
bash /mnt/skills/user/fal-image-edit/scripts/edit-image.sh \
--image-url "https://example.com/photo.jpg" \
--prompt "Convert to anime style" \
--operation style
# Remove object
bash /mnt/skills/user/fal-image-edit/scripts/edit-image.sh \
--image-url "https://example.com/photo.jpg" \
--prompt "Remove the person on the left" \
--operation remove
# Change background
bash /mnt/skills/user/fal-image-edit/scripts/edit-image.sh \
--image-url "https://example.com/portrait.jpg" \
--prompt "Place in a tropical beach setting" \
--operation background
# Inpainting with mask
bash /mnt/skills/user/fal-image-edit/scripts/edit-image.sh \
--image-url "https://example.com/photo.jpg" \
--mask-url "https://example.com/mask.png" \
--prompt "Fill with flowers" \
--operation inpaint
```
## MCP Tool Alternative
### General Edit (Recommended)
```javascript
mcp__fal-ai__generate({
modelId: "fal-ai/nano-banana-pro",
input: {
image_url: "https://example.com/photo.jpg",
prompt: "Make the sky more dramatic with sunset colors"
}
})
```
### Style Transfer
```javascript
mcp__fal-ai__generate({
modelId: "fal-ai/flux/dev/image-to-image",
input: {
image_url: "https://example.com/photo.jpg",
prompt: "Convert to anime style",
strength: 0.75
}
})
```
### Object Removal
```javascript
mcp__fal-ai__generate({
modelId: "bria/fibo-edit",
input: {
image_url: "https://example.com/photo.jpg",
prompt: "Remove the person on the left"
}
})
```
### Background Change (Kontext)
```javascript
mcp__fal-ai__generate({
modelId: "fal-ai/flux-kontext",
input: {
image_url: "https://example.com/portrait.jpg",
prompt: "Place the subject in a tropical beach setting"
}
})
```
### Inpainting
```javascript
mcp__fal-ai__generate({
modelId: "fal-ai/flux/dev/inpainting",
input: {
image_url: "https://example.com/photo.jpg",
mask_url: "https://example.com/mask.png",
prompt: "Fill with flowers"
}
})
```
## Output
```
Editing image...
Model: fal-ai/flux/dev/image-to-image
Operation: style transfer
Edit complete!
Image URL: https://v3.fal.media/files/abc123/edited.png
Dimensions: 1024x1024
```
JSON output:
```json
{
"images": [
{
"url": "https://v3.fal.media/files/abc123/edited.png",
"width": 1024,
"height": 1024
}
]
}
```
## Present Results to User
```
Here's your edited image:
![Edited Image](https://v3.fal.media/files/...)
• 1024×1024 | Operation: Style Transfer
```
## Model Selection Guide
### General Editing (Recommended)
**Nano Banana Pro** (`fal-ai/nano-banana-pro`)
- **Best overall** for image editing and T2I
- High quality, versatile
- Good for most editing tasks
### Style Transfer
**FLUX Image-to-Image** (`fal-ai/flux/dev/image-to-image`)
- Best for: Artistic style changes
- Strength: 0.3-0.5 for subtle, 0.7-0.9 for dramatic
### Object Removal
**Bria Fibo Edit** (`fal-ai/bria/fibo-edit`)
- Best for: Removing objects, people, text
- Works without masks (AI detects objects from prompt)
### Background Change
**FLUX Kontext** (`fal-ai/flux-kontext`)
- Best for: Placing subjects in new environments
- Preserves subject identity well
### Inpainting
**FLUX Inpainting** (`fal-ai/flux/dev/inpainting`)
- Best for: Precise edits with mask control
- Requires binary mask (white = edit area)
## Mask Tips
For inpainting and some removal tasks:
- White pixels = areas to edit
- Black pixels = areas to preserve
- Use PNG format with transparency or solid colors
- Feathered edges create smoother transitions
## Troubleshooting
### Edit Too Subtle
```
The edit is barely visible.
Increase the strength parameter:
--strength 0.85
```
### Edit Too Dramatic
```
The edit changed too much of the image.
Decrease the strength parameter:
--strength 0.3
```
### Object Not Removed
```
The object wasn't fully removed.
Tips:
1. Be more specific in the prompt
2. Try using an explicit mask
3. Use the inpainting model for precise control
```
### Background Artifacts
```
The new background has artifacts around the subject.
Tips:
1. Use a cleaner source image
2. Try FLUX Kontext which handles edges better
3. Adjust the strength for smoother blending
```

View File

@@ -0,0 +1,199 @@
#!/bin/bash
# fal.ai Image Edit Script
# Usage: ./edit-image.sh --image-url URL --prompt "..." [--operation OP] [--mask-url URL] [--strength N]
# Returns: JSON with edited image URL
set -e
FAL_API_ENDPOINT="https://fal.run"
# Default values
IMAGE_URL=""
PROMPT=""
OPERATION="style"
MASK_URL=""
STRENGTH=0.75
# Check for --add-fal-key first
for arg in "$@"; do
if [ "$arg" = "--add-fal-key" ]; then
shift
KEY_VALUE=""
if [[ -n "$1" && ! "$1" =~ ^-- ]]; then
KEY_VALUE="$1"
fi
if [ -z "$KEY_VALUE" ]; then
echo "Enter your fal.ai API key:" >&2
read -r KEY_VALUE
fi
if [ -n "$KEY_VALUE" ]; then
grep -v "^FAL_KEY=" .env > .env.tmp 2>/dev/null || true
mv .env.tmp .env 2>/dev/null || true
echo "FAL_KEY=$KEY_VALUE" >> .env
echo "FAL_KEY saved to .env" >&2
fi
exit 0
fi
done
# Load .env if exists
if [ -f ".env" ]; then
source .env 2>/dev/null || true
fi
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--image-url)
IMAGE_URL="$2"
shift 2
;;
--prompt)
PROMPT="$2"
shift 2
;;
--operation)
OPERATION="$2"
shift 2
;;
--mask-url)
MASK_URL="$2"
shift 2
;;
--strength)
STRENGTH="$2"
shift 2
;;
--help|-h)
echo "fal.ai Image Edit Script" >&2
echo "" >&2
echo "Usage:" >&2
echo " ./edit-image.sh --image-url URL --prompt \"...\" [options]" >&2
echo "" >&2
echo "Options:" >&2
echo " --image-url Image URL to edit (required)" >&2
echo " --prompt Edit description (required)" >&2
echo " --operation Operation: style, remove, background, inpaint" >&2
echo " --mask-url Mask URL (required for inpaint)" >&2
echo " --strength Edit strength 0-1 (default: 0.75)" >&2
echo " --add-fal-key Setup FAL_KEY in .env" >&2
exit 0
;;
*)
shift
;;
esac
done
# Validate required inputs
if [ -z "$FAL_KEY" ]; then
echo "Error: FAL_KEY not set" >&2
echo "" >&2
echo "Run: ./edit-image.sh --add-fal-key" >&2
echo "Or: export FAL_KEY=your_key_here" >&2
exit 1
fi
if [ -z "$IMAGE_URL" ]; then
echo "Error: --image-url is required" >&2
exit 1
fi
if [ -z "$PROMPT" ]; then
echo "Error: --prompt is required" >&2
exit 1
fi
# Select model based on operation
case $OPERATION in
style)
MODEL="fal-ai/flux/dev/image-to-image"
;;
remove)
MODEL="bria/fibo-edit"
;;
background)
MODEL="fal-ai/flux-kontext"
;;
inpaint)
MODEL="fal-ai/flux/dev/inpainting"
if [ -z "$MASK_URL" ]; then
echo "Error: --mask-url is required for inpainting" >&2
exit 1
fi
;;
*)
echo "Unknown operation: $OPERATION" >&2
echo "Supported: style, remove, background, inpaint" >&2
exit 1
;;
esac
# Create temp directory
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "$TEMP_DIR"' EXIT
echo "Editing image..." >&2
echo "Model: $MODEL" >&2
echo "Operation: $OPERATION" >&2
echo "" >&2
# Build payload based on operation
case $OPERATION in
style)
PAYLOAD=$(cat <<EOF
{
"image_url": "$IMAGE_URL",
"prompt": "$PROMPT",
"strength": $STRENGTH
}
EOF
)
;;
remove|background)
PAYLOAD=$(cat <<EOF
{
"image_url": "$IMAGE_URL",
"prompt": "$PROMPT"
}
EOF
)
;;
inpaint)
PAYLOAD=$(cat <<EOF
{
"image_url": "$IMAGE_URL",
"mask_url": "$MASK_URL",
"prompt": "$PROMPT"
}
EOF
)
;;
esac
# Make API request
RESPONSE=$(curl -s -X POST "$FAL_API_ENDPOINT/$MODEL" \
-H "Authorization: Key $FAL_KEY" \
-H "Content-Type: application/json" \
-d "$PAYLOAD")
# Check for errors
if echo "$RESPONSE" | grep -q '"error"'; then
ERROR_MSG=$(echo "$RESPONSE" | grep -o '"message":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -z "$ERROR_MSG" ]; then
ERROR_MSG=$(echo "$RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
fi
echo "Error: $ERROR_MSG" >&2
exit 1
fi
echo "Edit complete!" >&2
echo "" >&2
# Extract image URL
OUTPUT_URL=$(echo "$RESPONSE" | grep -o '"url":"[^"]*"' | head -1 | cut -d'"' -f4)
echo "Image URL: $OUTPUT_URL" >&2
# Output JSON for programmatic use
echo "$RESPONSE"