Tutorial Qwen-Image-Edit-2509: Hasilkan Sudut Produk Siap Studio
Ubah satu foto menjadi beberapa bidikan produk dengan Qwen-Image-Edit-2509 dan LoRA. Hasilkan sudut studio yang konsisten untuk Amazon, Etsy, dan toko online dalam hitungan detik.
Penjual mandiri dan brand kecil jarang memiliki anggaran untuk pemotretan produk lengkap. Dalam panduan ini, kita akan membangun dan menjalankan aplikasi Gradio yang mengubah satu gambar input menjadi render produk multi-sudut siap e-commerce (wide, makro, ±45°, top-down) menggunakan Qwen-Image-Edit-2509 dengan kontrol kamera virtual berbasis LoRA untuk fotografi produk AI yang dapat direproduksi.
Di balik layar, kita menggunakan:
Model dasar: Qwen/Qwen-Image-Edit-2509 (Apache-2.0)
LoRA kontrol sudut: dx8152/Qwen-Edit-2509-Multiple-angles
LoRA kecepatan opsional:lightx2v/Qwen-Image-Lightning
Dalam tutorial ini, Anda akan mempelajari cara:
Memuat pipeline edit Qwen dan menumpuk beberapa LoRA.
Menggerakkan kamera dengan makro sudut yang andal.
Membangun UI Gradio yang rapi untuk kreator dan tim e-niaga.
Mengekspor semua hasil sebagai ZIP untuk serah terima yang mudah.
Mengapa Menggunakan Qwen Image Edit dengan Multiple Angles LoRA?
Qwen-Image-Edit-2509 adalah iterasi terbaru dari model pengeditan gambar Qwen dengan konsistensi yang ditingkatkan dan pengeditan multi-gambar. Multiple-Angles LoRA menyuntikkan kontrol “kamera virtual” yang andal sehingga Anda dapat mengatakan:
将镜头转为广角镜头 (ubah ke wide-angle)
将镜头转为特写镜头 (ubah ke close-up)
将镜头向左旋转45度 (putar 45° ke kiri)
将镜头转为俯视 (tampilan top-down)
Perintah-perintah ini secara konsisten membingkai ulang produk yang sama tanpa berhalusinasi menjadi produk baru.
Dalam panduan ini, kita akan membangun aplikasi yang mengubah satu gambar produk menjadi satu set sudut siap studio (termasuk sudut seperti wide, close-up, 45° kiri/kanan, dan top-down), dengan preset gaya hidup opsional dan mode pratinjau cepat. Aplikasi ini menggunakan model Qwen/Qwen-Image-Edit-2509 dan Multiple-Angles LoRA yang dibungkus dalam UI Gradio.
Kita akan mulai dari penyiapan lingkungan hingga pemuatan model, helper generasi, dan UI web.
Langkah 1: Prasyarat
Pertama, instal semua dependensi runtime. Kita menggunakan PyTorch dengan roda CUDA, tooling Hugging Face, pustaka Diffusers, Gradio untuk UI, dan Pillow/OpenCV untuk penanganan gambar.
CUDA Wheels: Baris PyTorch menunjuk ke roda NVIDIA CUDA 12.1 untuk akselerasi GPU.
Transformers dan Diffusers: Transformers mengelola konfigurasi dan tokenizer, sementara Diffusers menyediakan QwenImageEditPlusPipeline.
Safetensors: Menyediakan format tensor yang aman (lebih cepat dan lebih aman daripada Pickle).
OpenCV-headless dan Pillow: Menyediakan I/O gambar yang andal dan pengubahan ukuran untuk pra/pasca-pemrosesan.
Gradio: UI web cepat yang bekerja secara lokal maupun di Colab.
Setelah lingkungan siap, kita bisa melakukan autentikasi ke Hugging Face (opsional) dan memuat model.
Langkah 2: Autentikasi Hugging Face
Beberapa model atau adapter mungkin memerlukan autentikasi dari HuggingFace. Langkah ini akan masuk satu kali untuk sesi.
from huggingface_hub import login
import os
HF_TOKEN ="Your_HF_Token"# @param {type:"string"}if HF_TOKEN:
login(token=HF_TOKEN)print("Logged in to Hugging Face")else:print("WARNING: No token provided. Continuing without authentication")Didukung oleh
Mulailah dengan masuk ke akun HuggingFace Anda dan cari Access Tokens di pengaturan akun. Klik Create new token dan buat token baru dengan tipe Read. Pilih izin yang diperlukan dan buat token baru.
Di produksi/Colab, jangan hardcode token; gunakan variabel lingkungan atau “Secrets” Colab.
Langkah 3: Memuat model dan menyiapkan pipeline
Di bagian ini, kita menyiapkan pipeline Qwen-Image-Edit, memuat LoRA sudut, dan menambahkan toggle Fast dengan pengaturan yang menyesuaikan GPU. Perlu dicatat bahwa kode ini berjalan efisien pada GPU A100 dengan RAM tinggi.
Langkah 3.1: Impor dan konfigurasi GPU
Sekarang, kita akan mengimpor pustaka inti dan mendeteksi GPU untuk mengatur presisi, attention slicing, dan VAE slicing secara otomatis demi stabilitas.
import io
import zipfile
from typing import List, Tuple, Optional
import gc
import torch
from PIL import Image
from diffusers import QwenImageEditPlusPipeline
import gradio as gr
defget_gpu_config():ifnot torch.cuda.is_available():return{'device':'cpu','dtype': torch.float32,'gpu_name':'CPU','vram_gb':0,'max_batch':1,'enable_attention_slicing':True,'enable_vae_slicing':True,}
gpu_name = torch.cuda.get_device_name(0)
vram_gb = torch.cuda.get_device_properties(0).total_memory /1e9if'T4'in gpu_name or vram_gb <20:return{'device':'cuda','dtype': torch.bfloat16,'gpu_name': gpu_name,'vram_gb': vram_gb,'max_batch':1,'enable_attention_slicing':True,'enable_vae_slicing':True,}else:return{'device':'cuda','dtype': torch.bfloat16,'gpu_name': gpu_name,'vram_gb': vram_gb,'max_batch':2,'enable_attention_slicing':False,'enable_vae_slicing':False,}
gpu_config = get_gpu_config()
HF_BASE_MODEL ="Qwen/Qwen-Image-Edit-2509"
LORA_ANGLES ="dx8152/Qwen-Edit-2509-Multiple-angles"
LORA_LIGHTNING ="lightx2v/Qwen-Image-Lightning"
ANGLE_MACROS ={"Wide-angle":"将镜头转为广角镜头","Close-up":"将镜头转为特写镜头","Forward":"将镜头向前移动","Left":"将镜头向左移动","Right":"将镜头向右移动","Down":"将镜头向下移动","Rotate 45° Left":"将镜头向左旋转45度","Rotate 45° Right":"将镜头向右旋转45度","Top-down":"将镜头转为俯视",}
BACKGROUND_PRESETS ={"(None)":None,"Pure Studio (white seamless)":"in a professional studio with seamless white background, soft shadows, product centered","Soft Gray Studio":"in a professional studio with seamless soft gray background, gentle vignette, softbox lighting","Lifestyle (cozy desk)":"on a cozy wooden desk near a window, soft natural light, minimal props","Lifestyle (marble)":"on a clean white marble surface, bright daylight, subtle reflections","Lifestyle (outdoor)":"outdoors on a neutral table, soft shade, bokeh background",}
ASPECT_RATIOS ={"1:1 (Square)":(1024,1024),"4:3 (Standard)":(1024,768),"3:4 (Portrait)":(768,1024),"16:9 (Widescreen)":(1024,576),"9:16 (Mobile)":(576,1024),"3:2 (Photo)":(1024,683),"2:3 (Portrait Photo)":(683,1024),}Didukung oleh
Berikut komponen kunci dari blok kode di atas:
Konfigurasi otomatis GPU (fungsi get_gpu_config): Kita mendeteksi akselerator yang tersedia dan mengembalikan kamus konfigurasi kecil yang digunakan untuk memilih device (cpu/cuda), dtype (seperti bfloat16 di GPU), dan perilaku memori:
Di CPU, default ke float32 dan aktifkan attention/VAE slicing demi keamanan.
Di T4 / <20 GB VRAM, tetap bfloat16 namun aktifkan slicing untuk mencegah OOM.
Di GPU 20 GB+ (seperti A100), nonaktifkan slicing dan izinkan batch lebih besar untuk kecepatan.
ID model dan adapter: Kita memuat Qwen-Image-Edit-2509 sebagai editor inti, bersama Multiple-angles LoRA untuk kontrol kamera, dan opsional mencampur Lightning LoRA saat Anda mengaktifkan Fast Mode.
HF_BASE_MODEL = "Qwen/Qwen-Image-Edit-2509" adalah tulang punggung pengeditan gambar utama.
LORA_ANGLES = "dx8152/Qwen-Edit-2509-Multiple-angles" menambahkan kontrol “kamera virtual”.
LORA_LIGHTNING = "lightx2v/Qwen-Image-Lightning" adalah adapter kecepatan opsional untuk pratinjau cepat.
Catatan: untuk HQ Mode, hanya adapter sudut yang tetap aktif.
Makro sudut: ANGLE_MACROS memetakan label seperti “Wide-angle” atau “Top-down” ke perintah bahasa Mandarin ekuivalen yang dapat dipahami LoRA sudut dengan andal. Perintah ini secara konsisten menggerakkan kamera virtual (gerak/putar/zoom) tanpa mengubah identitas.
Preset latar belakang: BACKGROUND_PRESETS adalah fragmen bahasa Inggris singkat seperti “marble surface”, “soft gray studio”, yang kita gabungkan ke prompt akhir. Ini terpisah dari makro sudut dan bertugas mengontrol suasana/adegan.
Rasio aspek (ASPECT_RATIOS): Memungkinkan kita menghasilkan kanvas (1:1, 4:3, 16:9, dll.) dan mengubah ukuran atau center-crop input sebelum inferensi sehingga output tidak memerlukan pemotongan pascaproduksi.
GPU dan adapter kini siap. Mari kita instantiate pipeline Diffusers dan menautkan LoRA selanjutnya.
Langkah 3.2: Pipeline
Selanjutnya, kita memuat pipeline Qwen Edit dasar, mengaktifkan optimasi memori sesuai GPU, dan menumpuk Multiple-Angles LoRA. Kita juga mengimplementasikan sakelar mode untuk menambahkan Lightning LoRA secara opsional untuk pratinjau cepat.
Kode di atas adalah lapisan penyiapan pipeline untuk aplikasi Product Shot Booster, yang melakukan fungsi berikut:
Inisialisasi pipeline: Menginstansiasi QwenImageEditPlusPipeline dari model dasar (Qwen/Qwen-Image-Edit-2509), memindahkannya ke device terdeteksi (CPU/GPU), dan mengatur presisi tensor (torch_dtype) berdasarkan perangkat keras Anda.
Keamanan memori: Pada GPU yang lebih kecil, mengaktifkan attention dan VAE slicing untuk mengurangi puncak VRAM dan menghindari kesalahan kehabisan memori dengan menukar sedikit kecepatan demi stabilitas.
Komposisi LoRA: Memuat Multiple-angles LoRA untuk menyediakan kontrol “kamera virtual” yang berulang (gerak/putar/zoom) dan secara opsional mencampur Lightning LoRA untuk pratinjau yang lebih cepat.
Logika pergantian mode: Fungsi helper set_pipeline_mode() dan flag current_mode mengelola status HQ vs Fast, mencegah pemuatan ulang Lightning yang berulang serta memungkinkan Anda mengganti adapter.
Sekarang pipeline siap. Mari lanjutkan ke fungsi generasi dan UI Gradio.
Langkah 4: Fungsi generasi
Fungsi generasi menyusun prompt, mengubah ukuran ke rasio aspek target, menjalankan pipeline untuk sudut yang dipilih, dan mengemas hasil untuk diunduh dalam file zip.
Langkah 4.1: Prompt Composer dan Helper Ubah Ukuran Gambar
Sebelum memanggil model, kita menormalkan input dengan dua helper stateless:
compose_prompt() function: Fungsi ini menyusun satu string instruksi dari sudut kamera, preset latar, adegan kustom, dan catatan gaya. Klausa yang ringkas membantu menjaga parsing instruksi Qwen tetap stabil dan menghindari pembobotan berlebihan pada satu bagian.
resize_image() function: Menyesuaikan gambar sumber ke rasio aspek target menggunakan strategi scale-to-cover, resampling Lanczos membantu untuk down/up-scaling berkualitas tinggi, serta center crop agar subjek utama tetap dalam bingkai.
Prompt yang dapat dikomposisi: Kita menggabungkan bagian dengan " | " agar klausa terlihat jelas, sementara Qwen-Edit menangani tanda baca dan menghasilkan parsing yang konsisten tanpa bias ke klausa terakhir. Kita juga menggunakan .strip() pada teks pengguna untuk menghindari fragmen kosong.
Matematika scale-to-cover: Menjamin gambar yang diubah ukuran sepenuhnya menutupi kanvas target di kedua dimensi.
Resampling Lanczos: Filter berkualitas tinggi yang menjaga detail halus saat downsampling dan mengurangi aliasing saat upscaling.
Center crop: Setelah mengubah ukuran, kita memotong kanvas target tepat dari tengah untuk mempertahankan komposisi umum dan menghindari potongan tidak terduga di luar pusat.
Dengan helper siap, kita kini dapat menjalankan loop generasi multi-sudut dan mengemas hasilnya.
Langkah 4.2: Menghasilkan gambar
Berikutnya, kita memvalidasi input, menyesuaikan gambar ke rasio aspek yang dipilih, melakukan loop atas sudut yang dipilih, dan menjalankan pipeline dalam inference_mode. Terakhir, kita mengembalikan file zip berisi semua gambar yang dihasilkan.
Fungsi generate_images() mengimplementasikan generasi multi-sudut dan ekspor dengan cara:
Validasi, normalisasi, dan konfigurasi: Memeriksa gambar yang diunggah dan sudut yang dipilih, lalu menyesuaikan gambar ke rasio yang dipilih (ubah ukuran dan center crop), serta mengganti mode HQ vs Fast melalui set_pipeline_mode(use_lightning).
Inferensi efisien: Untuk tiap sudut, menyusun satu string instruksi termasuk makro sudut, preset latar, adegan, dan gaya. Kemudian menyiapkan input Diffusers dan menjalankan di bawah torch.inference_mode() untuk menghemat memori. Pada GPU VRAM rendah (seperti T4), pemanggilan torch.cuda.empty_cache() per sudut membantu mengurangi fragmentasi.
Mengagregasi hasil dengan umpan balik UI: Akhirnya memperbarui progres Gradio saat tiap sudut selesai dan mengumpulkan semua output dalam satu daftar untuk proses zipping berikutnya.
Fungsi create_zip(images) menyediakan ekspor portabel yang menulis file zip dengan manifest.txt singkat serta menyandi gambar melalui (BytesIO) dalam memori untuk file lossless dan mengembalikan None jika tidak ada gambar.
Dengan generasi dan pengemasan siap, UI dapat memicu proses multi-sudut dan menawarkan unduhan sekali klik untuk paket sudut lengkap.
Langkah 5: Gradio UI
UI ini memungkinkan pengguna mengunggah gambar produk, memilih sudut dan rasio aspek, memilih preset latar, menetapkan catatan gaya, dan menghasilkan gambar multi-sudut secara langsung.
Kode di atas membangun aplikasi Gradio interaktif yang menghubungkan satu aksi generate ke inferensi dan mengekspos UI web yang dapat dibagikan, dengan menggunakan:
Input (kolom kiri): Panel kiri mengumpulkan semua yang dibutuhkan model menggunakan gr.Image untuk mengunggah foto produk, gr.CheckboxGroup untuk sudut kamera, dua gr.Dropdowns untuk rasio aspek dan preset latar, serta dua kolom gr.Textbox untuk adegan kustom dan catatan gaya guna menyetel tampilan.
Output (kolom kanan): Metode gr.Gallery menampilkan semua sudut yang dihasilkan dalam grid sehingga Anda dapat membandingkan komposisi sekilas, dan komponen gr.File menawarkan ZIP berisi PNG untuk diunduh cepat.
Pengaturan lanjutan: Sebuah gr.Checkbox mengaktifkan Fast Mode (Lightning LoRA) untuk pratinjau cepat pada GPU kelas T4, sementara Seed dan Steps menyesuaikan reprodusibilitas serta trade-off kualitas/waktu. Guidance dan True-CFG mengarahkan kekuatan edit versus stabilitas identitas, dan Images per Angle memungkinkan Anda menghasilkan beberapa varian per makro kamera sekaligus.
Perangkaian antarmuka (aksi): Satu tombol Generate menghubungkan semua input ke fungsi generate_images() (yang menjalankan Qwen Edit dengan adapter yang dipilih) lalu ke fungsi create_zip() (yang mengemas output), mengembalikan galeri dan ZIP ke antarmuka.
Peluncuran aplikasi: Terakhir, metode demo.launch() menjalankan aplikasi web dan menyediakan URL berbagi publik—ideal untuk sesi Colab, demo cepat, atau mengirim tautan kepada stakeholder agar mencoba alat ini sendiri.
Terakhir, klik Generate dan lihat satu paket sudut lengkap dirender.
Berikut hasil dari eksperimen saya dengan model ini. Pertama, Anda dapat melihat bagaimana produk ditampilkan berdasarkan parameter yang ditetapkan.
Pada video berikutnya, Anda dapat melihat bagaimana saya berinteraksi dengan antarmuka, berbagai pengaturan, dan hasil yang dihasilkan dari gambar asli kami.
Penutup
Sekarang Anda memiliki aplikasi Gradio Product Shot Booster yang mengubah satu foto menjadi render multi-sudut menggunakan Qwen-Image-Edit-2509 dan kontrol “kamera virtual” LoRA. Aplikasi ini sadar GPU (A100 optimal, namun GPU lebih kecil menggunakan slicing), dapat direproduksi, dan mendukung alur kerja pratinjau cepat hingga ekspor HQ.
Berikut hal yang bisa Anda coba selanjutnya:
Produkkan: Tambahkan autentikasi dan kuota, serta sertakan ekspor preset sekali klik untuk spesifikasi gambar Amazon/Etsy/PDP.
Skalakan: Ekspose API /generate dan dukung pekerjaan batch (CSV/JSON SKU) sehingga tim dapat merender paket sudut dalam skala besar.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Penjual mandiri dan brand kecil jarang memiliki anggaran untuk pemotretan produk lengkap. Dalam panduan ini, kita akan membangun dan menjalankan aplikasi Gradio yang mengubah satu gambar input menjadi render produk multi-sudut siap e-commerce (wide, makro, ±45°, top-down) menggunakan Qwen-Image-Edit-2509 dengan kontrol kamera virtual berbasis LoRA untuk fotografi produk AI yang dapat direproduksi.
Di balik layar, kita menggunakan:
Qwen/Qwen-Image-Edit-2509(Apache-2.0)dx8152/Qwen-Edit-2509-Multiple-angleslightx2v/Qwen-Image-LightningDalam tutorial ini, Anda akan mempelajari cara:
Jika Anda ingin mempelajari lebih lanjut tentang cara data gambar diproses dalam deep learning, lihat Image Processing in Python skill track.
Mengapa Menggunakan Qwen Image Edit dengan Multiple Angles LoRA?
Qwen-Image-Edit-2509 adalah iterasi terbaru dari model pengeditan gambar Qwen dengan konsistensi yang ditingkatkan dan pengeditan multi-gambar. Multiple-Angles LoRA menyuntikkan kontrol “kamera virtual” yang andal sehingga Anda dapat mengatakan:
Perintah-perintah ini secara konsisten membingkai ulang produk yang sama tanpa berhalusinasi menjadi produk baru.
Tutorial Qwen Image Edit Langkah demi Langkah: Membangun Product Shot Booster
Dalam panduan ini, kita akan membangun aplikasi yang mengubah satu gambar produk menjadi satu set sudut siap studio (termasuk sudut seperti wide, close-up, 45° kiri/kanan, dan top-down), dengan preset gaya hidup opsional dan mode pratinjau cepat. Aplikasi ini menggunakan model
Qwen/Qwen-Image-Edit-2509dan Multiple-Angles LoRA yang dibungkus dalam UI Gradio.Kita akan mulai dari penyiapan lingkungan hingga pemuatan model, helper generasi, dan UI web.
Langkah 1: Prasyarat
Pertama, instal semua dependensi runtime. Kita menggunakan PyTorch dengan roda CUDA, tooling Hugging Face, pustaka Diffusers, Gradio untuk UI, dan Pillow/OpenCV untuk penanganan gambar.
Berikut fungsi masing-masing prasyarat:
QwenImageEditPlusPipeline.Setelah lingkungan siap, kita bisa melakukan autentikasi ke Hugging Face (opsional) dan memuat model.
Langkah 2: Autentikasi Hugging Face
Beberapa model atau adapter mungkin memerlukan autentikasi dari HuggingFace. Langkah ini akan masuk satu kali untuk sesi.
Mulailah dengan masuk ke akun HuggingFace Anda dan cari Access Tokens di pengaturan akun. Klik Create new token dan buat token baru dengan tipe Read. Pilih izin yang diperlukan dan buat token baru.
Di produksi/Colab, jangan hardcode token; gunakan variabel lingkungan atau “Secrets” Colab.
Langkah 3: Memuat model dan menyiapkan pipeline
Di bagian ini, kita menyiapkan pipeline Qwen-Image-Edit, memuat LoRA sudut, dan menambahkan toggle Fast dengan pengaturan yang menyesuaikan GPU. Perlu dicatat bahwa kode ini berjalan efisien pada GPU A100 dengan RAM tinggi.
Langkah 3.1: Impor dan konfigurasi GPU
Sekarang, kita akan mengimpor pustaka inti dan mendeteksi GPU untuk mengatur presisi, attention slicing, dan VAE slicing secara otomatis demi stabilitas.
Berikut komponen kunci dari blok kode di atas:
get_gpu_config): Kita mendeteksi akselerator yang tersedia dan mengembalikan kamus konfigurasi kecil yang digunakan untuk memilih device (cpu/cuda), dtype (seperti bfloat16 di GPU), dan perilaku memori:Qwen-Image-Edit-2509sebagai editor inti, bersama Multiple-angles LoRA untuk kontrol kamera, dan opsional mencampur Lightning LoRA saat Anda mengaktifkan Fast Mode.HF_BASE_MODEL = "Qwen/Qwen-Image-Edit-2509"adalah tulang punggung pengeditan gambar utama.LORA_ANGLES = "dx8152/Qwen-Edit-2509-Multiple-angles"menambahkan kontrol “kamera virtual”.LORA_LIGHTNING = "lightx2v/Qwen-Image-Lightning"adalah adapter kecepatan opsional untuk pratinjau cepat.Catatan: untuk HQ Mode, hanya adapter sudut yang tetap aktif.
ANGLE_MACROS memetakan label seperti “Wide-angle” atau “Top-down” ke perintah bahasa Mandarin ekuivalen yang dapat dipahami LoRA sudut dengan andal. Perintah ini secara konsisten menggerakkan kamera virtual (gerak/putar/zoom) tanpa mengubah identitas.BACKGROUND_PRESETS adalah fragmen bahasa Inggris singkat seperti “marble surface”, “soft gray studio”, yang kita gabungkan ke prompt akhir. Ini terpisah dari makro sudut dan bertugas mengontrol suasana/adegan.ASPECT_RATIOS): Memungkinkan kita menghasilkan kanvas (1:1, 4:3, 16:9, dll.) dan mengubah ukuran atau center-crop input sebelum inferensi sehingga output tidak memerlukan pemotongan pascaproduksi.GPU dan adapter kini siap. Mari kita instantiate pipeline Diffusers dan menautkan LoRA selanjutnya.
Langkah 3.2: Pipeline
Selanjutnya, kita memuat pipeline Qwen Edit dasar, mengaktifkan optimasi memori sesuai GPU, dan menumpuk Multiple-Angles LoRA. Kita juga mengimplementasikan sakelar mode untuk menambahkan Lightning LoRA secara opsional untuk pratinjau cepat.
Kode di atas adalah lapisan penyiapan pipeline untuk aplikasi Product Shot Booster, yang melakukan fungsi berikut:
QwenImageEditPlusPipelinedari model dasar (Qwen/Qwen-Image-Edit-2509), memindahkannya ke device terdeteksi (CPU/GPU), dan mengatur presisi tensor (torch_dtype) berdasarkan perangkat keras Anda.set_pipeline_mode()dan flagcurrent_modemengelola status HQ vs Fast, mencegah pemuatan ulang Lightning yang berulang serta memungkinkan Anda mengganti adapter.Sekarang pipeline siap. Mari lanjutkan ke fungsi generasi dan UI Gradio.
Langkah 4: Fungsi generasi
Fungsi generasi menyusun prompt, mengubah ukuran ke rasio aspek target, menjalankan pipeline untuk sudut yang dipilih, dan mengemas hasil untuk diunduh dalam file zip.
Langkah 4.1: Prompt Composer dan Helper Ubah Ukuran Gambar
Sebelum memanggil model, kita menormalkan input dengan dua helper stateless:
compose_prompt()function: Fungsi ini menyusun satu string instruksi dari sudut kamera, preset latar, adegan kustom, dan catatan gaya. Klausa yang ringkas membantu menjaga parsing instruksi Qwen tetap stabil dan menghindari pembobotan berlebihan pada satu bagian.resize_image()function: Menyesuaikan gambar sumber ke rasio aspek target menggunakan strategi scale-to-cover, resampling Lanczos membantu untuk down/up-scaling berkualitas tinggi, serta center crop agar subjek utama tetap dalam bingkai.Dua fungsi di atas melakukan tugas berikut:
.strip()pada teks pengguna untuk menghindari fragmen kosong.Dengan helper siap, kita kini dapat menjalankan loop generasi multi-sudut dan mengemas hasilnya.
Langkah 4.2: Menghasilkan gambar
Berikutnya, kita memvalidasi input, menyesuaikan gambar ke rasio aspek yang dipilih, melakukan loop atas sudut yang dipilih, dan menjalankan pipeline dalam
inference_mode. Terakhir, kita mengembalikan file zip berisi semua gambar yang dihasilkan.Fungsi
generate_images()mengimplementasikan generasi multi-sudut dan ekspor dengan cara:set_pipeline_mode(use_lightning).torch.inference_mode()untuk menghemat memori. Pada GPU VRAM rendah (seperti T4), pemanggilantorch.cuda.empty_cache()per sudut membantu mengurangi fragmentasi.Fungsi
create_zip(images)menyediakan ekspor portabel yang menulis file zip denganmanifest.txtsingkat serta menyandi gambar melalui (BytesIO) dalam memori untuk file lossless dan mengembalikan None jika tidak ada gambar.Dengan generasi dan pengemasan siap, UI dapat memicu proses multi-sudut dan menawarkan unduhan sekali klik untuk paket sudut lengkap.
Langkah 5: Gradio UI
UI ini memungkinkan pengguna mengunggah gambar produk, memilih sudut dan rasio aspek, memilih preset latar, menetapkan catatan gaya, dan menghasilkan gambar multi-sudut secara langsung.
Kode di atas membangun aplikasi Gradio interaktif yang menghubungkan satu aksi generate ke inferensi dan mengekspos UI web yang dapat dibagikan, dengan menggunakan:
gr.Imageuntuk mengunggah foto produk,gr.CheckboxGroupuntuk sudut kamera, duagr.Dropdownsuntuk rasio aspek dan preset latar, serta dua kolomgr.Textboxuntuk adegan kustom dan catatan gaya guna menyetel tampilan.gr.Gallerymenampilkan semua sudut yang dihasilkan dalam grid sehingga Anda dapat membandingkan komposisi sekilas, dan komponengr.Filemenawarkan ZIP berisi PNG untuk diunduh cepat.gr.Checkboxmengaktifkan Fast Mode (Lightning LoRA) untuk pratinjau cepat pada GPU kelas T4, sementara Seed dan Steps menyesuaikan reprodusibilitas serta trade-off kualitas/waktu.GuidancedanTrue-CFGmengarahkan kekuatan edit versus stabilitas identitas, danImages per Anglememungkinkan Anda menghasilkan beberapa varian per makro kamera sekaligus.generate_images()(yang menjalankan Qwen Edit dengan adapter yang dipilih) lalu ke fungsicreate_zip()(yang mengemas output), mengembalikan galeri dan ZIP ke antarmuka.demo.launch()menjalankan aplikasi web dan menyediakan URL berbagi publik—ideal untuk sesi Colab, demo cepat, atau mengirim tautan kepada stakeholder agar mencoba alat ini sendiri.Terakhir, klik Generate dan lihat satu paket sudut lengkap dirender.
Berikut hasil dari eksperimen saya dengan model ini. Pertama, Anda dapat melihat bagaimana produk ditampilkan berdasarkan parameter yang ditetapkan.