Scenes (.scenes)#

House (.scenes.house)#

floor_mesh#

ProcFunc/Blender adapters for dependency-free house floor plans.

class infinigen2.scenes.house.floor_mesh.HouseCeilingCutoutResult(ceiling, sill, back)[source]#

Bases: NamedTuple

Fields: ceiling: MeshObject; sill: MeshObject; back: MeshObject

class infinigen2.scenes.house.floor_mesh.HouseFloorMeshPlanesResult(...)[source]#

Bases: NamedTuple

Fields: planes_interior: list[~WallPlane]; planes_exterior: list[~WallPlane]; floors: list[~MeshObject]; ceilings: list[~MeshObject]; dimensions: Vector

class infinigen2.scenes.house.floor_mesh.WallPlane(...)[source]#

Bases: NamedTuple

One room-facing wall quad, with the layout data its setup needs.

Fields: obj: MeshObject; wall_index: int; room_index: int; thickness: float; length: float; start: tuple[float, float]; end: tuple[float, float]

infinigen2.scenes.house.floor_mesh.house_ceiling_cutout(...) → HouseCeilingCutoutResult[source]#

Pierce a room ceiling polygon with footprint boxes lying fully inside it.

Parameters:
infinigen2.scenes.house.floor_mesh.house_floor_profile_to_planes(
room_boundaries,
walls,
height=2.8,
) → HouseFloorMeshPlanesResult[source]#

Build one room-facing quad per wall side, plus per-room floors and ceilings.

Parameters:
infinigen2.scenes.house.floor_mesh.vertical_strip(...) → pf.MeshObject[source]#

Metric-UV wall grid from start to end, facing left of that direction.

Parameters:

floor_plan#

Pure house floor-plan generation over exact planar room polygons.

Ported from the Infinigen v1 room solver (SegmentMaker, FloorPlanSolver and BlueprintSolidifier in infinigen/core/constraints/example_solver/room/).

class infinigen2.scenes.house.floor_plan.HouseFloorProfileResult(room_boundaries, walls)[source]#

Bases: NamedTuple

Fields: room_boundaries: tuple[PolygonRings, ...]; walls: tuple[WallSegment, ...]

class infinigen2.scenes.house.floor_plan.WallSegment(...)[source]#

Bases: NamedTuple

Fields: start: Point2D; end: Point2D; room_indices: tuple[int, ...]; thickness: float; door_position_frac: float | None; is_flat: bool

infinigen2.scenes.house.floor_plan.house_room_polygon(boundary_rings) → BaseGeometry[source]#

Return the closed room polygon used to derive the house walls.

Parameters:

boundary_rings (tuple[tuple[tuple[float, float], ...], ...])

infinigen2.scenes.house.floor_plan.room_connect_rand(rng, walls, room_count) → tuple[WallSegment, ...][source]#

Choose door walls and positions forming a connected room graph.

Parameters:
infinigen2.scenes.house.floor_plan.room_solve(...) → HouseFloorProfileResult[source]#

Partition an exact outline polygon into rooms and derive their walls.

Parameters:
infinigen2.scenes.house.floor_plan.wall_is_exterior(wall) → bool[source]#
Parameters:

wall (WallSegment)

infinigen2.scenes.house.floor_plan.wall_length(wall) → float[source]#
Parameters:

wall (WallSegment)

furnishings#

Room contents layered onto an existing unfurnished house.

class infinigen2.scenes.house.furnishings.HouseRoomFurnishingResult(all_objects, small_objects, lights)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; small_objects: list[~MeshObject]; lights: list[~LightObject]

class infinigen2.scenes.house.furnishings.HouseRoomFurnitureResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; lights: list[~LightObject]; colliders: CollisionSet; temporary_objects: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

class infinigen2.scenes.house.furnishings.SetupResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; colliders: CollisionSet; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]; lamps: list[~LampResult]; temporary_objects: list[~MeshObject]

infinigen2.scenes.house.furnishings.furnish_house_room_furniture_rand(
...,
) → HouseRoomFurnitureResult[source]#
Parameters:
infinigen2.scenes.house.furnishings.furnish_house_room_rand(
...,
) → HouseRoomFurnishingResult[source]#
Parameters:
infinigen2.scenes.house.furnishings.house_furnished_rand(...) → HouseResult[source]#

Build an unfurnished house, then furnish each solved room.

Example renders

infinigen2.scenes.house.furnishings.house_furnished_rand seed 0
infinigen2 house_furnished_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.furnishings.house_furnished_rand seed 1
infinigen2 house_furnished_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.furnishings.house_furnished_rand seed 2
infinigen2 house_furnished_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.furnishings.house_furnished_rand seed 3
infinigen2 house_furnished_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.furnishings.house_furnished_rand seed 4
infinigen2 house_furnished_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.furnishings.house_furnished_rand seed 5
infinigen2 house_furnished_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (tuple[float, float] | None) -- (default: None)

  • room_count (int | None) -- (default: None)

  • height (float | None) -- (default: None)

  • wall_thickness (float | None) -- (default: None)

  • door_open_angle_deg (float | None) -- (default: None)

Parameters:
infinigen2.scenes.house.furnishings.setup_from_space_rand(...) → SetupResult[source]#
Parameters:

outline#

Pure sampling of the exterior polygon used by the room solver.

Ported from Infinigen v1 GraphMaker.suggest_dimensions and ContourFactory.

class infinigen2.scenes.house.outline.HouseOutlineResult(boundary_rings, fillet_segments)[source]#

Bases: NamedTuple

Fields: boundary_rings: PolygonRings; fillet_segments: tuple[tuple[Point2D, Point2D], ...]

infinigen2.scenes.house.outline.house_outline_rand(rng, *, room_count, dimensions=None) → HouseOutlineResult[source]#

Sample a box house outline in metres, with some corners chamfered or rounded.

Parameters:

unfurnished#

Multi-room house layout, surfaces, and walls.

class infinigen2.scenes.house.unfurnished.HouseResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[MeshObject]; small_objects: list[MeshObject]; cameras: list[CameraObject]; lights: list[LightObject]; rooms: tuple[HouseRoomResult, ...]; dimensions: Vector; colliders: CollisionSet; environment: World | None

class infinigen2.scenes.house.unfurnished.HouseRoomResult(...)[source]#

Bases: NamedTuple

Fields: room_index: int; boundary_rings: PolygonRings; all_objects: list[MeshObject]; lights: list[LightObject]; floor: MeshObject; ceiling: MeshObject; walls: list[MeshObject]; flat_walls: list[MeshObject]; neighbors: dict[int, int]; doors: dict[int, MeshObject]; doorway_centers: dict[int, tuple[float, float]]

class infinigen2.scenes.house.unfurnished.HouseWallResult(...)[source]#

Bases: NamedTuple

Fields: sides: tuple[HouseWallSideResult, ...]; planes_interior: list[MeshObject]; planes_exterior: list[MeshObject]; corners: list[MeshObject]; corners_by_room: dict[int, list[MeshObject]]; backs: list[MeshObject]; sills: list[MeshObject]; storage_containers: list[MeshObject]; supports: list[MeshObject]; lights: list[LightObject]; windows: list[MeshObject]; decorations: dict[str, list[MeshObject]]; doors: dict[int, MeshObject]; doorway_centers: dict[int, tuple[float, float]]; colliders: CollisionSet

