Hướng Dẫn · 8 phút đọc · 2026-09-18
Prompt chụp ảnh sản phẩm bằng AI: khung 5 phần và 31 ảnh thử trên SDXL
Mình thử 31 ảnh SDXL với túi cà phê và chai serum. Prompt đủ 5 phần mới ra ảnh sản phẩm, nhưng nền trắng ra xám, đồ vật thừa đi theo seed chứ không theo prompt, chữ tiếng Việt mất dấu và mỗi seed vẽ một cái chai khác.

Muốn chụp ảnh sản phẩm bằng AI thay vì dựng studio, phần quyết định nằm ở prompt. Viết prompt chụp ảnh sản phẩm cho AI giống như gửi yêu cầu cho một thợ chụp ảnh chưa bao giờ thấy món hàng của bạn. Ngày 18/09/2026, mình thử 31 ảnh bằng Stable Diffusion XL chạy trên máy, với hai sản phẩm chung chung là túi cà phê giấy kraft và chai serum. Khi so hai prompt, mình giữ nguyên seed (số khởi tạo ngẫu nhiên) và mọi tham số, để phần khác nhau chỉ nằm ở câu chữ.
Những gì thấy được:
- Prompt hai chữ "coffee bag" ra hình minh hoạ, không phải ảnh chụp. Prompt đủ 5 phần mới ra ảnh sản phẩm.
- Đồ vật thừa trong khung đi theo seed. Viết "nothing else" hay đưa đồ vật đó vào prompt âm đều không xoá được nó; đổi seed thì mất.
- Yêu cầu nền trắng tinh thì ra nền xám: 0% điểm ảnh ở viền đạt mức gần trắng.
- Đổi cụm từ ánh sáng thì ánh sáng gần như không đổi, còn đồ vật trong khung lại đổi. "45 degree angle" vẫn ra ảnh nhìn từ trên xuống.
- Chữ "MÂY CHIỀU" trên nhãn in ra thành "MAY CHU".
- Cùng một prompt, bốn seed cho bốn kiểu chai serum khác nhau.
Nhận xét trong bài là mô tả các ảnh cụ thể mình tạo ra. Cách cài SDXL, giấy phép và tốc độ cơ bản nằm ở bài tạo ảnh bằng AI miễn phí trên máy tính với SDXL; bài này chỉ nói về cách viết prompt.
Prompt chụp ảnh sản phẩm gồm 5 phần
Đây là cách viết prompt ảnh sản phẩm mình dùng: khung 5 phần, mỗi phần trả lời một câu hỏi mà thợ chụp ảnh sẽ hỏi bạn.
- Sản phẩm: là gì, chất liệu gì, màu gì.
- Chỗ đặt và nền: đặt trên bề mặt nào, phía sau là gì.
- Ánh sáng: sáng từ đâu, dịu hay gắt.
- Góc chụp và ống kính: nhìn ngang, nhìn từ trên xuống, ống kính bao nhiêu mm.
- Kiểu ảnh: ảnh sản phẩm cho trang bán hàng, ảnh mỹ phẩm, ảnh đời thường.
Mẫu prompt để bạn thay nội dung từng phần:
[sản phẩm + chất liệu + màu], [đặt trên bề mặt nào], [nền phía sau], [ánh sáng], [góc chụp], [ống kính], sharp focus, [kiểu ảnh]Prompt mình dùng cho túi cà phê, viết bằng tiếng Anh vì bài SDXL trước đã cho thấy prompt tiếng Anh cho ảnh sát ý hơn:
a kraft paper coffee bag with a blank white label, standing upright on a light oak wooden table, plain beige wall background, soft window light from the left, 50mm lens, eye level, sharp focus, e-commerce product photoPrompt âm (negative prompt, những thứ không muốn thấy) mình dùng chung cho hầu hết các ảnh:
text, letters, words, logo, watermark, blurry, hands, people
Prompt đủ 5 phần ra đúng một ảnh sản phẩm: túi kraft đứng trên bàn gỗ sáng, tường be. Nhưng nó chưa làm đúng hết: nhãn có màu nâu nhạt thay vì trắng, và cạnh túi mọc thêm một cái lọ trắng nắp đen không có trong prompt.
Đồ vật thừa đi theo seed, không theo prompt
Để bỏ cái lọ trắng, mình thử hai cách và giữ nguyên seed 42:
- Thêm vào prompt "a single ..., only one bag, nothing else on the table".
- Thêm "cup, mug, bottle, jar, second bag" vào prompt âm.
Cả hai cách đều không xoá được cái lọ. Rồi mình chạy lại prompt gốc, không sửa gì, với seed 1, 2, 3, 4: không ảnh nào có lọ. Riêng seed 1 có thêm một đống hạt cà phê cạnh túi.

