100 lines
4.7 KiB
Markdown
100 lines
4.7 KiB
Markdown
# Cursor prompt — unique mobile portrait shell (new file)
|
||
|
||
Do not edit `STUDIO2-DISPLAY-CURSOR-PROMPT.md`, `STUDIO2-DISPLAY-LAYOUT-SPEC.md`, `STUDIO2-LORA-DIALS-PROMPT.md`, or `STUDIO2-VIEWER-FIT-PROMPT.md`.
|
||
|
||
Branch: **`studio-2`**. Push `origin/studio-2` only. Chrome only. Same `form`, queue, generate, locks, LoRAs, library. No graph/runner/extend/YuE2 changes.
|
||
|
||
Desktop 3-column bench is **done**. Do not restyle desktop to make mobile work. Do not stack the three columns in a tall scroll and call it mobile.
|
||
|
||
Breakpoint: `(max-width: 767px)` **and** coarse pointer. Use a **separate mobile shell** (`Studio2Mobile.vue` or `Bench` template `v-if="isMobile"`) that binds the **same** state as desktop Bench.
|
||
|
||
Reference mock: `studio2-display-ux/mobile-mock.html` (open on a 390×844 viewport).
|
||
|
||
---
|
||
|
||
## Why unique
|
||
|
||
Portrait cannot show 260 | stage | 280. If you shrink that grid you lose Generate, LoRAs, and the still.
|
||
|
||
Mobile is a **viewer-first phone app** with sheets for the inspector and the queue. Every desktop control still exists. It is just not on screen at once.
|
||
|
||
---
|
||
|
||
## Chrome map (portrait)
|
||
|
||
```
|
||
┌ status / 48px header ─────────────────────────────────────┐
|
||
│ AIGen Inbox ▾ GPU ☰ queue(n) │
|
||
├ task chips (scroll-x) Generate Edit … Music ─────────────┤
|
||
├ model chips Klein | Krea or H3 | LTX ───────┤
|
||
├───────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ STAGE (contain, full remaining height) │
|
||
│ Library (stage chrome) · eye ≥48px top-right │
|
||
├ [Slots] [Prompt] [Look] [Gen] Generate (amber, 48px) ─┤
|
||
└───────────────────────────────────────────────────────────┘
|
||
|
||
Library is a **stage button** that opens the Library modal/sheet (same tiles,
|
||
filters, Use as photo / Copy / Load / Delete). The under-stage filmstrip row
|
||
is revoked — recents live in the modal (newest first).```
|
||
|
||
Bottom **dock** is 4 tabs that open sheets, plus Generate always visible:
|
||
|
||
| Tab | Sheet contents (all desktop fields) |
|
||
|---|---|
|
||
| **Slots** | Hero, Start, End, Guides, Upload, Lock face, Lock outfit + Klein caption |
|
||
| **Prompt** | Prompt textarea, negative chips, style/render/quality/lighting chips |
|
||
| **Look** | LoRA stack (filename + Model/CLIP sliders + numbers), Seed + dice, Aspect, extra generation settings (steps/CFG only if that engine uses them) |
|
||
| **Gen** | Engine-specific video/music extras: duration/target length, fps, turbo, camera beats, YuE2 hints. Not a second Generate button. |
|
||
|
||
**Generate** is the rightmost dock control — 48×48 or a 120px amber pill. Never labeled Queue.
|
||
|
||
Header **☰** or badge **Queue (n)** opens a **right/bottom sheet** of job cards (same cards as desktop right column).
|
||
|
||
Library and Settings stay header links (or a `…` menu). Do not drop them.
|
||
|
||
---
|
||
|
||
## Stage
|
||
|
||
- Same contain rule as desktop: `max-width/height 100%`, `object-fit: contain`, no inner max-width cap.
|
||
- Still / video / audio switch on `selected.kind`. No waveform on a still.
|
||
- Safe area: `padding-bottom: env(safe-area-inset-bottom)` on the dock.
|
||
- Filmstrip under stage, 72×48 tiles, amber ring on selected, horizontal scroll. Trash on selected tile only.
|
||
|
||
---
|
||
|
||
## Sheets
|
||
|
||
- One sheet at a time. Height `min(85vh, content)`. Drag handle + Done.
|
||
- Fields keep desktop order and payload keys.
|
||
- LoRA card = filename + two (or one) sliders + numeric `0.00–2.00`. No hashed meters.
|
||
- Krea disabled-on-Edit with the same one-line reason.
|
||
- LTX disabled on AIGen with `xAIGen only`.
|
||
- xAIGen hide defaults: eye on stage + each tile. No global hide checkbox required on mobile.
|
||
|
||
---
|
||
|
||
## What you must not do
|
||
|
||
- No desktop 3-column at `<768`.
|
||
- No “rotate device” dead end.
|
||
- No missing task (Iterate if desktop has it — add the chip).
|
||
- No second `form` object.
|
||
- Do not change Classic/Studio desktop tokens in this pass.
|
||
|
||
`isMobile` from `window.matchMedia('(max-width: 767px)')` + resize listener. SSR: default desktop to avoid hydration flip, then switch on mount.
|
||
|
||
---
|
||
|
||
## Done when
|
||
|
||
390×844 portrait:
|
||
|
||
- Stage fills the phone; dock + chips visible without page-zoom.
|
||
- Slots, Prompt, Look, Gen sheets each reachable; Generate queues a job.
|
||
- Queue sheet lists jobs.
|
||
- Rotate to ≥768: desktop 3-column returns, same job state.
|
||
|
||
One or two present-tense commits. Screenshot 390 and 1440.
|