Sinyal Darurat
Durasi: 1 menit

Kapsul penyelamat Anda menembus atmosfer dunia yang tidak dikenal. Lampu peringatan berkedip di setiap panel. Sistem navigasi rusak. Komunikasi terganggu. Saat protokol darurat pod diaktifkan, asisten AI mulai berfungsi:
"Penyintas terdeteksi. Pendaratan darurat berhasil. Memulai protokol suar penyelamat..."
"PERINGATAN: Verifikasi identitas diperlukan. Jaringan penyelamat galaksi tidak dapat menemukan penjelajah yang tidak terdaftar. Konfirmasi identitas Anda untuk mengaktifkan beacon."
Anda melihat keluar dari area tampilan. Lanskap asing terbentang hingga ke cakrawala—formasi batuan aneh, tumbuhan yang tidak dikenal, langit berwarna aneh. Di suatu tempat di luar sana, penyintas lain dari misi Anda tersebar di seluruh permukaan planet ini.
Namun, yang pertama: Anda harus ada di sistem.
Yang Akan Anda Bangun
Di level ini, Anda akan membuat identitas penjelajah luar angkasa yang unik menggunakan pembuatan gambar multi-turn dengan model pembuatan gambar Gemini Google (juga dikenal sebagai Nano Banana 🍌). Avatar Anda akan muncul di peta penyelamatan global, yang dapat dilihat oleh semua orang yang selamat lainnya di acara workshop Anda.

Yang Akan Anda Pelajari
| Konsep | Deskripsi |
|---|---|
| Pembuatan Gambar Multi-giliran | Cara mempertahankan konsistensi karakter di beberapa pembuatan gambar menggunakan sesi chat |
| Rekayasa Perintah untuk Gambar | Membuat perintah yang efektif untuk output yang konsisten dan bergaya dengan batasan tertentu |
| Gemini Image API (Nano Banana) | Menggunakan kemampuan pembuatan gambar native Gemini melalui Python SDK |
| Sesi Chat | Memanfaatkan konteks percakapan untuk penyempurnaan berulang dan konsistensi karakter |
Di akhir level ini, Anda akan:
✅ Membuat potret penjelajah Anda menggunakan AI text-to-image
✅ Membuat ikon peta yang konsisten menggunakan percakapan multi-turn
✅ Mendaftarkan identitas Anda ke jaringan penyelamat
✅ Muncul di peta dunia live bersama penjelajah lainnya
Mari tampilkan bisnis Anda di peta. 📍
Menyiapkan Lingkungan Anda
Durasi: 2 menit
Mengakses Cloud Shell
Pertama, kita akan membuka Cloud Shell, yang merupakan terminal berbasis browser dengan Google Cloud SDK dan alat penting lainnya yang sudah diinstal sebelumnya.
Perlu Kredit Google Cloud?
• Jika Anda menghadiri workshop yang dipandu instruktur: Instruktur akan memberikan kode kredit kepada Anda. Gunakan kode yang mereka berikan.
• Jika Anda menyelesaikan Codelab ini sendiri: Anda dapat menukarkan kredit Google Cloud gratis untuk menutupi biaya workshop. Klik link ini untuk mendapatkan kredit dan ikuti langkah-langkah dalam panduan video di bawah untuk menerapkannya ke akun Anda.
![]()
Klik Activate Cloud Shell di bagian atas Konsol Google Cloud (ikon terminal di menu navigasi kanan atas).

Temukan ID Project Google Cloud Anda:
- Buka Konsol Google Cloud: https://console.cloud.google.com
- Pilih project yang ingin Anda gunakan untuk workshop ini dari dropdown project di bagian atas halaman.
- Project ID Anda ditampilkan di kartu Info project di Dasbor

