diff --git a/studio/src/App.tsx b/studio/src/App.tsx
index 19c010a8..fec2c52c 100644
--- a/studio/src/App.tsx
+++ b/studio/src/App.tsx
@@ -17,18 +17,23 @@ import { usePromptHistory } from './components/SceneBuilder/PromptHistory';
import { theme } from './theme';
import { computeNextBatchSize } from './lib/generateUntil';
import { buildNegativePrompt, buildPrompt } from './lib/prompt';
+import { PoseGallery } from '@lilith/imajin-config';
import type { LayoutId, MaturityRating, ModelId, PersonAppearance, SceneState, StudioRequest } from './types';
// ─── Default state ────────────────────────────────────────────────────────────
+// Editorial standing pose — avoids the selfie/lying-down default that SDXL
+// tends to generate when no pose is constrained and the prompt has a bedroom/hotel scene.
+const DEFAULT_POSE = PoseGallery.helpers.getPose('sexy-leaning-wall') ?? null;
+
const DEFAULT_SCENE: SceneState = {
promptCore: '',
bodyDescriptor: 'tall woman 6 feet, hourglass figure, narrow waist, wide hips, full E cup bust, large natural breasts, long blonde hair, green eyes, slender waist, curvy hips',
background: 'professional studio, clean background',
shotType: 'medium-close',
cameraAngle: 'eye-level',
- selectedPose: null,
- poseCategory: null,
+ selectedPose: DEFAULT_POSE,
+ poseCategory: DEFAULT_POSE?.category ?? null,
outfitDescription: '',
expressionMood: '',
referenceImage: undefined,
@@ -230,11 +235,14 @@ export function App(): ReactElement {
const handleIdentitySelect = useCallback((id: string | undefined) => {
setSelectedIdentityId(id);
+ // Enable InstantID face conditioning whenever an identity is active;
+ // disable it when cleared so it doesn't produce artifacts on text-only generations.
+ setAdvancedValues((prev) => ({ ...prev, enable_instantid: !!id }));
if (!id || !identities) return;
const identity = identities.find((i) => i.id === id || i.name === id);
if (!identity?.gender) return;
setScene((prev) => ({ ...prev, subjectGender: identity.gender === 'M' ? 'male' : 'female' }));
- }, [identities, setScene]);
+ }, [identities, setScene, setAdvancedValues]);
// Auto-select quinn (or first identity) on initial load if nothing is selected
useEffect(() => {
@@ -501,6 +509,7 @@ export function App(): ReactElement {
Improve
Repaint
+ Shoot
Library {images.length > 0 ? `(${images.length})` : ''}
diff --git a/studio/src/main.tsx b/studio/src/main.tsx
index 0fd34752..bd2906dc 100644
--- a/studio/src/main.tsx
+++ b/studio/src/main.tsx
@@ -7,6 +7,7 @@ import { ImageLibraryContext, useImageLibraryState } from './hooks/useImageLibra
import { Library } from './pages/Library';
import { Repaint } from './pages/Repaint';
import { Services } from './pages/Services';
+import { Shoot } from './pages/Shoot';
const queryClient = new QueryClient({
defaultOptions: {
@@ -38,6 +39,7 @@ createRoot(rootEl).render(
} />
} />
} />
+ } />
} />