From first connection to your first scene-aware image

Set up only the features you want, understand how scenes stay current, and learn where cast, prompts, images, and voices fit into the workflow.

1
ConnectYour image, LLM, and voice services
2
Open a chatToolkit captures context automatically
3
CreateReview the scene, prompt, image, or voice
01 Quick start

Get one complete path working first

You do not need to configure every section. Choose the outcome you want, then complete the matching setup below. The Home page in extension options shows your progress, and yellow Setup needed cards point to anything still missing.

  1. 1
    Install and pin the extension.

    Open extension options once so you can configure your providers.

  2. 2
    Set up one capability.

    Start with images, scene intelligence, or voice using the recipes below.

  3. 3
    Open a JanitorAI chat.

    The Toolkit flag appears at the top-right. Select it to open the in-page panel.

  4. 4
    Send or open a message.

    Toolkit reads the active chat locally and enables the relevant scene, cast, prompt, and voice controls.

I want images

Add an Image provider, then select it under Defaults.

Minimum setup

I want scene-aware prompts

Add an LLM connection, a Scene analyzer, and a Prompt tagger.

Best image workflow

I want voices

Add a TTS provider and a TTS helper, then assign voices in Cast.

Voice setup
Connection, provider, or helper? A connection gives Toolkit access to an LLM endpoint. Helpers reuse that connection for a particular job. Image and TTS providers produce the final media.
02 The workflow

Chat context moves through four visible stages

Toolkit keeps each stage separate so you can correct the story context without losing control of the final image.

ChatNew messages
SceneRunning story state
PromptEditable image tags
ImageYour chosen provider
Toolkit prompt tab using the active scene to prepare an image prompt
The prompt remains editable before you send it to your image provider.
03 Scene

Know which actions save text and which call the LLM

The scene is a compact description of the current story state. It is shared by Scene, Cast, and Generate, and updates live in an open Scene tab when the stored state changes.

Local save

Save override

Saves your exact scene text. It does not call the LLM or rewrite what you entered.

AI update

Refresh from messages

Sends unread chat messages to the scene analyzer. If there are none, Toolkit tells you the scene is already up to date.

AI revision

Apply now

Sends your one-shot change request with the current scene and asks the analyzer to rewrite it immediately—even without new messages.

AI reconcile

Reconcile scene with cast

Use this from Cast after changing a character's appearance or details. It explicitly brings those edits into the scene.

Why is the scene marked stale? New messages or saved cast changes can make the current scene incomplete. Follow the action shown by the status: refresh new messages from Scene, or reconcile cast changes from Cast.

While an AI scene update is running, Toolkit shows an in-progress indicator, disables competing update actions, and refreshes the visible scene when the result arrives.

See the complete correction

Open the illustrated walkthrough to follow the change from the original scene to the corrected image.

Walkthrough4 illustrated steps Correct a scene detail before generating again Manual edit → prompt → corrected image Open walkthroughClose walkthrough
  1. 1

    Characters appearance are inferred from the chat content. If you want to change something. Here, Kaelen’s hair match the scene appearance, but we want to change it.

    Chat, generated image, and Scene tab highlighting an incorrect description of Kaelen
  2. 2

    Edit and save the scene. Change the text directly and select Save manual scene. This stores the exact edit locally and makes no AI call. Also, from now on your changes take precedence over AI-generated content.

    Scene editor with Kaelen's corrected green ponytail description and manual scene saved confirmation
  3. 3

    Rebuild the prompt. Return to Generate, select Prompt so the corrected scene becomes image tags, review them, then select Generate.

    Generate tab highlighting the Prompt and Generate controls
  4. 4

    Check the new result. The rebuilt prompt now includes the corrected hair description, and the newly generated image reflects it.

    Corrected prompt and newly generated image showing Kaelen with green hair
04 Cast

Keep reusable character facts separate from the scene

Cast stores character appearance, prompt details, triggers, reference images, and voice assignments. The scene describes what is happening now.

Recommended routine

  1. 1Edit and save the cast member.
  2. 2Look for the stale-scene notice.
  3. 3Select Reconcile scene with cast.
  4. 4Review the updated scene before generating.

Why it is explicit

Saving a character should never spend LLM tokens or unexpectedly rewrite your scene. Reconciliation happens only when you request it.

Toolkit cast editor and scene reconciliation workflow
Cast changes are saved first, then reconciled into the current scene when you choose.

Follow the cast workflows

Each card opens a four-step visual guide with the exact controls used in the extension.

Walkthrough4 illustrated steps Add detected characters and correct their appearance Detection → cast edit → scene reconciliation Open walkthroughClose walkthrough
  1. 1

    Add detected characters. Toolkit lists names found in the current scene below an empty cast. Select Add to cast for the characters whose details you want to control.

    Cast tab offering to add Oro and Kaelen after detecting them in the scene
  2. 2

    Notice the scene warning. Adding or saving cast details marks the scene as needing attention; it does not silently spend tokens or rewrite the scene.

    Cast members added with a Scene needs attention warning and Reconcile scene with cast button
  3. 3

    Save the canonical appearance, then reconcile. Edit the character, select Save, and use Reconcile scene with cast to replace stale appearance details in the running scene.

    Kaelen cast editor showing an orange ponytail appearance, Save, and Reconcile scene with cast
  4. 4

    Build a fresh prompt. The prompt now uses the reconciled cast appearance, and subsequent generations keep that description in the visual context.

    Prompt and generated image updated to show Kaelen with an orange ponytail
