How to color this picture.. send reference image for same painting
A finished colored-pencil reference illustration for a simple landscape coloring-book page: a square framed scene with a pale blue sky, two soft white clouds and a small crescent moon; distant layered mountains in slate blue, lavender, and pale gray with snowy cream highlights; a winding light-blue river; patchwork farm fields in alternating golden yellow, light green, olive green, and warm ochre; rows of dark green trees and shrubs; foreground rolling hills in fresh greens; a few cypress-like trees in deep green. Preserve the clear black coloring-book outlines and the same approximate composition: mountains at the top, river winding from upper right through center to bottom, patterned fields on both sides. No text.

Doodling colors
A finished reference for the same landscape coloring-book page colored in a bright doodle-art palette. Preserve clear black outlines and the same approximate composition: mountains at the top, winding river across the center to the bottom, patterned farm fields, trees and foreground hills. Use playful alternating vivid colors: turquoise sky, coral-pink and purple mountains, lemon-yellow moon, aqua-blue river, fields in lime green, sunny yellow, orange, magenta, violet and teal, trees in emerald green with colorful dot details. Use colored-pencil or marker fill with small doodle accents such as dots, short stripes and tiny stars, but keep all original landscape regions recognizable. No text.

Share same image as I shared
/tmp/workspace
mkdir -p "/tmp/workspace/doodle-reference/output" python - <<'PY' from PIL import Image im=Image.open('/tmp/workspace/attachments/62b16c17-92f0-4246-88ae-7312c9c8c22e/photo-1790917045417.jpg') print(im.size) PY
python - <<'PY' from PIL import Image im=Image.open('/tmp/workspace/attachments/62b16c17-92f0-4246-88ae-7312c9c8c22e/photo-1790917045417.jpg') print(im.size) PY
python - <<'PY' import cv2, numpy as np, os src='/tmp/workspace/attachments/62b16c17-92f0-4246-88ae-7312c9c8c22e/photo-1790917045417.jpg' out='/tmp/workspace/doodle-reference/output/same_landscape_doodle_colored_reference.png' im=cv2.imread(src) # Four inner-page corners estimated from photograph, ordered TL TR BR BL pts=np.float32([[127,237],[1044,187],[1060,1192],[116,1194]]) S=1000 dst=np.float32([[0,0],[S,0],[S,S],[0,S]]) H=cv2.getPerspectiveTransform(pts,dst) page=cv2.warpPerspective(im,H,(S,S),flags=cv2.INTER_CUBIC,borderValue=(255,255,255)) # Find ink, make it a continuous boundary for region filling gray=cv2.cvtColor(page,cv2.COLOR_BGR2GRAY) ink=(gray<150).astype(np.uint8) ink=cv2.dilate(ink,np.ones((3,3),np.uint8),iterations=1) # retain page border, then label all white enclosed regions white=(1-ink).astype(np.uint8) n, lab, stats, cents=cv2.connectedComponentsWithStats(white,8) # Start lightly cream, color meaningful enclosed drawing compartments result=np.full((S,S,3),(248,246,235),dtype=np.uint8) palette=[(236,190,82),(132,202,112),(82,181,182),(203,116,181),(244,143,78),(129,139,209),(205,187,100),(104,166,105),(236,111,112),(116,186,218)] # BGR-ish? actually colors still pleasing # RGB desired mapped BGR palette=[(100,220,245),(110,205,150),(205,190,95),(185,115,225),(85,170,230),(205,115,110),(115,190,170),(100,140,215),(150,205,240),(135,165,105)] # components touching edges/exterior left as light cream. Fill regions within border and reasonable size for i in range(1,n): x,y,w,h,area=stats[i] if x<=2 or y<=2 or x+w>=S-2 or y+h>=S-2: continue if area<65: continue cx,cy=cents[i] # sky regions mostly pale aqua, river-like wide central curve blue; colors via location/geometry if cy<155: col=(235,225,165) # sky BGR pale blue elif 155<cy<360 and area>1100: col=(190,175,130) # distant mountains lavender elif 365<cy<850 and (cx>430 and cx<740) and area>1200: col=(235,195,115) # blue river else: col=palette[(int(cx//70)+int(cy//60)+i*3)%len(palette)] result[lab==i]=col # small doodle details: use original dots/lines as dark brown; overlay transparent ink # brighten/fill unconnected tiny white interior leaves naturally still cream # line art mask, preserve slightly softened dark outlines result[ink>0]=(45,48,50) # light color pencil texture subtly; only non-ink rng=np.random.default_rng(8) noise=rng.normal(0,2.0,(S,S,1)).astype(np.int16) mask=ink==0 rr=result.astype(np.int16) rr[mask]=np.clip(rr[mask]+noise[mask],0,255) result=rr.astype(np.uint8) cv2.imwrite(out,result,[cv2.IMWRITE_PNG_COMPRESSION,3]) print(out, os.path.getsize(out)) PY
python - <<'PY' from PIL import Image src='/tmp/workspace/doodle-reference/output/same_landscape_doodle_colored_reference.png' out='/tmp/workspace/doodle-reference/output/preview.jpg' im=Image.open(src); im.thumbnail((600,600)); im.convert('RGB').save(out,quality=78,optimize=True) PY
python - <<'PY' import cv2, numpy as np, os src='/tmp/workspace/attachments/62b16c17-92f0-4246-88ae-7312c9c8c22e/photo-1790917045417.jpg' colored='/tmp/workspace/doodle-reference/output/same_landscape_doodle_colored_reference.png' out='/tmp/workspace/doodle-reference/output/your_same_picture_doodle_colored.jpg' photo=cv2.imread(src); art=cv2.imread(colored) S=1000 pts=np.float32([[127,237],[1044,187],[1060,1192],[116,1194]]) dst=np.float32([[0,0],[S,0],[S,S],[0,S]]) Hi=cv2.getPerspectiveTransform(dst,pts) warped=cv2.warpPerspective(art,Hi,(photo.shape[1],photo.shape[0]),flags=cv2.INTER_CUBIC) mask0=np.full((S,S),255,np.uint8) mask=cv2.warpPerspective(mask0,Hi,(photo.shape[1],photo.shape[0])) # feather boundaries mask=cv2.GaussianBlur(mask,(5,5),0).astype(np.float32)/255 mask=np.clip(mask,0,1)[...,None] res=(photo*(1-mask)+warped*mask).astype(np.uint8) cv2.imwrite(out,res,[cv2.IMWRITE_JPEG_QUALITY,93]) print(out,os.path.getsize(out)) PY
your same picture doodle colored
Image · JPG
Make a softer pastel version of the same picture
/tmp/workspace
python - <<'PY' import cv2, numpy as np, os src='/tmp/workspace/attachments/62b16c17-92f0-4246-88ae-7312c9c8c22e/photo-1790917045417.jpg' outdir='/tmp/workspace/doodle-reference/output' os.makedirs(outdir, exist_ok=True) flat_out=outdir+'/same_landscape_soft_pastel_reference.png' photo_out=outdir+'/your_same_picture_soft_pastel.jpg' photo=cv2.imread(src) # Correct the photographed colouring page to a clean square pts=np.float32([[127,237],[1044,187],[1060,1192],[116,1194]]) S=1000 dst=np.float32([[0,0],[S,0],[S,S],[0,S]]) H=cv2.getPerspectiveTransform(pts,dst) page=cv2.warpPerspective(photo,H,(S,S),flags=cv2.INTER_CUBIC,borderValue=(255,255,255)) gray=cv2.cvtColor(page,cv2.COLOR_BGR2GRAY) # Connected, thickened outline keeps all individual colouring areas separate ink=(gray<158).astype(np.uint8) ink=cv2.dilate(ink,np.ones((3,3),np.uint8),iterations=1) white=(1-ink).astype(np.uint8) n,labels,stats,cents=cv2.connectedComponentsWithStats(white,8) # Warm ivory paper base result=np.full((S,S,3),(248,246,238),np.uint8) # gentle pastel colors BGR, intentionally low saturation fields=[(194,224,224), # peach (203,230,197), # sage (231,218,190), # butter (222,202,220), # lilac (214,229,190), # soft yellow (231,211,190), # pale aqua (207,221,225), # blush (196,220,204)] # mint for i in range(1,n): x,y,w,h,area=stats[i]; cx,cy=cents[i] # do not paint exterior page/background if x<=3 or y<=3 or x+w>=S-3 or y+h>=S-3 or area<50: continue # visual geographic colors, retaining same drawing regions if cy<155: col=(238,230,211) # powder blue sky elif cy<355 and area>450: col=(220,209,198) # misty blue-gray/lilac mountains elif 330<cy<875 and 410<cx<730 and area>700: col=(232,218,196) # river, pastel blue elif cy>790 and cx>450 and area>900: col=(202,224,207) # foreground rolling hill, pale green elif area<280 and cy>330: col=(187,211,181) # small trees/shrubs soft green else: col=fields[(int(cx//85)+int(cy//62)+i)%len(fields)] result[labels==i]=col # Reapply graceful charcoal outlines rather than harsh black result[ink>0]=(75,77,76) # subtly soften all color blocks for a matte pastel finish without blurring linework # Add very mild paper grain only in color areas rng=np.random.default_rng(41) grain=rng.normal(0,0.85,(S,S,1)) nonink=ink==0 work=result.astype(np.float32) work[nonink]=np.clip(work[nonink]+grain[nonink],0,255) result=work.astype(np.uint8) cv2.imwrite(flat_out,result,[cv2.IMWRITE_PNG_COMPRESSION,3]) # Place clean pastel artwork back in the user's original photograph Hi=cv2.getPerspectiveTransform(dst,pts) warped=cv2.warpPerspective(result,Hi,(photo.shape[1],photo.shape[0]),flags=cv2.INTER_CUBIC) page_mask=cv2.warpPerspective(np.full((S,S),255,np.uint8),Hi,(photo.shape[1],photo.shape[0])) page_mask=cv2.GaussianBlur(page_mask,(5,5),0).astype(np.float32)[...,None]/255.0 composite=(photo*(1-page_mask)+warped*page_mask).astype(np.uint8) cv2.imwrite(photo_out,composite,[cv2.IMWRITE_JPEG_QUALITY,94]) print(flat_out, os.path.getsize(flat_out)) print(photo_out, os.path.getsize(photo_out)) PY
your same picture soft pastel
Image · JPG