class infinigen2.scenes.house.unfurnished.HouseWallSideResult(plane, result)[source]#

Bases: NamedTuple

Fields: plane: WallPlane; result: WallResult

infinigen2.scenes.house.unfurnished.house_unfurnished_rand(...) → HouseResult[source]#

Dress a house shell with surface, wall, ceiling, and lighting options.

Every room picks its floor from floor_materials and its walls from wall_materials, so the house shares a small palette.

Example renders

infinigen2.scenes.house.unfurnished.house_unfurnished_rand seed 0
infinigen2 house_unfurnished_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.unfurnished.house_unfurnished_rand seed 1
infinigen2 house_unfurnished_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.unfurnished.house_unfurnished_rand seed 2
infinigen2 house_unfurnished_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.unfurnished.house_unfurnished_rand seed 3
infinigen2 house_unfurnished_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.unfurnished.house_unfurnished_rand seed 4
infinigen2 house_unfurnished_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.house.unfurnished.house_unfurnished_rand seed 5
infinigen2 house_unfurnished_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (tuple[float, float] | None) -- (default: None)

  • room_count (int | None) -- (default: None)

  • height (float | None) -- (default: None)

  • wall_thickness (float | None) -- (default: None)

  • door_open_angle_deg (float | None) -- (default: None)

  • floor_materials (list[pf.Material] | None) -- (default: None)

  • wall_materials (list[pf.Material] | None) -- (default: None)

infinigen2.scenes.house.unfurnished.house_walls_rand(...) → HouseWallResult[source]#

Treat both sides of every partition and the inside of every outer wall.

Partition sides have no backs because the two offset faces close the wall.

Parameters:
infinigen2.scenes.house.unfurnished.interior_wall_arrangement_rand(...) → WallResult[source]#

Equal-weight treatment for a partition side; doors are placed separately.

Parameters:

Module contents#

Placement (.scenes.placement)#

collision#

class infinigen2.scenes.placement.collision.CollisionSet(
objs: 'list[pf.Object]',
collision_manager: 'trimesh.collision.CollisionManager',
object_names: 'dict[int, str]',
mesh_colliders: 'dict[int, trimesh.Trimesh]',
mesh_fcl_colliders: 'dict[int, Any]',
object_fcl_objs: 'dict[int, Any]',
object_last_transforms: 'dict[int, np.ndarray]',
)[source]#

Bases: object

Parameters:
infinigen2.scenes.placement.collision.any_self_collision(col) → bool[source]#

Return True if any two objects in the set currently intersect each other.

Parameters:

col (CollisionSet)

infinigen2.scenes.placement.collision.box_intersection_test(col, transform, size=1.0) → bool[source]#
Parameters:
infinigen2.scenes.placement.collision.collision_set(objs, cache=None) → CollisionSet[source]#
Parameters:
infinigen2.scenes.placement.collision.intersection_test(col, obj) → bool[source]#
Parameters:
infinigen2.scenes.placement.collision.n_colliders(col) → int[source]#
Parameters:

col (CollisionSet)

infinigen2.scenes.placement.collision.raycast(col, ray_origins, ray_directions) → Any[source]#

Raycast over the combined mesh from tracked colliders.

Parameters:

culling#

infinigen2.scenes.placement.culling.keep_non_colliding(
items,
colliders,
key=<function <lambda>>,
) → tuple[list[infinigen2.scenes.placement.culling.T], CollisionSet][source]#

Keep each item whose key(item) mesh doesn’t collide with colliders or an already-kept item, folding kept meshes into the set. Skips Nones; rejected items are dropped (not deleted) and removed later by scene autocleanup.

Parameters:
infinigen2.scenes.placement.culling.keep_unobstructed(...) → list[infinigen2.scenes.placement.culling.T][source]#

Drop each item whose key(item) center a collider separates from center (e.g. a wall between a rug and the sofa, or beyond a wall-snapped table). Reads colliders but does not update them; skips Nones.

Parameters:
infinigen2.scenes.placement.culling.place_surrounding(
...,
) → tuple[list[pf.MeshObject], CollisionSet][source]#

Arrange items around parent with arrange_fn(rng, parent), drop any a collider separates from the parent (a wall-snapped table’s wall-side chairs land outside the room, with the wall between them and the table), cull the rest against colliders, and re-sample the whole arrangement until it is internally clear and at least min_kept survive. colliders must exclude parent so the obstruction ray sees the wall behind it, not the parent itself. Suits chairs around a dining table or stools around a kitchen island.

Parameters:

distribute#

infinigen2.scenes.placement.distribute.distribute_in_bbox(...) → list[Object][source]#

Place each object at a uniformly-random location inside bbox, keeping its current rotation and scale, fitting its bounding box within the box, and (when colliders is non-empty) rejection-sampling up to attempts times so mesh placements avoid that collision set. Mutates each object’s location in place.

Parameters:
infinigen2.scenes.placement.distribute.duplicates(...) → list[Object][source]#
Parameters:
infinigen2.scenes.placement.distribute.instances_along_line(...) → list[pf.MeshObject][source]#

count aliases of instance centred in equal slots from start to end, given in parent’s local frame. Consumes instance.

Parameters:
infinigen2.scenes.placement.distribute.propagate_modifiers_to_instances(templates, instances)[source]#
Parameters:

retry#

infinigen2.scenes.placement.retry.repeat_attempts(...) → infinigen2.scenes.placement.retry.T | None[source]#
Parameters:

snap#

infinigen2.scenes.placement.snap.snap_to_plane(...)[source]#

Snap child to parent using bbox sides with canonical local coordinates.

Parameters:
  • child (Object) -- Object to position

  • parent (Object) -- Object to snap to

  • placement (float) -- How far left or right along to place the object, relative to the parent and the constraint axis e.g. if constraint_axis=(0, 0, 1), placement=0.5 means centered, 0 means left edge of parent’s bbox, 1 means right edge of parent’s bbox.

  • child_side (str) -- Which side of child touches the parent

  • parent_side (str) -- Which side of parent touches the child

  • margin (float) -- Gap between surfaces

  • constraint_axis (pf.Vector | None) -- Axis to constrain the placement to. The location wont change along this axis, and we may rotate the object around this axis to snap it. If None, center the child face on the parent face without rotating it.

  • overhang (bool) -- If true, only the center of the childs bbox must attach to the parent, rather than the entire side of the bbox touching the parent.

Module contents#

Rooms (.scenes.room)#

bathroom_setup#

class infinigen2.scenes.room.bathroom_setup.BathroomSetupResult(...)[source]#

Bases: NamedTuple

Fields: named_objects: dict[str, list[MeshObject]]; all_objects: list[MeshObject]; colliders: CollisionSet; temporary_objects: list[MeshObject]; storage_containers: list[MeshObject]; supports: list[MeshObject]; storages: list[MeshObject]

class infinigen2.scenes.room.bathroom_setup.BathroomSinkSetupResult(...)[source]#

Bases: NamedTuple

Fields: bathroom_sinks: list[MeshResult]; sink_taps: list[MeshResult]; sink_supports: list[MeshResult]; mirrors: list[MeshResult]; wall_storage: list[MeshResult]; storages: list[MeshResult]; all_objects: list[MeshObject]

infinigen2.scenes.room.bathroom_setup.bathroom_existing_sink_setup_rand(...) → BathroomSetupResult[source]#
Parameters:
infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand(...) → BathroomSetupResult[source]#

Example renders

infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand seed 0
infinigen2 bathroom_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand seed 1
infinigen2 bathroom_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand seed 2
infinigen2 bathroom_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand seed 3
infinigen2 bathroom_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand seed 4
infinigen2 bathroom_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bathroom_setup.bathroom_setup_rand seed 5
infinigen2 bathroom_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.bathroom_setup.bathroom_sink_setup_rand(...) → BathroomSinkSetupResult[source]#
Parameters:
  • rng (Generator)

  • bbox_min (pf.Vector | None) -- (default: None)

  • bbox_max (pf.Vector | None) -- (default: None)

  • height (float | None) -- (default: None)

  • width (float | None) -- (default: None)

  • size (float | None) -- (default: None)

  • depth (float | None) -- (default: None)

  • surface_material (pf.Material | None) -- (default: None)

  • metal_material (pf.Material | None) -- (default: None)

  • tap_material (pf.Material | None) -- (default: None)

infinigen2.scenes.room.bathroom_setup.snap_wall_hardware_rand(...) → MeshResult | None[source]#

Wall-mount hardware beside or above one of parents, retrying until its back sits flat on wall_colliders and it clears colliders.

Parameters:

bed_setup#

class infinigen2.scenes.room.bed_setup.BedSetupResult(...)[source]#

Bases: NamedTuple

Fields: bed: MeshObject; mattress: MeshObject | None; bedside_tables: list[~MeshObject]; bedside_lamps: list[~MeshObject]; pillows: list[~MeshObject]; lights: list[~LightObject]; all_objects: list[~MeshObject]; colliders: CollisionSet; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

infinigen2.scenes.room.bed_setup.bed_dimensions_rand(...) → pf.Vector[source]#
Parameters:
  • rng (Generator)

  • bbox_min (pf.Vector | None) -- (default: None)

  • bbox_max (pf.Vector | None) -- (default: None)

  • area (float | None) -- (default: None)

  • aspect (float | None) -- (default: None)

infinigen2.scenes.room.bed_setup.bed_setup_multi_rand(...) → list[BedSetupResult][source]#
Parameters:
infinigen2.scenes.room.bed_setup.bed_setup_rand(...) → BedSetupResult[source]#

Example renders

infinigen2.scenes.room.bed_setup.bed_setup_rand seed 0
infinigen2 bed_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bed_setup.bed_setup_rand seed 1
infinigen2 bed_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bed_setup.bed_setup_rand seed 2
infinigen2 bed_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bed_setup.bed_setup_rand seed 3
infinigen2 bed_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bed_setup.bed_setup_rand seed 4
infinigen2 bed_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.bed_setup.bed_setup_rand seed 5
infinigen2 bed_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.bed_setup.table_bedside_composite_rand(
rng,
dimensions=None,
) → TableResult[source]#

Bedside-sized storage, regular table, or desk with under-top storage.

Parameters:

ceiling_features#

class infinigen2.scenes.room.ceiling_features.CeilingFeaturesResult(...)[source]#

Bases: NamedTuple

Fields: floor: MeshObject; ceiling: MeshObject; backs: list[~MeshObject]; sills: list[~MeshObject]; light_meshes: list[~MeshObject]; lights: list[~LightObject]

class infinigen2.scenes.room.ceiling_features.CeilingGridResult(...)[source]#

Bases: NamedTuple

Fields: instance: MeshObject; light: LightObject | None; light_offset: tuple[float, float, float]; footprint: tuple[float, float]; spacing: tuple[float, float]; margin_low: tuple[float, float]; margin_high: tuple[float, float]; counts: tuple[int, int]; rotation_offset: tuple[float, float, float]; reveal_depth: float; recess_pct: float; chamfer: float