Pro walkthrough4 illustrated steps Reuse a library character in another chat Save once → add elsewhere → track scene presence Open walkthroughClose walkthrough
  1. 1

    Save the character to the library. Use the save control on a cast member to make its canonical details reusable outside the current chat.

    Cast tab highlighting the control used to save Kaelen for reuse
  2. 2

    Add it from another chat. Open Cast in the destination chat, choose Kaelen under Add from library, and select Add.

    Another chat with Kaelen selected in the Add from library menu
  3. 3

    Off-screen is expected at first. A library character can belong to the cast without being present in the current scene. Toolkit marks that character off-screen until the story brings them in.

    Library character Kaelen added to the cast and marked off-screen
  4. 4

    Presence follows the story. When a new message introduces Kaelen, the next scene update marks him in scene and makes his saved library details available to prompts.

    Chat introducing Kaelen and Cast tab showing the library character now in scene
05 Image generation

Build, review, and generate without leaving the chat

  1. 1
    Check scene freshness.

    If a warning appears, refresh or reconcile before building the prompt.

  2. 2
    Build prompt.

    The prompt tagger converts scene and cast context into image-ready tags.

  3. 3
    Edit anything you want.

    The positive and negative prompt are yours to refine before generation.

  4. 4
    Generate.

    The selected image provider renders the result; it appears in the panel, inline in chat, and in Gallery.

Manual vs. automatic: manual generation starts when you select Generate. If your plan includes automatic triggers and you enable them, Toolkit can start after eligible bot messages.
Generated images shown inside JanitorAI and in the Toolkit gallery
Generated images stay attached to their chat context and are collected in Gallery.
Gallery

What the Pin number means

An image’s Pin number identifies the bot message it belongs to. Toolkit displays that image directly below the bot message with the matching page index.

  1. 1If an image is missing or appears under the wrong reply, open Gallery.
  2. 2Find the generated image and enter the index of the target bot message in its Pin field.
  3. 3Select Pin. The image is moved below that message in the chat.

Changing the pin does not regenerate, duplicate, or edit the image; it only changes where the existing image is attached in the chat.

06 Text-to-speech

One service produces audio; one helper understands speakers

TTS provider

The speech backend—such as Kokoro, ElevenLabs, OpenAI TTS, Edge TTS, or AllTalk—that turns text into audio.

TTS helper

An LLM-powered parser that separates narration and dialogue, identifies speakers, and detects emotion.

  1. 1Add a TTS provider in Settings and test its credentials or endpoint.
  2. 2Add an LLM connection, then create a TTS helper and choose one of the connection's available models.
  3. 3Assign voices to cast members; configure a narration voice if you want it separated.
  4. 4Use the speech control on a message, or enable automatic speech if available in your plan.
07 Settings & connections

Configure from the bottom of the dependency chain upward

1. ConnectionWhere an LLM lives and how to authenticate
2. HelperWhich model performs each task
3. DefaultWhich configured item Toolkit should use
LLM connections
Reusable endpoint, API key, and compatibility type. Model lists are fetched from here.
Scene analyzers
Choose a connection and model to maintain the running story description.
Prompt taggers
Choose a connection and model to translate scene context into image tags.
TTS helpers
Choose a connection and a real model returned by it to parse speakers and emotion.
Image providers
Credentials and provider-specific options for the service that renders images.
TTS providers
Credentials, endpoints, and voices for the service that produces audio.
Defaults
The providers and helpers used automatically when a tab does not ask you to choose one.
No models in a helper? First select and save a working LLM connection. Then use the model refresh control. If the endpoint requires a key or a custom base URL, verify those connection fields first.
Provider access is explicit. Each LLM, image, or TTS provider needs access only to its own configured address. Use Allow access in that provider's settings before testing it. You can revoke the same access there at any time. Toolkit does not use provider access to monitor browsing.
08 Troubleshooting

Start with the message Toolkit is showing you

The Toolkit flag does not appear on JanitorAI

Reload the JanitorAI tab after installing or updating the extension. Confirm the extension is enabled and has permission to run on janitorai.com.

A settings card says “Setup needed”

That capability has no configured item yet. Open the card, add one, and then check Defaults if the feature needs a default selection.

“Refresh from messages” says the scene is up to date

There are no unread chat messages for the scene analyzer. To intentionally change the current scene, enter a change request and select Apply now instead.

I changed a character, but the scene still has the old appearance

Saving Cast changes does not call the LLM. Select Reconcile scene with cast, then review the updated scene.

The scene is updating and the buttons are disabled

This prevents two competing LLM updates from overwriting each other. Keep the panel open; the scene text refreshes automatically when the update finishes.

My local provider cannot be reached

Open the provider in Settings and confirm that its exact address shows “Granted”. If not, select “Allow access”. Then make sure the provider is running, the base URL and port are correct, and its browser-access or CORS settings allow the extension.

Still stuck?

Share the exact status message and the provider type in Discord so the community can help quickly.

Ask on Discord