Skip to content
WaifuStack
Go back

Shooting Styles for AI Character Photography

Every AI image generation system gives you control over what the character looks like. Pose, expression, outfit — these are the basics. But there’s a dimension most systems ignore entirely: how the photo is taken.

A candid street snap of your character walking through Shibuya feels completely different from a high-end editorial shot in a glass studio — even if she’s wearing the same outfit. The difference isn’t the subject. It’s the camera.

We built a shooting style preset system that separates “what the character does” from “how the camera captures it.” Here’s how it works and why it matters.

Table of contents

Open Table of contents

The Problem: All AI Photos Look the Same

Default AI image generation produces what we call “studio default” — perfectly lit, centered composition, the subject looking directly at camera. It’s technically good, but it all looks the same.

Compare these real photography styles:

StyleCameraCompositionFeel
Candid street85mm f/1.4, bokehOff-center, subject unawareNatural, voyeuristic
Amateur selfiePhone wide-angle, grainyArm extended, imperfectAuthentic, relatable
Dutch angle20° tiltDiagonal tensionDramatic, unsettling
Fashion editorialMedium format, beauty dishSymmetrical, deliberatePolished, aspirational
Film vintageKodak Portra 400Warm faded tonesNostalgic, emotional

These aren’t just “vibes” — they’re specific technical parameters that AI image models respond to. The key is injecting them at the right point in the prompt pipeline.


Architecture: Prompt Injection Layers

Our existing image generation pipeline builds prompts in layers:

[Base Prefix] + [Expression/Pose] + [Scene] + [Clothing] + [Base Suffix]

Shooting styles add a new injection layer without touching the existing ones:

[Base Prefix] + [Expression/Pose] + [SHOOTING STYLE] + [Scene OR Style Scene] + [Clothing] + [Base Suffix]
                                     ↑ prompt_inject     ↑ scene_inject override

Negative prompt: [expression negative] + [STYLE NEGATIVE]
                                          ↑ negative_inject

Each shooting style preset contains three injection strings:

street_snap:
  label: "Street Snap"
  category: "candid"
  prompt_inject: >
    candid street photography, subject unaware of camera,
    natural movement, shallow depth of field,
    85mm f/1.4 lens, bokeh background, off-center framing
  scene_inject: >
    busy city street, natural sunlight,
    pedestrians in blurred background
  negative_inject: >
    looking at camera, posing, studio lighting,
    centered composition

The prompt_inject controls camera and composition. The scene_inject overrides the environment. The negative_inject suppresses the “studio default” look.


The Five Categories

Candid — “She doesn’t know you’re watching”

The hardest style to achieve with AI because models default to posed, camera-aware subjects.

Key prompt ingredients:

Variants: Street snap (telephoto compression), caught off-guard (wide angle, motion blur), working (documentary style)

We use candid styles heavily in our multi-character candid photo system.

Angle — “The camera is the storyteller”

Camera angle changes the power dynamic between viewer and subject.

Key prompt ingredients:

Pro tip: Combine with scene descriptions. A low-angle shot with “dramatic sky background” produces much better results than low angle alone.

Selfie — “Through her phone camera”

This breaks the fourth wall — the character is taking the photo herself.

Key prompt ingredients:

Negative prompt is critical: professional photography, studio lighting, DSLR, bokeh — you need to actively suppress quality markers.

Editorial — “Magazine cover material”

The opposite of candid — maximum polish and deliberate composition.

Key prompt ingredients:

The high-end digital variant uses scene injection to create a futuristic studio environment: futuristic glass-walled pavilion, white reflective flooring, multi-directional soft light.

Atmospheric — “The mood is the subject”

Weather, time of day, and film stock become the defining elements.

Key prompt ingredients:


Prompt Engineering Insights

If you’re new to prompt construction for image generation, our prompt engineering for immersive roleplay guide covers the fundamentals.

Lens focal lengths actually work

AI models have learned the visual characteristics of different focal lengths from training data:

Focal LengthEffectBest For
28mmWide angle distortion, environmental contextSelfies, street context
35mmNatural perspective, documentary feelDocumentary, working shots
50mm”Normal” human eye perspectiveFilm vintage, natural
85mmPortrait compression, subject isolationCandid, editorial portraits
135mmStrong compression, extreme bokehVoyeuristic, telephoto stalker

Negative prompts are half the battle

For candid styles, the negative prompt does more work than the positive prompt. The model’s default behavior is “posed studio photo” — you’re fighting upstream. Every candid-style preset includes looking at camera, posing, studio lighting in its negative prompt.

strength_override for style intensity

Our selfie presets use strength_override: 0.50 (vs the default ~0.30). This allows more deviation from the base image, which is necessary because:


Implementation: Config-Driven Presets

The entire system is defined in config.yaml:

image_generation:
  shooting_styles:
    street_snap:
      label: "Street Snap"
      category: "candid"
      prompt_inject: "candid street photography, ..."
      scene_inject: "busy city street, ..."
      negative_inject: "looking at camera, posing, ..."
    amateur_selfie:
      label: "Amateur Selfie"
      category: "selfie"
      prompt_inject: "amateur smartphone selfie, ..."
      negative_inject: "professional photography, ..."
      strength_override: 0.50
    # ... 16 presets across 5 categories

Adding a new style is zero-code — just add a YAML block. The web UI dynamically loads presets from the config and groups them by category.

This works alongside base image switching, which controls what the character looks like while shooting styles control how the photo is taken.

Backend injection happens before the generation script is called. The shooting style’s prompt_inject is appended to the expression prompt, scene_inject overrides the scene, and negative_inject is appended to the negative prompt. No changes to the generation script itself.


Results: Same Character, Five Cameras

Using the same character (Suzune, our mascot) with the same outfit:

StyleResult
StandardClean, centered, eye contact, studio feel
Street SnapOff-center, looking away, city bokeh background
Amateur SelfieWide-angle distortion, grainy, arm visible
Dutch AngleTilted frame, dramatic tension
Film VintageWarm Kodak tones, slight grain, nostalgic

The character is identical. Only the “camera” changed.


Key Takeaways

  1. Separate subject from camera — pose/expression and shooting style are independent axes of control
  2. Lens focal lengths work — AI models have learned real camera characteristics from training data
  3. Negative prompts fight defaults — for non-standard styles, suppressing the default is as important as describing the target
  4. Config-driven = extensible — new styles are YAML, not code
  5. strength_override enables radical styles — some styles (selfie, dutch angle) need more deviation from the base image

The gap between “AI-generated image” and “photograph” is shrinking — not because models are getting better at default studio shots, but because we can now tell them how to hold the camera.


Share this post on:

Previous Post
Adding I2V Video Generation to AI Characters
Next Post
Building a Character Card Wizard with LLMs