```python
import bpy, math
from mathutils import Vector

# ---------- Reset ----------
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
for datablocks in (bpy.data.meshes, bpy.data.curves, bpy.data.materials, bpy.data.cameras, bpy.data.lights):
    pass

# ---------- Materials ----------
def make_mat(name, color, roughness=0.7, metallic=0.0, emission=None):
    m = bpy.data.materials.new(name)
    m.diffuse_color = (*color, 1)
    m.use_nodes = True
    bsdf = m.node_tree.nodes.get("Principled BSDF")
    bsdf.inputs["Base Color"].default_value = (*color, 1)
    bsdf.inputs["Roughness"].default_value = roughness
    bsdf.inputs["Metallic"].default_value = metallic
    if emission:
        bsdf.inputs["Emission Color"].default_value = (*emission, 1)
        bsdf.inputs["Emission Strength"].default_value = 3.0
    return m

wood = make_mat("Warm honey pine logs", (0.38, 0.14, 0.045), .72)
wood_light = make_mat("Fresh cut wood", (0.62, 0.30, 0.09), .68)
wood_dark = make_mat("Dark timber trim", (0.16, 0.055, 0.018), .8)
roofmat = make_mat("Weathered cedar roof", (0.09, 0.045, 0.025), .9)
roofedge = make_mat("Roof edge", (0.22, 0.09, 0.025), .8)
stone = make_mat("Chimney stones", (0.28, 0.25, 0.21), .95)
stone2 = make_mat("Light chimney stones", (0.43, 0.39, 0.32), .9)
groundmat = make_mat("Forest floor", (0.075, 0.16, 0.055), .95)
grassmat = make_mat("Grass variation", (0.12, 0.25, 0.07), .95)
watermat = make_mat("Clear blue pond", (0.025, 0.16, 0.24), .18)
watermat.diffuse_color = (0.02, 0.18, 0.28, 1)
leafmat = make_mat("Evergreen foliage", (0.025, 0.18, 0.055), .92)
leaflight = make_mat("Sunlit foliage", (0.08, 0.32, 0.095), .9)
trunkmat = make_mat("Pine bark", (0.16, 0.065, 0.022), .95)
windowmat = make_mat("Warm window glow", (1.0, 0.42, 0.08), .28, emission=(1.0, 0.16, 0.025))
metalmat = make_mat("Iron hardware", (0.025, 0.02, 0.015), .38, .65)
dockmat = make_mat("Dock planks", (0.35, 0.17, 0.055), .82)
rockmat = make_mat("Pond rocks", (0.24, 0.27, 0.23), 1.0)

# ---------- Helpers ----------
def assign(obj, mat):
    if obj.data and hasattr(obj.data, "materials"):
        obj.data.materials.append(mat)
    return obj

def cube(name, loc, scale, mat, bevel=0.0, rot=(0,0,0)):
    bpy.ops.mesh.primitive_cube_add(location=loc, rotation=rot)
    o = bpy.context.object
    o.name = name
    o.scale = (scale[0]/2, scale[1]/2, scale[2]/2)
    bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
    assign(o, mat)
    if bevel:
        mod = o.modifiers.new("Softened edges", "BEVEL")
        mod.width = bevel
        mod.segments = 2
    return o

def cyl(name, loc, radius, depth, mat, vertices=12, rot=(0,0,0), bevel=0.0):
    bpy.ops.mesh.primitive_cylinder_add(vertices=vertices, radius=radius, depth=depth, location=loc, rotation=rot)
    o = bpy.context.object
    o.name = name
    assign(o, mat)
    if bevel:
        mod = o.modifiers.new("Rounded edges", "BEVEL")
        mod.width = bevel
        mod.segments = 2
    return o

def sphere(name, loc, scale, mat):
    bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=2, radius=1, location=loc)
    o = bpy.context.object
    o.name = name
    o.scale = scale
    bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
    assign(o, mat)
    return o

def cone(name, loc, r1, r2, depth, mat, vertices=12):
    bpy.ops.mesh.primitive_cone_add(vertices=vertices, radius1=r1, radius2=r2, depth=depth, location=loc)
    o = bpy.context.object
    o.name = name
    assign(o, mat)
    return o

# ---------- Ground and pond ----------
cube("Large forest clearing", (0,0,-0.28), (30,30,.5), groundmat, .12)

bpy.ops.mesh.primitive_uv_sphere_add(segments=64, ring_count=24, location=(-4.5,-4.0,-0.05))
pond = bpy.context.object
pond.name = "Reflective pond"
pond.scale = (6.2, 4.5, .16)
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
assign(pond, watermat)

# shallow shoreline stones
shore = [(-8,-3),(-7,-6),(-4,-7.7),(-1,-7.2),(1,-6.6),(-8,-1.5),(-3,-8.0)]
for i,(x,y) in enumerate(shore):
    sphere("Shore stone", (x,y,0.03), (0.38+0.12*(i%2),0.28,0.20), rockmat)

# ---------- Cabin log walls ----------
# stacked front and rear horizontal logs
for z in [0.65, 1.05, 1.45, 1.85, 2.25, 2.65, 3.05, 3.45, 3.85]:
    cyl("Front horizontal log", (0,-2.18,z), .22, 6.5, wood, 12, (0,math.pi/2,0), .035)
    cyl("Rear horizontal log", (0,2.18,z), .22, 6.5, wood, 12, (0,math.pi/2,0), .035)

# side logs, alternating protruding ends
for z in [0.85,1.65,2.45,3.25]:
    cyl("Left side log", (-3.02,0,z), .22, 4.8, wood_light, 12, (math.pi/2,0,0), .035)
    cyl("Right side log", (3.02,0,z), .22, 4.8, wood_light, 12, (math.pi/2,0,0), .035)

# corner timber posts
for x in (-3.05,3.05):
    for y in (-2.2,2.2):
        cube("Corner timber", (x,y,2.15), (.34,.34,4.25), wood_dark, .06)

# gable triangular suggestion with horizontal logs
for i,z in enumerate([4.15,4.48,4.81,5.14]):
    width = 2.25 - i*.48
    cyl("Gable log", (0,0,z), .19, width*2, wood, 12, (0,math.pi/2,0), .025)

# front door, frame and step
cube("Front door", (-1.05,-2.43,1.55), (1.35,.16,2.35), wood_dark, .06)
cube("Door inset", (-1.05,-2.53,1.55), (.92,.06,1.85), wood, .025)
cube("Door lintel", (-1.05,-2.62,2.75), (1.65,.20,.22), wood_light, .035)
for x in (-1.72,-0.38):
    cube("Door jamb", (x,-2.60,1.55), (.18,.20,2.5), wood_light, .03)
cyl("Door handle", (-.72,-2.67,1.55), .07, .12, metalmat, 12, (math.pi/2,0,0))
cube("Door step", (-1.05,-2.72,.28), (1.9,.75,.22), stone, .05)

# glowing window with frame and cross
cube("Golden front window", (1.25,-2.48,2.05), (1.45,.10,1.35), windowmat, .03)
for x,y,z,s in [(1.25,-2.56,2.05,(.12,.12,1.55)),(1.25,-2.57,2.05,(1.7,.12,.12))]:
    cube("Window mullion", (x,y,z), s, wood_dark, .02)
for x in (.43,2.07):
    cube("Window side trim", (x,-2.58,2.05), (.16,.18,1.65), wood_light, .02)
cube("Window top trim", (1.25,-2.58,2.88), (1.8,.18,.18), wood_light, .02)

# side window
cube("Side glowing window", (3.16,.25,2.2), (.10,1.45,1.2), windowmat, .02)
cube("Side window vertical", (3.22,.25,2.2), (.14,.12,1.35), wood_dark, .02)
cube("Side window horizontal", (3.22,.25,2.2), (.14,1.55,.12), wood_dark, .02)

# ---------- Roof ----------
angle = math.radians(35)
cube("Front roof plane", (0,-1.42,5.22), (7.25,3.65,.28), roofmat, .04, (angle,0,0))
cube("Rear roof plane", (0,1.42,5.22), (7.25,3.65,.28), roofmat, .04, (-angle,0,0))
# roof ridge
cyl("Roof ridge", (0,0,6.28), .17, 7.6, roofedge, 12, (0,math.pi/2,0), .025)
# visible roof slats
for x in [-3,-2,-1,0,1,2,3]:
    cube("Roof trim slat", (x,-1.45,5.25), (.055,3.5,.34), roofedge, .015, (angle,0,0))
    cube("Roof trim slat", (x,1.45,5.25), (.055,3.5,.34), roofedge, .015, (-angle,0,0))

# ---------- Stone chimney ----------
for row,z in enumerate([4.7,5.1,5.5,5.9,6.3,6.7]):
    for col in range(2):
        x = 1.72 + col*.48 + (0.24 if row%2 else 0)
        cube("Chimney stone", (x,1.05,z), (.48,.75,.36),
             stone2 if (row+col)%3==0 else stone, .035)
cube("Chimney cap", (2.08,1.05,7.08), (1.25,1.05,.20), stone, .04)

# ---------- Dock ----------
# dock extends toward pond from front-right
for i,y in enumerate([-2.9,-3.55,-4.2,-4.85,-5.5,-6.15]):
    cube("Dock plank", (2.45,y,.20), (2.2,.56,.18), dockmat if i%2 else wood_light, .035)
for x in (1.55,3.35):
    cube("Dock side beam", (x,-4.55,.06), (.18,3.9,.22), wood_dark, .03)
for x in (1.55,3.35):
    for y in (-3.1,-4.8,-6.3):
        cyl("Dock support", (x,y,-.35), .13, .9, wood_dark, 10)

# lantern on dock
cube("Dock lantern body", (3.0,-3.0,1.0), (.34,.34,.55), metalmat, .04)
cube("Lantern light", (3.0,-3.0,1.02), (.18,.18,.27), windowmat, .02)
cone("Lantern roof", (3.0,-3.0,1.35), .28, .06, .22, metalmat, 4)

# ---------- Trees ----------
def tree(x,y,h=6,scale=1.0):
    trunk_h = h*.48
    cyl("Tree trunk", (x,y,trunk_h/2), .28*scale, trunk_h, trunkmat, 10, bevel=.03)
    # three layered conical evergreen crowns
    cone("Lower evergreen crown", (x,y,trunk_h+.75*scale), 1.45*scale, .42*scale, 2.25*scale, leafmat, 12)
    cone("Middle evergreen crown", (x,y,trunk_h+1.8*scale), 1.15*scale, .28*scale, 2.1*scale, leafmat, 12)
    cone("Upper evergreen crown", (x,y,trunk_h+2.8*scale), .82*scale, .05*scale, 1.9*scale, leaflight, 12)

tree(-10,3.5,7.0,1.15)
tree(9,4.8,6.5,1.0)
tree(8,-5.0,5.5,.82)
tree(-10,-7.5,5.8,.9)
tree(5,8,7.5,1.2)

# shrubs around cabin
for x,y in [(-5,1), (5,1.5), (-5,-3), (5,-2), (-7,2.5), (7,1)]:
    sphere("Rounded woodland shrub", (x,y,.65), (1.0,.8,.8), leafmat)

# ---------- Lighting ----------
world = bpy.context.scene.world
world.use_nodes = True
world.node_tree.nodes["Background"].inputs["Color"].default_value = (0.025,0.045,0.075,1)
world.node_tree.nodes["Background"].inputs["Strength"].default_value = 0.28

bpy.ops.object.light_add(type='SUN', location=(4,-6,12))
sun = bpy.context.object
sun.name = "Warm late afternoon sun"
sun.rotation_euler = (math.radians(28), math.radians(-25), math.radians(-32))
sun.data.energy = 3.0
sun.data.angle = math.radians(18)
sun.data.color = (1.0,.72,.48)

bpy.ops.object.light_add(type='AREA', location=(-3,-6,9))
area = bpy.context.object
area.name = "Soft cabin fill"
area.data.energy = 850
area.data.shape = 'DISK'
area.data.size = 7
area.data.color = (1.0,.55,.30)
area.rotation_euler = (math.radians(25),0,0)

# ---------- Camera ----------
def point_camera(obj, target):
    obj.rotation_euler = (Vector(target)-obj.location).to_track_quat('-Z','Y').to_euler()

bpy.ops.object.camera_add(location=(12,-16,10.2))
cam = bpy.context.object
cam.name = "Presentation camera"
cam.data.lens = 48
point_camera(cam, (0,0,2.7))
bpy.context.scene.camera = cam

# ---------- Render settings ----------
scene = bpy.context.scene
scene.render.engine = 'BLENDER_EEVEE_NEXT'
scene.render.resolution_x = 1536
scene.render.resolution_y = 1536
scene.render.resolution_percentage = 100
scene.render.image_settings.file_format = 'PNG'
scene.render.film_transparent = False
scene.render.filepath = "/tmp/cabin_pond.png"
scene.render.image_settings.color_mode = 'RGBA'
scene.view_settings.look = 'AgX - Medium High Contrast'
scene.render.use_file_extension = True

# Improve viewport / export readability
for obj in bpy.context.scene.objects:
    if obj.type == 'MESH':
        obj.select_set(False)

# Save complete scene
bpy.ops.wm.save_as_mainfile(filepath="/tmp/warm_woodland_cabin.blend")
```