← Back to Gallery

Loading 3D viewer…

Ottoman Hammam (bare)

by Jorge Barbero

Dimensions
88×44×76
Blocks
24,730
Compute Time
0.9s
Generation Time
5.3s
Model
claude-opus-5
Created
August 24, 2026
ottomanhammambareautoeval
Prompt

User Prompt

an Ottoman stone hammam (bathhouse): squat sandstone block with a large ribbed central dome over the hot room flanked by two smaller domes, arched entrance portal with a stepped muqarnas hood, star-shaped skylight holes, interior with a raised octagonal marble navel-stone, water basins in wall niches, a stair up to a raised gallery, warm lantern light

Enhanced Prompt

bare condition: no docs, no prepare_build guidance used. Naive direct build with fill/pb and hand-written loops.

Photos

Exterior
Exteriorexterior
Hot room
Hot roominterior
Entrance room
Entrance roominterior
CraftScript Source
// Ottoman hammam - bathhouse with three domes
var groundY = 8;
var floorY = 9;

// ground
fill(10, groundY - 2, 10, 78, groundY, 66, 'sand');

// main building block
fill(24, floorY, 24, 62, floorY, 48, 'sandstone');
fill(24, floorY + 1, 24, 62, floorY + 9, 48, 'sandstone');
// hollow it out
fill(25, floorY + 1, 25, 61, floorY + 9, 47, 'air');
// ceiling
fill(24, floorY + 10, 24, 62, floorY + 10, 48, 'sandstone');

// interior partition walls: three rooms
fill(36, floorY + 1, 25, 36, floorY + 9, 47, 'sandstone');
fill(50, floorY + 1, 25, 50, floorY + 9, 47, 'sandstone');
// doorways
fill(36, floorY + 1, 35, 36, floorY + 2, 37, 'air');
fill(50, floorY + 1, 35, 50, floorY + 2, 37, 'air');

// entrance door on the front wall
fill(29, floorY + 1, 24, 30, floorY + 2, 24, 'air');

// windows
var wx;
for (wx = 27; wx < 60; wx += 4) {
  fill(wx, floorY + 5, 24, wx, floorY + 6, 24, 'orange_stained_glass');
  fill(wx, floorY + 5, 48, wx, floorY + 6, 48, 'orange_stained_glass');
}

// ---- domes ----
function makeDome(cx, cz, y, r, block) {
  var dx, dy, dz, d;
  for (dy = 0; dy <= r; dy++) {
    for (dx = -r; dx <= r; dx++) {
      for (dz = -r; dz <= r; dz++) {
        d = Math.sqrt(dx * dx + dy * dy + dz * dz);
        if (d <= r && d > r - 1.2) {
          pb(cx + dx, y + dy, cz + dz, block);
        }
      }
    }
  }
}
// big central dome + two smaller ones
makeDome(43, 36, floorY + 11, 9, 'stone_bricks');
makeDome(30, 36, floorY + 11, 5, 'stone_bricks');
makeDome(56, 36, floorY + 11, 5, 'stone_bricks');
// ribs on the big dome
var ang, rr, rx, rz, ry;
for (ang = 0; ang < 8; ang++) {
  for (rr = 0; rr <= 9; rr++) {
    rx = Math.round(Math.cos(ang * Math.PI / 4) * rr);
    rz = Math.round(Math.sin(ang * Math.PI / 4) * rr);
    ry = Math.round(Math.sqrt(Math.max(0, 81 - rr * rr)));
    pb(43 + rx, floorY + 11 + ry, 36 + rz, 'cut_sandstone');
  }
}
// open the domes into the rooms
fill(35, floorY + 10, 28, 51, floorY + 10, 44, 'air');
fill(26, floorY + 10, 32, 34, floorY + 10, 40, 'air');
fill(52, floorY + 10, 32, 60, floorY + 10, 40, 'air');
var sx, sy, sz, dd;
for (sy = floorY + 11; sy < floorY + 20; sy++) {
  for (sx = 35; sx <= 51; sx++) {
    for (sz = 28; sz <= 44; sz++) {
      dd = Math.sqrt((sx - 43) * (sx - 43) + (sy - floorY - 11) * (sy - floorY - 11) + (sz - 36) * (sz - 36));
      if (dd < 8) pb(sx, sy, sz, 'air');
    }
  }
}

// star skylight holes
pb(43, floorY + 20, 36, 'yellow_stained_glass');
pb(42, floorY + 20, 36, 'yellow_stained_glass');
pb(44, floorY + 20, 36, 'yellow_stained_glass');
pb(43, floorY + 20, 35, 'yellow_stained_glass');
pb(43, floorY + 20, 37, 'yellow_stained_glass');

// ---- entrance portal ----
fill(27, floorY, 20, 32, floorY, 24, 'sandstone');
fill(27, floorY + 1, 20, 32, floorY + 8, 24, 'sandstone');
fill(28, floorY + 1, 20, 31, floorY + 7, 23, 'air');
fill(29, floorY + 1, 20, 30, floorY + 3, 20, 'air');
// stepped hood
var st;
for (st = 0; st < 4; st++) {
  fill(28 + st, floorY + 4 + st, 20, 31 - st, floorY + 4 + st, 20, 'cut_sandstone');
}

// ---- interior: navel stone ----
var nx, nz, dman;
for (nx = 38; nx <= 48; nx++) {
  for (nz = 31; nz <= 41; nz++) {
    dman = Math.abs(nx - 43) + Math.abs(nz - 36);
    if (dman <= 6) pb(nx, floorY + 1, nz, 'quartz_block');
  }
}
// marble floor in the hot room
fill(37, floorY, 25, 49, floorY, 47, 'quartz_block');

// basins
pb(38, floorY + 1, 26, 'cauldron');
pb(48, floorY + 1, 26, 'cauldron');
pb(38, floorY + 1, 46, 'cauldron');
pb(48, floorY + 1, 46, 'cauldron');

// stair up to a gallery in the first room
var i;
for (i = 0; i < 6; i++) {
  pb(26 + i, floorY + 1 + i, 45, 'sandstone_stairs');
}
fill(25, floorY + 7, 25, 35, floorY + 7, 30, 'oak_planks');

// lanterns
pb(30, floorY + 8, 30, 'lantern');
pb(43, floorY + 8, 36, 'lantern');
pb(56, floorY + 8, 36, 'lantern');
pb(30, floorY + 8, 42, 'lantern');

// a few benches
pb(38, floorY + 1, 30, 'quartz_slab[type=bottom]');
pb(38, floorY + 1, 42, 'quartz_slab[type=bottom]');
pb(27, floorY + 1, 30, 'oak_stairs');

// path outside
fill(28, groundY, 12, 31, groundY, 20, 'smooth_sandstone');

Static Renders

Ottoman Hammam (bare) isometric viewisometric
Ottoman Hammam (bare) front viewfront
Ottoman Hammam (bare) side viewside
Ottoman Hammam (bare) back viewback
Ottoman Hammam (bare) top viewtop