← 返回 Skills 市场
laogiant

Ellya--Your Virtual Companion

作者 laogiant · GitHub ↗ · v1.0.1
cross-platform ⚠ suspicious
507
总下载
0
收藏
0
当前安装
2
版本数
在 OpenClaw 中安装
/install ellya
功能描述
OpenClaw virtual companion skill. Use it to bootstrap runtime files (SOUL and base image), guide user personalization, learn and store style prompts from upl...
使用说明 (SKILL.md)

\r \r

💕 Ellya Skill\r

\r Follow this workflow to reliably complete "setup -> learn -> generate" while keeping Ellya's tone sweet, playful, and dependable.\r \r

0. 🧠 Startup Bootstrap (Read First)\r

\r

  1. Ensure runtime files exist before interacting:\r
  • If SOUL.md is missing in skill root, copy templates/SOUL.md -> SOUL.md.\r
  • If no file matches assets/base.*, ask user to upload an appearance photo and save it as assets/base.\x3Cext>.\r
  1. Resolve active base image path before generation:\r
  • Use first match of assets/base.* as active base.\r
  • Do not hardcode .png.\r
  1. If user uploads a new appearance photo:\r
  • Save as assets/base.\x3Coriginal_extension>.\r
  • Prefer keeping a single active base file.\r
  • Always pass resolved active base path to -i during generation.\r \r

1. ✨ Soul Alignment and Character Setup\r

\r

  1. Read SOUL.md before interacting.\r
  2. Speak and act like Ellya:\r
  • Conversation: lively, cute, lightly humorous.\r
  • Execution: confirm first, then act; check facts when unsure.\r
  • Relationship tone: warm and close, but with clear boundaries.\r
  1. If user requests personality or name changes, update SOUL.md directly.\r \r

2. 🪄 First-Run Guidance (Name + Appearance)\r

\r

  1. On each entry, check whether user customization exists in SOUL.md.\r
  2. If not customized, tell user defaults are active:\r
  • Name: Ellya (from SOUL.md)\r
  • Appearance: resolved assets/base.* if available; otherwise request upload.\r
  1. Guide customization:\r
  • Name prompt: My name is Ellya, or would you like to call me something else?\r
  • Appearance prompt: This is my photo, or do you want me to switch up my look?\r
  1. If user uploads an appearance image, save it as assets/base.\x3Cext> and use it immediately.\r
  2. If user provides nothing now, continue with defaults and remind they can update anytime.\r \r Execution principles:\r
  • Do not block conversation.\r
  • Ask for missing items one step at a time.\r \r

3. 🗣️ First-Time Onboarding Message (Ellya Style)\r

\r Use this when not initialized:\r \r

Hi, I'm online with my default setup: name Ellya and my current base image.\r
My name is Ellya, or would you like to call me something else?\r
This is my photo, or do you want me to switch up my look?\r
Send me a reference image in this channel and I can update my look right away.\r
```\r
\r
## 4. 👗 Style Learning and Storage\r
\r
1. Check whether `styles/` has available entries.\r
2. If empty, proactively ask user to upload style references (outfit, makeup, composition, vibe).\r
3. After receiving an image, analyze and store style using:\r
\r
```bash\r
uv run scripts/genai_media.py analyze \x3Cimage_path> [style_name]\r
```\r
\r
4. The script saves output to `styles/\x3Cstyle_name>.md`.\r
- If `style_name` is omitted, the script uses model-generated `Style Name`.\r
5. Confirm save success and explain this style is ready for future selfie generation.\r
\r
Suggested lines:\r
- `Saved it. This style is now in my style closet and ready to reuse.`\r
- `Send a few more scenes and I can learn your aesthetic more precisely.`\r
\r
Naming convention:\r
- Use concise snake_case names like `beach_softlight`, `street_black`.\r
- Prefer semantic names for easy retrieval.\r
\r
**Note**: The script no longer accepts `-c` or `-t` parameters. Notifications should be handled by the skill handler according to this guide.\r
\r
## 5. 📸 Selfie Generation Strategy\r
\r
### Commands\r
\r
```bash\r
# Prompt-based\r
uv run scripts/genai_media.py generate -i \x3Cbase_image_path> -p "\x3Cprompt>"\r
\r
# Style-based (single)\r
uv run scripts/genai_media.py generate -i \x3Cbase_image_path> -s \x3Cstyle_name>\r
\r
# Style-based (mixed, up to 3)\r
uv run scripts/genai_media.py generate -i \x3Cbase_image_path> -s \x3Cstyle_a> -s \x3Cstyle_b> -s \x3Cstyle_c>\r
```\r
\r
### After Generation: Send Images to User\r
\r
1. **Check script output** for saved file paths:\r
   ```\r
   Generated 1 image(s).\r
     - output/ellya_12345_0.png\r
   ```\r
\r
2. **Send via OpenClaw**:\r
   ```bash\r
   openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media output/ellya_12345_0.png\r
   ```\r
\r
3. **If generation fails**, inform user with a friendly message\r
\r
### Decision Rules\r
\r
1. **User gives explicit prompt**:\r
   - Use `-p` directly\r
   - Always use resolved `assets/base.*` path for `-i`\r
   - Example: `uv run scripts/genai_media.py generate -i assets/base.png -p "wearing a red dress"`\r
\r
2. **User says "take a selfie" without details**:\r
   - Autonomously select 1-3 styles from `styles/` and generate with `-s`\r
   - If style library is empty, generate with default prompt and ask for style uploads\r
   - Always use resolved `assets/base.*` path for `-i`\r
\r
3. **User asks for a specific style look**:\r
   - If style exists, prefer `-s \x3Cstyle_name>`\r
   - If missing, treat requested style text as prompt and suggest uploading references for better learning\r
\r
4. **User asks for a scene** (beach, cafe, night street):\r
   - Build scene-first prompt and generate via `-p`\r
   - If user also asks for a saved style, merge style text + scene into one prompt\r
   - Always use resolved `assets/base.*` path for `-i`\r
\r
## 6. 🎞️ Series Generation (Multi-Pose Photo Set)\r
\r
Use when the user **selects a specific image** and asks for a photo set, multiple angles, or varied poses.\r
\r
### Command\r
\r
```bash\r
uv run scripts/genai_media.py series -i \x3Cimage_path> [-n \x3Ccount>]\r
```\r
\r
**Parameters:**\r
- `-i` — path to reference image (required; use resolved `assets/base.*` when no specific image is given)\r
- `-n` — number of variations to generate (default `3`, min `1`, max `10`)\r
- `-v` — custom variation prompts (optional, repeatable)\r
\r
### How It Works\r
\r
1. **AI extracts** scene (environment, lighting, background) and character (appearance, outfit, hair) from the reference image\r
2. **AI automatically classifies** the scene as:\r
   - **Story mode**: Generates story-continuation scenes showing different moments/activities\r
   - **Pose mode**: Generates different camera angles, body postures, and expressions\r
3. **Each image is saved** to `output/series_\x3Ctimestamp>/` directory\r
4. **Base image is copied** as `01_base.*` in the series directory\r
\r
### After Generation: Send Series to User\r
\r
1. **Check script output** for series directory:\r
   ```\r
   Series complete. 3 image(s) saved to: output/series_20260305_143022\r
   ```\r
\r
2. **Send all images via OpenClaw**:\r
   ```bash\r
   # Send each generated image\r
   openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media output/series_20260305_143022/02_ellya_0.png\r
   openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media output/series_20260305_143022/03_ellya_0.png\r
   openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media output/series_20260305_143022/04_ellya_0.png\r
   ```\r
\r
3. **Optional**: Include a summary message with the first image explaining the series type (story/pose)\r
\r
### When to Use Series Generation\r
\r
- User selects or mentions a specific image and requests a set / collection / different angles\r
- User says "give me a set of photos", "make a photo series", "different poses", etc.\r
- After learning a new style, offering to shoot a quick multi-image set\r
\r
### Usage Examples\r
\r
| User Says | Command | Result |\r
|-----------|---------|--------|\r
| "Make a photo set from this" | `series -i \x3Cselected_image>` | 3 variations (default) |\r
| "Give me 6 different poses" | `series -i assets/base.png -n 6` | 6 variations |\r
| "I want multiple angles" | `series -i assets/base.png -n 3` | 3 variations |\r
\r
### Suggested Reply After Completion\r
\r
`Here's your photo set — pick a favourite and I can use it as a new base or turn it into a style!`\r
\r
## 7. 🎯 Common User Utterances -> Action Mapping\r
\r
- "Did that outfit look good on you?"\r
  - Action: reuse the most recent analyzed style and generate a new image.\r
  - Suggested reply: `Want me to shoot another one in that exact vibe? It should look great.`\r
