Kembali ke Rumah - Level 0: Mengidentifikasi Diri Anda


Sinyal Darurat

Durasi: 1 menit

Header

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.

arsitektur

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.
Tonton video

Klik Activate Cloud Shell di bagian atas Konsol Google Cloud (ikon terminal di menu navigasi kanan atas).

cloud shell

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
    id project

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

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 expressionPreferences 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 :wq dan 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:

contoh potret ikon contoh

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

contoh avatar di peta

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


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:

alur foto ke avatar

Upload Foto Anda

Pertama, upload foto ke Cloud Shell:

  1. Di Cloud Shell, klik menu tiga titik (⋮) di toolbar terminal
  2. Pilih Upload
  3. Pilih foto close-up yang jelas (JPEG atau PNG)
  4. 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:

  1. Buka Vertex AI Studio
  2. Pilih model Gemini dengan kemampuan gambar
  3. Upload foto Anda menggunakan tombol lampiran
  4. Masukkan perintah transformasi
  5. Lakukan iterasi pada gaya hingga Anda puas dengan hasilnya
  6. Download hasilnya dan simpan sebagai outputs/portrait.png
  7. 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