scenario-model-training
Use when generated assets must keep a consistent style, character, or product look and references stop scaling, or when a user asks to train a custom model through the Scenario MCP, fine-tune a LoRA, clone a voice, curate a training dataset, choose a base model, set epochs and sa
Install
npx skills add https://github.com/scenario-labs/skills/tree/main/skills/scenario-model-training
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install scenario-labs-skills@llmmart
git clone https://github.com/scenario-labs/skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole scenario-labs/skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Scenario Model Training
Overview
Train a custom model when one look must hold across many assets: an icon set, a recurring character, a product line. Prompts, references, and control maps are cheaper first steps: see scenario-consistency. Before quoting a training run, run the reference test scenario-consistency teaches for the subject at hand: the approved art as style references (with the prompt saying they set the style only) for a look, the hero as a subject reference for a character or product. At authoring time a style test matched the look of a custom LoRA on the same brief at a comparable per-image price, for the cost of one generation. Train when that test drifts across the set, not before; the worked example below starts after it.
The judgment calls live in two references: references/base-model-selection.md (the user interview that feeds recommend_training) and references/dataset-curation.md (dataset size, image rules, captions, and review per training type).
Connection and the core generation loop: see the scenario skill. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.
Training tools are not in the default toolset: get schemas with scenario_tools_search, run reads (recommend_training, model_get) via scenario_tool_execute_read and writes (model_create, train, model_update) via scenario_tool_execute_write, or reconnect with ?toolsets=full.
Quick reference
| Step | Tool |
|---|---|
| Pick a base architecture | recommend_training (LLM-powered, cost-bearing) |
| Create the model shell | model_create (data.type from the recommendation) |
| Upload the dataset | upload_asset + upload_asset_complete |
| Attach training images | train action upload_images, 10 asset ids per call |
| Estimate cost | train action configure with dry_run: true (a quote, no job) |
| Preview every epoch | config.sample_prompts, at least one on any multi-epoch run |
| Launch | train action start, with the same config or bare for defaults |
| Wait | jobs_wait with the returned job id |
| Generate | model_schema_get on YOUR model id, then model_run |
| Manage | models_list, model_get, model_update |
Worked example: a style LoRA for game props
recommend_trainingwithprompt: "hand-painted prop icons for a mobile RPG",modality: "image",dataset_shape: "single_images", plussubject,style, andpriorityfrom the interview. Returns a recommended variant, alternatives, anddataset_requirements(shape and size bounds). Cost-bearing: call it once with clear intent.model_createwithdata: {"name": "rpg-prop-icons", "type": "<type from step 1>"}. Note the returned model id.- Curate the set first (dataset reference), matching
dataset_requirementsfrom step 1, then upload each file withupload_assetplusupload_asset_complete(see thescenarioskill) and collect the asset ids. Forimage_pairsdatasets, map pairs withtrainactionset_pairs. trainwithaction: "upload_images",model_id,images: [<asset ids>], at most 10 per call (see Dataset limits); it changes data, so passteam_idandproject_id(scope: thescenarioskill).trainwithaction: "configure",config: {"epochs": 12, "sample_prompts": ["a rusty lantern icon, centered, plain field", "a blue mana potion icon, three-quarter view, plain field"]},dry_run: truereturns the quote and starts nothing.epochsis the main cost lever (scales linearly); size the other levers by dataset size (dataset reference).sample_promptsis not optional on a multi-epoch run: the trainer publishes a per-epoch checkpoint only for a run that has them, so a run without them finishes with its final weights alone, one epoch to choose from whateverepochssaid, and a model that ends up overfit has nothing earlier to fall back to (a 12-epoch run that came back with a single selectable epoch was this). Caps are per family, 8 on the Flux LoRA family and 4 on Flux.2, Qwen and ZImage LoRAs at authoring time, so read them off thetrainschema. Write prompts that test the concept off-dataset, following the caption rules of the training type (a style set names new subjects and never the style; a character set leads with the trigger word and a new pose or setting): they are the previews you pick the epoch from, and generic prompts return generic scenes at every epoch, which is how one run spent its whole quote on twenty previews of four unrelated landscapes. Edit families takesample_source_images, one asset id per prompt in the same order; every other family rejects the field. Show the user the quote and get a go-ahead, then launch withaction: "start"and the sameconfig(unattended, launch only when the task already authorized training or a budget covering it; otherwise stop and report the quote).configurealways quotes and never launches;dry_run: falsethere is rejected. Onlystartlaunches training;startwithdry_run: truequotes instead. Treatstartas spending the whole quote: do not count onstopreturning any of it.- The launch response includes a job:
jobs_waitwith its id injob_ids. No job id means nothing launched: report it instead of retrying. Training outlasts the server wait budget, so re-call with the returnedpending_job_idsuntil completed; never polljob_get. - Pick the epoch from the previews before generating: they sit on the model page in the web app, and the strongest is rarely the last. The pick is the user's; unattended, generate with the model as trained, say that the epoch choice was left open, and continue. Then
model_schema_geton your new model id andmodel_run; custom models carry their own parameter contract. A LoRA runs on the base that the schema'sruns_asandrun_with.required_argumentsname (seescenario) and on no other variant of its family, with one documented exception, the Z-Image LoRAs that carry across the Z-Image variants (base reference). Asize mismatchorweight dimensionerror at generation means another variant was sent as the base, not that the training failed: do not retrain, re-readrun_withand run the pair it names. - Manage:
models_listwithfilters: {"privacy": "private", "status": "trained"}lists ready models.model_getwithinclude_description: truefetches the full docs;model_updateedits name, descriptions, privacy.
Dataset limits that stop a run
Nearly every train failure is dataset handling, not hyper-parameters.
- Ten ids per call.
upload_imagestakes at most 10 asset ids; more returns 400Too many assetIds provided in a single request. Call once per 10-id chunk: the model accumulates the whole set. - Chunks must not overlap. Re-sending an id already attached returns 400
The provided assetId is already a training image of this model. After a partial failure, re-send only the chunks that did not land. - Two separate plan ceilings. Dataset size is capped per team: past it,
upload_imagesreturns 429 namingadd-training-imagewith the ceiling inactionLimit. Chunking cannot bypass it: trim to the strongest images or surface the upgrade. Concurrent trainings are capped separately asparallel-training, and some plans set it to zero. - Images before configuration.
configureorstarton an empty dataset fails validation on the training-image count. Pair datasets need whole pairs, with a family minimum above one. - One launch at a time. Once a run is live, launching again returns 400
Model is already training: wait withjobs_waitortrainaction: "stop". Repeated launches also hit a cooldown whose 429 namesremainingSeconds.
Common mistakes
- Training for a one-off. One on-style image is a prompt plus reference job; the public catalog holds many trained LoRAs,
searchfirst. - Reading the same wrong face on every output as ordinary drift. A model that reproduces one consistent stranger learned the captions, not the pictures: the images carried too little identity signal, usually because they were all derived from one source image and only look varied, so the dataset reads as near-duplicates of one composition. Fix the dataset (genuinely different shots, captions naming only the variables, a trigger word), not the epochs (dataset reference).
- Using
recommend_trainingto pick a generation model: it only picks training bases; userecommendorsearch. - Passing local paths or URLs to
train: upload withupload_assetfirst and pass asset ids; anything else surfaces as a body-shape error namingassetId. - Reading 400
Custom models only are supported for this endpointas a parameter problem: the route accepts your own trained models only; re-read the id frommodels_list. - Launching several epochs with no
sample_prompts: the run completes, but with one epoch and no previews, so the quote bought no comparison. - Treating a quote as a launch.
configurereturnstraining_started: falseand no job; launch throughstartonly after approval and require a job id before waiting. - Filtering
models_listwithstatus: "ready": free-form values are silently ignored, returning everything including deleted models. Use"trained". model_updatedata.tagsreplaces the whole tag set; usemodel_add_tags/model_remove_tagsfor diffs.- Expecting an older base from
recommend_training: the default excludes legacy families; setlegacy_ok: trueonly when a project must stay on one.
Voice cloning
Voice cloning starts from the same recommend_training call with modality: "voice" and dataset_shape: "short_audio" or "long_audio"; the returned type feeds model_create the same way.
Files (skills)
-
references
-
base-model-selection.md 4.6 KB
# Base model selection The base architecture is the one training decision that cannot be undone: a LoRA is bound to the base it was trained on, and that choice fixes the quality ceiling, generation speed, and per-image cost of every future run. Interview the user first, then let `recommend_training` make the call. The cheat sheet below is for discussing trade-offs in the user's terms, never for asserting a model id: availability differs per team and the catalog moves, so the returned `type` is the only value to build on. ## The interview Ask (or extract from the brief) before recommending anything, and map each answer to a `recommend_training` argument: 1. **What must the model reproduce?** A character, a product or object, an environment, an overall style, or a transformation applied to existing images. Maps to `subject` (an overall style is `"style_transfer"`); a transformation means an edit LoRA, so also `dataset_shape: "image_pairs"`. 2. **Realistic, stylized, or mixed rendering?** Maps to `style`. 3. **What matters most: quality, speed, or cost?** Maps to `priority` (default `balanced`). Anchor it with expected volume: hero art and key visuals justify `quality`; thousands of assets or near real-time use justify `speed` or `cost`. 4. **What does the dataset look like?** Single images or before/after pairs; audio for voice. Maps to `dataset_shape` (and `modality: "voice"` for cloning, covered in SKILL.md). 5. **Any tie to an existing family?** Existing LoRAs to pair with or a pipeline pinned to an older base are the only reasons to set `legacy_ok: true`; the default excludes legacy families on purpose. Then call `recommend_training` once, passing the user's original wording as `prompt` plus the extracted arguments. It returns the family, the exact `type` for `model_create`, up to three alternatives, and `dataset_requirements` to curate against (see [dataset-curation.md](dataset-curation.md)). ## Family cheat sheet Positioning of the current image families, as documented in the Scenario knowledge base (help.scenario.com): | Family | Positioning | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | Flux 2 Dev | Largest variant (32B): highest detail and prompt adherence; hero-quality work at the highest cost. | | Flux 2 Klein 9B | The quality-speed sweet spot, faster than Dev; a strong default for production volume. | | Flux 2 Klein 4B | Smallest and fastest: near real-time generation and high-volume pipelines at the lowest cost in the family. | | Z-Image | Strong training fidelity for character and style LoRAs at low cost; strong for photoreal characters and bilingual English/Chinese text rendering. | | Z-Image Turbo | The fastest, cheapest inference in the family but lower training fidelity: train on Z-Image, since the LoRA carries across the Z-Image variants. | | Qwen Image | Strong text rendering (signs, UI, HUDs) and prompt adherence for complex scenes; cost-effective at volume; caption-sensitive training. | | Flux 2 Edit, Qwen Edit | Edit LoRAs trained on before/after pairs; Qwen Edit responds best to context-preserving instructions ("replace X with Y"). | | Flux.1, Flux Kontext | Legacy families, excluded from recommendations unless `legacy_ok: true`. | Z-Image is the only family whose trained LoRA carries across its own variants; treat every other version choice as final. That portability also settles a conflict the tool can create: with `priority: "cost"`, `recommend_training` may recommend the Turbo variant, which trains worse; prefer the plain Z-Image alternative from the same response and run the finished LoRA on Turbo. When the user hesitates between quality and speed tiers, ask where the volume will be generated, not where the training happens: training is a one-time cost, inference is forever. ## Confirm the cost The training quote is computed server-side from the base version, image count, and configuration, so never assert a price: `train` `action: "configure"` with `dry_run: true` returns the estimate without starting anything, and `action: "start"` launches once the quote is approved, exactly as the worked example in SKILL.md shows. -
dataset-curation.md 8.3 KB
# Dataset curation Read this before uploading training images, and whenever the task is to build or review a dataset. Nearly every disappointing LoRA traces back to the dataset or its captions, not to hyper-parameters, so spend the conversation here before touching `config`. ## Universal rules - **Small and deliberate beats big and noisy.** 5 to 15 images is the sweet spot for most single-image LoRAs (styles tolerate up to about 20); a 12-image set with one clear intent outperforms 40 mixed pieces. Trimming also keeps you clear of the per-plan dataset ceiling described in SKILL.md. - **Resolution floor.** Aim for 1024px or more on every side; upscale marginal images in-platform before training instead of feeding soft sources. - **Consistency in the one thing being taught, variety in everything else.** Every image must reinforce the same target (same character, same artistic hand, same material). Everything the model should treat as variable (subject, pose, background, framing, lighting) should actually vary across the set. - **Drop duplicates and near-duplicates.** Repetition teaches the repeated composition, not the concept. A set generated from one source image is the disguised case: twenty renders of the same face in new poses share one lighting, one camera distance, one expression range, and the model learns that render rather than the person. The symptom is a model that reproduces the same wrong face consistently while matching the caption text (hair, skin, age), because the captions carried more signal than the pictures. Rebuild the set from genuinely different shots, and where the only source is one image, shoot the variety deliberately (different lens distances, expressions, lighting, backgrounds) before treating any of it as a dataset. ## Composition by training type | Type | Sweet spot | Rules | | ----------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Character | 5-15 | Identical defining traits everywhere; at least 3 distinct poses even in a 5-8 image set; vary angle (front, profile, three-quarter), expression, and framing; mix backgrounds so the character does not learn to live in one room; crop out any second character. | | Style | 10-20 | One cohesive aesthetic; vary subjects, environments, and zoom so no subject becomes part of the style; never mix two styles in one dataset (train them separately). | | Multi-character | 8-15 | Every character appears in every image with its own constant traits; vary interactions and scenes. | | Object or product | 5-15 | Constant geometry, material, and branding; vary angle, lighting, background, and scale. | | Environment | 5-15 | Signature location elements constant; vary time of day, weather, and camera angle. | | Texture | 10-15 | One material or pattern family; neutral ambient lighting keeps the result relightable; sources need not tile, the model handles tiling at generation time. | | Edit pairs | 5-15 pairs | Counted in pairs: input, output, and a written instruction each; the transformation must be the same idea in every pair; drop pairs whose transformation diverges from the rest. | ## Captions decide constant versus variable Every uploaded image gets an auto-generated caption; treat it as a draft, not an endpoint. The single principle everything follows from: **describe what should vary, never what must stay.** Whatever a caption names, the model learns to treat as promptable; whatever no caption names, it absorbs as part of the concept. - Character, object, environment: open every caption with the same invented trigger word (`KAEL_07`, `MYBRAND_X`), then the constant identity traits, then the per-image variables (pose, expression, setting, light). A trigger word is caption text, not a training parameter; use it in every caption or in none, and reuse it later in generation prompts. - Style: never name the style ("watercolor", "anime"); the style is what the model learns implicitly, and naming it ties the look to a word instead. Describe subject and scene only. A trigger word is optional, and auto-captions are often close enough for styles. - Edit pairs: instructions, not descriptions, with one uniform verb pattern across the whole set ("turn the photo into MYSTYLE watercolor"). Context-preserving phrasing ("replace X with Y") outperforms whole-scene phrasing on edit families. - Family note: Qwen-based training weighs captions heavily; fifteen minutes of caption cleanup routinely beats parameter tuning there. ## Reviewing a dataset through MCP Training consumes each image's asset `description` as its caption: a rewritten description wins, and the auto-generated caption stays visible as `automaticCaptioning`, the fallback when no description is set. Scenario-generated images are already assets, so their ids go straight to `upload_images` with no upload step, and the `upload_images` response returns each attached image's auto-caption, the natural starting point for review. For a dataset attached earlier, `model_get` (via `scenario_tool_execute_read`) returns the training images with both fields; `asset_analyze` (catalog, cost-bearing) inspects image content at scale ("is a second character visible", "does this match the style of the others"). Fixes: rewrite a caption with `asset_update` (`metadata: {"description": "..."}`), remove an image with `train` `action: "delete_image"`, replace one with `action: "update_image"`. For a dataset still on disk, check dimensions and duplicates locally before spending uploads. ## Audit before launch - Every image sharp and at or above the resolution floor; no duplicates. - One intent per dataset; anything off-concept cropped out or removed. - Trigger word all-or-none and byte-identical; constants present in every caption; variables genuinely differ per image. - Edit sets: whole pairs only, one verb pattern, an instruction on every pair. - No generic auto-caption boilerplate left ("beautiful", "stunning"). - Then `train` `configure` with `dry_run: true` for the cost before launching with `start`. ## Parameters follow the dataset Per-family defaults and ranges live on the `train` config schema; scale them by dataset size (per the Scenario knowledge base): | Images | learning_rate | epochs | nb_repeats | | ------ | ------------- | ------ | ---------- | | 5-10 | 5e-5 | 15-20 | 20-30 | | 10-25 | 1e-4 | 10 | 15-20 | | 25-50 | 2e-4 | 6-8 | 10-15 | Underfit shows as the concept barely surfacing; overfit as training compositions reproduced literally and prompt changes losing effect. Per-epoch previews are how you tell the two apart before spending on generations: `config.sample_prompts` (at least one on any run with more than one epoch, per-family cap on the `train` schema, edit families also needing `sample_source_images` in the same order) renders every prompt at every epoch, and without them the trainer publishes no per-epoch checkpoints at all. Write them as off-dataset tests of the concept (trigger word, new pose, new setting, new framing), then pick the epoch on the model page and confirm with `model_run` on fresh prompts.
-
-
SKILL.md 10.7 KB
--- name: scenario-model-training description: "Use when generated assets must keep a consistent style, character, or product look and references stop scaling, or when a user asks to train a custom model through the Scenario MCP, fine-tune a LoRA, clone a voice, curate a training dataset, choose a base model, set epochs and sample prompts, estimate training cost, diagnose a trained model that lost its identity or has one epoch, or generate with a trained model. Keywords: custom model, LoRA, dataset curation, epoch previews." license: MIT --- # Scenario Model Training ## Overview Train a custom model when one look must hold across many assets: an icon set, a recurring character, a product line. Prompts, references, and control maps are cheaper first steps: see `scenario-consistency`. Before quoting a training run, run the reference test `scenario-consistency` teaches for the subject at hand: the approved art as style references (with the prompt saying they set the style only) for a look, the hero as a subject reference for a character or product. At authoring time a style test matched the look of a custom LoRA on the same brief at a comparable per-image price, for the cost of one generation. Train when that test drifts across the set, not before; the worked example below starts after it. The judgment calls live in two references: [references/base-model-selection.md](references/base-model-selection.md) (the user interview that feeds `recommend_training`) and [references/dataset-curation.md](references/dataset-curation.md) (dataset size, image rules, captions, and review per training type). Connection and the core generation loop: see the `scenario` skill. If a sibling skill named here is missing from your available skills, ask the user to install it (`npx skills add scenario-labs/skills --skill <name>`); unattended, proceed from tool schemas and flag the gap. Training tools are not in the default toolset: get schemas with `scenario_tools_search`, run reads (`recommend_training`, `model_get`) via `scenario_tool_execute_read` and writes (`model_create`, `train`, `model_update`) via `scenario_tool_execute_write`, or reconnect with `?toolsets=full`. ## Quick reference | Step | Tool | | ------------------------ | ------------------------------------------------------------------- | | Pick a base architecture | `recommend_training` (LLM-powered, cost-bearing) | | Create the model shell | `model_create` (`data.type` from the recommendation) | | Upload the dataset | `upload_asset` + `upload_asset_complete` | | Attach training images | `train` action `upload_images`, 10 asset ids per call | | Estimate cost | `train` action `configure` with `dry_run: true` (a quote, no job) | | Preview every epoch | `config.sample_prompts`, at least one on any multi-epoch run | | Launch | `train` action `start`, with the same `config` or bare for defaults | | Wait | `jobs_wait` with the returned job id | | Generate | `model_schema_get` on YOUR model id, then `model_run` | | Manage | `models_list`, `model_get`, `model_update` | ## Worked example: a style LoRA for game props 1. `recommend_training` with `prompt: "hand-painted prop icons for a mobile RPG"`, `modality: "image"`, `dataset_shape: "single_images"`, plus `subject`, `style`, and `priority` from the interview. Returns a recommended variant, alternatives, and `dataset_requirements` (shape and size bounds). Cost-bearing: call it once with clear intent. 2. `model_create` with `data: {"name": "rpg-prop-icons", "type": "<type from step 1>"}`. Note the returned model id. 3. Curate the set first (dataset reference), matching `dataset_requirements` from step 1, then upload each file with `upload_asset` plus `upload_asset_complete` (see the `scenario` skill) and collect the asset ids. For `image_pairs` datasets, map pairs with `train` action `set_pairs`. 4. `train` with `action: "upload_images"`, `model_id`, `images: [<asset ids>]`, at most 10 per call (see Dataset limits); it changes data, so pass `team_id` and `project_id` (scope: the `scenario` skill). 5. `train` with `action: "configure"`, `config: {"epochs": 12, "sample_prompts": ["a rusty lantern icon, centered, plain field", "a blue mana potion icon, three-quarter view, plain field"]}`, `dry_run: true` returns the quote and starts nothing. `epochs` is the main cost lever (scales linearly); size the other levers by dataset size (dataset reference). `sample_prompts` is not optional on a multi-epoch run: the trainer publishes a per-epoch checkpoint only for a run that has them, so a run without them finishes with its final weights alone, one epoch to choose from whatever `epochs` said, and a model that ends up overfit has nothing earlier to fall back to (a 12-epoch run that came back with a single selectable epoch was this). Caps are per family, 8 on the Flux LoRA family and 4 on Flux.2, Qwen and ZImage LoRAs at authoring time, so read them off the `train` schema. Write prompts that test the concept off-dataset, following the caption rules of the training type (a style set names new subjects and never the style; a character set leads with the trigger word and a new pose or setting): they are the previews you pick the epoch from, and generic prompts return generic scenes at every epoch, which is how one run spent its whole quote on twenty previews of four unrelated landscapes. Edit families take `sample_source_images`, one asset id per prompt in the same order; every other family rejects the field. Show the user the quote and get a go-ahead, then launch with `action: "start"` and the same `config` (unattended, launch only when the task already authorized training or a budget covering it; otherwise stop and report the quote). `configure` always quotes and never launches; `dry_run: false` there is rejected. Only `start` launches training; `start` with `dry_run: true` quotes instead. Treat `start` as spending the whole quote: do not count on `stop` returning any of it. 6. The launch response includes a job: `jobs_wait` with its id in `job_ids`. No job id means nothing launched: report it instead of retrying. Training outlasts the server wait budget, so re-call with the returned `pending_job_ids` until completed; never poll `job_get`. 7. Pick the epoch from the previews before generating: they sit on the model page in the web app, and the strongest is rarely the last. The pick is the user's; unattended, generate with the model as trained, say that the epoch choice was left open, and continue. Then `model_schema_get` on your new model id and `model_run`; custom models carry their own parameter contract. A LoRA runs on the base that the schema's `runs_as` and `run_with.required_arguments` name (see `scenario`) and on no other variant of its family, with one documented exception, the Z-Image LoRAs that carry across the Z-Image variants (base reference). A `size mismatch` or `weight dimension` error at generation means another variant was sent as the base, not that the training failed: do not retrain, re-read `run_with` and run the pair it names. 8. Manage: `models_list` with `filters: {"privacy": "private", "status": "trained"}` lists ready models. `model_get` with `include_description: true` fetches the full docs; `model_update` edits name, descriptions, privacy. ## Dataset limits that stop a run Nearly every `train` failure is dataset handling, not hyper-parameters. - **Ten ids per call.** `upload_images` takes at most 10 asset ids; more returns 400 `Too many assetIds provided in a single request`. Call once per 10-id chunk: the model accumulates the whole set. - **Chunks must not overlap.** Re-sending an id already attached returns 400 `The provided assetId is already a training image of this model`. After a partial failure, re-send only the chunks that did not land. - **Two separate plan ceilings.** Dataset size is capped per team: past it, `upload_images` returns 429 naming `add-training-image` with the ceiling in `actionLimit`. Chunking cannot bypass it: trim to the strongest images or surface the upgrade. Concurrent trainings are capped separately as `parallel-training`, and some plans set it to zero. - **Images before configuration.** `configure` or `start` on an empty dataset fails validation on the training-image count. Pair datasets need whole pairs, with a family minimum above one. - **One launch at a time.** Once a run is live, launching again returns 400 `Model is already training`: wait with `jobs_wait` or `train` `action: "stop"`. Repeated launches also hit a cooldown whose 429 names `remainingSeconds`. ## Common mistakes - Training for a one-off. One on-style image is a prompt plus reference job; the public catalog holds many trained LoRAs, `search` first. - Reading the same wrong face on every output as ordinary drift. A model that reproduces one consistent stranger learned the captions, not the pictures: the images carried too little identity signal, usually because they were all derived from one source image and only look varied, so the dataset reads as near-duplicates of one composition. Fix the dataset (genuinely different shots, captions naming only the variables, a trigger word), not the epochs (dataset reference). - Using `recommend_training` to pick a generation model: it only picks training bases; use `recommend` or `search`. - Passing local paths or URLs to `train`: upload with `upload_asset` first and pass asset ids; anything else surfaces as a body-shape error naming `assetId`. - Reading 400 `Custom models only are supported for this endpoint` as a parameter problem: the route accepts your own trained models only; re-read the id from `models_list`. - Launching several epochs with no `sample_prompts`: the run completes, but with one epoch and no previews, so the quote bought no comparison. - Treating a quote as a launch. `configure` returns `training_started: false` and no job; launch through `start` only after approval and require a job id before waiting. - Filtering `models_list` with `status: "ready"`: free-form values are silently ignored, returning everything including deleted models. Use `"trained"`. - `model_update` `data.tags` replaces the whole tag set; use `model_add_tags` / `model_remove_tags` for diffs. - Expecting an older base from `recommend_training`: the default excludes legacy families; set `legacy_ok: true` only when a project must stay on one. ## Voice cloning Voice cloning starts from the same `recommend_training` call with `modality: "voice"` and `dataset_shape: "short_audio"` or `"long_audio"`; the returned `type` feeds `model_create` the same way.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.