Expand semi-public camera scene profiles
This commit is contained in:
+261
-9
@@ -110,12 +110,260 @@ SCENE_CAMERA_PROFILES: tuple[dict[str, Any], ...] = (
|
||||
"default": "classical library frame with the subjects near a bookshelf edge and long shelf depth behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "hotel_corridor",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"hotel corridor",
|
||||
"hotel service corridor",
|
||||
"hotel service alcove",
|
||||
"service alcove",
|
||||
"service hallway",
|
||||
"service hall",
|
||||
"repeating numbered doors",
|
||||
"numbered doors",
|
||||
"luggage carts",
|
||||
"stair landing",
|
||||
"hotel stair landing",
|
||||
),
|
||||
"layout_label": "Hotel corridor camera layout",
|
||||
"place": "hotel corridor",
|
||||
"foreground": "nearest doorframe edge, patterned carpet line, and wall sconce",
|
||||
"midground": "repeating numbered doors, brass wall lamps, service-alcove turns, and luggage carts",
|
||||
"background": "long corridor perspective, closed doors, warm late-night depth, and quiet hotel sightlines",
|
||||
"detail_label": "hotel corridor details",
|
||||
"composition": {
|
||||
"woman": "hotel corridor frame with the woman near a doorframe edge and repeated doors behind her",
|
||||
"man": "hotel corridor frame with the man near a doorframe edge and repeated doors behind him",
|
||||
"default": "hotel corridor frame with the subjects near a doorframe edge and repeated doors behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "parking_garage",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"parking garage",
|
||||
"parking deck",
|
||||
"underground garage",
|
||||
"multi-level parking",
|
||||
"concrete pillars",
|
||||
"numbered pillars",
|
||||
"painted floor lines",
|
||||
"painted bay lines",
|
||||
"parked cars",
|
||||
),
|
||||
"layout_label": "Parking garage camera layout",
|
||||
"place": "parking garage",
|
||||
"foreground": "nearest concrete pillar, painted floor line, and car bumper edge",
|
||||
"midground": "repeating concrete pillars, parked cars, painted bay lines, and glossy concrete lanes",
|
||||
"background": "shadowed corners, fluorescent depth, numbered pillars, and long garage perspective",
|
||||
"detail_label": "parking garage details",
|
||||
"composition": {
|
||||
"woman": "parking garage frame with the woman beside a concrete pillar and repeated bay lines behind her",
|
||||
"man": "parking garage frame with the man beside a concrete pillar and repeated bay lines behind him",
|
||||
"default": "parking garage frame with the subjects beside a concrete pillar and repeated bay lines behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "theater_backstage",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"theater backstage",
|
||||
"backstage wings",
|
||||
"cabaret backstage",
|
||||
"prop storage",
|
||||
"prop racks",
|
||||
"costume racks",
|
||||
"costume rails",
|
||||
"velvet curtains",
|
||||
"stage ropes",
|
||||
"scenery flats",
|
||||
),
|
||||
"layout_label": "Backstage camera layout",
|
||||
"place": "theater backstage",
|
||||
"foreground": "curtain edge, prop trunk corner, and costume-rack line",
|
||||
"midground": "layered velvet curtains, costume racks, prop shelves, and vanity bulb mirrors",
|
||||
"background": "dark stage wings, repeated scenery flats, narrow backstage passages, and warm light spill",
|
||||
"detail_label": "backstage details",
|
||||
"composition": {
|
||||
"woman": "backstage frame with the woman partly framed by curtains and costume racks behind her",
|
||||
"man": "backstage frame with the man partly framed by curtains and costume racks behind him",
|
||||
"default": "backstage frame with the subjects partly framed by curtains and costume racks behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "wine_cellar",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"wine cellar",
|
||||
"wine storage",
|
||||
"bottle racks",
|
||||
"bottle shelves",
|
||||
"arched cellar",
|
||||
"brick niches",
|
||||
"cellar corridor",
|
||||
"stacked bottle",
|
||||
),
|
||||
"layout_label": "Wine cellar camera layout",
|
||||
"place": "wine cellar",
|
||||
"foreground": "near bottle-rack edge, crate corner, and stone floor line",
|
||||
"midground": "repeating bottle racks, arched brick niches, narrow aisles, and low amber lamps",
|
||||
"background": "cool shadowed depth, stacked shelves, cellar arches, and secluded rack rows",
|
||||
"detail_label": "wine cellar details",
|
||||
"composition": {
|
||||
"woman": "wine cellar frame with the woman between bottle racks and arched cellar depth behind her",
|
||||
"man": "wine cellar frame with the man between bottle racks and arched cellar depth behind him",
|
||||
"default": "wine cellar frame with the subjects between bottle racks and arched cellar depth behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "museum_archive",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"museum archive",
|
||||
"gallery storage",
|
||||
"rare-books archive",
|
||||
"archive room",
|
||||
"storage shelves",
|
||||
"labeled boxes",
|
||||
"rolling shelves",
|
||||
"catalog drawers",
|
||||
"compact shelving",
|
||||
),
|
||||
"layout_label": "Archive camera layout",
|
||||
"place": "museum archive",
|
||||
"foreground": "storage-shelf edge, archive box corner, and work-table line",
|
||||
"midground": "labeled boxes, rolling shelves, frame racks, catalog drawers, and long work tables",
|
||||
"background": "compact shelving rows, soft overhead lights, archival aisles, and hidden storage depth",
|
||||
"detail_label": "archive details",
|
||||
"composition": {
|
||||
"woman": "archive frame with the woman beside labeled storage shelves and compact rows behind her",
|
||||
"man": "archive frame with the man beside labeled storage shelves and compact rows behind him",
|
||||
"default": "archive frame with the subjects beside labeled storage shelves and compact rows behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "laundromat_late_night",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"laundromat",
|
||||
"coin laundry",
|
||||
"washing machines",
|
||||
"stacked dryers",
|
||||
"washer-door",
|
||||
"washer door",
|
||||
"folding tables",
|
||||
"detergent shelves",
|
||||
"machine row",
|
||||
),
|
||||
"layout_label": "Laundromat camera layout",
|
||||
"place": "late-night laundromat",
|
||||
"foreground": "folding-table edge, chrome washer door, and tiled floor line",
|
||||
"midground": "repeating washing machines, stacked dryers, detergent shelves, and empty machine rows",
|
||||
"background": "cool fluorescent depth, mirrored machine doors, front glass, and quiet back-corner sightlines",
|
||||
"detail_label": "laundromat details",
|
||||
"composition": {
|
||||
"woman": "laundromat frame with the woman near a folding table and repeated washer doors behind her",
|
||||
"man": "laundromat frame with the man near a folding table and repeated washer doors behind him",
|
||||
"default": "laundromat frame with the subjects near a folding table and repeated washer doors behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "train_station_lockers",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"train-station locker",
|
||||
"train station locker",
|
||||
"locker corridor",
|
||||
"station underpass",
|
||||
"station service passage",
|
||||
"metal lockers",
|
||||
"vending machines",
|
||||
"tiled walls",
|
||||
"utility doors",
|
||||
"warning stripes",
|
||||
),
|
||||
"layout_label": "Station locker camera layout",
|
||||
"place": "train-station locker corridor",
|
||||
"foreground": "locker edge, vending-machine corner, and tiled floor line",
|
||||
"midground": "repeating metal lockers, tiled wall seams, poster frames, and utility doors",
|
||||
"background": "fluorescent underpass depth, stair railings, warning stripes, and hidden side alcoves",
|
||||
"detail_label": "station locker details",
|
||||
"composition": {
|
||||
"woman": "station locker frame with the woman beside metal lockers and tiled depth behind her",
|
||||
"man": "station locker frame with the man beside metal lockers and tiled depth behind him",
|
||||
"default": "station locker frame with the subjects beside metal lockers and tiled depth behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "nightclub_back_hall",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"nightclub back hallway",
|
||||
"club vip corridor",
|
||||
"vip club corridor",
|
||||
"music venue greenroom",
|
||||
"greenroom corridor",
|
||||
"coat-check racks",
|
||||
"neon strips",
|
||||
"velvet ropes",
|
||||
"mirrored wall panels",
|
||||
"stickered doors",
|
||||
),
|
||||
"layout_label": "Nightclub back-hall camera layout",
|
||||
"place": "nightclub back hallway",
|
||||
"foreground": "black door edge, velvet-rope post, and mirrored wall strip",
|
||||
"midground": "repeated dark doors, neon strips, coat-check racks, mirrored panels, and booth edges",
|
||||
"background": "distant colored dance-floor light, dim practical lamps, cable cases, and narrow hallway depth",
|
||||
"detail_label": "nightclub back-hall details",
|
||||
"composition": {
|
||||
"woman": "nightclub back-hall frame with the woman near a dark door edge and neon hallway depth behind her",
|
||||
"man": "nightclub back-hall frame with the man near a dark door edge and neon hallway depth behind him",
|
||||
"default": "nightclub back-hall frame with the subjects near a dark door edge and neon hallway depth behind them",
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "restaurant_private_booth",
|
||||
"family": "semi_public",
|
||||
"terms": (
|
||||
"restaurant private booth",
|
||||
"private booth",
|
||||
"bistro back corner",
|
||||
"after-hours dining",
|
||||
"afterhours dining",
|
||||
"high banquettes",
|
||||
"dark wood partitions",
|
||||
"folded napkins",
|
||||
"stacked chairs",
|
||||
"small round tables",
|
||||
),
|
||||
"layout_label": "Restaurant booth camera layout",
|
||||
"place": "restaurant private booth",
|
||||
"foreground": "table edge, high banquette back, and dark wood partition",
|
||||
"midground": "repeating table lamps, folded napkins, mirrored wall panels, and empty tables",
|
||||
"background": "after-hours dining-room depth, stacked chairs, service doorway, and secluded sightlines",
|
||||
"detail_label": "restaurant booth details",
|
||||
"composition": {
|
||||
"woman": "restaurant booth frame with the woman beside a high banquette and table lamps behind her",
|
||||
"man": "restaurant booth frame with the man beside a high banquette and table lamps behind him",
|
||||
"default": "restaurant booth frame with the subjects beside a high banquette and table lamps behind them",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
SCENE_CAMERA_PROFILE_KEYS = {str(profile["key"]): dict(profile) for profile in SCENE_CAMERA_PROFILES}
|
||||
|
||||
THEME_PROFILE_KEYS = {
|
||||
"classical_library": "classical_library",
|
||||
"hotel_corridor": "hotel_corridor",
|
||||
"parking_garage": "parking_garage",
|
||||
"theater_backstage": "theater_backstage",
|
||||
"wine_cellar": "wine_cellar",
|
||||
"museum_archive": "museum_archive",
|
||||
"laundromat_late_night": "laundromat_late_night",
|
||||
"train_station_lockers": "train_station_lockers",
|
||||
"nightclub_back_hall": "nightclub_back_hall",
|
||||
"restaurant_private_booth": "restaurant_private_booth",
|
||||
}
|
||||
|
||||
PROFILE_TEXT_FIELDS = (
|
||||
@@ -348,7 +596,7 @@ def coworking_location_profile(scene_text: Any) -> dict[str, str]:
|
||||
return scene_camera_profile("coworking lounge")
|
||||
|
||||
|
||||
def coworking_subject_terms(subject_kind: str, pov_labels: list[str] | None = None) -> tuple[str, str]:
|
||||
def scene_subject_terms(subject_kind: str, pov_labels: list[str] | None = None) -> tuple[str, str]:
|
||||
if pov_labels:
|
||||
return "the visible partner", "them"
|
||||
if subject_kind == "woman":
|
||||
@@ -360,6 +608,10 @@ def coworking_subject_terms(subject_kind: str, pov_labels: list[str] | None = No
|
||||
return "the subjects", "them"
|
||||
|
||||
|
||||
def coworking_subject_terms(subject_kind: str, pov_labels: list[str] | None = None) -> tuple[str, str]:
|
||||
return scene_subject_terms(subject_kind, pov_labels)
|
||||
|
||||
|
||||
def scene_direction_detail(
|
||||
direction: str,
|
||||
profile: dict[str, str],
|
||||
@@ -371,7 +623,7 @@ def scene_direction_detail(
|
||||
midground = profile["midground"]
|
||||
background = profile["background"]
|
||||
detail_label = profile.get("detail_label") or "location details"
|
||||
subject, pronoun = coworking_subject_terms(subject_kind, pov_labels)
|
||||
subject, pronoun = scene_subject_terms(subject_kind, pov_labels)
|
||||
if pov_labels:
|
||||
if "right side" in direction:
|
||||
return f"{subject} is in right-side profile; {midground} run behind {pronoun} toward {background}, with {detail_label} kept at the frame edges"
|
||||
@@ -411,7 +663,7 @@ def scene_distance_detail(
|
||||
pov_labels: list[str] | None = None,
|
||||
) -> str:
|
||||
distance = str(distance or "").strip().lower()
|
||||
subject, _pronoun = coworking_subject_terms(subject_kind, pov_labels)
|
||||
subject, _pronoun = scene_subject_terms(subject_kind, pov_labels)
|
||||
if pov_labels:
|
||||
if "wide" in distance or "full-body" in distance or "full body" in distance:
|
||||
return f"wide POV keeps {subject} readable with {profile['place']} context behind them"
|
||||
@@ -441,7 +693,7 @@ def scene_elevation_detail(
|
||||
pov_labels: list[str] | None = None,
|
||||
) -> str:
|
||||
elevation = str(elevation or "").strip().lower()
|
||||
subject, pronoun = coworking_subject_terms(subject_kind, pov_labels)
|
||||
subject, pronoun = scene_subject_terms(subject_kind, pov_labels)
|
||||
if pov_labels:
|
||||
if "low-angle" in elevation:
|
||||
return f"low angle keeps POV body cues low while the {profile['background']} rises behind {pronoun}"
|
||||
@@ -494,13 +746,13 @@ def scene_camera_directive(
|
||||
direction_detail = scene_direction_detail(direction, profile, pov_labels, subject_kind)
|
||||
distance_detail = scene_distance_detail(distance, profile, subject_kind, pov_labels)
|
||||
elevation_detail = scene_elevation_detail(elevation, profile, subject_kind, pov_labels)
|
||||
if pov_labels:
|
||||
return (
|
||||
f"{profile['layout_label']} from POV: {direction_detail}. "
|
||||
f"{distance_detail}; {elevation_detail}; use the multiangle camera only as first-person spatial geometry."
|
||||
)
|
||||
geometry = camera_geometry_phrase(parsed, compact_labels)
|
||||
geometry_clause = f" ({geometry})" if geometry else ""
|
||||
if pov_labels:
|
||||
return (
|
||||
f"{profile['layout_label']} from POV{geometry_clause}: {direction_detail}. "
|
||||
f"{distance_detail}; {elevation_detail}; use the multiangle camera only as first-person spatial geometry."
|
||||
)
|
||||
return (
|
||||
f"{profile['layout_label']}{geometry_clause}: {direction_detail}; "
|
||||
f"{distance_detail}; {elevation_detail}."
|
||||
|
||||
Reference in New Issue
Block a user