Generate AI influencer photos, face swaps, and character sheets with a consistent face.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token using a personal RYLA MCP API key, created at app.ryla.ai under Settings > API Keys. Each key is scoped to your own account and generations spend that account's credits.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check the authenticated user's current RYLA credit balance.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Check the authenticated user's current RYLA credit balance.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}List the authenticated user's most recent generated images/jobs.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max number of items to return (default 20, max 50) |
| detail | string | slim (default): status, output URLs and the inputs you set. full: raw job rows incl. internal dispatch fields (very large). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max number of items to return (default 20, max 50)"
},
"detail": {
"enum": [
"slim",
"full"
],
"type": "string",
"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
}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.
| Argument | Type | Description |
|---|---|---|
| characterId* | string | Character UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId"
],
"properties": {
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| prompt | string | Optional prompt/description for the avatar video |
| audioUrl | string | URL of the audio file (MP3/WAV/M4A, max 5MB, 2-60s). Required unless voiceNoteId is set. |
| duration | number | Video duration in seconds |
| modelTier | string | Model quality tier (default pro) |
| aspectRatio | string | Video aspect ratio (default 16:9) |
| characterId* | string | Character UUID to use as the avatar face |
| voiceNoteId | string | UUID of a saved voice note to use as the audio track instead of audioUrl |
| sourceImageId | string | UUID of a specific image to use as the face source. If omitted, the character base image is used. |
Generate base character images from a niche/vibe/prompt. Returns a jobId; poll with ryla_generation_status.
| Argument | Type | Description |
|---|---|---|
| vibe | string | Overall vibe/style descriptor |
| niche | string | Content niche, e.g. "fitness" |
| nsfwEnabled | boolean | Enable unrestricted fan content generation |
| promptInput | string | Free-form prompt text |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"vibe": {
"type": "string",
"description": "Overall vibe/style descriptor"
},
"niche": {
"type": "string",
"description": "Content niche, e.g. \"fitness\""
},
"nsfwEnabled": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"promptInput": {
"type": "string",
"description": "Free-form prompt text"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| nsfw | boolean | Character unrestricted intent (the sheet itself stays SFW) |
| characterId* | string | Character UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId"
],
"properties": {
"nsfw": {
"type": "boolean",
"description": "Character unrestricted intent (the sheet itself stays SFW)"
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
}
},
"additionalProperties": false
}Swap a character face onto a reference base image. Returns the generation result.
| Argument | Type | Description |
|---|---|---|
| nsfw | boolean | Enable unrestricted fan content generation |
| seed | integer | Random seed for reproducibility |
| prompt* | string | Prompt for the target image |
| characterId | string | Character UUID |
| baseImageUrl* | string | Reference/base image URL to swap the face from |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"baseImageUrl",
"prompt"
],
"properties": {
"nsfw": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"seed": {
"type": "integer",
"description": "Random seed for reproducibility"
},
"prompt": {
"type": "string",
"description": "Prompt for the target image"
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
},
"baseImageUrl": {
"type": "string",
"format": "uri",
"description": "Reference/base image URL to swap the face from"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| nsfw | boolean | Enable unrestricted fan content generation |
| seed | integer | Base seed; each image increments it |
| count | integer | Number of images to generate |
| scene | string | Scene preset or description. Required unless templateId is given. |
| loraId | string | LoRA id to use, if not the default for this character |
| outfit | string | Outfit description |
| poseId | string | Pose preset id, e.g. "standing-casual" |
| quality | string | Quality tier: "standard" or "2k" (HD, default), "ultra" or "4k" (4K, costs more credits) |
| useLora | boolean | Use the character LoRA for face consistency, if trained |
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.
| Argument | Type | Description |
|---|---|---|
| prompt* | string | Prompt describing the desired output (required) |
| audioUrl* | string | Audio track URL (RYLA-hosted storage URL you own) |
| portraitImageUrl* | string | Portrait/face image URL (RYLA-hosted storage URL you own) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"portraitImageUrl",
"audioUrl",
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"minLength": 1,
"description": "Prompt describing the desired output (required)"
},
"audioUrl": {
"type": "string",
"format": "uri",
"description": "Audio track URL (RYLA-hosted storage URL you own)"
},
"portraitImageUrl": {
"type": "string",
"format": "uri",
"description": "Portrait/face image URL (RYLA-hosted storage URL you own)"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| nsfw | boolean | Enable unrestricted fan content generation |
| prompt | string | Optional prompt/description for the motion |
| duration | integer | Video duration in whole seconds, 2 to 30 |
| requestId | string | Idempotency key: the same id returns the same job and never charges twice. Generated when omitted. |
| wantAudio | boolean | Generate sound with the video |
| resolution | string | Output resolution (drives the price) |
| aspectRatio | string | Video aspect ratio |
| characterId* | string | Character UUID to generate video for |
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.
| Argument | Type | Description |
|---|---|---|
| videoUrl* | string | URL of the source video to swap (must be a RYLA-hosted storage URL you own) |
| sourceType | string | Source type (default upload) |
| characterId* | string | Character UUID whose face is swapped into the video |
| outfitPrompt | string | Outfit description, used only when outfitEnabled is true |
| outfitEnabled | boolean | Enable an outfit-change prompt |
| backgroundPrompt | string | Background description, used only when backgroundEnabled is true |
| backgroundEnabled | boolean | Enable a background-change prompt |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId",
"videoUrl"
],
"properties": {
"videoUrl": {
"type": "string",
"format": "uri",
"description": "URL of the source video to swap (must be a RYLA-hosted storage URL you own)"
},
"sourceType": {
"enum": [
"instagram",
"tiktok",
"youtube",
"upload"
],
"type": "string",
"description": "Source type (default upload)"
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID whose face is swapped into the video"
},
"outfitPrompt": {
"type": "string",
"description": "Outfit description, used only when outfitEnabled is true"
},
"outfitEnabled": {
"type": "boolean",
"description": "Enable an outfit-change prompt"
},
"backgroundPrompt": {
"type": "string",
"description": "Background description, used only when backgroundEnabled is true"
},
"backgroundEnabled": {
"type": "boolean",
"description": "Enable a background-change prompt"
}
},
"additionalProperties": false
}Generate speech audio (TTS) in an existing character's voice. Character must already exist; use ryla_list_characters to find a characterId.
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to convert to speech (max 1000 chars) |
| speed | number | Speech speed multiplier, 0.5-2.0 |
| gender | string | Character gender, to pick a default voice when voiceIdentityId is absent |
| emotion | string | Emotion style for the voice |
| characterId* | string | Character UUID |
| voiceIdentityId | string | Specific voice identity id, if known (otherwise the character default is used) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId",
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 1000,
"description": "Text to convert to speech (max 1000 chars)"
},
"speed": {
"type": "number",
"maximum": 2,
"minimum": 0.5,
"description": "Speech speed multiplier, 0.5-2.0"
},
"gender": {
"enum": [
"female",
"male"
],
"type": "string",
"description": "Character gender, to pick a default voice when voiceIdentityId is absent"
},
"emotion": {
"enum": [
"neutral",
"happy",
"sad",
"whisper",
"laugh",
"seductive",
"angry"
],
"type": "string",
"description": "Emotion style for the voice"
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID"
},
"voiceIdentityId": {
"type": "string",
"description": "Specific voice identity id, if known (otherwise the character default is used)"
}
},
"additionalProperties": false
}Check the status of a generation job by its jobId.
| Argument | Type | Description |
|---|---|---|
| jobId* | string | The jobId returned by a ryla_generate_* tool call |
| detail | string | slim (default): status, output URLs and the inputs you set. full: the raw job row incl. internal dispatch fields (large; for debugging). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "The jobId returned by a ryla_generate_* tool call"
},
"detail": {
"enum": [
"slim",
"full"
],
"type": "string",
"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)."
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page, starting at 1 |
| limit | integer | Number of templates to return (default 10, max 30) |
| search | string | Search text, e.g. "cafe", "boots", "selfie bed" |
| unrestricted | boolean | Include unrestricted fan content templates |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page, starting at 1"
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 30,
"minimum": 1,
"description": "Number of templates to return (default 10, max 30)"
},
"search": {
"type": "string",
"description": "Search text, e.g. \"cafe\", \"boots\", \"selfie bed\""
},
"unrestricted": {
"type": "boolean",
"default": false,
"description": "Include unrestricted fan content templates"
}
},
"additionalProperties": false
}Get RYLA external MCP server configuration and connection info
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| scale | number | Upscale factor, 2 or 4 (default chosen by the server) |
| imageId* | string | Image id (output.imageIds of a finished job) |
| requestId | string | Optional UUID; pass the same one when retrying so you are not charged twice |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"imageId"
],
"properties": {
"scale": {
"enum": [
2,
4
],
"type": "number",
"description": "Upscale factor, 2 or 4 (default chosen by the server)"
},
"imageId": {
"type": "string",
"format": "uuid",
"description": "Image id (output.imageIds of a finished job)"
},
"requestId": {
"type": "string",
"format": "uuid",
"description": "Optional UUID; pass the same one when retrying so you are not charged twice"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId"
],
"properties": {
"prompt": {
"type": "string",
"description": "Optional prompt/description for the avatar video"
},
"audioUrl": {
"type": "string",
"format": "uri",
"description": "URL of the audio file (MP3/WAV/M4A, max 5MB, 2-60s). Required unless voiceNoteId is set."
},
"duration": {
"enum": [
5,
10
],
"type": "number",
"default": 5,
"description": "Video duration in seconds"
},
"modelTier": {
"enum": [
"standard",
"pro"
],
"type": "string",
"description": "Model quality tier (default pro)"
},
"aspectRatio": {
"enum": [
"1:1",
"9:16",
"16:9"
],
"type": "string",
"description": "Video aspect ratio (default 16:9)"
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID to use as the avatar face"
},
"voiceNoteId": {
"type": "string",
"format": "uuid",
"description": "UUID of a saved voice note to use as the audio track instead of audioUrl"
},
"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."
}
},
"additionalProperties": false
}| lighting | string | Lighting preset, e.g. "natural.goldenHour" |
| shotType | string | Camera framing, e.g. "close-up-portrait", "full-body" |
| requestId | string | 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. |
| expression | string | Facial expression preset, e.g. "positive.smile" |
| templateId | string | Template id from ryla_list_templates. Fills scene, outfit, pose, style, lighting and aspect ratio from the template; anything you set yourself wins. |
| aspectRatio | string | Image aspect ratio. Required unless templateId is given (then the template ratio is used). |
| characterId* | string | Character UUID to generate images for |
| environment | string | Environment preset or description |
| stylePreset | string | Visual style preset (default ultraRealistic) |
| loraStrength | number | LoRA strength, 0.1-2.0 |
| realismStyle | boolean | Apply realism post-processing style |
| templateMode | string | With templateId: "exact" (default) keeps the template pose, outfit and background; "inspired" makes a similar but different image. |
| promptEnhance | boolean | Enable AI prompt enhancement (default true) |
| enableFaceSwap | boolean | Route through face-swap for the reference image |
| referenceMethod | string | Reference image method (default instantid) |
| antiDetectPreset | string | Anti-detection intensity (default moderate); advanced/maximum require Pro |
| socialMediaReady | boolean | Apply anti-AI-detection post-processing |
| referenceImageUrl | string | Reference image URL for face consistency (InstantID/PuLID), as an alternative to LoRA |
| referenceStrength | number | Reference image strength, 0.1-1.0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId"
],
"properties": {
"nsfw": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"seed": {
"type": "integer",
"description": "Base seed; each image increments it"
},
"count": {
"type": "integer",
"default": 1,
"maximum": 10,
"minimum": 1,
"description": "Number of images to generate"
},
"scene": {
"type": "string",
"description": "Scene preset or description. Required unless templateId is given."
},
"loraId": {
"type": "string",
"description": "LoRA id to use, if not the default for this character"
},
"outfit": {
"type": "string",
"description": "Outfit description"
},
"poseId": {
"type": "string",
"description": "Pose preset id, e.g. \"standing-casual\""
},
"quality": {
"enum": [
"standard",
"ultra",
"2k",
"4k"
],
"type": "string",
"description": "Quality tier: \"standard\" or \"2k\" (HD, default), \"ultra\" or \"4k\" (4K, costs more credits)"
},
"useLora": {
"type": "boolean",
"description": "Use the character LoRA for face consistency, if trained"
},
"lighting": {
"type": "string",
"description": "Lighting preset, e.g. \"natural.goldenHour\""
},
"shotType": {
"type": "string",
"description": "Camera framing, e.g. \"close-up-portrait\", \"full-body\""
},
"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."
},
"expression": {
"type": "string",
"description": "Facial expression preset, e.g. \"positive.smile\""
},
"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."
},
"aspectRatio": {
"enum": [
"1:1",
"9:16",
"2:3",
"4:5",
"3:4",
"4:3",
"16:9",
"3:2"
],
"type": "string",
"description": "Image aspect ratio. Required unless templateId is given (then the template ratio is used)."
},
"characterId": {
"type": "string",
"format": "uuid",
"description": "Character UUID to generate images for"
},
"environment": {
"type": "string",
"description": "Environment preset or description"
},
"stylePreset": {
"enum": [
"ultraRealistic",
"instagramReady",
"editorialFashion",
"casualSelfie",
"professionalPortrait"
],
"type": "string",
"description": "Visual style preset (default ultraRealistic)"
},
"loraStrength": {
"type": "number",
"maximum": 2,
"minimum": 0.1,
"description": "LoRA strength, 0.1-2.0"
},
"realismStyle": {
"type": "boolean",
"description": "Apply realism post-processing style"
},
"templateMode": {
"enum": [
"exact",
"inspired"
],
"type": "string",
"description": "With templateId: \"exact\" (default) keeps the template pose, outfit and background; \"inspired\" makes a similar but different image."
},
"promptEnhance": {
"type": "boolean",
"description": "Enable AI prompt enhancement (default true)"
},
"enableFaceSwap": {
"type": "boolean",
"description": "Route through face-swap for the reference image"
},
"referenceMethod": {
"enum": [
"instantid",
"pulid",
"ipadapter"
],
"type": "string",
"description": "Reference image method (default instantid)"
},
"antiDetectPreset": {
"enum": [
"subtle",
"moderate",
"aggressive",
"advanced",
"maximum"
],
"type": "string",
"description": "Anti-detection intensity (default moderate); advanced/maximum require Pro"
},
"socialMediaReady": {
"type": "boolean",
"description": "Apply anti-AI-detection post-processing"
},
"referenceImageUrl": {
"type": "string",
"description": "Reference image URL for face consistency (InstantID/PuLID), as an alternative to LoRA"
},
"referenceStrength": {
"type": "number",
"maximum": 1,
"minimum": 0.1,
"description": "Reference image strength, 0.1-1.0"
}
},
"additionalProperties": false
}| sourceImageId |
| string |
| Image UUID to animate (default: newest completed image) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"characterId"
],
"properties": {
"nsfw": {
"type": "boolean",
"default": false,
"description": "Enable unrestricted fan content generation"
},
"prompt": {
"type": "string",
"description": "Optional prompt/description for the motion"
},
"duration": {
"type": "integer",
"default": 5,
"maximum": 30,
"minimum": 2,
"description": "Video duration in whole seconds, 2 to 30"
},
"requestId": {
"type": "string",
"format": "uuid",
"description": "Idempotency key: the same id returns the same job and never charges twice. Generated when omitted."
},
"wantAudio": {
"type": "boolean",
"description": "Generate sound with the video"
},
"resolution": {
"enum": [
"480p",
"720p",
"1080p"
],
"type": "string",
"default": "720p",
"description": "Output resolution (drives the price)"
},
"aspectRatio": {
"enum": [
"1:1",
"9:16",
"16:9"
],
"type": "string",
"description": "Video aspect ratio"
},
"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)"
}
},
"additionalProperties": false
}