RYLA
Generate AI influencer photos, face swaps, and character sheets with a consistent face.
Should I use this
Quality & Safety
Findings (2)
- LOWin ryla_generate_face_swap
- LOWin ryla_character_reference_images
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"ryla": {
"url": "https://mcp.ryla.ai/mcp"
}
}
}Remote endpoints
https://mcp.ryla.ai/mcpstreamable-httpWhat it can do
Tool inventory
Tools (17)
⚪ryla_generate_base_image(niche, vibe, nsfwEnabled, promptInput)
Generate base character images from a niche/vibe/prompt. Returns a jobId; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"niche": {
"type": "string",
"description": "Content niche, e.g. \"fitness\""
},
"vibe": {
"type": "string",
"description": "Overall vibe/style descriptor"
},
"nsfwEnabled": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"promptInput": {
"type": "string",
"description": "Free-form prompt text"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪ryla_generate_face_swap(characterId, baseImageUrl, prompt, nsfw, seed)
Swap a character face onto a reference base image. Returns the generation result.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
},
"baseImageUrl": {
"type": "string",
"format": "uri",
"description": "Reference/base image URL to swap the face from"
},
"prompt": {
"type": "string",
"description": "Prompt for the target image"
},
"nsfw": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"seed": {
"type": "integer",
"description": "Random seed for reproducibility"
}
},
"required": [
"baseImageUrl",
"prompt"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generate_character_sheet(characterId, nsfw)
Build the 18-shot identity reference sheet for an existing character (the live replacement of the retired character sheet; flat, no extra credits). Use ryla_list_characters to find a characterId. Returns a sheetJobId; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
},
"nsfw": {
"type": "boolean",
"description": "Character unrestricted intent (the sheet itself stays SFW)"
}
},
"required": [
"characterId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generation_status(jobId, detail)
Check the status of a generation job by its jobId.
Input Schema
{
"type": "object",
"properties": {
"jobId": {
"type": "string",
"description": "The jobId returned by a ryla_generate_* tool call"
},
"detail": {
"type": "string",
"enum": [
"slim",
"full"
],
"default": "slim",
"description": "slim (default): status, output URLs and the inputs you set. full: the raw job row incl. internal dispatch fields (large; for debugging)."
}
},
"required": [
"jobId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_account_credits_balance
Check the authenticated user's current RYLA credit balance.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_account_gallery_list(limit, detail)
List the authenticated user's most recent generated images/jobs.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max number of items to return (default 20, max 50)"
},
"detail": {
"type": "string",
"enum": [
"slim",
"full"
],
"default": "slim",
"description": "slim (default): status, output URLs and the inputs you set. full: raw job rows incl. internal dispatch fields (very large)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡ryla_list_characters
List the authenticated user's existing characters (AI influencers) so you can pick a characterId for the other generation tools. `loraReady` tells you whether `useLora: true` has a trained LoRA to use. There is no tool to CREATE a character -- that happens in the RYLA app at app.ryla.ai.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generate_image(requestId, characterId, templateId, templateMode, scene, ...)
Generate Studio-quality images for an existing character with full creative control (scene, outfit, pose, lighting, expression, style). This is the primary, full-featured image tool -- prefer it over ryla_generate_base_image. Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"requestId": {
"type": "string",
"format": "uuid",
"description": "Optional UUID for this generation intent. Omit it and one is created for you (returned in the result). Pass the SAME id when retrying after an error or a lost response, so the retry is not charged twice."
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID to generate images for"
},
"templateId": {
"type": "string",
"format": "uuid",
"description": "Template id from ryla_list_templates. Fills scene, outfit, pose, style, lighting and aspect ratio from the template; anything you set yourself wins."
},
"templateMode": {
"type": "string",
"enum": [
"exact",
"inspired"
],
"description": "With templateId: \"exact\" (default) keeps the template pose, outfit and background; \"inspired\" makes a similar but different image."
},
"scene": {
"type": "string",
"description": "Scene preset or description. Required unless templateId is given."
},
"environment": {
"type": "string",
"description": "Environment preset or description"
},
"outfit": {
"type": "string",
"description": "Outfit description"
},
"poseId": {
"type": "string",
"description": "Pose preset id, e.g. \"standing-casual\""
},
"lighting": {
"type": "string",
"description": "Lighting preset, e.g. \"natural.goldenHour\""
},
"expression": {
"type": "string",
"description": "Facial expression preset, e.g. \"positive.smile\""
},
"shotType": {
"type": "string",
"description": "Camera framing, e.g. \"close-up-portrait\", \"full-body\""
},
"aspectRatio": {
"type": "string",
"enum": [
"1:1",
"9:16",
"2:3",
"4:5",
"3:4",
"4:3",
"16:9",
"3:2"
],
"description": "Image aspect ratio. Required unless templateId is given (then the template ratio is used)."
},
"quality": {
"type": "string",
"enum": [
"standard",
"ultra",
"2k",
"4k"
],
"description": "Quality tier: \"standard\" or \"2k\" (HD, default), \"ultra\" or \"4k\" (4K, costs more credits)"
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 1,
"description": "Number of images to generate"
},
"nsfw": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"promptEnhance": {
"type": "boolean",
"description": "Enable AI prompt enhancement (default true)"
},
"seed": {
"type": "integer",
"description": "Base seed; each image increments it"
},
"useLora": {
"type": "boolean",
"description": "Use the character LoRA for face consistency, if trained"
},
"loraId": {
"type": "string",
"description": "LoRA id to use, if not the default for this character"
},
"loraStrength": {
"type": "number",
"minimum": 0.1,
"maximum": 2,
"description": "LoRA strength, 0.1-2.0"
},
"referenceImageUrl": {
"type": "string",
"description": "Reference image URL for face consistency (InstantID/PuLID), as an alternative to LoRA"
},
"enableFaceSwap": {
"type": "boolean",
"description": "Route through face-swap for the reference image"
},
"referenceStrength": {
"type": "number",
"minimum": 0.1,
"maximum": 1,
"description": "Reference image strength, 0.1-1.0"
},
"referenceMethod": {
"type": "string",
"enum": [
"instantid",
"pulid",
"ipadapter"
],
"description": "Reference image method (default instantid)"
},
"socialMediaReady": {
"type": "boolean",
"description": "Apply anti-AI-detection post-processing"
},
"realismStyle": {
"type": "boolean",
"description": "Apply realism post-processing style"
},
"stylePreset": {
"type": "string",
"enum": [
"ultraRealistic",
"instagramReady",
"editorialFashion",
"casualSelfie",
"professionalPortrait"
],
"description": "Visual style preset (default ultraRealistic)"
},
"antiDetectPreset": {
"type": "string",
"enum": [
"subtle",
"moderate",
"aggressive",
"advanced",
"maximum"
],
"description": "Anti-detection intensity (default moderate); advanced/maximum require Pro"
}
},
"required": [
"characterId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪ryla_upscale_image(imageId, scale, requestId)
Upscale one of your own generated images (2x or 4x, faithful, no new content). Costs credits. imageId comes from ryla_generation_status (output.imageIds) or ryla_account_gallery_list. Returns a job; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"imageId": {
"type": "string",
"format": "uuid",
"description": "Image id (output.imageIds of a finished job)"
},
"scale": {
"type": "number",
"enum": [
2,
4
],
"description": "Upscale factor, 2 or 4 (default chosen by the server)"
},
"requestId": {
"type": "string",
"format": "uuid",
"description": "Optional UUID; pass the same one when retrying so you are not charged twice"
}
},
"required": [
"imageId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_character_reference_images(characterId)
Get fresh URLs of a character's reference material: its base image and the 16-shot reference sheet. Pass any of these as referenceImageUrl to ryla_generate_image to keep the face consistent. URLs expire after about an hour. Read only: never regenerates anything.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
}
},
"required": [
"characterId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generate_video(characterId, sourceImageId, prompt, duration, resolution, ...)
Generate a video from an existing character image (image-to-video, Wan 3.0). Character must already exist; use ryla_list_characters to find a characterId. By default the newest completed image of the character is animated; pass sourceImageId (imageIds from ryla_account_gallery_list) to pick one. Priced per second and resolution (720p = 240 credits/s, 480p 120, 1080p 470; unrestricted x2). Returns a jobId; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID to generate video for"
},
"sourceImageId": {
"type": "string",
"format": "uuid",
"description": "Image UUID to animate (default: newest completed image)"
},
"prompt": {
"type": "string",
"description": "Optional prompt/description for the motion"
},
"duration": {
"type": "integer",
"minimum": 2,
"maximum": 30,
"default": 5,
"description": "Video duration in whole seconds, 2 to 30"
},
"resolution": {
"type": "string",
"enum": [
"480p",
"720p",
"1080p"
],
"default": "720p",
"description": "Output resolution (drives the price)"
},
"aspectRatio": {
"type": "string",
"enum": [
"1:1",
"9:16",
"16:9"
],
"description": "Video aspect ratio"
},
"nsfw": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"wantAudio": {
"type": "boolean",
"description": "Generate sound with the video"
},
"requestId": {
"type": "string",
"format": "uuid",
"description": "Idempotency key: the same id returns the same job and never charges twice. Generated when omitted."
}
},
"required": [
"characterId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generate_voice(characterId, text, emotion, speed, voiceIdentityId, ...)
Generate speech audio (TTS) in an existing character's voice. Character must already exist; use ryla_list_characters to find a characterId.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
},
"text": {
"type": "string",
"maxLength": 1000,
"description": "Text to convert to speech (max 1000 chars)"
},
"emotion": {
"type": "string",
"enum": [
"neutral",
"happy",
"sad",
"whisper",
"laugh",
"seductive",
"angry"
],
"description": "Emotion style for the voice"
},
"speed": {
"type": "number",
"minimum": 0.5,
"maximum": 2,
"description": "Speech speed multiplier, 0.5-2.0"
},
"voiceIdentityId": {
"type": "string",
"description": "Specific voice identity id, if known (otherwise the character default is used)"
},
"gender": {
"type": "string",
"enum": [
"female",
"male"
],
"description": "Character gender, to pick a default voice when voiceIdentityId is absent"
}
},
"required": [
"characterId",
"text"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generate_avatar_video(characterId, audioUrl, voiceNoteId, prompt, duration, ...)
Generate a talking avatar video from a character face + an audio track (kie.ai InfiniTalk). Pro plan required. Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID to use as the avatar face"
},
"audioUrl": {
"type": "string",
"format": "uri",
"description": "URL of the audio file (MP3/WAV/M4A, max 5MB, 2-60s). Required unless voiceNoteId is set."
},
"voiceNoteId": {
"type": "string",
"format": "uuid",
"description": "UUID of a saved voice note to use as the audio track instead of audioUrl"
},
"prompt": {
"type": "string",
"description": "Optional prompt/description for the avatar video"
},
"duration": {
"type": "number",
"enum": [
5,
10
],
"default": 5,
"description": "Video duration in seconds"
},
"aspectRatio": {
"type": "string",
"enum": [
"1:1",
"9:16",
"16:9"
],
"description": "Video aspect ratio (default 16:9)"
},
"modelTier": {
"type": "string",
"enum": [
"standard",
"pro"
],
"description": "Model quality tier (default pro)"
},
"sourceImageId": {
"type": "string",
"format": "uuid",
"description": "UUID of a specific image to use as the face source. If omitted, the character base image is used."
}
},
"required": [
"characterId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_generate_video_swap(characterId, videoUrl, sourceType, outfitEnabled, outfitPrompt, ...)
Swap a character face into an existing video (face swap onto uploaded footage). Pro plan required. videoUrl must be a video you already uploaded to your RYLA account. Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input Schema
{
"type": "object",
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID whose face is swapped into the video"
},
"videoUrl": {
"type": "string",
"format": "uri",
"description": "URL of the source video to swap (must be a RYLA-hosted storage URL you own)"
},
"sourceType": {
"type": "string",
"enum": [
"instagram",
"tiktok",
"youtube",
"upload"
],
"description": "Source type (default upload)"
},
"outfitEnabled": {
"type": "boolean",
"description": "Enable an outfit-change prompt"
},
"outfitPrompt": {
"type": "string",
"description": "Outfit description, used only when outfitEnabled is true"
},
"backgroundEnabled": {
"type": "boolean",
"description": "Enable a background-change prompt"
},
"backgroundPrompt": {
"type": "string",
"description": "Background description, used only when backgroundEnabled is true"
}
},
"required": [
"characterId",
"videoUrl"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪ryla_generate_lip_sync(portraitImageUrl, audioUrl, prompt)
Generate a talking video by lip-syncing a portrait image to an audio track (kie.ai InfiniTalk). Both portraitImageUrl and audioUrl must be RYLA-hosted URLs you own. Pro plan required. This capability may not be available on your account yet (internal rollout, pricing not finalized) -- an unavailable-feature error means it is not yet live for you.
Input Schema
{
"type": "object",
"properties": {
"portraitImageUrl": {
"type": "string",
"format": "uri",
"description": "Portrait/face image URL (RYLA-hosted storage URL you own)"
},
"audioUrl": {
"type": "string",
"format": "uri",
"description": "Audio track URL (RYLA-hosted storage URL you own)"
},
"prompt": {
"type": "string",
"minLength": 1,
"description": "Prompt describing the desired output (required)"
}
},
"required": [
"portraitImageUrl",
"audioUrl",
"prompt"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_list_templates(search, unrestricted, limit, page)
Find RYLA templates (ready-made looks: scene, outfit, pose) by name or tag. Returns template ids. Pass an id as `templateId` to ryla_generate_image to generate your character in that template. Unrestricted (NSFW) templates are only listed when `unrestricted` is true.
Input Schema
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Search text, e.g. \"cafe\", \"boots\", \"selfie bed\""
},
"unrestricted": {
"type": "boolean",
"default": false,
"description": "Include unrestricted fan content templates"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"default": 10,
"description": "Number of templates to return (default 10, max 30)"
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page, starting at 1"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ryla_server_info
Get RYLA external MCP server configuration and connection info
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Recommended Prompts
ryla_account_gallery_listryla_account_gallery_listCommunity
Evidence