Tek bir net ürün görseli, Claude Code ve AIHubMix API'si ile Seedream'de karakter referansları oluşturabilir, bunları sanal kişi varlıkları olarak kaydedebilir ve Seedance ile bir AI ürün reklamı üretebilirsiniz.
Bu eğitim gerçek bir aloe mist kampanyasına dayanmaktadır ve proje yapısını, yapılandırmayı, komutları ve eksiksiz video istemini içerir. Hedef çıktı, yapay zeka tarafından üretilmiş bir kişi ve ortam içeren 20 saniyelik, 720p, 9:16 dikey reklamdır.
Tüm iş akışını Claude Code ve AIHubMix yönetir. Claude Code proje özetini okur, istemleri revize eder ve yürütmeyi organize eder. AIHubMix ise tek bir model giriş noktası sağlayarak görsel ve video üretiminin aynı proje içinde çalışmasına olanak tanır.
Model kimlikleri, parametreler ve hata yönetimi 16 Eylül 2026 tarihli bir proje anlık görüntüsünden alınmıştır. Yeniden kullanmadan önce güncel API'yi kontrol edin. Komutlar dahil edilen flow.py dosyasını kullanır ve proje kök dizininden çalıştırılmalıdır.Eksiksiz Başlangıç Paketini İndirin
Kodu, istemleri, yapılandırmayı ve örnek görselleri indirin:
https://drive.google.com/uc?export=download&id=1nXcj26Fq3daHeTd0SynS7_QEXgH8z4u_
Dosyaları çıkardıktan sonra seedance-starter dizinine girin. Paket; flow.py dosyasını, iki şema anlık görüntüsünü, beş istem dosyasını, ürün görselini ve üç referans görseli içerir. Python betiği yalnızca standart kütüphaneyi kullanır.
- Video aşamasıyla başlayın: dahil edilen üç referansı kullanın, anahtarınızı yapılandırın ve 4. Adım'dan başlayın.
- Kendi ürününüzle başlayın: ürün görselini ve istem ayrıntılarını değiştirin, dahil edilen referans görsellerini
assets/klasöründen taşıyın ve 3. Adım'dan başlayın.
.env.example dosyasını .env olarak kopyalayın ve kendi API anahtarınızı ekleyin. Hesabınızın ilgili modellere erişimi, gerekli eşzamansız görev izni ve yeterli kotası olmalıdır. API üretimleri kullanım ücretine tabidir.
1. Ürün Görselini ve Projeyi Hazırlayın
Örnek ürün Nature Republic Aloe Vera Mist'tir. İş akışını uyarlarken görseli, ürün açıklamasını ve kullanım eylemini birlikte güncelleyin.
| Dosya | Amaç |
|---|---|
assets/product.png | Orijinal ürün görseli |
prompts/prompt-a.txt | Ana karakter portre istemi |
prompts/prompt-b.txt | Karakterin ürünü tuttuğu istem |
prompts/prompt-c.txt | Ürün kullanımı istemi |
prompts/prompt-video.txt | Video zaman çizelgesi, kamera ve ses gereksinimleri |
prompts.json | Boyutlar, süre, referans bağımlılıkları ve istem yolları |
flow.py | API istekleri, varlık kaydı, yoklama ve indirmeler |
seedream.schema.json, seedance.schema.json | Önbelleğe alınmış API şema anlık görüntüleri |
Claude Code, proje özetini okumaya ve yapılandırma ile istemleri revize etmeye yardımcı olur. flow.py gerçek istekleri AIHubMix üzerinden gönderir.
AIHubMix Bu İş Akışına Neden Uygun?
Bir AI ürün reklamı iş akışı genellikle birden fazla modele ihtiyaç duyar. Bir görsel modeli kişi ve ürün referanslarını oluşturur; bir video modeli ise hareketi ve kamera davranışını üretir. AIHubMix çoğu yaygın modeli kapsadığı için, her sağlayıcı için ayrı hesaplar, kimlik doğrulamaları ve istek giriş noktaları yönetmek yerine modelleri göreve göre tek bir API hizmeti üzerinden seçebilirsiniz.
AIHubMix ayrıca birden fazla tedarikçiye bağlanır ve kullanılabilir, düşük gecikmeli bir rotayı otomatik olarak seçer. Bu, görsel üretimi, varlık işleme ve video üretimini sırayla tamamlaması gereken bir iş akışında tek bir tedarikçinin kararsızlığının etkisini azaltabilir. Model kullanılabilirliği, yönlendirme ve yanıt süresi yine de mevcut hizmet koşullarına bağlıdır.
Proje kök dizininde .env dosyasını oluşturun veya aynı değişkeni ortamınızda tanımlayın:
AIHUBMIX_API_KEY=replace_with_your_api_key
Proje, .gitignore aracılığıyla .env dosyasını dışarıda tutar. Yalnızca değişken adını ve örneği paylaşın, asla gerçek anahtarı paylaşmayın.

