I used an AI to make paintings using only the terms “Baduk” and “Weiqi.” Thoughts?

In the second attempt, the proportion is wrong, but I asked specifically for the markings for the lines, and they finally lined up, and even skipped the alphabet “I”

1 Like

After many tries, finally something decent with a very long prompt:

A 19x19 square weiqi board with each grid a square. Marking of numbers on the left side of the board for each horizontal line from bottom to top, and markings of the alphabet on the top side for each vertical line from left to right. A black stone is placed on the intersection of coordinate Q16, a white stone is placed on the intersection of coordinate D3, a black stone is placed on the intersection of coordinate C16, and a white stone is placed on the intersection of coordinate R4


Although the white stones are still placed at the wrong intersections, and the winded wording of “intersection of coordinate” is necessary. If I don’t spell them out in full, sometimes it would just skip the stones all together (like I just write “a black stone at Q16” or “black Q16”, it doesn’t always pick up its about coordinate). Or it would do a “simplified” board like this

6 Likes

Even if it’s not perfect yet think about how much time you saved compared to using a real board and setting the stones up manually!

4 Likes

It’s about doing it once for all

1 Like

I haven’t tested the limit yet, but beyond 5 or more stones list, it would just start missing stones or completely misplace the stones (even the whole board starts to fail). Haven’t found a very stable way of constructing prompts to follow them exactly. If I want to make a board position, any sgf editors are way easier to use and reliable.

1 Like

much more sane way to draw images with gemini 3 pro exists than to force it to graphically imagine something

draw this game in svg

sgf

