Relive
AI digital twin cloning skill. Re:live — chat again with someone you love. Input chat logs, images, audio, and other materials to replicate a person's person...
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
Re:Live - AI Clone Agent
1. Overview
Re:Live replicates a person as a digital clone: personality (chat logs → profile.md), voice (reference audio + CosyVoice3), and optionally appearance (video first frame). Output can be text / voice / video. Dialogue is persisted under the character directory and used in dual-track RAG. Execution: run python main.py <JSON_file_path> from this skill’s root directory. See README.md for details.
Environment (required): Always run
python main.py ...inside a virtual environment created in this skill directory and install dependencies there, especially for voice / video synthesis. Typical setup (fromworkspace/skills/relive):
# Windows (PowerShell):
.\.venv\Scripts\Activate.ps1
# Linux/macOS:
source .venv/bin/activate
Quick start (when character already exists)
When the user says "talk to Martha" or uses /relive:Martha:
- Read personality: Read
.openclaw/workspace/skills/relive/storage/default_Martha/profile.mdas the basis for reply style. - Single-turn dialogue (from skill root, e.g.
.openclaw/workspace/skills/relive):- When history is needed: write
get_context.json(withuser_id,target_id,content= user’s message) →python main.py get_context.json, use the returned context to help generate. - Main Agent generates reply text in character.
- Write
synthesize.json(content= reply text,user_message= user message,output_mode=text/voice/video) →python main.py synthesize.jsonto persist and optionally output voice/video.
- When history is needed: write
New character: See "2. Creating a new character" below; order is init → upload → export_md → personality analysis → write profile.md → add to USER.md.
2. Creating a new character
2.1 When to create
When the user expresses intent like "clone/replicate someone", "create a digital twin of a deceased relative", or "create an AI persona from chat logs and voice", start the create new character flow.
2.2 Materials and directories
- Chat logs: User must upload (JSON supported, e.g. QQ/WhatsApp export). If only screenshots exist, parse them yourself; this skill does not. Confirm with the user which side is the character to clone.
- Reference audio: Put files in
storage/{user_id}_{target_id}/voice_profile/and must ask the user for the transcript of that audio; save it ascorresponding.txtin the same directory. - Reference image (optional): Create
reference_image_url.txtunder the character directory with one line, public URL, foroutput_mode: "video".
Character root: storage/{user_id}_{target_id}/ (e.g. storage/default_Martha/).
2.3 Steps (in order)
Run from the skill root directory. If the user does not provide chat logs, you can ask for character traits and go straight to step 4.
Step 1: Initialize directories
{ "type": "init", "user_id": "default", "target_id": "Martha" }
Run: python main.py init.json (or write to init.json then run; same below).
Step 2: Upload chat logs
{
"type": "upload",
"user_id": "default",
"target_id": "Martha",
"file_path": "/absolute/or/relative/path/filename.json",
"file_type": "json",
"self_name": "Jonas",
"target_name": "Martha"
}
self_name / target_name must exactly match sender names in the chat log. Run: python main.py upload.json.
Step 3: Export to Markdown
{ "type": "export_md", "user_id": "default", "target_id": "Martha" }
Run: python main.py export_md.json to produce storage/default_Martha/chat.md.
Step 4: Personality analysis and profile.md
- Read
storage/{user_id}_{target_id}/chat.md(split if too large). - Use the LLM to analyze personality, catchphrases, how they address people, and style; write the result to
profile.mdin that directory (this step is done by the main Agent; there is no separate API).
2.4 After creation: update USER.md
Must add the character to the workspace root USER.md.
Create (or extend) a section like "Re:Live characters", and:
- Add one bullet per character with a short English description, for example:
- **Martha**: pharmacy / biology student, gentle and friendly, loves mystery movies
- **Dabao**: colloquial, warm and reliable friend who enjoys cooking and traditional activities - Add a short instruction line that explains how to use this skill, e.g.:
Re:Live digital-clone skill. When the user types \relive:<character_name>, read SKILL.md under .openclaw\workspace\skills\relive\ for acting rules, and read profile.md under .openclaw\workspace\skills\relive\storage\default_{target_name} as the persona definition for that character.
The main Agent reads this section from USER.md to know which Re:Live characters exist, how to describe them briefly, and how to route \relive commands to this skill and the corresponding profile.md.
3. After character exists: entering the character quickly
3.1 Commands and state
/relive:<target_id>(e.g./relive:Martha): Enter relive mode; main Agent storestarget_idin session state; subsequent messages to this skill use that id; replies are generated via relive and persisted understorage/{user_id}_{target_id}/./relive:end: Exit relive and clear current character state.
As long as a current relive character exists, the flow is: read profile → get_context when needed → LLM generate → synthesize → persist.
3.2 Always read profile.md when entering character
Before each conversation with that character, must read storage/{user_id}_{target_id}/profile.md and inject it into the main Agent’s system/context so reply style is consistent.
3.3 Single-turn flow (three steps)
For each user message, from skill root:
- get_context when needed: If history is needed, write
get_context.json(content= user’s message), runpython main.py get_context.json, use returned context to help generate. - Generate reply: Main Agent generates reply text in character.
- synthesize to persist: Write
synthesize.json(content= reply text,user_message= user message,output_mode= text/voice/video), runpython main.py synthesize.json. Even for text-only, run synthesize if you want the turn in runtime and RAG (output_modecan betextor omitted).
3.4 Output modes
- text: Text only.
- voice: Text + voice clone (requires voice_profile + corresponding.txt). Environment: install deps and models per README; recommended to use a virtual environment (see README § Installation and Voice Models).
- video: Video generation API (Seedance, etc.); same synthesize entry with
output_mode: "video". Aftervideo_task_idis returned, run the auto-generatedvideo_wait.jsonto poll and download.
4. API parameters summary
| type | Description | Required parameters |
|---|---|---|
init | Initialize storage directories | user_id, target_id |
upload | Upload chat logs | user_id, target_id, file_path, file_type, self_name, target_name |
export_md | Export chat to Markdown | user_id, target_id |
get_context | Get conversation context (incl. RAG) | user_id, target_id, content |
synthesize | Generate reply and persist (text/voice/video by output_mode) | user_id, target_id, content, user_message |
video_generation_wait | Poll video task and download to character cache/ | user_id, target_id, task_id |
- upload:
self_name/target_namemust exactly match sender names in the chat log. - synthesize:
output_modeoptionaltext(default),voice,video; optionalreference_image_url(if not passed, read fromreference_image_url.txtunder character directory); optionalvideo_wait: trueto poll in-call until video is done. After video success,video_wait.jsonis auto-generated; runpython main.py video_wait.jsonto poll and download. - video_generation_wait:
typein JSON must bevideo_generation_wait; conventional filename isvideo_wait.json. Optionalpoll_interval_seconds,poll_timeout_seconds.
5. Notes
- Privacy: User data is isolated per character and used only for the current clone task.
- Ethics: Do not use for deception, forgery, or other misuse.
6. More reference (see README.md)
- Data storage layout: source/, chat.md, profile.md, runtime/, vector_db/, voice_profile/, cache/ under character directory → README.md#file-structure.
- Chat log formats: QQ/WhatsApp JSON format and field requirements → README.md#preparing-chat-logs.
- Voice output: Dependencies and model setup (recommended: use a virtual environment), corresponding.txt requirements → README.md#installation-and-voice-models-required-before-voice-output, README.md#advanced-features.
- Video generation: Config, polling, and video_generation_wait example → README.md#advanced-features.
- RAG: Dual-track retrieval, BM25, thresholds and testing → README.md#where-rag-searches.
- Troubleshooting: Message attribution, format failure, voice/video not generating, 404, etc. → README.md#troubleshooting.
- Core modules (implementation reference): main.py, orchestrator, importer, memory, engines → README.md#core-modules-implementation-reference.
Note (OpenClaw exec timeout): When this skill is invoked via OpenClaw’s
exec, long CosyVoice3 voice synthesis may be killed by the default execution timeout. If you observe the process exiting with code 1 shortly after loggingsynthesis text ...and no audio file is written, checknpm/node_modules/openclaw/dist/auth-profiles-*.jsand increaseDEFAULT_EXEC_TIMEOUT_MS(for example, from5e3to180e3) so that long-running voice synthesis can finish.
Files
40 totalComments
Loading comments…
