- name
- each-sense
- description
- each::sense is the intelligent layer for generative media. A unified AI agent that generates marketing assets, ads, product images, videos, and creative content. It knows all AI models and automatically selects the best one for your task. Use for any creative content generation request.
- metadata
- {"author":"eachlabs","version":"2.0"}
# each::sense - Intelligent Layer for Generative Media
each::sense is an OpenAI-compatible AI agent that can generate images, videos, audio, 3D models, build workflows, search the web, and hold conversational interactions. It orchestrates 500+ AI models through a single unified interface.
each::sense itself is completely free. You only get charged for the models it uses.
**Use each::sense when the user needs:**
- Marketing assets and ad creatives
- Product images and e-commerce visuals
- Video content (ads, UGC, social media)
- Audio and music generation
- Any creative content generation
- Multi-step workflows combining multiple AI models
## Authentication
```
Header: X-API-Key: <your-api-key>
```
Also supports OpenAI SDK compatible authentication:
```
Header: Authorization: Bearer <your-api-key>
```
Get your API key at [eachlabs.ai](https://www.eachlabs.ai/api-keys).
Set the `EACHLABS_API_KEY` environment variable.
## Base URL
```
https://eachsense-agent.core.eachlabs.run
```
## Endpoints
| Method | Path | Purpose |
|--------|------|---------|
| POST | `/v1/chat/completions` | Primary chat endpoint |
| POST | `/workflow` | Workflow builder |
| GET | `/v1/models` | List available models |
| GET | `/memory?session_id={id}` | Retrieve session memory |
| DELETE | `/memory?session_id={id}` | Clear session memory |
| GET | `/sessions` | List all sessions |
## Quick Start
### Using curl
```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Generate a portrait of a woman with golden hour lighting"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
```
### Using Python (OpenAI SDK)
```python
from openai import OpenAI
client = OpenAI(
api_key="YOUR_EACHLABS_API_KEY",
base_url="https://eachsense-agent.core.eachlabs.run/v1"
)
# Non-streaming
response = client.chat.completions.create(
model="eachsense/beta",
messages=[{"role": "user", "content": "Generate a sunset landscape"}],
stream=False
)
print(response.generations) # List of media URLs
# Streaming
stream = client.chat.completions.create(
model="eachsense/beta",
messages=[{"role": "user", "content": "Generate a sunset landscape"}],
stream=True
)
for chunk in stream:
eachlabs_data = chunk.model_extra.get("eachlabs")
if eachlabs_data:
event_type = eachlabs_data.get("type")
if event_type == "generation_response":
print(eachlabs_data["generations"])
```
### Using JavaScript (OpenAI SDK)
```javascript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_EACHLABS_API_KEY",
baseURL: "https://eachsense-agent.core.eachlabs.run/v1"
});
// Non-streaming
const response = await client.chat.completions.create({
model: "eachsense/beta",
messages: [{ role: "user", content: "Generate a sunset landscape" }],
stream: false
});
console.log(response.generations);
// Streaming
const stream = await client.chat.completions.create({
model: "eachsense/beta",
messages: [{ role: "user", content: "Generate a sunset landscape" }],
stream: true
});
for await (const chunk of stream) {
const eachlabs = chunk.eachlabs;
if (eachlabs?.type === "generation_response") {
console.log(eachlabs.generations);
}
}
```
## Request Schema
```json
{
"messages": [{"role": "user", "content": "string (required) - User's request"}],
"model": "string (optional, default: 'eachsense/beta')",
"stream": "boolean (optional, default: true) - Enable SSE streaming",
"session_id": "string (optional) - Session ID for conversation history and multi-turn chats",
"mode": "string (optional, default: 'max') - Quality mode: 'max' or 'eco'",
"behavior": "string (optional, default: 'agent') - Behavior: 'agent', 'plan', or 'ask'",
"image_urls": "array[string] (optional) - Image URLs for editing/processing (max 4)",
"workflow_id": "string (optional) - Execute specific workflow",
"version_id": "string (optional) - Workflow version",
"web_search": "boolean (optional, default: true) - Enable/disable web search",
"enable_safety_checker": "boolean (optional, default: true) - Set to false to allow NSFW content generation"
}
```
### Parameter Details
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `messages` | array | required | Chat messages with `role` and `content` |
| `model` | string | "eachsense/beta" | Model identifier |
| `stream` | boolean | true | Enable SSE streaming |
| `session_id` | string | null | Session ID for conversation history. Use to continue previous chats, handle clarifications, and iteratively refine outputs |
| `mode` | string | "max" | `max` = best quality (premium models), `eco` = fastest/cheapest |
| `behavior` | string | "agent" | `agent` = auto-execute, `plan` = show plan first, `ask` = clarify first |
| `image_urls` | array | null | URLs of images to process/edit (max 4) |
| `workflow_id` | string | null | Execute a specific workflow |
| `version_id` | string | null | Workflow version, used with workflow_id |
| `web_search` | boolean | true | Allow web search for information |
| `enable_safety_checker` | boolean | true | Set to false to allow NSFW content generation |
**OpenAI SDK extra parameters:** When using the OpenAI SDK, pass non-standard parameters via `extra_body`:
```python
response = client.chat.completions.create(
model="eachsense/beta",
messages=[{"role": "user", "content": "Generate a quick sketch"}],
extra_body={"mode": "eco", "session_id": "my-session"},
stream=False
)
```
## Non-Streaming Response
```json
{
"id": "chatcmpl-123",
"object": "chat.completion",
"choices": [{"message": {"role": "assistant", "content": "Here's your image..."}}],
"generations": ["https://cdn.example.com/image.png"],
"task_id": "task-456",
"session_id": "my-session"
}
```
## Modes
### MAX Mode (Default)
Uses premium quality models (flux-2-max, veo-3, etc.). Best for final outputs, client-facing work, and when quality matters most. Processing time: 10-300 seconds.
```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a product shot"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
```
### ECO Mode
Uses fast, cost-effective models (flux-2-pro, veo3-1-fast, etc.). Best for prototyping, drafts, and high-volume generation. Processing time: 5-180 seconds.
```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a product shot"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco"
}'
```
## Behaviors
### Agent (Default)
Automatically executes the request, selecting the best model and generating output immediately.
```json
{
"messages": [{"role": "user", "content": "Generate a sunset video"}],
"model": "eachsense/beta",
"behavior": "agent"
}
```
### Plan
Shows execution plan with time/cost estimates before executing. Good for complex requests where you want to review the approach.
```json
{
"messages": [{"role": "user", "content": "Create a marketing video for my bakery"}],
"model": "eachsense/beta",
"behavior": "plan"
}
```
### Ask
Always asks clarifying questions before proceeding. Good when you want maximum control.
```json
{
"messages": [{"role": "user", "content": "Generate a portrait"}],
"model": "eachsense/beta",
"behavior": "ask"
}
```
## Session Management
Use `session_id` to maintain conversation history and context across multiple requests. This enables:
- **Multi-turn conversations**: Follow-up on previous requests without repeating context
- **Iterative refinement**: Ask for modifications to previously generated content
- **Clarification flows**: Respond to `clarification_needed` events and continue the conversation
- **Context awareness**: The AI remembers previous generations, preferences, and instructions
### Session Limits
| Metric | Limit |
|--------|-------|
| Idle timeout | 15 minutes |
| Session TTL | 30 days |
| Messages per session | 50 |
Sessions are scoped by API key + session_id combination. Different API keys cannot access each other's sessions.
### Session Management Endpoints
```bash
# Retrieve session memory
curl https://eachsense-agent.core.eachlabs.run/memory?session_id=my-session \
-H "X-API-Key: $EACHLABS_API_KEY"
# Clear session memory
curl -X DELETE https://eachsense-agent.core.eachlabs.run/memory?session_id=my-session \
-H "X-API-Key: $EACHLABS_API_KEY"
# List all sessions
curl https://eachsense-agent.core.eachlabs.run/sessions \
-H "X-API-Key: $EACHLABS_API_KEY"
```
### Example: Iterative Generation
```bash
# First request - generate initial image
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Generate a logo for a coffee shop called Brew Lab"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "logo-project-001"
}'
# Follow-up - modify the result (same session_id)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Make it more minimalist and change the color to dark green"}],
"model": "eachsense/beta",
Auf GitHub ansehen