Lesson media types.
What each one means.
image
AI image generation. The student’s chat exposes generate_image and related tools — Gemini 3 Pro Image, OpenAI’s gpt-image-1.5, the local ComfyUI Flux/SD3.5/Qwen-Image stack. Output is one or more PNGs. Use for ideation, mood boards, asset generation, sketch references.
video
AI video generation. Tools: generate_video, edit_image (for first-frame), and the Wan / Hailuo backends. Output is short clips (typically 4–8 s). Use for motion studies, animation experiments, transitions.
3d
AI 3D mesh generation. Tools: generate_image (the studio re-renders the 2D source against a light-gray background first), animate_3d, plus the HunYuan3D 2.0/2.1 dual-pass shape→texture pipeline. Output is a GLB. Use for sculpting, character modeling, scene assets.
code
Creative coding. Tools: generate_code, edit_code. Framework comes from the lesson’s framework field — p5js, threejs, or glsl. Output is a sketch the student can run in-browser. Use for any lesson that should result in a runnable program.
app
App Lab. A guided prototype-building flow with four stages (shape brief, map product, prototype, inspect). Tools: shape_brief, map_product, prototype_app, inspect_app. Output is a small web app the student designs and walks through. Use sparingly — App Lab is advanced.
The default is unrestricted.
If a lesson’s mediaTypes array is empty, the lesson is unrestricted. The student can use any tool the studio supports. This is the default for legacy lessons and for any lesson where you don’t set chips.
The moment you click any chip, you’re creating a whitelist. The student can only use tools matching the chips you set. Set code only and the chat won’t expose image-generation tools at all — even if the student types “draw me a cat.”
Server-side enforcement: when a lesson chat is opened, /api/chat rejects (HTTP 409 lesson_media_locked) any request whose mediaMode isn’t in the lesson’s set. The UI hides disallowed mode tabs as a courtesy, but even an attacker scripting requests can’t bypass it.
Most lessons need exactly one.
The right answer is almost always one chip. Mixed sets exist but are rare:
- One chip — the lesson is about one thing. A figure-drawing lesson is
image. A particle-physics simulation iscode. A character-modeling lesson is3d. - Two chips — the lesson is a deliberate two-step.
image + codefor “design a character (image), then code its motion (code)”.image + videofor “generate stills, then animate them.” - Three or more — almost never. If your lesson uses three media, it’s probably actually three lessons.
- Empty — the lesson is exploratory or a sandbox. Use for the very first lesson of a course where you want students to play around.
The wizard’s AI scaffolder defaults to one chip per lesson (and uses your step-1 default-media-types as a hint). You usually don’t need to change anything in step 3 review.
What you’re actually preventing.
Locking a lesson’s media is mostly about focus, not security. You’re telling the student “this lesson is about X — don’t side-quest into Y.” Reasons to lock:
- Pedagogical — you want them to engage with code, not punt to image generation. Forcing the medium pushes them through the actual learning objective.
- Quota — image and video generation are expensive. A code-only lesson uses essentially zero AI quota. If you’re running a class on a tight budget, locking lessons to
codeprotects your spend. - Time — a lesson that has to be done in 30 minutes can’t afford a 4-minute video render plus retries. Lock to fast media.
Reasons not to lock:
- Discovery / sandbox lessons.
- Capstone lessons where students choose their own approach.
- You don’t have a strong opinion. Empty is fine.
Three places.
- Course Wizard step 1 — sets default media for every AI-proposed lesson in step 3.
- Course Wizard step 3 — per-lesson chips on each card. Use the Range assign helper for chunks.
- Lesson editor — open any lesson’s pencil icon on the course detail page. Chips are at the bottom of the form.
The lesson editor.
For every other field on a lesson and what it does at runtime, see 08 / Edit a lesson.