Bài học rút ra: khi ảnh có vật thừa, tạo thêm vài seed sẽ nhanh hơn viết thêm chữ vào prompt. Đoạn Python dưới đây tạo cùng một prompt với nhiều seed; nó dùng lại môi trường đã cài ở bài SDXL:
import torch
from diffusers import StableDiffusionXLPipeline
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
dtype=torch.float16, variant="fp16", use_safetensors=True,
)
pipe.enable_model_cpu_offload()
prompt = ("a kraft paper coffee bag with a blank white label, standing upright on a light oak wooden table, "
"plain beige wall background, soft window light from the left, 50mm lens, eye level, sharp focus, "
"e-commerce product photo")
negative = "text, letters, words, logo, watermark, blurry, hands, people"
for seed in (1, 2):
g = torch.Generator("cuda").manual_seed(seed)
anh = pipe(prompt=prompt, negative_prompt=negative, num_inference_steps=30,
guidance_scale=7.0, width=1024, height=1024, generator=g).images[0]
anh.save(f"tui-ca-phe-seed-{seed}.png")Chạy lại đoạn này, ảnh seed 1 và seed 2 ra giống hệt từng điểm ảnh với lần chạy trước. Vì vậy, khi đã ưng một seed, bạn ghi số đó lại để chỉnh tiếp prompt trên đúng bố cục ấy.
Prompt chụp ảnh sản phẩm nền trắng: ra nền xám
Ảnh nền trắng là loại ảnh bán hàng hay cần nhất. Mình viết "centered, isolated on pure white background, soft studio lighting, subtle shadow". Mắt nhìn đã thấy nền xám, nên mình đo điểm ảnh:
- Bốn góc ảnh có giá trị RGB lần lượt 128,124,124 · 83,79,78 · 192,190,191 · 168,166,168.
- Dải viền rộng 64 điểm ảnh có độ sáng trung bình 149 trên thang 255.
- 0% điểm ảnh ở viền đạt từ 250 trở lên. Cả ảnh chỉ có đúng một điểm trắng tinh 255,255,255.
Lần thứ hai, mình thêm "seamless pure white background, high-key lighting, bright white backdrop" và đưa "gray background, gradient, vignette, dark shadow" vào prompt âm. Nền sáng hơn (viền trung bình 196,5 ở seed 42, 176,5 ở seed 7) nhưng vẫn 0% điểm gần trắng. Tệ hơn, ở seed 42 túi đổi thành màu trắng với ô nhãn màu kraft, tức là màu sản phẩm bị đảo ngược. Seed 7 ra ba cái túi, hai cái bị cắt ở mép ảnh.

Muốn nền trắng tinh, bạn tạo ảnh rồi tách nền bằng phần mềm chỉnh ảnh. Để tự kiểm một ảnh có nền trắng thật hay không, lưu đoạn sau thành do-nen-trang.py và chạy python do-nen-trang.py ten-anh.png:
import sys
from PIL import Image
anh = Image.open(sys.argv[1]).convert("RGB")
w, h = anh.size
vien = [anh.getpixel((x, y)) for y in range(h) for x in range(w)
if x < 64 or x >= w - 64 or y < 64 or y >= h - 64]
trang = sum(1 for p in vien if min(p) >= 250)
print(f"{sys.argv[1]}: {100 * trang / len(vien):.1f}% điểm viền gần trắng")Với cả hai ảnh trên, đoạn này đều in ra 0,0%.
Ánh sáng và góc chụp: prompt không phải chữ nào cũng được làm theo
Mình giữ seed 7, chỉ đổi cụm ánh sáng: "soft window light from the left", "hard direct camera flash", và "warm golden hour sunlight, long shadows".