infinigen2.scenes.room.ceiling_features.ceiling_feature_rand(
rng,
shape,
wall_thickness=0.1,
) → CeilingFeaturesResult[source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_lamp_grid_rand(
rng,
extent,
energy,
) → CeilingGridResult[source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_lamp_lights(...) → list[LightObject][source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_light_bar_grid_rand(
rng,
extent,
ceiling_material,
) → CeilingGridResult[source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_light_bar_lights_rand(...) → list[LightObject][source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_light_bars_rand(
...,
) → tuple[pf.MeshObject, list[pf.MeshObject], list[pf.MeshObject], list[pf.MeshObject], list[LightObject]][source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_light_placement_rand(
rng,
ceiling,
dimensions,
) → tuple[list[pf.MeshObject], list[LightObject]][source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_skylight_grid_rand(
rng,
extent,
) → CeilingGridResult[source]#
Parameters:
infinigen2.scenes.room.ceiling_features.ceiling_skylights_rand(
rng,
ceiling,
ceiling_material,
) → tuple[pf.MeshObject, list[pf.MeshObject], list[pf.MeshObject], list[pf.MeshObject], list[LightObject]][source]#
Parameters:

cocktail_table_setup#

infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand(
rng,
) → DiningSetupResult[source]#

A cocktail table with height-matched tall chairs arranged around it.

Example renders

infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand seed 0
infinigen2 table_cocktail_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand seed 1
infinigen2 table_cocktail_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand seed 2
infinigen2 table_cocktail_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand seed 3
infinigen2 table_cocktail_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand seed 4
infinigen2 table_cocktail_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_rand seed 5
infinigen2 table_cocktail_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:

rng (Generator)

infinigen2.scenes.room.cocktail_table_setup.table_cocktail_setup_wall_rand(
...,
) → DiningTableSetupResult[source]#

A cocktail table with any side against a wall and tall chairs around it.

Parameters:

decoration_objects#

Place floor, surface, and small decoration objects into furnished scenes.

Geometry-node Poisson-scatter of a collection of small objects onto a parent surface: selecting upward-facing faces and instancing a collection at random-density, min-distance points.

The room-facing entrypoint builds reusable decoration pools and scatters subsets of them onto each target’s real surface.

class infinigen2.scenes.room.decoration_objects.DecorationObjectsResult(all_objects, lights, colliders)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; lights: list[~LightObject]; colliders: CollisionSet

infinigen2.scenes.room.decoration_objects.container_faces(parent) → pf.ProcNode[bool][source]#
Parameters:

parent (pf.ProcNode[pf.MeshObject])

infinigen2.scenes.room.decoration_objects.decoration_collection_primitives_and_real_rand(rng) → pf.Collection[source]#

Draw reusable primitives and real objects seated at their bases.

Parameters:

rng (Generator)

infinigen2.scenes.room.decoration_objects.decoration_collection_primitives_rand(rng) → pf.Collection[source]#

Draw reusable decoration primitives with origins seated at their bases.

Parameters:

rng (Generator)

infinigen2.scenes.room.decoration_objects.decorate_floor_objects_rand(
...,
) → DecorationObjectsResult[source]#
Parameters:
infinigen2.scenes.room.decoration_objects.decorate_surface_objects_rand(
...,
) → DecorationObjectsResult[source]#
Parameters:
infinigen2.scenes.room.decoration_objects.decoration_smallobj_rand(rng) → MeshResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.room.decoration_objects.objects_scatter_rand(
...,
) → tuple[list[pf.MeshObject], CollisionSet][source]#

Per target, free scatter 2/3 of the time and a centered row 1/3; each target skipped with prob skip_prob. Returns placed + colliders.

Parameters:
infinigen2.scenes.room.decoration_objects.objects_scattered_on_surface(
...,
) → tuple[list[pf.MeshObject], CollisionSet][source]#

Poisson-scatter small objects on each target’s real surface; each target skipped with prob skip_prob. spacing_factor=0 packs furniture surfaces densely. Returns placed + colliders.

Parameters:
infinigen2.scenes.room.decoration_objects.placeable_faces(
parent,
selection,
) → pf.ProcNode[pf.MeshObject][source]#

The selected faces, minus connected islands smaller than MIN_PLACEABLE_AREA, so small details never receive objects.

Parameters:
infinigen2.scenes.room.decoration_objects.scatter_small_objects_on_containers(
...,
) → tuple[list[pf.MeshObject], CollisionSet][source]#

Scatter on recessed upward faces, drawing a collection when omitted.

Parameters:
infinigen2.scenes.room.decoration_objects.scatter_small_objects_on_support_tops(
...,
) → tuple[list[pf.MeshObject], CollisionSet][source]#

Scatter on topmost upward faces, drawing a collection when omitted.

Parameters:
infinigen2.scenes.room.decoration_objects.support_top_faces(parent) → pf.ProcNode[bool][source]#
Parameters:

parent (pf.ProcNode[pf.MeshObject])

desk_setup#

class infinigen2.scenes.room.desk_setup.DeskSetupResult(...)[source]#

Bases: NamedTuple

Fields: desk: MeshObject; chair: MeshObject; monitors: list[~MeshObject]; all_objects: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

infinigen2.scenes.room.desk_setup.desk_setup_rand(...) → DeskSetupResult | None[source]#

A desk and chair, snapped to a wall when wall planes are supplied.

Example renders

infinigen2.scenes.room.desk_setup.desk_setup_rand seed 0
infinigen2 desk_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.desk_setup.desk_setup_rand seed 1
infinigen2 desk_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.desk_setup.desk_setup_rand seed 2
infinigen2 desk_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.desk_setup.desk_setup_rand seed 3
infinigen2 desk_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.desk_setup.desk_setup_rand seed 4
infinigen2 desk_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.desk_setup.desk_setup_rand seed 5
infinigen2 desk_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:

dining_table_setup#

class infinigen2.scenes.room.dining_table_setup.DiningSetupResult(dining_table, chairs, all_objects)[source]#

Bases: NamedTuple

Fields: dining_table: MeshObject; chairs: list[~MeshObject]; all_objects: list[~MeshObject]

class infinigen2.scenes.room.dining_table_setup.DiningTableSetupResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; dining_tables: list[~MeshResult]; dining_chairs: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

infinigen2.scenes.room.dining_table_setup.arrange_dining_chairs(...) → list[pf.MeshObject][source]#

Instance one chair design along the table’s bounding-box edge curves.

Parameters:
infinigen2.scenes.room.dining_table_setup.chairs_on_edge(...) → pf.ProcNode[procfunc.nodes.types.Instances][source]#
Parameters:
infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand(
...,
) → DiningTableSetupResult[source]#

Place a dining table in clear floor space and arrange chairs around it.

Example renders

infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand seed 0
infinigen2 table_dining_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand seed 1
infinigen2 table_dining_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand seed 2
infinigen2 table_dining_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand seed 3
infinigen2 table_dining_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand seed 4
infinigen2 table_dining_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_setup_rand seed 5
infinigen2 table_dining_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • wall_planes (list[pf.MeshObject] | None) -- (default: None)

  • bbox_min (pf.Vector | None) -- (default: None)

  • bbox_max (pf.Vector | None) -- (default: None)

  • colliders (CollisionSet | None) -- (default: None)

  • region (Polygon | None) -- (default: None)

  • table_length (float | None) -- (default: None)

infinigen2.scenes.room.dining_table_setup.table_dining_setup_wall_rand(
...,
) → DiningTableSetupResult[source]#

A rectangular or circular dining table with any side against a wall.

Parameters:
infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand(
...,
) → DiningSetupResult[source]#

A dining table with a single dining chair design instanced around all four sides facing inward. Builds the table, one chair, then arranges copies of the chair around it; chairs follow the table’s pose. Pass dining_table to arrange chairs around an existing (already posed) table instead of sampling one.

Example renders

infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand seed 0
infinigen2 table_dining_with_chairs_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand seed 1
infinigen2 table_dining_with_chairs_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand seed 2
infinigen2 table_dining_with_chairs_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand seed 3
infinigen2 table_dining_with_chairs_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand seed 4
infinigen2 table_dining_with_chairs_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.dining_table_setup.table_dining_with_chairs_rand seed 5
infinigen2 table_dining_with_chairs_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • chair_spacing (float | None) -- (default: None)

  • tuck (float | None) -- (default: None)

  • edge_margin (float | None) -- (default: None)

  • include_ends (bool | None) -- (default: None)

  • dining_table (pf.MeshObject | None) -- (default: None)

  • colliders (CollisionSet | None) -- (default: None)

infinigen2.scenes.room.dining_table_setup.table_wall_setup_rand(
...,
) → DiningTableSetupResult[source]#

Snap any side of dining_table against a wall, then arrange chairs on its open sides; place_surrounding drops the wall-side chairs.

Parameters:

kitchen_setup#

class infinigen2.scenes.room.kitchen_setup.KitchenModuleArrayResult(...)[source]#

Bases: NamedTuple

Fields: mesh: MeshObject; all_objects: list[~MeshObject]; cabinets: list[~MeshObject]; plinths: list[~MeshObject]; sinks: list[~MeshObject]; taps: list[~MeshObject]

class infinigen2.scenes.room.kitchen_setup.KitchenSetupResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; colliders: CollisionSet; countertops: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

infinigen2.scenes.room.kitchen_setup.island_rand(...) → KitchenModuleArrayResult[source]#

A double-sided array: a front row under the countertop and a back row facing the other way, both inside one countertop two cabinets deep.

Parameters:
infinigen2.scenes.room.kitchen_setup.island_setup_rand(...) → KitchenSetupResult[source]#

Place an island mid-floor a walkway clear of walkway, and stools along its overhang half the time.

Parameters:
infinigen2.scenes.room.kitchen_setup.kitchen_cabinets_wall_setup_rand(
...,
) → KitchenSetupResult[source]#

One array of base cabinets with uppers above it per wall, each snapped back to its wall or with one end against an earlier array’s front to turn an L.

Parameters:
infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand(
...,
) → KitchenModuleArrayResult[source]#

A straight run of base cabinets under one countertop, n_sinks of them sink bases, built along +y from pose with its back at x=0. modules[0] is the sink base and modules[1:n_modules] the other cabinet modules.

Example renders

infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand seed 0
infinigen2 kitchen_module_array_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand seed 1
infinigen2 kitchen_module_array_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand seed 2
infinigen2 kitchen_module_array_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand seed 3
infinigen2 kitchen_module_array_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand seed 4
infinigen2 kitchen_module_array_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_module_array_rand seed 5
infinigen2 kitchen_module_array_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • pose (pf.Matrix | None) -- (default: None)

  • count (int | None) -- (default: None)

  • n_sinks (int | None) -- (default: None)

  • back_overhang (float) -- (default: 0.0)

  • modules (pf.Collection | None) -- (default: None)

  • n_modules (int | None) -- (default: None)

  • module_width (float | None) -- (default: None)

  • counter_depth (float | None) -- (default: None)

  • height (float | None) -- (default: None)

  • thickness (float | None) -- (default: None)

  • plinth (pf.Vector | None) -- (default: None)

  • cabinet_material (pf.Material | None) -- (default: None)

  • countertop_material (pf.Material | None) -- (default: None)

infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand(...) → KitchenSetupResult[source]#

Cabinet arrays on every reserved_wall_planes wall and some wall_planes walls, then an island and wall hardware. wall_overlap is how far each wall plane extends past the room corners.

Example renders

infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand seed 0
infinigen2 kitchen_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand seed 1
infinigen2 kitchen_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand seed 2
infinigen2 kitchen_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand seed 3
infinigen2 kitchen_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand seed 4
infinigen2 kitchen_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.kitchen_setup.kitchen_setup_rand seed 5
infinigen2 kitchen_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:

room#

class infinigen2.scenes.room.room.RoomResult(...)[source]#

Bases: NamedTuple

Containers expose internal upward surfaces; supports accept objects on top. One object may provide both capabilities.

Fields: all_objects: list[~MeshObject]; cameras: list[~CameraObject]; lights: list[~LightObject]; colliders: CollisionSet; floor: MeshObject; dimensions: Vector; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]; wall_planes: list[~MeshObject]; plain_wall_planes: list[~MeshObject]

infinigen2.scenes.room.room.decorate_room_small_objects_rand(
...,
) → DecorationObjectsResult[source]#
Parameters:
infinigen2.scenes.room.room.room_bathroom_rand(...) → RoomResult[source]#

Example renders

infinigen2.scenes.room.room.room_bathroom_rand seed 0
infinigen2 room_bathroom_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bathroom_rand seed 1
infinigen2 room_bathroom_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bathroom_rand seed 2
infinigen2 room_bathroom_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bathroom_rand seed 3
infinigen2 room_bathroom_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bathroom_rand seed 4
infinigen2 room_bathroom_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bathroom_rand seed 5
infinigen2 room_bathroom_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.room.room.room_bedroom_rand(...) → RoomResult[source]#

Example renders

infinigen2.scenes.room.room.room_bedroom_rand seed 0
infinigen2 room_bedroom_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bedroom_rand seed 1
infinigen2 room_bedroom_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bedroom_rand seed 2
infinigen2 room_bedroom_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bedroom_rand seed 3
infinigen2 room_bedroom_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bedroom_rand seed 4
infinigen2 room_bedroom_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_bedroom_rand seed 5
infinigen2 room_bedroom_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.room.room.room_diningroom_rand(...) → RoomResult[source]#

Example renders

infinigen2.scenes.room.room.room_diningroom_rand seed 0
infinigen2 room_diningroom_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_diningroom_rand seed 1
infinigen2 room_diningroom_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_diningroom_rand seed 2
infinigen2 room_diningroom_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_diningroom_rand seed 3
infinigen2 room_diningroom_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_diningroom_rand seed 4
infinigen2 room_diningroom_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_diningroom_rand seed 5
infinigen2 room_diningroom_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.room.room.room_kitchen_rand(...) → RoomResult[source]#

Example renders

infinigen2.scenes.room.room.room_kitchen_rand seed 0
infinigen2 room_kitchen_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_kitchen_rand seed 1
infinigen2 room_kitchen_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_kitchen_rand seed 2
infinigen2 room_kitchen_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_kitchen_rand seed 3
infinigen2 room_kitchen_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_kitchen_rand seed 4
infinigen2 room_kitchen_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_kitchen_rand seed 5
infinigen2 room_kitchen_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.room.room.room_livingroom_rand(...) → RoomResult[source]#

Example renders

infinigen2.scenes.room.room.room_livingroom_rand seed 0
infinigen2 room_livingroom_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_livingroom_rand seed 1
infinigen2 room_livingroom_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_livingroom_rand seed 2
infinigen2 room_livingroom_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_livingroom_rand seed 3
infinigen2 room_livingroom_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_livingroom_rand seed 4
infinigen2 room_livingroom_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_livingroom_rand seed 5
infinigen2 room_livingroom_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.room.room.room_rand(...) → RoomResult[source]#
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.room.room.room_unfurnished_rand(...) → RoomResult[source]#

n_plain_walls non-door walls, counted from plain_wall_offset, stay featureless and are returned as plain_wall_planes.

Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

  • n_plain_walls (int) -- (default: 0)

  • plain_wall_offset (int) -- (default: 0)

infinigen2.scenes.room.room.room_walls_rand(...) → WallResult[source]#

Arrange open_walls and merge them with the already built_walls. Mounted features hitting earlier walls’ decorations are dropped by each feature.

Parameters:
infinigen2.scenes.room.room.wall_arrangement_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.room.wall_arrangement_rand seed 0
infinigen2 wall_arrangement_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.wall_arrangement_rand seed 1
infinigen2 wall_arrangement_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.wall_arrangement_rand seed 2
infinigen2 wall_arrangement_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • wall (pf.MeshObject | None) -- (default: None)

  • window_obj (pf.MeshObject | None) -- (default: None)

  • window_portal (LightObject | None) -- (default: None)

  • top_profile_height (float) -- (default: 0.0)

  • bottom_profile_height (float) -- (default: 0.0)

  • wall_material (pf.Material | None) -- (default: None)

  • window_spacing (float | None) -- (default: None)

  • window_bottom (float | None) -- (default: None)

  • wall_thickness (float) -- (default: 0.05)

  • colliders (CollisionSet | None) -- (default: None)

  • window_reveal_depth (float | None) -- (default: None)

room_shape#

class infinigen2.scenes.room.room_shape.RoomEdgeToWallsResult(geometry, vector, is_face_flat)[source]#

Bases: NamedTuple

Fields: geometry: ProcNode[~MeshObject]; vector: ProcNode[Vector]; is_face_flat: ProcNode[bool]

class infinigen2.scenes.room.room_shape.RoomShapeResult(...)[source]#

Bases: NamedTuple

Fields: walls: MeshObject; flat_walls: list[~MeshObject]; floor: MeshObject; ceiling: MeshObject; dimensions: Vector; edge_curve: RoomEdgeCurveResult; all_objects: list[~MeshObject]; cameras: list[~CameraObject]

infinigen2.scenes.room.room_shape.room_dimensions_rand(rng) → pf.Vector[source]#
Parameters:

rng (Generator)

infinigen2.scenes.room.room_shape.room_edge_to_walls(
curve,
height,
is_edge_point_flat,
) → RoomEdgeToWallsResult[source]#
Parameters:
infinigen2.scenes.room.room_shape.room_shape_rand(
rng,
dimensions=None,
floor_ceiling_offset_epsilon=0.005,
) → RoomShapeResult[source]#

Example renders

infinigen2.scenes.room.room_shape.room_shape_rand seed 0
infinigen2 room_shape_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 1
infinigen2 room_shape_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 2
infinigen2 room_shape_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 3
infinigen2 room_shape_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 4
infinigen2 room_shape_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 5
infinigen2 room_shape_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • floor_ceiling_offset_epsilon (float) -- (default: 0.005)

skirting#

infinigen2.scenes.room.skirting.skirting_on_walls_rand(...) → list[pf.MeshObject][source]#
Parameters:
infinigen2.scenes.room.skirting.skirting_rand(rng, walls) → list[pf.MeshObject][source]#
Parameters:

sofa_setup#

class infinigen2.scenes.room.sofa_setup.SofaSetupResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; sofas: list[~SofaResult]; rugs: list[~MeshObject]; throw_pillows: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

class infinigen2.scenes.room.sofa_setup.TVSetupResult(mesh, tv, all_objects)[source]#

Bases: NamedTuple

Fields: mesh: MeshObject; tv: MeshObject; all_objects: list[~MeshObject]

infinigen2.scenes.room.sofa_setup.side_tables_rand(...) → list[MeshResult][source]#
Parameters:
infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand(...) → SofaSetupResult[source]#

Example renders

infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand seed 0
infinigen2 sofa_setup_centered_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand seed 1
infinigen2 sofa_setup_centered_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand seed 2
infinigen2 sofa_setup_centered_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand seed 3
infinigen2 sofa_setup_centered_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand seed 4
infinigen2 sofa_setup_centered_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_centered_rand seed 5
infinigen2 sofa_setup_centered_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • bbox_min (pf.Vector | None) -- (default: None)

  • bbox_max (pf.Vector | None) -- (default: None)

  • colliders (CollisionSet | None) -- (default: None)

  • region (Polygon | None) -- (default: None)

infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand(...) → SofaSetupResult[source]#

Example renders

infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand seed 0
infinigen2 sofa_setup_wall_anchored_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand seed 1
infinigen2 sofa_setup_wall_anchored_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand seed 2
infinigen2 sofa_setup_wall_anchored_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand seed 3
infinigen2 sofa_setup_wall_anchored_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand seed 4
infinigen2 sofa_setup_wall_anchored_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_anchored_rand seed 5
infinigen2 sofa_setup_wall_anchored_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand(...) → SofaSetupResult[source]#

Example renders

infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand seed 0
infinigen2 sofa_setup_wall_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand seed 1
infinigen2 sofa_setup_wall_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand seed 2
infinigen2 sofa_setup_wall_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand seed 3
infinigen2 sofa_setup_wall_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand seed 4
infinigen2 sofa_setup_wall_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.sofa_setup_wall_rand seed 5
infinigen2 sofa_setup_wall_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.sofa_setup.tv_setup_rand(rng) → TVSetupResult[source]#

Example renders

infinigen2.scenes.room.sofa_setup.tv_setup_rand seed 0
infinigen2 tv_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.tv_setup_rand seed 1
infinigen2 tv_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.tv_setup_rand seed 2
infinigen2 tv_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.tv_setup_rand seed 3
infinigen2 tv_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.tv_setup_rand seed 4
infinigen2 tv_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.sofa_setup.tv_setup_rand seed 5
infinigen2 tv_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:

rng (Generator)

infinigen2.scenes.room.sofa_setup.tv_setup_wall_rand(
rng,
wall_planes,
colliders,
) → list[TVSetupResult][source]#
Parameters:

wall_base#

class infinigen2.scenes.room.wall_base.WallResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; wall_planes: list[~MeshObject]; backs: list[~MeshObject]; sills: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; lights: list[~LightObject]; decorations: dict[str, list[~MeshObject]]; corner_walls: list[~MeshObject]; storages: list[~MeshObject]; colliders: CollisionSet | None

infinigen2.scenes.room.wall_base.extrude_for_thickness(obj, thickness) → pf.MeshObject[source]#

Solidify a flat surface into a back-thickness slab (the lightblocker body).

Parameters:
infinigen2.scenes.room.wall_base.finish_wall_plane(wall, wall_material) → pf.MeshObject[source]#
Parameters:
infinigen2.scenes.room.wall_base.fit_grid_margins(...) → tuple[float, float, int][source]#

Fit item count across extent and push slack into edge margins (low, high, n).

Parameters:
infinigen2.scenes.room.wall_base.name_objects(objs, name) → list[pf.MeshObject][source]#
Parameters:
infinigen2.scenes.room.wall_base.overlap_wall_plane_edges(wall, overlap)[source]#
Parameters:
infinigen2.scenes.room.wall_base.plain_wall(
wall,
wall_material,
wall_thickness,
) → tuple[pf.MeshObject, pf.MeshObject][source]#

Materialise, thicken and canonicalise a bare wall (no cutouts).

Parameters:
infinigen2.scenes.room.wall_base.plane_to_posed_canonical_mesh(obj, up_axis='Z') → pf.MeshObject[source]#

Bake a planar mesh’s location/rotation into the object transform, appearance unchanged.

Parameters:
infinigen2.scenes.room.wall_base.resolve_wall_inputs(
rng,
wall,
wall_material,
) → tuple[Generator, pf.MeshObject, pf.Material][source]#
Parameters:
infinigen2.scenes.room.wall_base.seat_upright_cabinet(...) → pf.MeshObject[source]#

Center an upright cabinet in the wall frame (X=depth out, Y=width, Z=height).

Y/Z centered on the niche; X shifted so the back sits back_depth behind the surface (opening at depth-back_depth). Placement maps local X->normal, Y->along-wall, Z->up.

Parameters:
infinigen2.scenes.room.wall_base.shift_wall_ends(...)[source]#

Move each end of a wall mesh along world direction, keeping metric U.

Parameters:
infinigen2.scenes.room.wall_base.upright_cabinet_footprint(width, height) → pf.MeshObject[source]#

Flat wall-frame rect (Y=width=U, Z=height=V) for niche-grid sizing.

Parameters:
infinigen2.scenes.room.wall_base.wall_storage_width_rand(rng, wall_width, min_margin) → float[source]#
Parameters:
infinigen2.scenes.room.wall_base.wall_uv_dimensions(wall) → tuple[float, float][source]#
Parameters:

wall (pf.MeshObject)

infinigen2.scenes.room.wall_base.wall_plain_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_base.wall_plain_rand seed 0
infinigen2 wall_plain_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
Parameters:

wall_cutouts#

class infinigen2.scenes.room.wall_cutouts.CutoutResult(...)[source]#

Bases: NamedTuple

Fields: geom: MeshObject; sill: MeshObject | None; lightblocker: MeshObject | None; aliases: list[~MeshObject]; trim_edges: CurveObject | None

infinigen2.scenes.room.wall_cutouts.arrange_window_portals(
window_aliases,
window_obj,
window_portal,
) → list[LightObject][source]#
Parameters:
infinigen2.scenes.room.wall_cutouts.cutout_spaced_instances(...) → CutoutResult[source]#

Cut instance-footprint niches in a surface and place instance aliases over them.

Instance template must be x-centered (flip-invariant w.r.t. UV sign). trim_edges is the sharp mouth outline of every cutout on the wall surface, posed like the wall, with curve normals pre-set for sweeping a trim profile. Nonzero profile heights (metres) round the top/bottom of each footprint bbox into ellipse quarters spanning its full width.

Parameters:
infinigen2.scenes.room.wall_cutouts.cutout_trim_rand(...) → pf.MeshObject[source]#

Sweep a symmetric trim profile around cutout mouth outlines (window casing).

Parameters:
infinigen2.scenes.room.wall_cutouts.wall_cubby_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_cutouts.wall_cubby_rand seed 0
infinigen2 wall_cubby_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_cubby_rand seed 1
infinigen2 wall_cubby_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_cubby_rand seed 2
infinigen2 wall_cubby_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.wall_cutouts.wall_doors_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_cutouts.wall_doors_rand seed 0
infinigen2 wall_doors_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_doors_rand seed 1
infinigen2 wall_doors_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_doors_rand seed 2
infinigen2 wall_doors_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.wall_cutouts.wall_full_window_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_cutouts.wall_full_window_rand seed 0
infinigen2 wall_full_window_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_full_window_rand seed 1
infinigen2 wall_full_window_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_full_window_rand seed 2
infinigen2 wall_full_window_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.wall_cutouts.wall_painting_grid_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_cutouts.wall_painting_grid_rand seed 0
infinigen2 wall_painting_grid_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_painting_grid_rand seed 1
infinigen2 wall_painting_grid_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_painting_grid_rand seed 2
infinigen2 wall_painting_grid_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.wall_cutouts.wall_storage_shelf_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_cutouts.wall_storage_shelf_rand seed 0
infinigen2 wall_storage_shelf_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_storage_shelf_rand seed 1
infinigen2 wall_storage_shelf_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_storage_shelf_rand seed 2
infinigen2 wall_storage_shelf_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.wall_cutouts.wall_windows_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_cutouts.wall_windows_rand seed 0
infinigen2 wall_windows_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_windows_rand seed 1
infinigen2 wall_windows_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_cutouts.wall_windows_rand seed 2
infinigen2 wall_windows_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • wall (pf.MeshObject | None) -- (default: None)

  • wall_material (pf.Material | None) -- (default: None)

  • window_obj (pf.MeshObject | None) -- (default: None)

  • window_portal (LightObject | None) -- (default: None)

  • top_profile_height (float) -- (default: 0.0)

  • bottom_profile_height (float) -- (default: 0.0)

  • window_spacing (float | None) -- (default: None)

  • window_bottom (float | None) -- (default: None)

  • wall_thickness (float) -- (default: 0.05)

  • reveal_depth (float | None) -- (default: None)

infinigen2.scenes.room.wall_cutouts.window_spaced_rand(...) → CutoutResult[source]#
Parameters:

wall_mounts#

infinigen2.scenes.room.wall_mounts.wall_board_shelf_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_mounts.wall_board_shelf_rand seed 0
infinigen2 wall_board_shelf_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_mounts.wall_board_shelf_rand seed 1
infinigen2 wall_board_shelf_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_mounts.wall_board_shelf_rand seed 2
infinigen2 wall_board_shelf_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.wall_mounts.wall_storage_flush_rand(...) → WallResult[source]#

Example renders

infinigen2.scenes.room.wall_mounts.wall_storage_flush_rand seed 0
infinigen2 wall_storage_flush_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_mounts.wall_storage_flush_rand seed 1
infinigen2 wall_storage_flush_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_mounts.wall_storage_flush_rand seed 2
infinigen2 wall_storage_flush_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
Parameters:

wall_storage_setup#

class infinigen2.scenes.room.wall_storage_setup.WallStorageSetupResult(...)[source]#

Bases: NamedTuple

Fields: storage: list[~MeshResult]; all_objects: list[~MeshObject]; colliders: CollisionSet; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand(
rng,
wall_planes=None,
colliders=None,
) → WallStorageSetupResult[source]#

Example renders

infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand seed 0
infinigen2 wall_storage_setup_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand seed 1
infinigen2 wall_storage_setup_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand seed 2
infinigen2 wall_storage_setup_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand seed 3
infinigen2 wall_storage_setup_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand seed 4
infinigen2 wall_storage_setup_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.wall_storage_setup.wall_storage_setup_rand seed 5
infinigen2 wall_storage_setup_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:

Module contents#

demo_curve#

infinigen2.scenes.demo_curve.curve_demo(...) → DevSceneResult[source]#

Emit a representative base path curve into the pipeline state, and render it swept with a default profile so it stands alone as a scene. Downstream curve generators receive the path via their curve / base_curve parameter.

Example renders

infinigen2.scenes.demo_curve.curve_demo seed 0
infinigen2 curve_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.curve_demo seed 1
infinigen2 curve_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.curve_demo seed 2
infinigen2 curve_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.curve_demo seed 3
infinigen2 curve_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.curve_demo seed 4
infinigen2 curve_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.curve_demo seed 5
infinigen2 curve_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.demo_curve.trim_demo(...) → DevSceneResult[source]#

Example renders

infinigen2.scenes.demo_curve.trim_demo seed 0
infinigen2 trim_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.trim_demo seed 1
infinigen2 trim_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.trim_demo seed 2
infinigen2 trim_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.trim_demo seed 3
infinigen2 trim_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.trim_demo seed 4
infinigen2 trim_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.demo_curve.trim_demo seed 5
infinigen2 trim_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • size (float) -- (default: 1.5)

  • fillet_large (float) -- (default: 0.75)

  • fillet_small (float) -- (default: 0.1)

demo_material#

infinigen2.scenes.demo_material.material_banana(
rng,
material=None,
environment=None,
) → DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_cube(
rng,
material=None,
environment=None,
) → DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_ground_plane(...) → DevSceneResult[source]#

Ground patch at terrain scale, where position-driven terrain materials are tuned to read.

Parameters:
infinigen2.scenes.demo_material.material_monkey(
rng,
material=None,
environment=None,
) → DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_plane_horizontal_uv(
rng,
material=None,
environment=None,
) → DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_plane_orthographic(...) → DevSceneResult[source]#

Orthographic top-down plane scene for pixel-perfect GT validation.

Every pixel sees the same flat plane face: object index is uniform and all surface normals point straight up (+Z world space).

Parameters:
infinigen2.scenes.demo_material.material_plane_uv(
rng,
material=None,
environment=None,
) → DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_sphere(...) → DevSceneResult[source]#
Parameters:
  • rng (Generator)

  • material (pf.Material | None) -- (default: None)

  • environment (World | None) -- (default: None)

  • subdivisions (int) -- (default: 4)

  • radius (float) -- (default: 0.75)

infinigen2.scenes.demo_material.material_torus_uv(...) → DevSceneResult[source]#
Parameters:
  • rng (Generator)

  • material (pf.Material | None) -- (default: None)

  • environment (World | None) -- (default: None)

  • major_radius (float) -- (default: 0.5)

  • minor_radius (float) -- (default: 0.25)

demo_object#

infinigen2.scenes.demo_object.object_demo(...) → DevSceneResult[source]#
Parameters:

demo_util#

class infinigen2.scenes.demo_util.DevSceneResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list; cameras: list; lights: list; environment: World | None; curves: list

infinigen2.scenes.demo_util.demo_cube(size=1.0) → pf.MeshObject[source]#
Parameters:

size (float) -- (default: 1.0)

infinigen2.scenes.demo_util.grid_plane() → pf.MeshObject[source]#
infinigen2.scenes.demo_util.hardcoded_camera(...) → CameraObject[source]#
Parameters:
  • base_location (pf.Vector)

  • dist_mult (float) -- (default: 1)

  • elevation_deg (float) -- (default: 19)

  • altitude (float) -- (default: 2.2)

  • yaw_offset_deg (float) -- (default: 0)

infinigen2.scenes.demo_util.scale_reference(location, radius=0.3) → pf.MeshObject[source]#
Parameters:

floating_objects#

class infinigen2.scenes.floating_objects.FloatingObjectsResult(all_objects, colliders)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; colliders: CollisionSet

class infinigen2.scenes.floating_objects.ObjWithPostprocessingResult(mesh)[source]#

Bases: NamedTuple

Fields: mesh: MeshObject

class infinigen2.scenes.floating_objects.ObjectResult(mesh)[source]#

Bases: NamedTuple

Fields: mesh: MeshObject

infinigen2.scenes.floating_objects.floating_object_asset_rand(rng) → pf.MeshObject[source]#
Parameters:

rng (Generator)

infinigen2.scenes.floating_objects.floating_objects_rand(...) → FloatingObjectsResult[source]#
Parameters:
  • colliders (CollisionSet | None) -- Existing collision set to extend. Defaults to an empty set.

  • bbox (tuple[ndarray, ndarray] | None) -- Bounding box for placement. Defaults to a [0, 5]^3 cube, so this is a usable standalone Scene generator with no room walls around it.

  • floating_objects (list[pf.MeshObject] | None) -- If provided, place these objects instead of sampling new ones.

  • volume_density (float) -- Roughly what percent of the box’s volume should we fill when sampling.

  • check_collisions (bool) -- If False, do not add the placed objects to the returned collision set.

  • size_scale (float) -- Multiplier on the sampled object size (mean/spread/max), e.g. 2.0 for larger props. The object count is divided by size_scale**3 so the filled volume stays near volume_density.

  • rng (Generator)

Example renders

infinigen2.scenes.floating_objects.floating_objects_rand seed 0
infinigen2 floating_objects_rand object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 1
infinigen2 floating_objects_rand object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 2
infinigen2 floating_objects_rand object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 3
infinigen2 floating_objects_rand object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 4
infinigen2 floating_objects_rand object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 5
infinigen2 floating_objects_rand object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.floating_objects.lights_floating_rand(...) → FloatingObjectsResult[source]#

Place colored point lights in bbox, sampling shared-wattage lights when none given.

Parameters:
infinigen2.scenes.floating_objects.lights_point_colored_rand(...) → LightObject[source]#

A point light whose emission uses a fully-random RGB color.

Parameters:
infinigen2.scenes.floating_objects.lights_with_shared_wattage_rand(
rng,
quantity=None,
wattage=None,
) → list[LightObject][source]#

Create quantity colored point lights whose energies sum to wattage.

Parameters:
  • rng (Generator)

  • quantity (int | None) -- (default: None)

  • wattage (float | None) -- (default: None)

infinigen2.scenes.floating_objects.obj_with_postprocessing(
rng,
) → ObjWithPostprocessingResult[source]#

Example renders

infinigen2.scenes.floating_objects.obj_with_postprocessing seed 0
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 0 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 1
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 1 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 2
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 2 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 3
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 3 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 4
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 4 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 5
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 5 --passes rgb -r 512 512 -s 128
Parameters:

rng (Generator)

infinigen2.scenes.floating_objects.object_rand(rng) → ObjectResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.floating_objects.rotated_bbox_extents(obj, rot, scale) → tuple[ndarray, ndarray][source]#

Return (min, max) of the object’s local bbox corners after applying rot and scale, centered at origin.

Parameters:

indoor_space#

class infinigen2.scenes.indoor_space.SetupGridResult(...)[source]#

Bases: NamedTuple

Fields: all_objects: list[~MeshObject]; storage_containers: list[~MeshObject]; supports: list[~MeshObject]; storages: list[~MeshObject]

class infinigen2.scenes.indoor_space.WallRowResult(grid, yaw)[source]#

Bases: NamedTuple

Fields: grid: SetupGridResult; yaw: float

infinigen2.scenes.indoor_space.bookshelf_aisle_rows_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.grid_centered_sofa_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.chair_banks_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.grid_cocktail_table_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.desk_aisle_rows_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.desk_grid_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.grid_dining_table_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.indoor_space_rand(...) → RoomResult[source]#

Example renders

infinigen2.scenes.indoor_space.indoor_space_rand seed 0
infinigen2 indoor_space_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.indoor_space.indoor_space_rand seed 1
infinigen2 indoor_space_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.indoor_space.indoor_space_rand seed 2
infinigen2 indoor_space_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.indoor_space.indoor_space_rand seed 3
infinigen2 indoor_space_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.indoor_space.indoor_space_rand seed 4
infinigen2 indoor_space_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.indoor_space.indoor_space_rand seed 5
infinigen2 indoor_space_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

infinigen2.scenes.indoor_space.seat_wall_row_rand(...) → WallRowResult[source]#
Parameters:
infinigen2.scenes.indoor_space.setup_grid_in_region(...) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.setup_grid_instances(
...,
) → pf.ProcNode[procfunc.nodes.types.Instances][source]#
Parameters:
infinigen2.scenes.indoor_space.sink_wall_row_rand(...) → WallRowResult[source]#
Parameters:
infinigen2.scenes.indoor_space.sofa_grid_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.storage_aisle_rows_rand(
rng,
room_dimensions,
colliders,
) → SetupGridResult[source]#
Parameters:
infinigen2.scenes.indoor_space.wall_row_rand(...) → WallRowResult[source]#
Parameters:
infinigen2.scenes.indoor_space.wall_rows_rand(...) → SetupGridResult[source]#
Parameters:

setup_utils#

class infinigen2.scenes.setup_utils.BareMeshResult(mesh)[source]#

Bases: NamedTuple

Fields: mesh: MeshObject

class infinigen2.scenes.setup_utils.MeshResult(*args, **kwargs)[source]#

Bases: Protocol

property mesh: pf.MeshObject#
infinigen2.scenes.setup_utils.back_face_grounded(...) → bool[source]#
Parameters:
infinigen2.scenes.setup_utils.bbox_face_grounded(...) → bool[source]#
Parameters:
infinigen2.scenes.setup_utils.center_inside(region, obj) → bool[source]#
Parameters:
infinigen2.scenes.setup_utils.clear_of(obj, others, distance) → bool[source]#
Parameters:
infinigen2.scenes.setup_utils.inset_floor_point_rand(...) → tuple[float, float][source]#

A random floor point where a footprint of half_size stays margin inside the room, falling back to the room centre on an axis too small for it.

Parameters:
infinigen2.scenes.setup_utils.jitter_object_rotation_rand(...)[source]#

Retry yaw against every other object in colliders.

Parameters:
infinigen2.scenes.setup_utils.random_bbox_poses_animation_rand(...)[source]#
Parameters:
infinigen2.scenes.setup_utils.retry_place(...) → infinigen2.scenes.setup_utils.MR | None[source]#

Re-pose child with place_fn until it clears the existing colliders (and satisfies accept_fn, if given), or give up and return None. Reads colliders but never extends it; keep_non_colliding owns updates and intra-batch collisions.

Parameters:
infinigen2.scenes.setup_utils.side_table_object_rand(rng) → MeshResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.setup_utils.snap_back_front(...)[source]#
Parameters:
infinigen2.scenes.setup_utils.snap_on_top(...)[source]#
Parameters:
infinigen2.scenes.setup_utils.snap_side_by_side(rng, child, parents)[source]#
Parameters:
infinigen2.scenes.setup_utils.snap_to_wall(...)[source]#
Parameters:
infinigen2.scenes.setup_utils.sofa_object_rand(rng) → SofaResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.setup_utils.standalone_wall_planes(length=15.0, height=3.0) → list[pf.MeshObject][source]#
Parameters:
  • length (float) -- (default: 15.0)

  • height (float) -- (default: 3.0)

infinigen2.scenes.setup_utils.storage_object_rand(rng) → MeshResult[source]#
Parameters:

rng (Generator)

Module contents#