Setelah Cloud Shell terbuka, verifikasi bahwa Anda telah diautentikasi:
# Check that you are logged in
gcloud auth list
Anda akan melihat akun Anda tercantum sebagai (ACTIVE).
Mengonfigurasi Project Anda
Pastikan project Anda disetel dengan benar:
export PROJECT_ID=$(gcloud config get-value project)
echo "Using project: $PROJECT_ID"
Jika tidak ada project yang ditetapkan atau Anda perlu mengubahnya:
gcloud config set project YOUR_PROJECT_ID
Mengaktifkan API yang Diperlukan
Aktifkan Vertex AI API untuk pembuatan gambar:
gcloud services enable aiplatform.googleapis.com
Membuat Clone Repositori
Clone repositori Way Back Home dan buka project:
git clone https://github.com/ayoisio/way-back-home.git
cd way-back-home
Instal Dependensi
Buka Level 0 dan instal paket Python yang diperlukan:
cd level_0
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Dependensi utamanya adalah:
| Paket | Tujuan |
|---|---|
google-genai |
Klien Gemini API untuk pembuatan gambar |
requests |
Klien HTTP untuk panggilan API ke Mission Control |
Pillow |
Pemrosesan gambar dan penanganan file |
Verifikasi Penyiapan
Jalankan verifikasi cepat untuk memastikan semuanya dikonfigurasi dengan benar:
cd ~/way-back-home
python scripts/verify_setup.py
Anda akan melihat:
✓ Google Cloud project configured: your-project-id
✓ Vertex AI API enabled
✓ Dependencies installed
✓ Ready to proceed!
Yang Baru Saja Anda Selesaikan
✅ Membuka Cloud Shell
✅ Mengonfigurasi project Google Cloud Anda
✅ Mengaktifkan Vertex AI API
✅ Meng-clone repositori codelab
✅ Menginstal dependensi Python
✅ Memverifikasi penyiapan Anda
Berikutnya: Hubungkan ke Mission Control dan klaim nama penjelajah Anda.
Menghubungkan ke Kontrol Misi
Durasi: 2 menit
Menjalankan Skrip Penyiapan
Skrip penyiapan menghubungkan Anda ke jaringan penyelamat Way Back Home dan mencadangkan identitas penjelajah Anda. Jalankan dari root project:
cd ~/way-back-home
chmod +x scripts/setup.sh
./scripts/setup.sh
Anda akan diminta untuk memberikan dua informasi.
Masukkan Kode Acara Anda
Kode acara mengidentifikasi acara workshop yang Anda ikuti.
Jika Anda berada di workshop: Masukkan kode acara dari kode QR, slide, atau instruktur workshop Anda.
🚀 Welcome to Way Back Home!
Enter event code (from QR/slide): devfest-nyc-26
Validating event...
✓ Connected to: DevFest NYC 2026
Jika Anda belajar sendiri: Masukkan sandbox untuk bergabung ke lingkungan pembelajaran publik.
🚀 Welcome to Way Back Home!
Enter event code (from QR/slide): sandbox
Validating event...
✓ Connected to: Way Back Home Sandbox
Memilih Nama Penjelajah Anda
Pilih nama unik untuk penjelajah Anda. Berikut tampilan Anda di peta dunia dan papan peringkat.
Choose your explorer name: AstroAyo
✓ Username available!
Jika nama yang Anda pilih sudah digunakan oleh peserta lain di acara yang sama:
Choose your explorer name: SpaceExplorer
⚠️ That name is taken. Try another.
Choose your explorer name: SpaceExplorer42
✓ Username available!
Penyiapan Selesai
Setelah selesai, Anda akan melihat konfirmasi:
Initializing your explorer profile...
✓ Environment configured!
Explorer ID: a1b2c3d4
Starting coordinates: (47, 23)
Next: cd level_0 && python customize.py
Buka Level 0
Sekarang buka direktori Level 0 (dependensi Anda sudah diinstal dari Modul 2):
cd level_0
Memeriksa Konfigurasi Anda
Lihat apa yang disimpan (config.json ada di root project):
cat ../config.json
{
"event_code": "devfest-nyc-26",
"event_name": "DevFest NYC 2026",
"username": "AstroAyo",
"participant_id": "a1b2c3d4",
"starting_x": 47,
"starting_y": 23,
"api_base": "https://api.waybackhome.dev",
"project_id": "your-project-id"
}
File konfigurasi ini akan digunakan oleh skrip berikutnya untuk mengidentifikasi Anda ke jaringan penyelamat.
Yang Baru Saja Anda Selesaikan
✓ Terhubung ke Mission Control API
✓ Mencadangkan nama penjelajah unik Anda
✓ Menerima ID peserta dan koordinat awal Anda
✓ Konfigurasi disimpan untuk langkah-langkah berikutnya
Berikutnya: Sesuaikan tampilan penjelajah Anda.
Menyesuaikan Penjelajah Anda
Durasi: 1 menit
Menjalankan Skrip Penyesuaian
Sebelum membuat avatar, Anda akan membuat beberapa pilihan tentang tampilan penjelajah Anda:
python customize.py
Pilih Warna Jas Anda
Pilih warna untuk pakaian luar angkasa penjelajah Anda:
🎨 Let's create your explorer identity!
Select suit color:
1. Deep Blue
2. Crimson Red
3. Forest Green
4. Royal Purple
5. Solar Gold
6. Silver
Choice [1-6, default=6]: 1
✓ Deep Blue selected
Deskripsikan Penjelajah Anda (Opsional)
Anda dapat memberikan deskripsi singkat tentang penampilan penjelajah Anda, atau menekan Enter untuk penetapan acak:
Brief description of your explorer (or Enter for random):
Example: 'short dark hair, glasses, friendly smile'
> short dark hair, glasses, determined expression
✓ Preferences saved!
Jika Anda menekan Enter tanpa mengetik apa pun, Anda akan mendapatkan sifat acak:
>
✓ Random traits: confident expression, short styled hair
Konfigurasi Diperbarui
Preferensi Anda kini telah disimpan:
✓ Preferences saved!
Next: Open generator.py and follow the codelab instructions
Then run: python create_identity.py
Verifikasi konfigurasi yang diperbarui:
cat ../config.json
Anda akan melihat preferensi Anda ditambahkan:
{
"event_code": "devfest-nyc-26",
"event_name": "DevFest NYC 2026",
"username": "AstroAyo",
"participant_id": "a1b2c3d4",
"starting_x": 47,
"starting_y": 23,
"api_base": "https://api.waybackhome.dev",
"project_id": "your-project-id",
"suit_color": "deep blue with silver accents",
"appearance": "short dark hair, glasses, determined expression"
}
Yang Baru Saja Anda Selesaikan
✓ Memilih warna setelan Anda
✓ Menentukan tampilan penjelajah Anda
✓ Konfigurasi siap untuk pembuatan gambar
Berikutnya: Acara utama—menulis kode pembuatan gambar.
Membangun Generator Avatar
Durasi: 4 menit
Ini adalah modul pembelajaran inti. Anda akan menulis kode Python yang menghasilkan avatar penjelajah unik Anda menggunakan kemampuan pembuatan gambar multi-turn Gemini (Nano Banana).
Membuka File Generator
Buka avatar generator di Cloud Shell Editor:
cloudshell edit generator.py
Atau klik Open Editor di Cloud Shell, lalu buka generator.py di folder level_0.
Memahami Struktur File
File ini memiliki kode awal dan tiga bagian placeholder tempat Anda akan menambahkan implementasi:
"""
Level 0: Avatar Generator
This module generates your unique space explorer avatar using
multi-turn image generation with Gemini (Nano Banana) for
character consistency across portrait and icon.
"""
from google import genai
from google.genai import types
from PIL import Image
import json
import os
import io
# Load configuration from setup (config.json is in project root)
CONFIG_PATH = "../config.json"
with open(CONFIG_PATH) as f:
config = json.load(f)
USERNAME = config["username"]
SUIT_COLOR = config["suit_color"]
APPEARANCE = config["appearance"]
# Initialize the Gemini client for Vertex AI
client = genai.Client(
vertexai=True,
project=os.environ.get("GOOGLE_CLOUD_PROJECT", config.get("project_id")),
location="us-central1"
)
def generate_explorer_avatar() -> dict:
"""
Generate portrait and icon using multi-turn chat for consistency.
The key technique here is using a CHAT SESSION rather than independent
API calls. This allows Gemini to "remember" the character it created
in the first turn, ensuring the icon matches the portrait.
Returns:
dict with portrait_path and icon_path
"""
# MODULE_5_STEP_1_CREATE_CHAT_SESSION
# TODO: Create a chat session for multi-turn generation
chat = None # Replace this line
# MODULE_5_STEP_2_GENERATE_PORTRAIT
# TODO: Generate the explorer portrait
portrait_image = None # Replace this section
# MODULE_5_STEP_3_GENERATE_ICON
# TODO: Generate a consistent map icon
icon_image = None # Replace this section
return {
"portrait_path": "outputs/portrait.png",
"icon_path": "outputs/icon.png"
}
if __name__ == "__main__":
# Create outputs directory if it doesn't exist
os.makedirs("outputs", exist_ok=True)
print(f"Generating avatar for {USERNAME}...")
result = generate_explorer_avatar()
print(f"✅ Avatar created!")
print(f" Portrait: {result['portrait_path']}")
print(f" Icon: {result['icon_path']}")
Anda akan mengganti tiga bagian TODO dengan penerapan Anda.
Langkah 1: Buat Sesi Chat
Temukan placeholder MODULE_5_STEP_1_CREATE_CHAT_SESSION dan ganti baris chat = None # Replace this line dengan:
# MODULE_5_STEP_1_CREATE_CHAT_SESSION
# Create a chat session to maintain character consistency across generations.
# The chat session preserves context between turns, so Gemini "remembers"
# what it generated and can create consistent variations.
chat = client.chats.create(
model="gemini-2.5-flash-image", # Nano Banana - Gemini with image generation
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"]
)
)
Langkah 2: Buat Foto Potret
Temukan MODULE_5_STEP_2_GENERATE_PORTRAIT dan ganti portrait_image = None # Replace this section dengan kode berikut:
# MODULE_5_STEP_2_GENERATE_PORTRAIT
# First turn: Generate the explorer portrait.
# This establishes the character that will be referenced in subsequent turns.
portrait_prompt = f"""Create a stylized space explorer portrait.
Character appearance: {APPEARANCE}
Name on suit patch: "{USERNAME}"
Suit color: {SUIT_COLOR}
CRITICAL STYLE REQUIREMENTS:
- Digital illustration style, clean lines, vibrant saturated colors
- Futuristic but weathered space suit with visible mission patches
- Background: Pure solid white (#FFFFFF) - absolutely no gradients, patterns, or elements
- Frame: Head and shoulders only, 3/4 view facing slightly left
- Lighting: Soft diffused studio lighting, no harsh shadows
- Expression: Determined but approachable
- Art style: Modern animated movie character portrait (similar to Pixar or Dreamworks style)
The white background is essential - the avatar will be composited onto a map."""
print("🎨 Generating your portrait...")
portrait_response = chat.send_message(portrait_prompt)
# Extract the image from the response.
# Gemini returns a response with multiple "parts" - we need to find the image part.
portrait_image = None
for part in portrait_response.candidates[0].content.parts:
if part.inline_data is not None:
# Found the image! Convert from bytes to PIL Image and save.
image_bytes = part.inline_data.data
portrait_image = Image.open(io.BytesIO(image_bytes))
portrait_image.save("outputs/portrait.png")
break
if portrait_image is None:
raise Exception("Failed to generate portrait - no image in response")
print("✓ Portrait generated!")
Langkah 3: Buat Ikon Peta
Temukan MODULE_5_STEP_3_GENERATE_ICON dan ganti icon_image = None # Replace this section dengan:
# MODULE_5_STEP_3_GENERATE_ICON
# Second turn: Generate a consistent icon for the map.
# Because we're in the same chat session, Gemini remembers the character
# from the portrait and will maintain visual consistency.
icon_prompt = """Now create a circular map icon of this SAME character.
CRITICAL REQUIREMENTS:
- SAME person, SAME face, SAME expression, SAME suit — maintain perfect consistency with the portrait
- Tighter crop: just the head and very top of shoulders
- Background: Pure solid white (#FFFFFF)
- Optimized for small display sizes (will be used as a 64px map marker)
- Keep the exact same art style, colors, and lighting as the portrait
- Square 1:1 aspect ratio
This icon must be immediately recognizable as the same character from the portrait."""
print("🖼️ Creating map icon...")
icon_response = chat.send_message(icon_prompt)
# Extract the icon image from the response
icon_image = None
for part in icon_response.candidates[0].content.parts:
if part.inline_data is not None:
image_bytes = part.inline_data.data
icon_image = Image.open(io.BytesIO(image_bytes))
icon_image.save("outputs/icon.png")
break
if icon_image is None:
raise Exception("Failed to generate icon - no image in response")
print("✓ Icon generated!")
Kode yang Anda Selesaikan
Setelah menambahkan ketiga bagian, fungsi generate_explorer_avatar() Anda akan terlihat seperti ini:
def generate_explorer_avatar() -> dict:
"""
Generate portrait and icon using multi-turn chat for consistency.
The key technique here is using a CHAT SESSION rather than independent
API calls. This allows Gemini to "remember" the character it created
in the first turn, ensuring the icon matches the portrait.
Returns:
dict with portrait_path and icon_path
"""
# MODULE_5_STEP_1_CREATE_CHAT_SESSION
# Create a chat session to maintain character consistency across generations.
# The chat session preserves context between turns, so Gemini "remembers"
# what it generated and can create consistent variations.
chat = client.chats.create(
model="gemini-2.5-flash-image", # Nano Banana - Gemini with image generation
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"]
)
)
# MODULE_5_STEP_2_GENERATE_PORTRAIT
# First turn: Generate the explorer portrait.
# This establishes the character that will be referenced in subsequent turns.
portrait_prompt = f"""Create a stylized space explorer portrait.
Character appearance: {APPEARANCE}
Name on suit patch: "{USERNAME}"
Suit color: {SUIT_COLOR}
CRITICAL STYLE REQUIREMENTS:
- Digital illustration style, clean lines, vibrant saturated colors
- Futuristic but weathered space suit with visible mission patches
- Background: Pure solid white (#FFFFFF) - absolutely no gradients, patterns, or elements
- Frame: Head and shoulders only, 3/4 view facing slightly left
- Lighting: Soft diffused studio lighting, no harsh shadows
- Expression: Determined but approachable
- Art style: Modern animated movie character portrait (similar to Pixar or Dreamworks style)
The white background is essential - the avatar will be composited onto a map."""
print("🎨 Generating your portrait...")
portrait_response = chat.send_message(portrait_prompt)
# Extract the image from the response.
# Gemini returns a response with multiple "parts" - we need to find the image part.
portrait_image = None
for part in portrait_response.candidates[0].content.parts:
if part.inline_data is not None:
# Found the image! Convert from bytes to PIL Image and save.
image_bytes = part.inline_data.data
portrait_image = Image.open(io.BytesIO(image_bytes))
portrait_image.save("outputs/portrait.png")
break
if portrait_image is None:
raise Exception("Failed to generate portrait - no image in response")
print("✓ Portrait generated!")
# MODULE_5_STEP_3_GENERATE_ICON
# Second turn: Generate a consistent icon for the map.
# Because we're in the same chat session, Gemini remembers the character
# from the portrait and will maintain visual consistency.
icon_prompt = """Now create a circular map icon of this SAME character.
CRITICAL REQUIREMENTS:
- SAME person, SAME face, SAME expression, SAME suit — maintain perfect consistency with the portrait
- Tighter crop: just the head and very top of shoulders
- Background: Pure solid white (#FFFFFF)
- Optimized for small display sizes (will be used as a 64px map marker)
- Keep the exact same art style, colors, and lighting as the portrait
- Square 1:1 aspect ratio
This icon must be immediately recognizable as the same character from the portrait."""
print("🖼️ Creating map icon...")
icon_response = chat.send_message(icon_prompt)
# Extract the icon image from the response
icon_image = None
for part in icon_response.candidates[0].content.parts:
if part.inline_data is not None:
image_bytes = part.inline_data.data
icon_image = Image.open(io.BytesIO(image_bytes))
icon_image.save("outputs/icon.png")
break
if icon_image is None:
raise Exception("Failed to generate icon - no image in response")
print("✓ Icon generated!")
return {
"portrait_path": "outputs/portrait.png",
"icon_path": "outputs/icon.png"
}
Menyimpan File Anda
Pastikan untuk menyimpan generator.py:
- Cloud Shell Editor: Ctrl+S (Windows/Linux) atau Cmd+S (Mac)
- vim: Tekan Escape, lalu ketik
:wqdan Enter
Yang Baru Saja Anda Buat
✓ Membuat sesi chat untuk pembuatan gambar multi-turn
✓ Membuat perintah yang mendetail untuk pembuatan potret dengan batasan gaya
✓ Membuat ikon peta yang konsisten menggunakan konteks percakapan
✓ Mempelajari cara mengurai data gambar dari respons Gemini
Konsep Utama yang Dikuasai:
| Konsep | Yang Anda Pelajari |
|---|---|
| Sesi Chat | client.chats.create() mempertahankan konteks di beberapa giliran |
| Modalitas Respons | ["TEXT", "IMAGE"] memungkinkan pembuatan gambar dalam respons |
| Struktur Perintah | Subjek → Variabel → Gaya → Batasan Teknis |
| Konsistensi Karakter | Sesi chat yang sama = karakter yang sama di seluruh gambar |
| Penguraian Respons | Mengekstrak gambar dari inline_data di bagian respons |
Berikutnya: Jalankan kode Anda dan lihat diri Anda di peta.
Buat dan Daftarkan
Durasi: 2 menit
Menetapkan Project ID Anda
Pastikan project ID Anda tersedia sebagai variabel lingkungan:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
Menjalankan Pembuat Identitas
Sekarang jalankan skrip utama yang mengatur pembuatan, upload, dan pendaftaran:
python create_identity.py
Anda akan melihat progres pembuatan secara real time:
🚀 Creating identity for AstroAyo...
🎨 Generating your portrait...
✓ Portrait generated!
🖼️ Creating map icon...
✓ Icon generated!
☁️ Uploading to mission database...
✓ Avatar uploaded!
📍 Registering with rescue network...
✓ Registration complete!
╔═══════════════════════════════════════════════════════════════╗
║ ✅ IDENTITY CONFIRMED! ║
╠═══════════════════════════════════════════════════════════════╣
║ ║
║ Explorer: AstroAyo ║
║ Location: (47, 23) — unconfirmed ║
║ ║
║ 🗺️ You're now on the map! ║
║ https://waybackhome.dev/e/devfest-nyc-26 ║
║ ║
║ NEXT: Proceed to Level 1 to pinpoint your exact location! ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
Melihat Avatar yang Dibuat
Lihat gambar yang dibuat secara lokal:
# List the generated files
ls -la outputs/
# Download to view on your local machine
cloudshell download outputs/portrait.png
cloudshell download outputs/icon.png
Atau, lihat langsung di Cloud Shell Editor dengan membuka folder outputs/ dan mengklik file gambar.
Potret dan ikon yang dihasilkan akan terlihat seperti gambar berikut:
![]()
Lihat Diri Anda di Peta!
Buka URL peta dunia yang ditampilkan di output Anda:
https://waybackhome.dev/e/{your-event-code}
Contoh: https://waybackhome.dev/e/devfest-nyc-26
Temukan avatar Anda di peta. Anda akan melihat:
- Ikon Anda menandai posisi Anda di permukaan planet
- Nama penjelajah Anda sebagai label di bawah ikon Anda
- Suar redup berdenyut perlahan di sekitar penanda Anda
![]()
Klik penanda Anda untuk melihat potret lengkap Anda di kartu detail.
Tidak Puas dengan Avatar Anda? Buat ulang!
Jika ingin avatar yang berbeda, Anda dapat membuatnya ulang:
# Option 1: Change your appearance settings first
python customize.py
# Option 2: Just regenerate with current settings
python create_identity.py
Setiap kali Anda menjalankan create_identity.py, avatar yang sama sekali baru akan dibuat (sesi chat baru = karakter baru) dan pendaftaran Anda akan diperbarui. Jangan ragu untuk melakukan iterasi hingga Anda puas dengan hasilnya.
Pemecahan masalah
Yang Baru Saja Anda Selesaikan
✓ Membuat potret penjelajah unik Anda
✓ Membuat ikon peta yang konsisten
✓ Mengupload aset ke Mission Control
✓ Mendaftarkan identitas Anda ke jaringan penyelamat
✓ Muncul di peta dunia live.
Selamat, penjelajah! Anda kini berada di jaringan penyelamatan. Beacon Anda aktif (meskipun redup), dan korban selamat lainnya dapat melihat Anda di peta.
Kesimpulan
Durasi: 1 menit
Yang Anda Buat
Hanya dalam 10 menit, Anda telah membuat sistem pembuatan avatar lengkap menggunakan pembuatan gambar AI multi-turn:
┌─────────────────────────────────────────────────────────────┐
│ Your Creation │
├─────────────────────────────────────────────────────────────┤
│ │
│ 📝 Input 🖼️ Output │
│ ────────── ──────── │
│ • Explorer name • Stylized portrait │
│ • Suit color • Consistent map icon │
│ • Appearance description • Live map presence │
│ │
├─────────────────────────────────────────────────────────────┤
│ │
│ 🧠 Techniques You Used │
│ ────────────────────── │
│ • Multi-turn chat sessions for character consistency │
│ • Structured prompt engineering with style constraints │
│ • Response parsing to extract generated images │
│ • API integration for cloud registration │
│ │
└─────────────────────────────────────────────────────────────┘
Poin-Poin Penting
| Pelajaran | Mengapa Hal Ini Penting |
|---|---|
| Sesi chat mempertahankan konteks | Penting untuk menghasilkan karakter yang konsisten di beberapa gambar tanpa penyimpangan variasi |
| Struktur perintah penting | Batasan yang jelas (latar belakang putih, gaya tertentu, pembingkaian) menghasilkan hasil yang dapat diprediksi dan siap produksi |
| Multi-turn mengungguli panggilan independen | Setiap pesan dalam percakapan dibuat berdasarkan konteks sebelumnya, sehingga memungkinkan peningkatan dan konsistensi secara berulang |
| Modalitas respons mengontrol output | Setelan ["TEXT", "IMAGE"] diperlukan untuk pembuatan gambar—tanpa setelan ini, Anda hanya akan mendapatkan teks |
Ringkasan Biaya
Untuk level ini, Anda membuat 2 gambar menggunakan Gemini 2.5 Flash (Nano Banana):
| Item | Token | Biaya |
|---|---|---|
| Potret (1024×1024) | ~1.290 token output | ~$0,039 |
| Ikon (1024×1024) | ~1.290 token output | ~$0,039 |
| Total | ~2.580 token | ~$0,08 |
Perjalanan Berlanjut
Identitas penjelajah Anda telah dikonfirmasi, tetapi ada masalah: lokasi Anda belum dikonfirmasi.
Lihat peta dunia—cahaya suar Anda redup, berkedip perlahan. Jaringan penyelamat tahu bahwa Anda ada, tetapi mereka tidak tahu persis lokasi Anda. Anda dapat berada di mana saja di dalam wilayah luas permukaan planet.
Di Level 1: Pinpoint Your Location, Anda akan:
- Bangun sistem multi-agen menggunakan Agent Development Kit (ADK) Google
- Membuat server MCP untuk analisis geologi, botani, dan astronomi
- Memproses input multimodal (gambar dari lokasi kecelakaan Anda)
- Membuat peta topografi lokasi terkonfirmasi Anda menggunakan AI
- Nyalakan suar Anda sungguhan — agar tim penyelamat dapat menemukan Anda.
Level 1 memperkenalkan konsep yang jauh lebih canggih: orkestrasi multi-agen, Model Context Protocol (MCP), dan pola deployment produksi. Anda akan beralih dari menggunakan satu fitur model ke membangun sistem agentik yang lengkap.
Membersihkan (Opsional)
Jika Anda ingin membersihkan file lokal (dijalankan dari direktori level_0):
rm -rf outputs/
rm ../config.json
deactivate # Exit virtual environment
Pendaftaran Anda dengan jaringan penyelamat tetap ada—Anda akan tetap muncul di peta meskipun setelah menghapus file lokal. Gambar disimpan di cloud, bukan secara lokal.
Resource
- Dokumentasi Pembuatan Gambar Gemini
- Panduan Rekayasa Perintah untuk Gambar
- Blog Pengumuman Nano Banana
- Repositori Way Back Home
- Level 1: Menentukan Lokasi Anda
Beacon Anda menunggu konfirmasi. Sampai jumpa di Level 1, penjelajah. 🚀
Bonus: Avatar Berbasis Foto (Opsional)
Durasi: 3 menit
Kapan Harus Menggunakan Foto ke Avatar
Anda mungkin lebih memilih pendekatan ini jika:
- Anda ingin avatar Anda benar-benar menyerupai Anda
- Anda memiliki foto tertentu yang ingin Anda beri gaya
- Anda ingin menjelajahi kemampuan transformasi gambar ke gambar Gemini
Cara Kerjanya
Daripada membuat karakter hanya dari deskripsi teks, Anda dapat memberikan foto dan meminta Gemini untuk mengubahnya sambil mempertahankan kemiripan orang tersebut:
![]()
Upload Foto Anda
Pertama, upload foto ke Cloud Shell:
- Di Cloud Shell, klik menu tiga titik (⋮) di toolbar terminal
- Pilih Upload
- Pilih foto close-up yang jelas (JPEG atau PNG)
- Catat jalur yang diupload (misalnya,
/home/your-username/my_photo.jpg)
Mengubah Generator
Untuk menggunakan foto, Anda akan mengubah langkah pembuatan potret di generator.py. Ganti perintah hanya teks dengan perintah multimodal yang menyertakan foto Anda:
# MODULE_5_STEP_2_GENERATE_PORTRAIT (Photo-based version)
# Load your photo
photo_path = "/home/your-username/my_photo.jpg" # Update this path!
user_photo = Image.open(photo_path)
# Convert photo to bytes for the API
photo_buffer = io.BytesIO()
user_photo.save(photo_buffer, format="JPEG")
photo_bytes = photo_buffer.getvalue()
portrait_prompt = f"""Transform this person into a stylized space explorer portrait.
PRESERVE from the original photo:
- The person's facial features, face shape, and likeness
- Their general expression and personality
- Any distinctive features (glasses, facial hair, etc.)
TRANSFORM with this style:
- Digital illustration style, clean lines, vibrant saturated colors
- Add a futuristic space suit with the name "{USERNAME}" on a shoulder patch
- Suit color: {SUIT_COLOR}
- Background: Pure solid white (#FFFFFF) - no gradients or elements
- Frame: Head and shoulders, 3/4 view
- Lighting: Soft diffused studio lighting
- Art style: Modern animated movie character (Pixar/Dreamworks aesthetic)
The result should be clearly recognizable as THIS specific person, but illustrated as a heroic space explorer."""
print("🎨 Transforming your photo into an explorer portrait...")
# Send both the prompt AND the image
portrait_response = chat.send_message([
portrait_prompt,
types.Part.from_bytes(data=photo_bytes, mime_type="image/jpeg")
])
# Rest of the extraction code stays the same...
Konsistensi Multi-Turn Masih Berfungsi
Pendekatan multi-turn berfungsi dengan cara yang sama dengan pembuatan berbasis foto:
- Putaran 1: Foto + perintah → Potret bergaya (kemiripan Anda, diilustrasikan)
- Turn 2: "Buat ikon karakter YANG SAMA ini" → Ikon yang konsisten
Karena sesi chat mengingat versi bergaya yang dibuatnya (bukan foto asli), ikon akan cocok dengan potret yang diubah dengan sempurna.
Pertimbangan Privasi
Coba di Vertex AI Studio
Anda juga dapat bereksperimen dengan transformasi foto secara interaktif di Konsol Google Cloud sebelum menulis kode:
- Buka Vertex AI Studio
- Pilih model Gemini dengan kemampuan gambar
- Upload foto Anda menggunakan tombol lampiran
- Masukkan perintah transformasi
- Lakukan iterasi pada gaya hingga Anda puas dengan hasilnya
- Download hasilnya dan simpan sebagai
outputs/portrait.png - Jalankan:
python create_identity.py --skip-generation(jika tanda ini didukung) untuk mengupload gambar yang dibuat secara manual
Pendekatan interaktif ini sangat bagus untuk bereksperimen dengan perintah dan melihat hasilnya secara real-time sebelum menerapkan kode.
Yang Anda Pelajari (Bonus)
✓ Cara menggunakan transformasi gambar ke gambar dengan Gemini
✓ Mengirim konten multimodal (teks + gambar) dalam satu pesan
✓ Mempertahankan kemiripan saat menerapkan transfer gaya artistik
✓ Pertimbangan privasi untuk pembuatan AI berbasis foto