Ánh sáng ở ba ảnh gần như giống nhau: dịu và đều. Ảnh "golden hour" không có nắng vàng hay bóng dài, ảnh "flash" không có bóng gắt. Thứ thay đổi lại là đồ vật: ảnh cửa sổ có hai túi, ảnh flash có thêm bình nước, ảnh golden hour có túi nửa kraft nửa trắng.
Góc chụp cũng vậy. "flat lay, top-down view" ra đúng ảnh nhìn từ trên xuống: túi nằm, tách cà phê, hạt rải quanh. Nhưng "45 degree angle view" cũng ra ảnh nhìn từ trên xuống, không phải góc 45 độ.

Với SDXL, "flat lay" là cụm đáng tin trong lần thử này. Góc nghiêng thì bạn nên tạo nhiều seed rồi chọn.
Chữ trên nhãn và logo
Mình yêu cầu nhãn in chữ, không dùng prompt âm:
- "MAY CHIEU" ra chữ lớn "MAY" đúng, nhưng dòng dưới thành "CHUE", xung quanh là những chữ méo.
- "MÂY CHIỀU" ra "MAY" và "CHU", mất hết dấu tiếng Việt.

Chiều ngược lại cũng không ổn: nhiều ảnh đã có "text, letters, words" trong prompt âm mà nhãn vẫn in chữ vô nghĩa, có ảnh còn có mã vạch giả. Tên thương hiệu và logo nên được ghép vào ảnh bằng phần mềm thiết kế sau khi tạo.
Prompt chụp ảnh serum: mỗi seed một cái chai khác
Ảnh sản phẩm cho trang bán hàng phải đúng món hàng khách sẽ nhận. Mình tạo cùng một prompt chai serum với bốn seed:
a small amber glass serum bottle with a black dropper cap, on a beige travertine stone pedestal, plain cream background, soft diffused light, 85mm lens, eye level, sharp focus, cosmetic product photo
Seed 3 và seed 4 khớp mô tả nhất, nhưng hai cái chai khác hẳn nhau về kích thước và phần đáy. Seed 1 thêm một cái nắp rời, seed 2 ra hai chai và mất ống nhỏ giọt. Nghĩa là một prompt AI tạo ảnh sản phẩm dù viết kỹ cũng chỉ cho ra một cái chai giống mô tả, chứ không vẽ lại được đúng chai của bạn. Vì vậy, tạo ảnh chụp sản phẩm bằng AI hợp để làm nền, ảnh không khí cho bài đăng, hoặc để thử bố cục trước khi chụp thật. Nó không nên thay ảnh sản phẩm thật trên trang bán hàng, vì khách có thể nhận hàng khác với ảnh.
Chạy trên card 12 GB: bật chế độ chuyển bớt sang RAM
Lần này card đã bị các ứng dụng khác chiếm sẵn khoảng 0,9 GB. Nạp cả mô hình lên card như bài SDXL trước (.to("cuda")) thì tới bước giải mã ảnh cuối cùng, bộ nhớ card lên 12.055 MiB rồi đứng yên hơn 5 phút mà không ra ảnh. Hai điều mình gặp khi tìm cách sửa:
- Bản diffusers 0.40 đã bỏ
pipe.enable_vae_tiling(), gọi vào là báo AttributeError. Lệnh còn dùng được làpipe.vae.enable_tiling(), nhưng nó không giúp gì với ảnh 1024×1024. - Thay
.to("cuda")bằngpipe.enable_model_cpu_offload()như đoạn code ở trên: mỗi ảnh mất 12,4 đến 15 giây, PyTorch báo bộ nhớ card cấp phát cao nhất chỉ 5,21 GB.
Những gì mình chưa kiểm
- Ghép ảnh sản phẩm thật vào nền do AI tạo (img2img, sửa một vùng ảnh), cách duy nhất để giữ đúng món hàng.
- Mô hình refiner của SDXL, LoRA, và các công cụ tạo ảnh online.
- Prompt tiếng Việt cho ảnh sản phẩm. Bài SDXL trước đã so tiếng Anh và tiếng Việt với ảnh món ăn.
- Tác giả
- Quản trị viên
- Đăng ngày
- 2026-09-18
- Cập nhật
- 2026-09-18
- Thời gian đọc
- 8 phút đọc
- Tất cả bài viết