Back to Marketplace
FREE
Scanned
Grow Business

AgentLux

**Leica master-photographer composition and color-grading skill.** Trigger this skill when the user does ANY of the following: - Uploads a photo and asks to make it look better, professional, cinematic, or artistic

New skill
No reviews yet
New skill
πŸ€– Claude Code
FREE

Free to install β€” no account needed

Copy the command below and paste into your agent.

Instant access β€’ No coding needed β€’ No account needed

What you get in 5 minutes

  • Full skill code ready to install
  • Works with 2 AI agents
  • Lifetime updates included
SecureBe the first

Description

# AgentLux **Leica master-photographer composition and color-grading skill.** ## When To Activate Trigger this skill when the user does ANY of the following: - Uploads a photo and asks to make it look better, professional, cinematic, or artistic - Says "fix the composition," "crop this better," "edit this photo," "reframe this" - Asks for a "Leica look," "film look," "εΎ·ε‘³" (German rendering), or "ε€§εΈˆζž„ε›Ύ" (master composition) - Provides multiple photos and wants the best one selected and improved - Uploads a photo with no specific editing instructions (default to this skill) **DO NOT ask the user for any preferences.** This skill is fully autonomous and opinionated. ## Prerequisites Check Before first use, verify the module is installed and an API key is available: ```javascript // Step 0: One-time installation check const agentlux = require('agentlux'); // If this fails: npm install agentlux // At least one of these env vars must be set: // ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY ``` ## Agent Workflow: Single Image ### Step 1 β€” Save the user's image to disk If the user uploaded an image that is in memory or a temp location, ensure it is written to an absolute path on disk. Note the path. ### Step 2 β€” Execute the skill Write and run a Node.js script. Use `output_path` to write the result directly to a file (recommended): ```javascript const agentlux = require('agentlux'); async function run() { const result = await agentlux.execute({ image_path: "ABSOLUTE_PATH_TO_INPUT", output_path: "/tmp/agentlux_output_" + Date.now() + ".jpg", language: "zh", // match the language you are conversing in (e.g. "en", "zh", "ja", "fr") delete_after: true }); console.log(JSON.stringify(result)); } run(); ``` ### Step 3 β€” Parse the result from stdout The output is a single JSON object. Check `result.status`: **On `"success"`:** - `result.output_path` β€” The absolute path to the processed JPEG. **Send this file to the user.** - `result.presentation` β€” A ready-to-use narrative explaining the creative decisions. **Show this text to the user.** The narrative is proportional: if the original composition was preserved, it says so honestly rather than fabricating a crop story. - `result.master_photographer` β€” e.g. "Fan Ho" - `result.master_style` β€” e.g. "Light & Shadow Geometry" - `result.composition_rule` β€” e.g. "Diagonal shaft of light creates a natural leading line..." - `result.composition_assessment` β€” `{quality, crop_applied, crop_rationale}` β€” how the system evaluated the original composition. `quality` is `"excellent"`, `"good"`, `"fair"`, or `"poor"`. When `quality` is `"excellent"`, the original framing is preserved. - `result.processing_applied` β€” `{cropped, grain_applied, grain_rationale, vignette_level, color_graded}` β€” what was actually done to the image. Use this to understand the processing decisions. - `result.color_profile` β€” e.g. "Leica M Monochrom" - `result.lens_profile` β€” e.g. "Noctilux-M 50mm f/0.95 ASPH" - `result.coordinates` β€” The crop box applied `{x, y, width, height}` **On `"error"`:** - `result.error_code` β€” Machine-readable error type - `result.message` β€” Human-readable description - `result.recovery_hint` β€” **What YOU (the agent) should do next.** Follow this hint. ### Step 4 β€” Present to the user 1. Send the output image file (`result.output_path`) 2. Display `result.presentation` as the explanation 3. Optionally add your own commentary about the artistic choices ## Agent Workflow: Burst Mode When the user provides multiple sequential images (e.g. burst photos, bracketed exposures): ```javascript const result = await agentlux.execute({ image_paths: [ "/absolute/path/to/frame_001.jpg", "/absolute/path/to/frame_002.jpg", "/absolute/path/to/frame_003.jpg" ], output_path: "/tmp/agentlux_burst_output_" + Date.now() + ".jpg", delete_after: true }); ``` The system will auto-select the strongest frame, then compose and color-grade it. `result.burst_selection` contains: - `selected_index` β€” Which frame was chosen (0-based) - `total_images` β€” How many frames were evaluated - `rationale` β€” Why this frame was selected ## Error Recovery Guide | error_code | What happened | Agent action | |---|---|---| | `CONFIG_ERROR` | No API key configured | Tell user to set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_API_KEY | | `INPUT_ERROR` | Bad parameters | Fix the input (check file path exists, is absolute, etc.) | | `INPUT_TOO_LARGE` | Image > 30MB | Resize the image before retrying | | `VLM_TIMEOUT` | API call timed out | **Retry the same request** | | `VLM_NETWORK_ERROR` | Network failure | **Retry the same request** | | `VLM_HTTP_TRANSIENT` | API overloaded (5xx/429) | **Wait 3 seconds, then retry** | | `VLM_HTTP_ERROR` | API client error (4xx) | Check API key and model configuration | | `VLM_PARSE_ERROR` | Malformed VLM output | **Retry the same request** | | `VLM_SCHEMA_ERROR` | Unexpected VLM format | **Retry the same request** | ## Environment Variables | Variable | Required | Description | |---|---|---| | `ANTHROPIC_API_KEY` | One of these | Anthropic Claude API key | | `OPENAI_API_KEY` | is required | OpenAI GPT API key | | `GOOGLE_API_KEY` | | Google Gemini API key | | `AGENTLUX_CUSTOM_BASE_URL` | Optional pair | Custom OpenAI-compatible base URL | | `AGENTLUX_CUSTOM_API_KEY` | | Custom API key | | `AGENTLUX_CURATOR_MODEL` | Optional | Override curator model (e.g. `claude-sonnet-4-20250514`) | | `AGENTLUX_MASTER_MODEL` | Optional | Override master model (e.g. `gpt-4o`) | | `AGENTLUX_LANGUAGE` | Optional | Default language for user-facing text (e.g. `zh`, `ja`, `fr`). Overridden by `language` parameter. | ## What This Skill Does (For Context) 1. **Curator Agent** analyzes the image and makes all creative decisions in a single VLM pass: - Selects the best-fit master photographer (Bresson, Alex Webb, Fan Ho, Koudelka, Salgado, Moriyama) - Selects Leica color profile (M10, M9, Monochrom, Tri-X, Portra) and lens character (Summilux, Noctilux, Summicron, Elmarit) - **Assesses composition quality** (`excellent` / `good` / `fair` / `poor`) β€” if the original composition is already strong, it is preserved - **Decides effects intensity** β€” whether grain and vignette genuinely serve this image, or would feel like filters slapped on 2. **Master Agent** embodies the selected photographer and computes the optimal crop. If the Curator assessed the composition as excellent, this step is skipped and the original framing is preserved. 3. **Image Pipeline** applies Leica color science. Vignette and film grain are applied **conditionally** based on the Curator's aesthetic judgment β€” not mechanically. 4. Result is returned with a `presentation` narrative ready to show the user. The narrative is honest: it describes what was actually done, not what could have been done.

Preview in:

Security Status

Scanned

Passed automated security checks

Related AI Tools

More Grow Business tools you might like