← Back to Gallery

Loading 3D viewer…

Hanok scholar's house (guided, sonnet-5-5)

by Jorge Barbero

Dimensions
44×22×40
Blocks
4,577
Compute Time
1.8s
Generation Time
1m 59s
Model
claude-sonnet-5-5
Created
October 5, 2026
autoevalguidedhanok
Prompt

User Prompt

a Korean hanok scholar's house (sarangchae) with a curved dark-grey tile roof, raised wooden maru floor with paper-screen doors, stone-wall courtyard with a persimmon tree, interior with ondol room and low desk

Photos

Exterior
Exteriorexterior
Ondol room
Ondol roominterior
Maru
Maruinterior
CraftScript Source
// === BUILD PLAN ===
// Style: Korean hanok sarangchae (scholar's quarters), hip roof of dark tiles, raised stone platform
// Footprint: 20x10 main wing (x8..27, z8..17) on stone platform x6..29 z6..19 + walled courtyard x3..34 z3..36 + gate house + chimney
// Height: floorY=2 (platform top), walkY=3, walls y3..6, roof y7..13
//
// GROUND FLOOR (z down, front=south):
//  z8  ##W##W##|##W##W##   back wall: plaster + paper panes
//      #  maru  D ondol #   maru (open veranda, west) | ondol room (east)
//  z17 P  P  P  P|ppDpp#   front: pillars+rail (maru) | paper doors (ondol)
// FRONT: low hip roof, upturned corners, solid ridge
// MATERIALS PLAN:
//  base: stone_bricks+mossy+cobble  — grounds platform
//  frame: dark_oak_log pillars + dark_oak_planks beams vs plaster (smooth_quartz/white_terracotta/calcite) — contrast frame
//  doors: white_stained_glass_pane = hanji paper screens
//  roof: polished_blackstone_brick / deepslate_tile stairs alternating rows (tile courses), solid blackstone ridge
//  floor: oak+birch planks (ondol oiled paper look)
// Rooms: ondol study (low desk, cushions, bookshelf, folding screen, lanterns), maru (storage barrels, low tea table)
// === END PLAN ===
var floorY = 2, walkY = 3, wallTop = 6;
function hh(x, y, z) { var s = Math.sin(x * 12.9898 + y * 37.7 + z * 78.233) * 43758.5453; return s - Math.floor(s); }
var grass = palette([{block:"grass_block",weight:70},{block:"coarse_dirt",weight:15},{block:"moss_block",weight:15}]);
var yard = palette([{block:"gravel",weight:55},{block:"andesite",weight:25},{block:"coarse_dirt",weight:20}]);
var stoneP = palette([{block:"stone_bricks",weight:55},{block:"mossy_stone_bricks",weight:25},{block:"cobblestone",weight:20}]);
var plaster = palette([{block:"smooth_quartz",weight:50},{block:"white_terracotta",weight:30},{block:"calcite",weight:20}]);
var floorP = palette([{block:"oak_planks",weight:55},{block:"birch_planks",weight:30},{block:"stripped_birch_log",weight:15}]);
// ground
fill(0, 0, 0, 43, 0, 39, grass);
fill(4, 0, 21, 33, 0, 35, yard);
// === PLATFORM ===
fill(6, 1, 6, 29, 2, 19, stoneP);
// === FLOORS ===
fill(9, 2, 9, 26, 2, 16, floorP);
// === WALLS ===
var x, y, z;
// back wall z=8, side walls
for (x = 8; x <= 27; x++) { for (y = 3; y <= 5; y++) { pb(x, y, 8, plaster); } }
for (z = 9; z <= 16; z++) { for (y = 3; y <= 5; y++) { pb(27, y, z, plaster); pb(8, y, z, "white_stained_glass_pane"); pb(17, y, z, plaster); } }
// beams y=6 all around
for (x = 8; x <= 27; x++) { pb(x, 6, 8, "dark_oak_planks"); pb(x, 6, 17, "dark_oak_planks"); }
for (z = 8; z <= 17; z++) { pb(8, 6, z, "dark_oak_planks"); pb(27, 6, z, "dark_oak_planks"); pb(17, 6, z, "dark_oak_planks"); }
// paper panes in back wall
var bx = [10, 11, 14, 15, 19, 20, 24, 25];
var i;
for (i = 0; i < bx.length; i++) { pb(bx[i], 4, 8, "white_stained_glass_pane"); pb(bx[i], 5, 8, "white_stained_glass_pane"); }
// east wall window
pb(27, 4, 12, "white_stained_glass_pane"); pb(27, 5, 12, "white_stained_glass_pane"); pb(27, 4, 13, "white_stained_glass_pane"); pb(27, 5, 13, "white_stained_glass_pane");
// front wall of ondol room z=17 x=18..26: paper doors
for (x = 18; x <= 26; x++) { for (y = 3; y <= 5; y++) { pb(x, y, 17, "white_stained_glass_pane"); } pb(x, 3, 17, "dark_oak_trapdoor[facing=south,half=bottom,open=false]"); }
for (y = 3; y <= 5; y++) { pb(19, y, 17, "air"); pb(20, y, 17, "air"); }
// divider doorway z=12..13 at x=17
for (y = 3; y <= 5; y++) { pb(17, y, 12, "air"); pb(17, y, 13, "air"); }
// pillars
var px = [8, 12, 17, 22, 27];
for (i = 0; i < px.length; i++) { for (y = 3; y <= 6; y++) { ps(px[i], y, 8, "dark_oak_log[axis=y]"); ps(px[i], y, 17, "dark_oak_log[axis=y]"); } }
for (y = 3; y <= 6; y++) { ps(17, y, 12, "dark_oak_log[axis=y]"); ps(17, y, 13, "dark_oak_log[axis=y]"); }
// divider pillars at 17 already; side pillars east/west
for (y = 3; y <= 6; y++) { ps(8, y, 12, "dark_oak_log[axis=y]"); ps(27, y, 12, "dark_oak_log[axis=y]"); ps(8, y, 13, "dark_oak_log[axis=y]"); }
// maru rail along front (x9..11)
for (x = 9; x <= 11; x++) { pb(x, 3, 17, "dark_oak_fence"); }
// ceiling (dark oak) y=7 interior
fill(9, 7, 9, 26, 7, 16, "dark_oak_planks");
// === ROOF (hip, stairs rings, solid mass underneath) ===
var r, stId;
for (r = 0; r <= 5; r++) {
  stId = (r % 2 === 0) ? "polished_blackstone_brick_stairs" : "deepslate_tile_stairs";
  var xa = 6 + r, xb = 29 - r, za = 6 + r, zb = 19 - r, yy = 7 + r;
  fill(xa, yy, za, xb, yy, zb, "polished_blackstone_bricks");
  for (x = xa; x <= xb; x++) { roofStair(x, yy, za, stId, "north"); roofStair(x, yy, zb, stId, "south"); }
  for (z = za + 1; z <= zb - 1; z++) { roofStair(xa, yy, z, stId, "west"); roofStair(xb, yy, z, stId, "east"); }
}
fill(12, 13, 12, 23, 13, 13, "polished_blackstone_bricks");
for (x = 11; x <= 24; x++) { } 
// ridge end caps and ridge line
for (x = 12; x <= 23; x++) { pb(x, 14, 12, "polished_blackstone_brick_slab[type=bottom]"); pb(x, 14, 13, "polished_blackstone_brick_slab[type=bottom]"); }
// upturned eave corners
pb(6, 8, 6, "polished_blackstone_brick_wall"); pb(29, 8, 6, "polished_blackstone_brick_wall"); pb(6, 8, 19, "polished_blackstone_brick_wall"); pb(29, 8, 19, "polished_blackstone_brick_wall");
// === INTERIOR: ondol study ===
ps(21, 3, 11, "dark_oak_slab[type=bottom]"); ps(22, 3, 11, "dark_oak_slab[type=bottom]");
pb(21, 4, 11, "potted_bamboo"); pb(23, 3, 11, "lectern[facing=west]");
fill(19, 3, 13, 25, 3, 15, "gray_carpet");
pb(21, 3, 13, "red_carpet"); pb(22, 3, 13, "red_carpet");
for (z = 9; z <= 11; z++) { pb(26, 3, z, "bookshelf"); pb(26, 4, z, "bookshelf"); }
// folding screen (byeongpung)
for (x = 19; x <= 21; x++) { pb(x, 3, 9, "dark_oak_fence"); pb(x, 4, 9, "white_stained_glass_pane"); }
pb(24, 3, 9, "chest[facing=south]"); pb(25, 3, 9, "barrel[facing=up]");
ps(22, 6, 13, "lantern[hanging=true]"); ps(25, 6, 11, "lantern[hanging=true]");
// === INTERIOR: maru ===
pb(9, 3, 9, "barrel[facing=up]"); pb(10, 3, 9, "barrel[facing=up]"); pb(11, 3, 9, "chest[facing=south]");
ps(12, 3, 11, "spruce_slab[type=bottom]"); ps(13, 3, 11, "spruce_slab[type=bottom]");
pb(13, 3, 13, "brown_carpet"); pb(12, 3, 13, "brown_carpet"); pb(14, 3, 13, "brown_carpet");
ps(13, 6, 12, "lantern[hanging=true]");
pb(15, 3, 9, "flower_pot");
// === COURTYARD WALL ===
for (x = 3; x <= 34; x++) { for (y = 1; y <= 2; y++) { pb(x, y, 3, stoneP); pb(x, y, 36, stoneP); } pb(x, 3, 3, "polished_blackstone_brick_slab"); pb(x, 3, 36, "polished_blackstone_brick_slab"); }
for (z = 3; z <= 36; z++) { for (y = 1; y <= 2; y++) { pb(3, y, z, stoneP); pb(34, y, z, stoneP); } pb(3, 3, z, "polished_blackstone_brick_slab"); pb(34, 3, z, "polished_blackstone_brick_slab"); }
// gate opening
for (x = 18; x <= 20; x++) { for (y = 1; y <= 3; y++) { pb(x, y, 36, "air"); } }
// gate house
for (y = 1; y <= 5; y++) { ps(17, y, 35, "dark_oak_log[axis=y]"); ps(21, y, 35, "dark_oak_log[axis=y]"); ps(17, y, 37, "dark_oak_log[axis=y]"); ps(21, y, 37, "dark_oak_log[axis=y]"); }
for (z = 35; z <= 37; z++) { roofStair(16, 6, z, "polished_blackstone_brick_stairs", "west"); roofStair(22, 6, z, "polished_blackstone_brick_stairs", "east"); roofStair(17, 7, z, "deepslate_tile_stairs", "west"); roofStair(21, 7, z, "deepslate_tile_stairs", "east"); roofStair(18, 8, z, "polished_blackstone_brick_stairs", "west"); roofStair(20, 8, z, "polished_blackstone_brick_stairs", "east"); pb(19, 8, z, "polished_blackstone_bricks"); pb(17, 6, z, "dark_oak_planks"); pb(18, 6, z, "dark_oak_planks"); pb(19, 6, z, "dark_oak_planks"); pb(20, 6, z, "dark_oak_planks"); pb(21, 6, z, "dark_oak_planks"); pb(17,7,z,"deepslate_tile_stairs[facing=east]"); }
// path & steps
for (z = 22; z <= 35; z++) { for (x = 18; x <= 20; x++) { pb(x, 0, z, (hh(x, 0, z) < 0.5) ? "stone_bricks" : "smooth_stone"); } }
for (x = 18; x <= 20; x++) { ps(x, 1, 21, "stone_brick_stairs[facing=north]"); pb(x, 1, 20, "stone_bricks"); ps(x, 2, 20, "stone_brick_stairs[facing=north]"); }
// stone lanterns
function stoneLantern(sx, sz) { pb(sx, 1, sz, "stone_bricks"); pb(sx, 2, sz, "stone_brick_wall"); pb(sx, 3, sz, "stone_brick_slab"); pb(sx, 4, sz, "lantern"); }
stoneLantern(16, 25); stoneLantern(22, 25);
// === PERSIMMON TREE ===
for (y = 1; y <= 5; y++) { ps(9, y, 28, "dark_oak_log[axis=y]"); }
ps(10, 5, 28, "dark_oak_log[axis=x]"); ps(8, 4, 28, "dark_oak_log[axis=x]");
var dx, dy, dz;
for (dx = -4; dx <= 4; dx++) { for (dy = -2; dy <= 3; dy++) { for (dz = -4; dz <= 4; dz++) {
  if (dx * dx + dz * dz + dy * dy * 2 <= 15 && hh(dx + 9, dy + 7, dz + 28) > 0.2) {
    var bxl = 9 + dx, byl = 7 + dy, bzl = 28 + dz;
    pb(bxl, byl, bzl, "oak_leaves[persistent=true]");
    if (hh(bxl, byl, bzl) > 0.93) { pb(bxl, byl - 1, bzl, "orange_terracotta"); }
  } } } }