(;FF[4]
CA[UTF-8]
GM[1]
DT[2025-11-21]
PC[OGS: senk meijin vs. center.square]
GN[senk meijin vs. center.square]
PB[senk meijin]
PW[center.square]
BR[10k]
WR[7k]
TM[300]OT[5x30 byo-yomi]
RE[W+R]
SZ[19]
KM[6.5]
RU[Japanese]
C[center.square: Hi.
]
;B[dd]
C[center.square: Hi.
]
(;W[ki]
(;B[pd]
(;W[ik]
(;B[dp]
(;W[kk]
(;B[pp]
(;W[ii]
(;B[fq]
(;W[nc]
(;B[qf]
(;W[fc]
(;B[cf]
(;W[pc]
(;B[qc]
(;W[qb]
(;B[rc]
(;W[rb]
(;B[sb]
(;W[oc]
(;B[pj]
(;W[dc]
(;B[cc]
(;W[cb]
(;B[bc]
(;W[bb]
(;B[ec]
(;W[db]
(;B[ed]
(;W[eb]
(;B[fd]
(;W[gc]
(;B[gd]
(;W[qq]
(;B[hc]
(;W[hb]
(;B[ib]
(;W[ic]
(;B[hd]
(;W[gb]
(;B[jc]
(;W[pq]
(;B[qp]
(;W[op]
(;B[qn]
(;W[oo]
(;B[rq]
(;W[rr]
(;B[oq]
(;W[rp]
(;B[ro]
(;W[sq]
(;B[nq]
(;W[qo]
(;B[po]
(;W[pn]
(;B[qo]
(;W[pm]
(;B[qm]
(;W[ql]
(;B[rl]
(;W[qk]
(;B[rk]
(;W[so]
(;B[rm]
(;W[ol]
(;B[qj]
(;W[jp]
(;B[mo]
(;W[lq]
(;B[np]
(;W[nn]
(;B[mn]
(;W[nm]
(;B[ml]
(;W[mm]
(;B[lm]
(;W[ln]
(;B[lo]
(;W[kn]
(;B[ko]
(;W[jo]
(;B[jn]
(;W[km]
(;B[kp]
(;W[kq]
(;B[jq]
(;W[no]
(;B[mp]
(;W[iq]
(;B[jr]
(;W[ir]
(;B[in]
(;W[ho]
(;B[ll]
(;W[nk]
(;B[kl]
(;W[jm]
(;B[jl]
(;W[im]
(;B[hn]
(;W[il]
(;B[go]
(;W[io]
(;B[lk]
(;W[lj]
(;B[jk]
(;W[jj]
(;B[pl]
(;W[pk]
C[center.square: Thanks for the game.
]
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

write single svg file that I can copy

svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 440 500" id="go-board-svg">
  <style>
    .stone { transition: all 0.2s; }
    .stone-shadow { fill: rgba(0,0,0,0.4); }
    text { font-family: sans-serif; }
  </style>
  <defs>
    <radialGradient id="grad-black" cx="30%" cy="30%" r="70%">
      <stop offset="0%" style="stop-color:#666;stop-opacity:1" />
      <stop offset="100%" style="stop-color:#000;stop-opacity:1" />
    </radialGradient>
    <radialGradient id="grad-white" cx="30%" cy="30%" r="70%">
      <stop offset="0%" style="stop-color:#fff;stop-opacity:1" />
      <stop offset="100%" style="stop-color:#ddd;stop-opacity:1" />
    </radialGradient>
    <filter id="wood-texture">
       <feTurbulence type="fractalNoise" baseFrequency="0.5" numOctaves="3" stitchTiles="stitch"/>
       <feColorMatrix type="matrix" values="0.3 0 0 0 0.5  0.3 0 0 0 0.4  0.3 0 0 0 0.2  0 0 0 0.2 0"/>
       <feBlend in="SourceGraphic" mode="multiply"/>
    </filter>
  </defs>
  <!-- Background -->
  <rect width="440" height="500" fill="#DCB35C" />
  <rect width="440" height="500" filter="url(#wood-texture)" opacity="0.6" pointer-events="none"/>
  <!-- Text Info -->
  <text x="220" y="30" text-anchor="middle" font-weight="bold" font-size="18" fill="#333">Go Game Record</text>
  <text x="220" y="50" text-anchor="middle" font-size="14" fill="#555">senk meijin (B) vs center.square (W)</text>
  <text x="220" y="70" text-anchor="middle" font-size="12" fill="#777">Result: W+R | Moves: 110</text>
  <!-- Board Area: 400x400 centered horizontally, starting at y=80 -->
  <g transform="translate(20, 80)">
    
    <!-- Grid Lines -->
    <g stroke="#000" stroke-width="1" shape-rendering="crispEdges">
        <!-- 19 Vertical Lines -->
        <script type="text/javascript">
        <![CDATA[
          // This script block is just for the grid generation logic to keep SVG code clean
          // But to ensure it works without JS enabled for the grid, we would hardcode. 
          // However, since the stones require JS, relying on JS for grid is fine for this "smart" SVG.
        ]]>
        </script>
        <!-- Vertical -->
        <line x1="20" y1="20" x2="20" y2="380" /><line x1="40" y1="20" x2="40" y2="380" /><line x1="60" y1="20" x2="60" y2="380" /><line x1="80" y1="20" x2="80" y2="380" /><line x1="100" y1="20" x2="100" y2="380" /><line x1="120" y1="20" x2="120" y2="380" /><line x1="140" y1="20" x2="140" y2="380" /><line x1="160" y1="20" x2="160" y2="380" /><line x1="180" y1="20" x2="180" y2="380" /><line x1="200" y1="20" x2="200" y2="380" /><line x1="220" y1="20" x2="220" y2="380" /><line x1="240" y1="20" x2="240" y2="380" /><line x1="260" y1="20" x2="260" y2="380" /><line x1="280" y1="20" x2="280" y2="380" /><line x1="300" y1="20" x2="300" y2="380" /><line x1="320" y1="20" x2="320" y2="380" /><line x1="340" y1="20" x2="340" y2="380" /><line x1="360" y1="20" x2="360" y2="380" /><line x1="380" y1="20" x2="380" y2="380" />
        <!-- Horizontal -->
        <line x1="20" y1="20" x2="380" y2="20" /><line x1="20" y1="40" x2="380" y2="40" /><line x1="20" y1="60" x2="380" y2="60" /><line x1="20" y1="80" x2="380" y2="80" /><line x1="20" y1="100" x2="380" y2="100" /><line x1="20" y1="120" x2="380" y2="120" /><line x1="20" y1="140" x2="380" y2="140" /><line x1="20" y1="160" x2="380" y2="160" /><line x1="20" y1="180" x2="380" y2="180" /><line x1="20" y1="200" x2="380" y2="200" /><line x1="20" y1="220" x2="380" y2="220" /><line x1="20" y1="240" x2="380" y2="240" /><line x1="20" y1="260" x2="380" y2="260" /><line x1="20" y1="280" x2="380" y2="280" /><line x1="20" y1="300" x2="380" y2="300" /><line x1="20" y1="320" x2="380" y2="320" /><line x1="20" y1="340" x2="380" y2="340" /><line x1="20" y1="360" x2="380" y2="360" /><line x1="20" y1="380" x2="380" y2="380" />
    </g>
    <!-- Star Points -->
    <g fill="#000">
        <circle cx="80" cy="80" r="3" />
        <circle cx="200" cy="80" r="3" />
        <circle cx="320" cy="80" r="3" />
        <circle cx="80" cy="200" r="3" />
        <circle cx="200" cy="200" r="3" />
        <circle cx="320" cy="200" r="3" />
        <circle cx="80" cy="320" r="3" />
        <circle cx="200" cy="320" r="3" />
        <circle cx="320" cy="320" r="3" />
    </g>
    <!-- Stones Container -->
    <g id="stones-layer"></g>
    
    <!-- Markers -->
    <circle id="last-move-marker" cx="-100" cy="-100" r="5" fill="none" stroke="red" stroke-width="2" />
  </g>
  <script type="text/javascript">
    <![CDATA[
        const rawSGF = `(;FF[4]CA[UTF-8]GM[1]DT[2025-11-21]PC[OGS: https://online-go.com/game/81451567]GN[senk meijin vs. center.square]PB[senk meijin]PW[center.square]BR[10k]WR[7k]TM[300]OT[5x30 byo-yomi]RE[W+R]SZ[19]KM[6.5]RU[Japanese]C[center.square: Hi.];B[dd]C[center.square: Hi.];W[ki];B[pd];W[ik];B[dp];W[kk];B[pp];W[ii];B[fq];W[nc];B[qf];W[fc];B[cf];W[pc];B[qc];W[qb];B[rc];W[rb];B[sb];W[oc];B[pj];W[dc];B[cc];W[cb];B[bc];W[bb];B[ec];W[db];B[ed];W[eb];B[fd];W[gc];B[gd];W[qq];B[hc];W[hb];B[ib];W[ic];B[hd];W[gb];B[jc];W[pq];B[qp];W[op];B[qn];W[oo];B[rq];W[rr];B[oq];W[rp];B[ro];W[sq];B[nq];W[qo];B[po];W[pn];B[qo];W[pm];B[qm];W[ql];B[rl];W[qk];B[rk];W[so];B[rm];W[ol];B[qj];W[jp];B[mo];W[lq];B[np];W[nn];B[mn];W[nm];B[ml];W[mm];B[lm];W[ln];B[lo];W[kn];B[ko];W[jo];B[jn];W[km];B[kp];W[kq];B[jq];W[no];B[mp];W[iq];B[jr];W[ir];B[in];W[ho];B[ll];W[nk];B[kl];W[jm];B[jl];W[im];B[hn];W[il];B[go];W[io];B[lk];W[lj];B[jk];W[jj];B[pl];W[pk]C[center.square: Thanks for the game.])`;
        // Basic Go Logic for 19x19
        class GoGame {
            constructor() {
                this.size = 19;
                this.board = Array(19).fill(null).map(() => Array(19).fill(null));
            }
            
            play(color, x, y) {
                if (x < 0 || x >= 19 || y < 0 || y >= 19) return; // Pass or invalid
                this.board[y][x] = color;
                this.checkCaptures(x, y, color === 'B' ? 'W' : 'B');
            }
            checkCaptures(lastX, lastY, opponentColor) {
                const neighbors = [{x:0, y:-1}, {x:1, y:0}, {x:0, y:1}, {x:-1, y:0}];
                const visited = new Set();
                neighbors.forEach(n => {
                    const nx = lastX + n.x;
                    const ny = lastY + n.y;
                    if (nx >= 0 && nx < 19 && ny >= 0 && ny < 19 && this.board[ny][nx] === opponentColor) {
                        this.removeGroupIfDead(nx, ny, opponentColor);
                    }
                });
            }
            removeGroupIfDead(startX, startY, color) {
                const group = [];
                const queue = [{x: startX, y: startY}];
                const visited = new Set();
                visited.add(`${startX},${startY}`);
                group.push({x: startX, y: startY});
                
                let hasLiberties = false;
                let head = 0;
                while(head < queue.length) {
                    const curr = queue[head++];
                    const dirs = [{x:0, y:-1}, {x:1, y:0}, {x:0, y:1}, {x:-1, y:0}];
                    
                    for (let d of dirs) {
                        const nx = curr.x + d.x;
                        const ny = curr.y + d.y;
                        
                        if (nx < 0 || nx >= 19 || ny < 0 || ny >= 19) continue;
                        
                        const stone = this.board[ny][nx];
                        if (stone === null) {
                            hasLiberties = true;
                            return; 
                        } else if (stone === color) {
                            const key = `${nx},${ny}`;
                            if (!visited.has(key)) {
                                visited.add(key);
                                queue.push({x: nx, y: ny});
                                group.push({x: nx, y: ny});
                            }
                        }
                    }
                }
                if (!hasLiberties) {
                    group.forEach(s => this.board[s.y][s.x] = null);
                }
            }
        }
        function parseSGF(sgf) {
            const moves = [];
            const regex = /;([BW])\[([a-z]*)\]/g;
            let match;
            while ((match = regex.exec(sgf)) !== null) {
                moves.push({ color: match[1], coord: match[2] });
            }
            return moves;
        }
        function render() {
            const game = new GoGame();
            const moves = parseSGF(rawSGF);
            
            let lastMove = null;
            moves.forEach((m, i) => {
                if (m.coord && m.coord.length === 2) {
                    const x = m.coord.charCodeAt(0) - 97;
                    const y = m.coord.charCodeAt(1) - 97;
                    game.play(m.color, x, y);
                    if (i === moves.length - 1) lastMove = {x, y, color: m.color};
                }
            });
            const stonesLayer = document.getElementById('stones-layer');
            const GRID_SIZE = 20;
            const BOARD_PADDING = 20;
            for (let y = 0; y < 19; y++) {
                for (let x = 0; x < 19; x++) {
                    const stone = game.board[y][x];
                    if (stone) {
                        const cx = BOARD_PADDING + x * GRID_SIZE;
                        const cy = BOARD_PADDING + y * GRID_SIZE;
                        
                        // Shadow
                        const shadow = document.createElementNS("http://www.w3.org/2000/svg", "circle");
                        shadow.setAttribute("cx", cx + 1);
                        shadow.setAttribute("cy", cy + 1);
                        shadow.setAttribute("r", 9.5);
                        shadow.setAttribute("class", "stone-shadow");
                        stonesLayer.appendChild(shadow);
                        // Stone
                        const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
                        circle.setAttribute("cx", cx);
                        circle.setAttribute("cy", cy);
                        circle.setAttribute("r", 9.5);
                        circle.setAttribute("fill", stone === 'B' ? "url(#grad-black)" : "url(#grad-white)");
                        circle.setAttribute("stroke", stone === 'W' ? "#ccc" : "none");
                        circle.setAttribute("stroke-width", 0.5);
                        stonesLayer.appendChild(circle);
                    }
                }
            }
            // Mark last move
            if (lastMove) {
                const marker = document.getElementById('last-move-marker');
                marker.setAttribute("cx", BOARD_PADDING + lastMove.x * GRID_SIZE);
                marker.setAttribute("cy", BOARD_PADDING + lastMove.y * GRID_SIZE);
                marker.setAttribute("stroke", lastMove.color === 'B' ? 'white' : 'black');
            }
        }
        // Run immediately
        render();
    ]]>
  </script>
</svg>

correct
https://online-go.com/game/81451567

2 Likes

huh

draw image in svg:
unicorn plays Go vs centaur
write single svg file that I can copy


The Mythical Game

Unicorn (White) vs Centaur (Black)


The Centaur is placing a black stone. The Unicorn contemplates the next move.

Copy SVG Code:

svg
<svg width="800" height="500" viewBox="0 0 800 500" xmlns="http://www.w3.org/2000/svg" class="border border-slate-200 rounded shadow-inner">
            
            <!-- Definitions -->
            <defs>
                <linearGradient id="skyGradient" x1="0%" y1="0%" x2="0%" y2="100%">
                    <stop offset="0%" style="stop-color:#87CEEB;stop-opacity:1"></stop>
                    <stop offset="100%" style="stop-color:#E0F7FA;stop-opacity:1"></stop>
                </linearGradient>
                <linearGradient id="grassGradient" x1="0%" y1="0%" x2="0%" y2="100%">
                    <stop offset="0%" style="stop-color:#81C784;stop-opacity:1"></stop>
                    <stop offset="100%" style="stop-color:#4CAF50;stop-opacity:1"></stop>
                </linearGradient>
                <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
                    <feGaussianBlur in="SourceAlpha" stdDeviation="3"></feGaussianBlur> <!-- stdDeviation is how much to blur -->
                    <feOffset dx="2" dy="2" result="offsetblur"></feOffset> <!-- how much to offset -->
                    <feComponentTransfer>
                        <feFuncA type="linear" slope="0.5"></feFuncA> <!-- opacity of the shadow -->
                    </feComponentTransfer>
                    <feMerge> 
                        <feMergeNode></feMergeNode> <!-- this contains the offset blurred image -->
                        <feMergeNode in="SourceGraphic"></feMergeNode> <!-- this contains the element that the filter is applied to -->
                    </feMerge>
                </filter>
            </defs>

            <!-- Background -->
            <rect x="0" y="0" width="800" height="300" fill="url(#skyGradient)"></rect>
            <rect x="0" y="300" width="800" height="200" fill="url(#grassGradient)"></rect>

            <!-- Background Trees -->
            <g transform="translate(50, 250)">
                <rect x="10" y="0" width="20" height="80" fill="#5D4037"></rect>
                <circle cx="20" cy="-10" r="40" fill="#2E7D32"></circle>
                <circle cx="0" cy="-30" r="30" fill="#388E3C"></circle>
                <circle cx="40" cy="-30" r="30" fill="#43A047"></circle>
            </g>
            <g transform="translate(700, 240)">
                <rect x="10" y="0" width="20" height="90" fill="#5D4037"></rect>
                <circle cx="20" cy="-10" r="45" fill="#2E7D32"></circle>
                <circle cx="-10" cy="-30" r="35" fill="#388E3C"></circle>
                <circle cx="50" cy="-20" r="30" fill="#43A047"></circle>
            </g>

            <!-- Go Table (Center) -->
            <g transform="translate(350, 350)">
                <!-- Legs -->
                <path d="M10,50 L10,100 L20,100 L20,50" fill="#3E2723"></path>
                <path d="M90,50 L90,100 L100,100 L100,50" fill="#3E2723"></path>
                <!-- Top Side -->
                <path d="M0,50 L110,50 L110,60 L0,60 Z" fill="#5D4037"></path>
                <!-- Board Surface (Perspective) -->
                <path d="M-10,50 L10,20 L100,20 L120,50 Z" fill="#DEB887" stroke="#5D4037"></path>
                
                <!-- Grid Lines -->
                <g stroke="#5C4033" stroke-width="1">
                    <!-- Vertical -->
                    <line x1="15" y1="25" x2="2" y2="45"></line>
                    <line x1="35" y1="25" x2="28" y2="45"></line>
                    <line x1="55" y1="25" x2="55" y2="45"></line>
                    <line x1="75" y1="25" x2="82" y2="45"></line>
                    <line x1="95" y1="25" x2="108" y2="45"></line>
                    <!-- Horizontal -->
                    <line x1="10" y1="25" x2="100" y2="25"></line>
                    <line x1="5" y1="32" x2="105" y2="32"></line>
                    <line x1="0" y1="39" x2="110" y2="39"></line>
                    <line x1="-5" y1="46" x2="115" y2="46"></line>
                </g>

                <!-- Go Stones -->
                <circle cx="55" cy="32" r="4" fill="black"></circle>
                <circle cx="28" cy="45" r="4" fill="white" stroke="#ccc" stroke-width="0.5"></circle>
                <circle cx="82" cy="45" r="4" fill="black"></circle>
                <circle cx="35" cy="25" r="3" fill="black"></circle>
                <circle cx="75" cy="25" r="3" fill="white" stroke="#ccc" stroke-width="0.5"></circle>
                <circle cx="55" cy="46" r="4" fill="white" stroke="#ccc" stroke-width="0.5"></circle>
                
                <!-- Bowls -->
                <ellipse cx="-30" cy="60" rx="15" ry="10" fill="#8D6E63"></ellipse> <!-- Left Bowl -->
                <ellipse cx="-30" cy="58" rx="12" ry="5" fill="#F5F5F5"></ellipse> <!-- White stones -->
                
                <ellipse cx="140" cy="60" rx="15" ry="10" fill="#8D6E63"></ellipse> <!-- Right Bowl -->
                <ellipse cx="140" cy="58" rx="12" ry="5" fill="#212121"></ellipse> <!-- Black stones -->
            </g>

            <!-- Unicorn (Left Player) -->
            <g transform="translate(100, 300)">
                <!-- Rear Leg (Far) -->
                <path d="M40,120 L40,180 L60,180 L60,120" fill="#E0E0E0"></path>
                <!-- Front Leg (Far) -->
                <path d="M140,120 L140,180 L160,180 L160,120" fill="#E0E0E0"></path>
                
                <!-- Body -->
                <ellipse cx="100" cy="110" rx="80" ry="50" fill="white"></ellipse>
                
                <!-- Rear Leg (Near) -->
                <path d="M50,130 L50,190 L70,190 L70,130" fill="white" stroke="#F5F5F5"></path>
                <path d="M50,190 L55,200 L70,200 L75,190" fill="#333"></path> <!-- Hoof -->
                
                <!-- Front Leg (Near) - Sitting/Bent or Standing? Let's make it standing/reaching -->
                <!-- Bent leg reaching to table -->
                 <path d="M150,120 Q170,130 190,110 L185,105" fill="white" stroke="#E0E0E0" stroke-width="10" stroke-linecap="round"></path>
                 <!-- Hoof reaching -->
                 <path d="M190,110 L195,115 L200,105 L195,100 Z" fill="#333"></path>
                
                <!-- Neck -->
                <path d="M160,80 Q190,60 180,30 L140,40 Q140,70 150,80" fill="white"></path>
                
                <!-- Head -->
                <ellipse cx="180" cy="30" rx="25" ry="15" transform="rotate(-20 180 30)" fill="white"></ellipse>
                <!-- Snout -->
                <path d="M195,25 Q205,22 205,35 Q195,40 190,35" fill="#FFECB3"></path>
                
                <!-- Eye -->
                <circle cx="175" cy="25" r="3" fill="black"></circle>
                
                <!-- Horn -->
                <path d="M175,15 L185,-30 L190,15" fill="#FFD700"></path>
                <line x1="178" y1="5" x2="188" y2="0" stroke="#DAA520" stroke-width="1"></line>
                <line x1="180" y1="-10" x2="186" y2="-15" stroke="#DAA520" stroke-width="1"></line>
                
                <!-- Mane -->
                <path d="M150,40 Q130,60 140,90" stroke="#FF69B4" stroke-width="10" fill="none" stroke-linecap="round"></path>
                <path d="M160,30 Q145,50 155,80" stroke="#9C27B0" stroke-width="8" fill="none" stroke-linecap="round"></path>
                
                <!-- Tail -->
                <path d="M30,110 Q10,130 20,170" stroke="#FF69B4" stroke-width="10" fill="none" stroke-linecap="round"></path>
                <path d="M35,115 Q15,135 25,175" stroke="#00BCD4" stroke-width="6" fill="none" stroke-linecap="round"></path>
            </g>

            <!-- Centaur (Right Player) -->
            <g transform="translate(550, 300)">
                <!-- Horse Body Part -->
                
                <!-- Rear Leg (Far) -->
                <path d="M120,120 L120,180 L140,180 L140,120" fill="#6D4C41"></path>
                
                <!-- Body (Horse part) -->
                <ellipse cx="80" cy="110" rx="70" ry="45" fill="#8D6E63"></ellipse>
                
                <!-- Rear Leg (Near) -->
                <path d="M100,130 L100,190 L120,190 L120,130" fill="#8D6E63"></path>
                <path d="M100,190 L105,200 L120,200 L125,190" fill="#3E2723"></path> <!-- Hoof -->

                <!-- Front Legs (Horse) -->
                <path d="M30,120 L30,180 L50,180 L50,120" fill="#8D6E63"></path>
                <path d="M30,180 L35,190 L50,190 L55,180" fill="#3E2723"></path>
                
                <!-- Human Torso (Rising from front of horse body) -->
                <path d="M20,100 L20,30 L60,30 L60,100" fill="#FFCC80"></path>
                
                <!-- Human Head -->
                <circle cx="40" cy="15" r="20" fill="#FFCC80"></circle>
                <!-- Hair/Beard -->
                <path d="M20,15 Q15,30 30,35 L50,35 Q65,30 60,15 Q60,-5 40,-5 Q20,-5 20,15" fill="#5D4037"></path>
                
                <!-- Face details -->
                <circle cx="35" cy="15" r="2" fill="black"></circle>
                <path d="M35,25 Q40,28 45,25" stroke="black" fill="none" stroke-width="1"></path>

                <!-- Arm (Reaching to board) -->
                <!-- Shoulder -->
                <circle cx="30" cy="40" r="12" fill="#FFCC80"></circle>
                <!-- Arm segments -->
                <path d="M30,40 L-20,50" stroke="#FFCC80" stroke-width="12" stroke-linecap="round"></path>
                <path d="M-20,50 L-50,60" stroke="#FFCC80" stroke-width="10" stroke-linecap="round"></path>
                <!-- Hand -->
                <circle cx="-55" cy="62" r="6" fill="#FFCC80"></circle>
                <!-- Holding a stone -->
                <circle cx="-58" cy="65" r="4" fill="black"></circle>

                <!-- Tail -->
                <path d="M140,100 Q170,120 160,160" stroke="#5D4037" stroke-width="8" fill="none" stroke-linecap="round"></path>
            </g>

            <!-- Speech Bubbles (Optional fun addition) -->
            <g transform="translate(250, 150)">
                <path d="M0,0 L80,0 L80,40 L40,40 L20,60 L30,40 L0,40 Z" fill="white" stroke="black"></path>
                <text x="10" y="25" font-family="sans-serif" font-size="12">Atari!</text>
            </g>

        </svg>
4 Likes

It’s kinda wasting energy since it simply creates programs and calls external functions to execute the program, write a new sgf parser every time with a new prompt. It’s like building a cart every time you want to drive instead of just using a car already built (load sgf with an existing sgf editor). The only thing I can justify this is that you want some customization of the output image that existing sgf editor cannot do (a customized car for some specific use).

Santa playing Go with his reindeers.

I thought it was 19x19, but it turns out it was 19x20.

4 Likes

19x21

4 Likes

gpt-image-1.5

First person view photo of sitting in the boat in the middle of mysterious ocean of Weiqi Go baduk, water waves are moving.

16 times
uploading image result of previous generation with same prompt without memory of generations before that

3 Likes

:left_speech_bubble: You’ll see it when you believe it. — Wayne Dyer

Not mine, I found this from a Royal Road ad so I’m not 100% sure the prompt or model (Dall-E maybe?)

Board is 15 × 17 heh.

2 Likes

screenshot of “https:// …” site

images




screenshot of https://forums.online-go.com/t/go-memes/4337/5293 site


screenshot of "https://www.google.com/search?q=OGS" site


screenshot of "https://en.wikipedia.org/wiki/Go_(game)" site


screenshot of "https://senseis.xmp.net/?B2Bomber" site

6 Likes



5 Likes

Never gonna give 20x20 up! :grinning_face_with_smiling_eyes:

2 Likes