Tüm iş akışı tek bir net ürün görseliyle başlar.
2. Çıktı Hedefini Belirleyin ve Görsel ile Video Parametrelerini Ayırın
prompts.json dosyasının ilgili kısmı şöyle görünür. Gerçek dosyayı düzenlerken mevcut stills dizisini ve diğer alanları koruyun.
{
"size": "1080x1920",
"aspect_ratio": "9:16",
"duration": 20,
"resolution": "720p",
"generate_audio": true,
"video_prompt_file": "prompts/prompt-video.txt"
}
size görsel üretimine aittir. aspect_ratio, duration, resolution ve generate_audio ise video üretimine aittir. Betik, tüm yapılandırma nesnesini her iki uç noktaya göndermek yerine ayrı istekler oluşturur.
Proje şu model kimliklerini kullanır:
- Seedream:
doubao-seedream-5-0-pro-260628 - Seedance:
doubao-seedance-2-5-260628
Dahil edilen şema anlık görüntüleri, görsel uç noktasının size parametresini, video uç noktasının ise aspect_ratio parametresini kabul ettiğini gösterir. Bunların karıştırılması reddedilmeye neden olur. flow.py bir istek göndermeden önce önbelleğe alınmış şema özelliklerini kontrol eder, ancak bu tam bir parametre doğrulaması değildir.
3. Üç Karakter Referansını Sırayla Oluşturun
Her görselin farklı bir rolü vardır ve sonraki görseller önceki görsellere bağlıdır:
| Referans | İçerik | Girdiler |
|---|---|---|
| A: Karakter portresi | Yüz, saç, kıyafet, oda ve aydınlatmayı belirler | Bu örnekte yalnızca metin istemi |
| B: Ürünü tutma | Aynı kişi etiketi kameraya dönük olacak şekilde şişeyi tutar | Ürün görseli + A |
| C: Ürünü kullanma | Aynı kişi sprey pompasına basar | Ürün görseli + B |
İstemler karakter ayrıntılarını tekrarlar ve ürünün şeklini, renklerini, etiket düzenini ve doğal kullanımını tarif eder.
Çalıştırın:
python3 flow.py stills
Sonuçlar assets/frame-01.jpg, frame-02.jpg ve frame-03.jpg olarak kaydedilir. Karakter tutarlılığını, ambalaj doğruluğunu ve kullanım eyleminin gerçekçiliğini gözden geçirin.
Betik mevcut dosyaları atlar. Bir istemi değiştirirseniz, yeniden çalıştırmadan önce ilgili çıktıyı yedekleyip taşıyın. A'yı değiştirmek, B ve C'nin de yeniden oluşturulmasını gerektirebilir.

Referanslar karakter kimliğini, ürün sunumunu ve ürün kullanımını belirler.
4. Görselleri Barındırın ve Sanal Portre Varlıklarını Kaydedin
Başlangıç paketinde yazarın hesabına ait hiçbir varlık kimliği yoktur. Referansları kendi hesabınızda kaydedin.
Bu proje kayıt için herkese açık görsel URL'leri kullanır. Kaynak iş akışı, bir commit SHA'sına sabitlenmiş GitHub raw URL'lerini kullanmıştı; ancak görseli kimlik doğrulaması olmadan doğrudan döndüren herhangi bir barındırma hizmeti çalışabilir.
Bir GitHub /blob/ URL'si bir HTML sayfası döndürür ve görsel URL'si olarak kullanılamaz.
Bu yer tutucu adresi, yüklenen dosyalarınızın gerçek konumuyla değiştirin:
IMAGE_BASE='https://your-public-image-host.example/campaign'
python3 flow.py check "$IMAGE_BASE/frame-01.jpg" "$IMAGE_BASE/frame-02.jpg" "$IMAGE_BASE/frame-03.jpg"
python3 flow.py assets "$IMAGE_BASE/frame-01.jpg" "$IMAGE_BASE/frame-02.jpg" "$IMAGE_BASE/frame-03.jpg"
check, HTTP 200 ve bir görsel Content-Type değerini doğrular. assets, bir virtual_portrait varlık grubu oluşturur veya yeniden kullanır, her görseli kaydeder, active durumuna gelene kadar bekler ve varlık kimliklerini state.json dosyasına yazar.
Bu adım, projedeki gerçek bir hatadan kaynaklanmaktadır: fotogerçekçi karakter URL'lerinin doğrudan video uç noktasına gönderilmesi doubao_real_person_required hatasını döndürdü. Bu kampanyadaki kişi yapay zeka ile üretilmişti, dolayısıyla virtual_portrait doğru sınıflandırmaydı. Gerçek bir kişinin fotoğrafı ilgili doğrulama sürecinden geçmeli ve sanal olarak etiketlenmemelidir.
Tek bir video isteğinde kullanılan tüm varlıklar aynı gruba ait olmalıdır.

