Skip to content

Repository files navigation

English · العربية · Español · Français · 日本語 · 한국어 · Tiếng Việt · 中文 (简体) · 中文(繁體) · Deutsch · Русский

LazyingArt banner

Lala Studio

A calm, local production room for turning character stories into generated video and publish-ready media.

Website Codex React Sponsor

Lala Studio combines a Markdown story room, natural-language critique, stable prompt assembly, Xiaoyunque browser production, persistent job monitoring, and LazyEdit publishing in one focused web application and CLI. It is designed to run locally, preserve human control over paid actions, and connect to a compatible media project without embedding private paths or credentials.

Donate PayPal Stripe
Donate PayPal Stripe

Preview

Lala Studio story workspace

What It Does

  • Maintains a Git-friendly world bible for recurring characters, places, tools, outfits, relationships, long-running arcs, episode links, and media lineage.
  • Writes and edits Markdown stories with deterministic checks for dialogue, causality, character identity, natural wording, duration, and payoff.
  • Runs a bounded draft → independent critic → final writer pipeline, with one deterministic repair retry and explicit human apply.
  • Treats the writer panel as a real conversation: it sends a bounded recent history with the current editor draft, gives the latest relevant reply precedence for follow-up edits, and auto-routes plain-language requests to chat, critique, full drafting, or save-ready revision.
  • Routes Codex gpt-5.6-sol by task: low effort for chat, high for drafting, xhigh for critique, and ultra for final writing and production.
  • Keeps a visible co-writer conversation where a video request becomes an inspectable production contract instead of an immediate paid action.
  • Builds path-free Xiaoyunque prompts with exact attachment numbering, then pre-generates reusable reference images before browser upload.
  • Creates each physical multilingual word card from the supplied product reference, then renders the four canonical strings deterministically so image-model spelling cannot be accepted by mistake.
  • Can create and preview an episode-specific cinematic scene keyframe from a separately selected subset of character and product references; the verified PNG is appended to the normal Xiaoyunque upload order.
  • Prepares the browser composer without spending credits, and requires explicit confirmation before one paid generation submit.
  • Opens the logged-in Xiaoyunque profile inside a second observable noVNC desktop before every browser production run.
  • Recognizes publish commands in Studio chat, verifies or downloads the matching result, then packages it through LazyEdit with story context, portrait blur fill, multilingual subtitles, a top-right logo, and platform queues.
  • Keeps cancellable job state in .lalastudio/ while keeping secrets and browser profiles outside Git.

Quick Start

git clone https://github.com/lachlanchen/LalaStudio.git
cd LalaStudio
npm install
cp .env.example .env
npm run dev

Set LALA_STUDIO_PROJECT_ROOT in .env to a compatible media project. Open http://127.0.0.1:4311. The production server runs at http://127.0.0.1:4312 after npm run build && npm start.

Use As A Submodule

git submodule add https://github.com/lachlanchen/LalaStudio.git studio
git submodule update --init --recursive
cd studio && npm install && npm run dev

When installed directly under a project that contains references/ and scripts/, Lala Studio discovers its parent automatically.

CLI

node bin/lala-studio.js status
node bin/lala-studio.js story list
node bin/lala-studio.js ai refine "Turn this idea into a polished story" --story-id STORY_ID
node bin/lala-studio.js ai final "Polish and validate this story" --story-id STORY_ID
node bin/lala-studio.js prompt-build STORY_ID
node bin/lala-studio.js video prepare STORY_ID
node bin/lala-studio.js video generate STORY_ID --confirm-paid

prepare never submits. generate is rejected without --confirm-paid. Publishing without --confirm creates a local LazyEdit preview.

Visible noVNC Control

Run Lala Studio in its own observable Chrome profile without sharing the Xiaoyunque, JLCEDA, or AgenticApp browser:

scripts/launch_studio_novnc.sh start --project-root "$LALA_STUDIO_PROJECT_ROOT"
node tools/lala-studio-browser.mjs status
node tools/lala-studio-browser.mjs navigate --view world
node tools/lala-studio-browser.mjs world-story --title "Episode title" --duration 15 --place cloud-harbor-home,star-bridge-market --arc fading-journey-marks --hook "One visible next-episode clue" --message "One complete episode idea"
node tools/lala-studio-browser.mjs story-pipeline --title "Story title" --duration 15 --message "Story idea"
node tools/lala-studio-browser.mjs chat --action final --message "Polish the current story"
node tools/lala-studio-browser.mjs production \
  --message "First generate a cinematic scene keyframe, then prepare this 15 second video" \
  --operation references \
  --scene-assets raraxia,ayachan
node tools/lala-studio-browser.mjs delivery \
  --message "Download the current result and publish it to all platforms" \
  --operation inspect

The controller manipulates the visible webapp through Playwright/CDP and saves evidence under .runtime/browser-evidence/. Studio itself ensures the separate Xiaoyunque desktop at noVNC port 6099; the Studio desktop remains on 6116. See World Bible and Media Versioning, Story Refinement Pipeline, and Isolated noVNC Browser Control for the continuity, writing, chat-to-video, and delivery contracts.

Project-local References

Episode-specific images can be added without changing Studio source. Create the ignored file .lalastudio/assets.json in the active media project:

{
  "assets": [
    {
      "id": "guest-character",
      "label": "Guest character",
      "role": "Identity reference for this episode",
      "relativePath": "artifacts/images/guest-character.png",
      "required": true,
      "defaultSelected": true
    }
  ]
}

Paths must be relative to the project root and may not escape it. Configure visible production controls reproducibly with node tools/lala-studio-browser.mjs configure-production --help.

Validate

npm test
npm run build
npm run test:e2e

The suite covers model routing, prompt privacy and numbering, story checks, API safety contracts, and desktop/mobile Playwright views.

Citation

If you use Lala Studio in research or production tooling, cite this repository. GitHub reads CITATION.cff and shows a Cite this repository panel.

@software{chen_lalastudio_2026,
  author = {Chen, Lachlan},
  title = {Lala Studio: A Local Story-to-Video Production Workspace},
  year = {2026},
  url = {https://github.com/lachlanchen/LalaStudio}
}

Status

The core editor, CLI, model router, browser-production contract, job system, and publishing adapter are implemented. External generation and publishing services remain optional local integrations and may require login.

About

Lala Studio: a local GPT-5.6-Sol story-to-video workspace with React, browser production, job monitoring, and LazyEdit publishing

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages