Transform any YouTube video, audio file, PDF document, or text topic into a fully polished, SEO-optimized blog post in seconds β powered by Groq LLaMA, AssemblyAI, and Pollinations.ai FLUX.
| Feature | Description |
|---|---|
| π₯ YouTube β Blog | Paste a YouTube URL β audio is downloaded via yt-dlp β transcribed by AssemblyAI β Groq writes the blog |
| ποΈ Audio β Blog | Upload any audio file β Gemini transcribes β Groq writes the blog |
| π PDF β Blog (RAG) | Upload a PDF β stored in ChromaDB β used as context for Groq blog generation |
| βοΈ Text β Blog | Enter a topic or text β Groq generates a full blog post with SEO metadata |
| πΌοΈ AI Thumbnail | Blog images generated by Pollinations.ai (FLUX) |
| π Content Scoring | Auto-computes SEO Score, Readability Score, and Engagement Score |
| π Blog Versioning | Every generation and regeneration is saved as a versioned snapshot |
| π€ User Profiles | Auth system with custom user model, profile image, public blog listing |
| π¬ Explore & Like | Discover and like community blogs |
| π¬ Contact Form | Built-in contact messages saved to DB |
YouTube URL
β
βββΊ [yt-dlp] Download best audio (m4a/webm) β no FFmpeg needed
β
βββΊ [AssemblyAI] Transcribe audio using universal-3-pro speech model
β
βββΊ [Groq LLaMA-3.3-70B] Generate blog + SEO metadata (single API call)
β
βββΊ [Pollinations.ai FLUX] Generate blog thumbnail image
β
βββΊ [Django + SQLite] Save blog post, version, thumbnail
Text / Topic
β
βββΊ [DuckDuckGo Search] (optional) Web research context
βββΊ [ChromaDB RAG] (optional) PDF document context
β
βββΊ [Groq LLaMA-3.3-70B] Generate blog + SEO metadata (single API call)
| Package | Version | Purpose |
|---|---|---|
django |
5.0.6 | Web framework, ORM, auth |
groq |
latest | LLaMA 3.3 70B blog generation |
assemblyai |
0.59.0 | Audio transcription (universal-3-pro) |
yt-dlp |
2026.3.17 | YouTube audio download |
chromadb |
latest | Vector DB for PDF/RAG context |
PyPDF2 |
latest | PDF text extraction |
textstat |
latest | Readability score calculation |
duckduckgo-search |
latest | Web research context |
google-generativeai |
0.5.4 | Audio file transcription fallback |
youtube-transcript-api |
0.6.2 | YouTube captions (legacy route) |
python-dotenv |
1.0.1 | Environment variable management |
Pillow |
10.3.0 | Image handling |
git clone https://github.com/atul120212/GenBlog.git
cd GenBlogpython -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linuxpip install -r requirements.txt
pip install groq assemblyai yt-dlpCreate a .env file in the project root:
GEMINI_API_KEY=your_gemini_api_key_here
GROQ_API_KEY=your_groq_api_key_here
ASSEMBLYAI_API_KEY=your_assemblyai_api_key_here
CONTACT_EMAIL=your_email@example.comWhere to get free API keys:
| Service | Free Tier | Link |
|---|---|---|
| Groq | 14,400 req/day | console.groq.com |
| AssemblyAI | 100 hours/month | assemblyai.com |
| Pollinations.ai | 100% Free / No Key | pollinations.ai |
| Gemini | 1,500 req/day | aistudio.google.com/apikey |
python manage.py migratepython manage.py runserverVisit http://127.0.0.1:8000
genBlog-1/
βββ GenBlog/ # Django project config (settings, urls, wsgi)
βββ generator/ # Main app
β βββ agents.py # AI pipeline (Groq + AssemblyAI + Pollinations)
β βββ views.py # API endpoints & page views
β βββ models.py # BlogPost, CustomUser, Like, BlogVersion, Document
β βββ urls.py # URL routing
β βββ rag_service.py # ChromaDB PDF ingestion & querying
β βββ scoring.py # SEO, readability, engagement scoring
β βββ signals.py # Django signals
β βββ migrations/ # DB migrations
βββ templates/ # HTML templates
β βββ generator.html # Main blog generation UI
β βββ blog_detail.html # Blog reading page
β βββ explore.html # Community blog discovery
β βββ profile.html # User profile page
β βββ index.html # Landing page
β βββ login.html / register.html
β βββ ...
βββ media/ # Uploaded files (thumbnails, audio, PDFs)
βββ chroma_db/ # ChromaDB vector store (auto-created)
βββ requirements.txt
βββ .env # API keys (not committed to git)
βββ manage.py
| Method | URL | Description |
|---|---|---|
GET |
/ |
Landing page |
GET |
/generate |
Blog generation UI |
POST |
/generate_agent |
Main endpoint β handles all input types |
POST |
/regenerate_blog |
Edit existing blog with instruction |
POST |
/topic_view |
Legacy: text topic β blog (Groq) |
POST |
/yt_view |
Legacy: YouTube β blog |
POST |
/blog_submit |
Publish or cancel a draft blog |
GET |
/explore |
Browse all public blogs |
GET |
/blog/<slug> |
View a blog post |
POST |
/like/<post_id>/ |
Like a blog |
GET/POST |
/profile |
User profile |
GET |
/profile/<id>/ |
Public profile by ID |
POST |
/blog/update/<id>/ |
Update blog content |
GET |
/blog/delete/<id>/ |
Delete blog |
GET/POST |
/contact |
Contact form |
The entire pipeline is designed around one Groq API call per blog to maximize free-tier efficiency:
ResearchAgent (zero API calls)
βββ DuckDuckGo web search (optional)
βββ ChromaDB RAG context (optional)
BlogGenerationWorkflow (ONE Groq call)
βββ Returns: blog content (Markdown) + SEO metadata (JSON)
generate_blog_image (Pollinations.ai call, free/no key, non-blocking)
βββ Returns: PNG bytes or None (failure is silent)
Content Scoring (zero API calls, local computation):
- SEO Score β checks word count, meta tags, headings, keyword density
- Readability Score β Flesch Reading Ease via
textstat - Engagement Score β heuristic: questions, lists, bold text, exclamations
In today's crowded blogging market, beginners struggle to create quality content consistently. GenBlog empowers new bloggers by letting them:
- Convert any content format (video, audio, PDF, text) into professional blogs
- Get SEO metadata generated automatically
- Start publishing without needing writing expertise
- Iterate on drafts using AI-powered regeneration
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
This project is open source. See LICENSE for details.
Built with β€οΈ by Atul Sharma