Referanslar oluşturuldu ve üç varlığın tamamı aktif durumdaydı; bu ekran görüntüsü alındığında video görevi hâlâ çalışıyordu.
5. Video İstemini Kamera Sınırlarıyla Birlikte Bir Zaman Çizelgesi Olarak Yazın
Nihai proje istemi, tek bir kesintisiz 20 saniyelik çekimi dört aşamaya böler:
| Zaman | Karakterin eylemi | Ürünün konumu |
|---|---|---|
| 0–5 saniye | Kameraya bakar ve şişeyi sunar | Yüzünün yanında, etiket kameraya dönük |
| 5–10 saniye | Şişeyi kaldırır ve pompaya basar | Kare içinde kalır |
| 10–15 saniye | Gözlerini kapatır ve spreyin yerleşmesini hisseder | Karenin alt üçte biri |
| 15–20 saniye | Gözlerini açar ve ürünü yeniden sunar | Yüzünün yanına geri döner, etiket kameraya dönük |
Önceki bir sonuçta kamera çok yakına gelmiş ve ürün kaybolmuştu. Bu nedenle nihai istem hareketi orta yakın çekimle sınırlar, ürünün görünür kalmasını şart koşar ve ilk ve son üç saniyede etiketin okunabilir olmasını ister.
Eksiksiz prompts/prompt-video.txt dosyası aşağıdadır. Başka bir ürün için markayı, ambalaj açıklamasını ve kullanım eylemini güncelleyin. Bu talimatlar üretim hedefleridir ve yine de çıktı incelemesi gerektirir.
One continuous 20-second vertical beauty commercial take, no cuts, in a sunlit minimalist vanity corner.
0-5s: the same 24-year-old East Asian woman in an oversized sage-green linen shirt over a white ribbed tank top stands at the vanity holding the translucent light-green Nature Republic Aloe Vera 92% Soothing Gel Mist beside her cheek, the label facing camera and fully legible. She looks to camera with a warm, easy smile and turns the bottle slightly so the label catches the morning light.
5-10s: she lifts the bottle just above eye level and presses the fine-mist pump. A soft cone of aloe mist sprays across her face and catches the light as a faint sparkle of micro-droplets.
10-15s: her eyes close and her chin lifts into a small contented smile as the mist settles, tiny droplets resting on her cheekbone and brow. The bottle stays visible in the lower third of the frame throughout this beat.
15-20s: she opens her eyes, brings the bottle back up beside her cheek with the label square to camera, and holds a final calm look at the lens.
Camera: one slow, smooth push-in from a chest-up framing to a mid-close framing ONLY. Do not push past a mid-close shot. The product must stay inside the frame for the entire take, and the label must be clearly legible in both the first three seconds and the last three seconds.
Look: soft diffused morning sunlight from camera left, photorealistic skin texture with real moisture on the skin, mist rendered as genuinely photographed spray rather than digital particles, premium K-beauty advertising. Keep the product packaging, colours, materials, label layout and label text exactly as in the reference images; do not redesign or re-letter the product. No text overlays, no captions, no watermarks.
Audio: a quiet bright room, one soft short pump-spray hiss, a gentle breath. No music, no voiceover.
Ses üretimi etkindir, ancak istem yalnızca oda sesi, tek bir sprey sesi ve yumuşak bir nefes ister; müzik veya seslendirme istenmez.
6. Videoyu Oluşturun ve Kaydedin
Varlık kaydından sonra asset:// referanslarını gönderin. Bu komut kayıtlı kimlikleri okur ve her birini ayrı bir argüman olarak iletir:
python3 - <<'PYCODE'
import json
import subprocess
import sys
from pathlib import Path
state = json.loads(Path("state.json").read_text())
refs = ["asset://" + asset_id for asset_id in state["asset_ids"]]
subprocess.run([sys.executable, "flow.py", "video", *refs], check=True)
PYCODE
Bir argüman listesi kullanmak, kaynak projedeki bir zsh sorununu da önler; burada tek bir düz metin dizesinde saklanan birden fazla kimlik betiğe tek ve geçersiz bir argüman olarak ulaşabiliyordu.
Betik video görev kimliğini kaydeder, completed durumuna gelene kadar yoklar ve çıktıyı out/video.mp4 dosyasına indirir. Başka bir indirme bu yolun üzerine yazabilir, bu yüzden karşılaştırmak istediğiniz sürümleri yedekleyin.
Mevcut bir görevi sürdürmek veya sonucunu yeniden indirmek için:
python3 flow.py status
Oluşturma yanıtı kaybolduysa, son görevleri listeleyin ve ilgili kimliği sürdürün:
python3 flow.py tasks
python3 flow.py status VIDEO_TASK_ID
Yeni bir görev oluşturmadan önce mevcut bir görevi aramak, yanlışlıkla çift üretimi önler.
7. Çıktıyı İnceleyin ve Yineleyin
Kaynak proje video-v1-10s.mp4 ve nihai video.mp4 dosyalarını saklar. İlk sürüm yalnızca 10 saniye sürdü ve yeterince ürün kullanımı göstermedi; bu nedenle iş akışı ikinci bir istem yinelemesinden geçti.
Her sonucu bu kontrol listesine göre inceleyin:
- [ ] Süre, çözünürlük ve en-boy oranı hedefle eşleşiyor.
- [ ] Karakterin yüzü, kıyafeti ve ortamı tutarlı kalıyor.
- [ ] Ürün görünür kalıyor ve etiketi başta ve sonda okunabiliyor.
- [ ] Tutma ve sprey eylemleri ürünün gerçek kullanımıyla eşleşiyor.
- [ ] Şişenin şekli, ambalajı ve metni gözle görülür biçimde değişmiyor.
- [ ] Kamera çok yakına gelmiyor ve ses isteğe uygun.
Süre yanlışsa hem yapılandırmayı hem de gerçek isteği inceleyin. Ürün kadrajdan çıkıyorsa kamera sınırlarını güçlendirin. Kullanım eylemi çok kısaysa zamanı ve davranışı daha açık biçimde belirleyin. Yalnızca prompts/prompt-video.txt dosyasını düzenlemek referans görselleri yeniden üretmeyi gerektirmez; görsel referanslar değişmek zorunda olduğunda yeniden üretin ve kaydedin.
Sık Sorulan Sorular
Doğru görünen bir model adı neden 404 döndürüyor?
Kaynak projede kısaltılmış Seedream adı model_not_found hatası döndürdü. Pazarlama amaçlı görünen adın API tanımlayıcısı olduğunu varsaymak yerine, mevcut uç nokta tarafından kabul edilen tam API model kimliğini kullanın.
Tarayıcımda bir görseli açabiliyorum, ama yine de kaydedemiyorum. Neden?
URL'nin HTML, bir paylaşım sayfası ya da oturum açma sayfası yerine doğrudan görselin kendisini döndürdüğünü doğrulayın. Kayıttan önce python3 flow.py check URL... komutunu kullanın.
Bir istemi değiştirdim ama referans görsel değişmedi. Neden?
stills mevcut dosyaları atlar. Yeniden üretilmesi gereken görselleri yedekleyip taşıyın, ardından aşağı akış referanslarının da yeniden üretilmesi gerekip gerekmediğini kontrol edin.
HTTP 200 videonun bittiği anlamına mı geliyor?
Hayır. Betik görevin status değerine göre dallanır ve yalnızca görev completed durumuna ulaştığında indirme yapar.
İlk Sürümünüzü Başlatın
Bir ürün görseli hazırlayın, AIHubMix erişimini yapılandırın ve görsel ile video modellerini seçin. Ardından Claude Code'un ürün açıklamasını ve istemleri uyarlamasına izin verin. Üç referansı üretin, inceleyip kaydedin, videoyu oluşturun ve bir sonraki iterasyona karar vermek için kontrol listesini kullanın.
Gelecekteki bir projede başka bir modele ihtiyaç duyulduğunda aynı dosya yapısını ve iş akışını koruyun, ardından AIHubMix model seçimini ve modele özgü parametreleri güncelleyin. Birden fazla yapay zeka modeli kullanan bir içerik ekibi için birleşik bir API hizmetinin pratik değeri de budur: modeller göreve göre değişebilir, iş akışı ise yeniden kullanılabilir kalır.



