Story Generator; tür, tema, ana olay örgüsü ve hedef kitle gibi kısa bir yapılandırmayı alır, Gemini API ile bir hikâye evreni ve bölüm planı kurar, ardından bölümleri bağlamı koruyarak üretir. Ara kayıtlar sayesinde uzun üretimlerde ilerlemeniz düzenli olarak diske yazılır; tamamlanan kitap Markdown ve mümkünse PDF olarak sunulur.
Important
Bu proje Gemini API kullanır. Üretim süresi ve maliyet; seçilen modele, bölüm sayısına ve çıktı uzunluğuna göre değişir. İlk denemenizi 2–3 bölümle yapmanız önerilir.
- Yapılandırma odaklı: Kodla uğraşmadan
theme.configüzerinden hikâyeyi yönetin. - Tutarlı evren: Karakter, konum ve olay kayıtlarını FAISS tabanlı yerel bir indeks içinde düzenler.
- Uzun biçimli üretim: Önce evreni ve taslağı kurar, sonra bölümleri sırayla yazar.
- Dayanıklı akış: API isteklerini artan bekleme süresiyle yeniden dener ve uzun çalışmalarda ara kayıt alır.
- Esnek model seçimi: Gemini modeli, sıcaklık ve token sınırı ortam değişkenleriyle değiştirilebilir.
- Çoklu çıktı: Bölüm dosyaları, birleşik kitap, taslak, JSON yedekleri ve isteğe bağlı PDF üretir.
theme.configokunur ve doğrulanır.- Ana olay örgüsü, karakterler ve konumlarla hikâye evreni oluşturulur.
- İstenen bölüm sayısına uygun bir JSON taslağı hazırlanır.
- Her bölüm, önceki bölümlerin özeti ve ilgili olaylar kullanılarak yazılır.
- Ara kayıtlar alınır; final kitap Markdown ve PDF olarak dışa aktarılır.
- Python 3.10 veya üzeri
- Bir Google AI Studio API anahtarı
- PDF çıktısı için WeasyPrint sistem bağımlılıkları veya Pandoc + XeLaTeX
git clone https://github.com/mertefekurt/Story-Generator.git
cd Story-Generator
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txtcp .env.example .env.env dosyasını açıp anahtarınızı ekleyin:
GEMINI_API_KEY=your_api_key_here
GEMINI_MODEL=gemini-2.5-flash
TEMPERATURE=0.7
MAX_TOKENS=4096Caution
.env dosyasını veya API anahtarınızı commit etmeyin. Dosya zaten .gitignore kapsamındadır.
cp theme.config theme.local.config
python story_generator.py --config theme.local.config --chapter-end 3Tam yapılandırmayı üretmek için:
python story_generator.py --config theme.local.configmacOS/Linux üzerinde etkileşimli kurulum menüsünü tercih ederseniz:
chmod +x install_and_run.sh
./install_and_run.shtheme.config, üç anlaşılır bölümden oluşur:
[Theme]
genre = Gizem
theme = Aşk
main_plot = Ejderha kanından gelen iki gencin kraliyet içindeki hikâyesi
target_audience = Yetişkin
[Structure]
chapter_count = 5
language = Türkçe
[Style]
tone = Dramatik
character_complexity = Çok Boyutlu| Alan | Açıklama | Örnek |
|---|---|---|
genre |
Hikâyenin ana türü | Fantastik, Gizem, Bilim Kurgu |
theme |
Metnin merkezindeki fikir | Dostluk, İhanet, Keşif |
main_plot |
Modelin geliştireceği çekirdek olay | Kısa ama özgün bir hikâye fikri |
target_audience |
Dil ve içerik düzeyi | Çocuklar, Genç Yetişkin, Yetişkin |
chapter_count |
Üretilecek toplam bölüm | 1–500 |
language |
Çıktı dili | Türkçe |
tone |
Anlatının duygusal yönü | Karanlık, Neşeli, Dramatik |
character_complexity |
Karakter derinliği | Basit, Karmaşık, Çok Boyutlu |
| Değişken | Varsayılan | Görevi |
|---|---|---|
GEMINI_MODEL |
gemini-2.5-flash |
İçerik üretiminde kullanılacak model |
TEMPERATURE |
0.7 |
Yaratıcılık / öngörülebilirlik dengesi |
MAX_TOKENS |
4096 |
Standart yanıt token üst sınırı |
API_MAX_RETRIES |
3 |
Başarısız API isteği için toplam deneme |
API_RETRY_DELAY |
2 |
İlk yeniden deneme bekleme süresi (saniye) |
LOG_LEVEL |
INFO |
Günlük ayrıntı seviyesi |
Kullanabileceğiniz modeller hesabınıza ve bölgenize göre değişebilir. Model adını değiştirmeden önce Gemini model kataloğunu kontrol edin.
--config PATH Yapılandırma dosyasının yolu
--api-key KEY Gemini API anahtarı (tercihen .env kullanın)
--chapter-start N Üretime başlanacak bölüm (varsayılan: 1)
--chapter-end N Üretimin biteceği bölüm (dahil)
Örneğin yalnızca 4–7. bölümleri üretmek için:
python story_generator.py \
--config theme.local.config \
--chapter-start 4 \
--chapter-end 7output/
├── bolum_001.md # Ayrı bölüm dosyaları
├── bolum_002.md
├── kitap_taslak.md # Üretim sırasında güncellenen taslak
├── kitap.md # Birleştirilmiş nihai kitap
└── kitap.pdf # PDF motoru kullanılabiliyorsa
backup/
├── universe_data.json # Karakter ve konum kayıtları
├── story_outline.json # Bölüm planı
└── vector_db_*.json # Periyodik durum yedekleri
Çalışma ayrıntıları ayrıca story_generator.log dosyasına yazılır. output/, backup/, günlükler ve yerel ayarlar Git tarafından izlenmez.
Uygulama önce WeasyPrint’i, başarısız olursa Pandoc + XeLaTeX’i dener. Markdown üretimi PDF desteğinden bağımsızdır; PDF aracı bulunmasa bile output/kitap.md oluşturulur.
macOS için yaygın bağımlılıklar:
brew install pango cairo gdk-pixbuf libffiPandoc alternatifi:
brew install pandoc --cask mactex-no-guiPDF kurulumunuzu hızlıca kontrol etmek için:
python test_pdf.pyStory-Generator/
├── assets/ README görselleri
├── .env.example Güvenli ortam değişkeni şablonu
├── install_and_run.sh Etkileşimli kurulum ve çalıştırma menüsü
├── requirements.txt Python bağımlılıkları
├── story_generator.py Ana üretim hattı
├── test_pdf.py PDF motoru kontrolü
└── theme.config Örnek hikâye yapılandırması
“Geçerli bir Gemini API anahtarı bulunamadı”
.env dosyanızın proje kökünde bulunduğunu ve GEMINI_API_KEY değerinin örnek metin olmadığını kontrol edin. Anahtarın başında/sonunda tırnak kullanmanız gerekmez.
Model bulunamadı veya erişim reddedildi
GEMINI_MODEL değerini hesabınızın erişebildiği güncel bir model adıyla değiştirin. Kullanılabilir modeller zaman içinde ve bölgeye göre farklılaşabilir.
PDF oluşmuyor
Önce python test_pdf.py komutunu çalıştırın. WeasyPrint’in sistem kütüphanelerini veya Pandoc ile XeLaTeX’i kurun. Hikâyenizin Markdown sürümü output/kitap.md içinde kullanılabilir olmaya devam eder.
Uzun üretim yarıda kesildi
output/kitap_taslak.md ile backup/ altındaki JSON dosyalarını kontrol edin. Maliyeti ve süreyi sınırlamak için --chapter-start / --chapter-end seçenekleriyle küçük aralıklar üretin.
- Üretilen metin editoryal inceleme gerektirir; olay örgüsü ve karakter tutarlılığı garanti edilmez.
- Yerel vektörler deterministik özellik temsilleridir; harici bir semantik embedding modeli kullanmaz.
- Ayrı çalıştırmalarda daha önce üretilen bölüm bağlamı otomatik olarak geri yüklenmez.
- API kotası, fiyatlandırma ve model erişimi Google hesabınıza bağlıdır.
Hata düzeltmeleri, yeni çıktı biçimleri ve anlatı tutarlılığını geliştiren katkılar memnuniyetle karşılanır:
- Depoyu fork edin ve açıklayıcı bir dal oluşturun.
- Değişikliğinizi küçük ve odaklı tutun.
python -m compileall story_generator.py test_pdf.pyile sözdizimini doğrulayın.- Değişikliğin amacı ve test adımlarıyla bir pull request açın.
Bir fikir yazın. Evreni kurun. Hikâyeyi bölüm bölüm büyütün.