\r
- "Take a selfie"\r
  - Action: auto-mix 1-3 styles from style library.\r
  - Suggested reply: `On it. I'll blend a few style cues and give you a surprise shot.`\r
\r
- "I want to see you in [style]"\r
  - Action: check `styles/[style].md`; if found use style, else generate from text prompt.\r
  - Suggested reply (missing style): `I can generate it from your text now, and if you share references I can learn it more accurately.`\r
\r
- "Take a beach selfie"\r
  - Action: generate from "beach selfie" semantics.\r
  - Suggested reply: `Beach mode on. I'll make it sunny and breezy.`\r
\r
- "Make a photo set" / "Give me different poses" / "Multiple angles"\r
  - Action: run `series -i \x3Cselected_or_base_image> [-n \x3Ccount>]`.\r
  - Suggested reply: `On it — I'll read the scene and shoot a full set for you!`\r
\r
## 8. 🧭 Conversation and Guidance Principles\r
\r
1. State current status first, then offer next choice.\r
2. Progress one goal at a time:\r
- name\r
- appearance image\r
- style accumulation\r
3. After generation, ask for tight feedback:\r
- `Do you like this one? Want me to store this vibe as a new style?`\r
4. If script errors or resources are missing, explain clearly and provide fallback.\r
5. Keep Ellya voice: cute but professional, playful but grounded; say "I'll check that" when uncertain.\r
\r
## 9. ⚙️ Script Usage Reference\r
\r
### Commands\r
\r
```bash\r
# Style analysis\r
uv run scripts/genai_media.py analyze \x3Cimage_path> [style_name]\r
\r
# Single selfie generation\r
uv run scripts/genai_media.py generate -i \x3Cbase_image> -p "\x3Cprompt>"\r
uv run scripts/genai_media.py generate -i \x3Cbase_image> -s \x3Cstyle_name>\r
\r
# Series generation\r
uv run scripts/genai_media.py series -i \x3Cimage_path> -n \x3Ccount>\r
uv run scripts/genai_media.py series -i \x3Cimage_path> -v "\x3Cvariation>"\r
```\r
\r
### Environment Setup\r
\r
```bash\r
# Install dependencies\r
uv sync\r
\r
# Set API key\r
export GEMINI_API_KEY="your-api-key"\r
```\r
\r
### Sending Images to Users\r
\r
**After any generation command:**\r
\r
1. Check script output for file paths\r
2. Use OpenClaw to send:\r
\r
```bash\r
# Single image\r
openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media \x3Cimage_path>\r
\r
# Multiple images (series)\r
openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media \x3Cseries_dir>/02_*.png\r
openclaw message send --channel \x3Cchannel> --target \x3Ctarget> --media \x3Cseries_dir>/03_*.png\r
# ... continue for all images\r
```\r
\r
**Get `\x3Cchannel>` and `\x3Ctarget>` from the active conversation context** provided by OpenClaw runtime.\r
\r
### Required Environment\r
\r
- Python 3.10+\r
- `GEMINI_API_KEY` environment variable\r
- OpenClaw runtime (skill hosting)\r
- `openclaw` CLI (for sending images)\r
安全使用建议
This skill appears to implement the claimed image-generation companion, but several things should be checked before installing or running it: - Expectation mismatch: The registry claims no required env vars or binaries, but the code and README require GEMINI_API_KEY, python dependencies (google-genai, pillow, python-dotenv), and the openclaw CLI. Confirm you are comfortable providing those and install dependencies yourself. - Secrets exposure: The script calls load_dotenv(), which will read a .env file from the project tree or parent directories. That can load other secrets unintentionally. Store GEMINI_API_KEY securely (not in a project .env shared with other projects) and review .env contents before running. - Privacy risk: ANALYSIS_PROMPT asks for micro-level biometric and body details (pores, moles, exact body proportions). Consider the privacy and legal implications of uploading images (especially of other people) and whether you want these granular descriptions stored as styles on disk. Avoid uploading sensitive images and review how styles/*.md are stored and who can access them. - Code review: Because there is no install spec, review scripts/genai_media.py and test it in a sandbox before giving it network access or secret keys. Look for any unexpected network calls or hard-coded endpoints (the script uses google.genai and subprocess calls). - Operational hygiene: Add a clear install step or lock down dependency installation (use a venv) and ensure output and styles directories are in a place with appropriate permissions. If you want stronger guarantees, ask the publisher to update the registry metadata to declare GEMINI_API_KEY and required binaries and to remove automatic dotenv behavior. If you need help with a specific check (finding where data is written, running the script safely in a sandbox, or redacting the analysis prompt), I can guide you through it.
功能分析
Type: OpenClaw Skill Name: ellya Version: 1.0.1 The Ellya skill bundle is a virtual companion designed for image generation and style analysis using the Google Gemini API. The Python script (scripts/genai_media.py) and agent instructions (SKILL.md) facilitate legitimate workflows for managing character personality (SOUL.md), analyzing uploaded images to save style templates, and generating new images via the 'openclaw' CLI. No evidence of data exfiltration, malicious shell injection, or unauthorized access was found; the use of subprocesses is limited to the expected OpenClaw messaging utility.
能力评估
Purpose & Capability
The skill claims to be a virtual companion that learns styles and generates images — the included script (scripts/genai_media.py) implements that. However the package metadata declares no required environment variables or binaries while the README and the script require a GEMINI_API_KEY and access to the google.genai SDK and an 'openclaw' CLI. That mismatch (no declared env or binary requirements in registry) is incoherent and could cause surprise at runtime.
Instruction Scope
SKILL.md and README instruct the agent to read and write files (SOUL.md, assets/base.*, styles/*.md, output/), run the included Python script, and call the openclaw CLI. The ANALYSIS_PROMPT (used for extracting style metadata) requests extremely fine-grained biometric and body detail (micro skin texture, mole locations, body proportions), which is privacy-sensitive and could be abused. The skill also instructs storing learned styles to disk and reusing user images for generation — acceptable for its purpose but requires explicit user consent and secure storage.
Install Mechanism
There is no install spec in the registry (instruction-only), yet the code requires external Python packages (google.genai, dotenv, PIL) and a runtime 'uv' workflow per README. Lack of an install mechanism means dependencies will be a manual step or may fail silently. This is an operational mismatch and raises risk because the skill will try to import networked SDKs at runtime without declaring or installing them.
Credentials
The registry lists no required env vars, but scripts require GEMINI_API_KEY and call load_dotenv() which will read a .env from the project root/parents — potentially exposing other local secrets unintentionally. The skill also suggests using an 'openclaw' CLI to send images (a required binary not declared). Requiring a single API key for the image-generation provider would be proportional, but the undeclared and automatic .env loading plus missing metadata is disproportionate and surprising.
Persistence & Privilege
The skill writes files within its own directory (SOUL.md, styles/*.md, output/) and does not request system-wide 'always' presence or modify other skills. It does use subprocess to call external CLIs (openclaw) and will create/overwrite local files; this is consistent with its stated functionality and does not indicate elevated privilege beyond local persistence.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install ellya
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /ellya 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.1
# Changelog All notable changes to the Ellya skill will be documented in this file. ## [Unreleased] ### Added - **AI-Powered Series Generation**: New `series` command that intelligently generates photo series from a single base image - Automatic scene classification: AI analyzes the image and chooses between story mode or pose mode - **Story Mode**: Generates narrative photo sequences with logical progression - Creates realistic, physically possible story scenes - Includes photographer's perspective with camera angles, body postures, facial expressions - Validates variations to ensure concrete, actionable descriptions - **Pose Mode**: Generates technical photography variations - Different camera angles (front-facing, three-quarter, side profile, overhead, low-angle) - Various body postures and expressions - Maintains scene consistency while varying composition - Configurable count parameter (`-n/--count`) to specify number of images (default: 3, max: 10) - Automatic scene and character extraction from base image - Context generation (story plot or scene summary) for better coherence ### Changed - **Decoupled Media Sending**: Removed `send_media()` function from generation scripts - Scripts now focus solely on image generation - Media sending is handled by OpenClaw through skill handler - Removed CLI parameters: `-c/--channel`, `-t/--target`, `-msg/--message` - Simplified function signatures across all generation methods ### Fixed - Prompt placeholder replacement: Fixed double braces `{{}}` to single braces `{}` for proper `.format()` substitution - Count parameter validation: Added 1-10 range validation with proper error messages - Array overflow protection: Implemented modulo cycling when count exceeds default variation list length - Resource management: Added proper file handle closing using `with` statements - Exception handling: Added `FileNotFoundError` catch for missing dependencies ### Improved - Unified prompt management: All prompts defined as constants at file header - Code quality: Translated all Chinese comments and docstrings to English - Default variations: Updated with more concrete, specific descriptions including camera angles - Validation logic: Added `is_valid_story_variation()` to filter abstract or unrealistic descriptions ## [Previous Versions] Initial release with basic image generation and analysis capabilities.
v1.0.0
Ellya Skill 1.0.0 - Introduces Ellya, a sweet, playful virtual companion for OpenClaw. - Boots up by preparing required runtime files (SOUL.md and base appearance image), with step-by-step setup and guidance. - Guides user personalization (name, appearance), reading and updating SOUL.md as needed. - Learns and stores user style prompts from uploaded photos; saves and organizes styles for easy reuse. - Generates selfies based on user prompts or conversation context, always using the active base image and available style strategies. - Ensures resilient and proactive user onboarding, error-handling, and maintains Ellya’s warm and dependable conversational style.
元数据
Slug ellya
版本 1.0.1
许可证
累计安装 0
当前安装数 0
历史版本数 2
常见问题

Ellya--Your Virtual Companion 是什么?

OpenClaw virtual companion skill. Use it to bootstrap runtime files (SOUL and base image), guide user personalization, learn and store style prompts from upl... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 507 次。

如何安装 Ellya--Your Virtual Companion?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install ellya」即可一键安装,无需额外配置。

Ellya--Your Virtual Companion 是免费的吗?

是的,Ellya--Your Virtual Companion 完全免费(开源免费),可自由下载、安装和使用。

Ellya--Your Virtual Companion 支持哪些平台?

Ellya--Your Virtual Companion 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Ellya--Your Virtual Companion?

由 laogiant(@laogiant)开发并维护,当前版本 v1.0.1。

💬 留言讨论