// garden: onggi jars + flower beds
for (i = 0; i < 4; i++) { pb(30, 1, 22 + i * 2, "brown_terracotta"); pb(30, 2, 22 + i * 2, "brown_terracotta"); pb(30, 3, 22 + i * 2, "smooth_stone_slab"); }
for (x = 24; x <= 32; x++) { pb(x, 1, 31, (hh(x, 1, 31) < 0.5) ? "azalea" : "flowering_azalea"); pb(x, 1, 32, "oak_leaves[persistent=true]"); }
// chimney
for (y = 1; y <= 10; y++) { fill(31, y, 12, 32, y, 13, stoneP); }
pb(31, 11, 12, "stone_brick_slab"); pb(32, 11, 12, "stone_brick_slab"); pb(31, 11, 13, "stone_brick_slab"); pb(32, 11, 13, "stone_brick_slab");
fill(31, 1, 12, 32, 2, 13, stoneP);
// mossy ground edge
for (x = 6; x <= 29; x++) { if (hh(x, 1, 5) > 0.5) { pb(x, 1, 5, "moss_carpet"); } }

Static Renders

Hanok scholar's house (guided, sonnet-5-5) isometric viewisometric
Hanok scholar's house (guided, sonnet-5-5) front viewfront
Hanok scholar's house (guided, sonnet-5-5) side viewside
Hanok scholar's house (guided, sonnet-5-5) back viewback
Hanok scholar's house (guided, sonnet-5-5) top viewtop