BlogWriter / README.md
vivekchakraverty's picture
Add grounded blog-post generator pipeline
31fa536
|
Raw
History Blame Contribute Delete
2.5 kB
---
title: BlogWriter
emoji:
colorFrom: yellow
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
short_description: Illustrated blog-post generator, exported as .docx
---
# Blog Post Generator
Turn a **topic + keywords + brief** into a fully-written, illustrated blog post exported
as a `.docx` file. The pipeline is *grounded*: instead of writing blind, it runs real web
search, ranks the sources by authority, and writes from the most authoritative pages.
## Pipeline
1. **Search-term reasoning** — an LLM turns your topic/keywords/brief into optimized queries.
2. **Web search** — a self-hosted [SearXNG](https://github.com/searxng/searxng) instance
(running inside this Space) returns the top ~25 result domains.
3. **Authority ranking** — [OpenPageRank](https://www.domcop.com/openpagerank/documentation)
scores those domains; the top 5 pages are selected.
4. **Content extraction** — main article text is extracted from those pages.
5. **Writing** — a strong LLM writes an SEO-aware post from that material, weaving your
keywords in and marking where images belong.
6. **Illustration** — image prompts are written by an LLM and rendered with
**FLUX.1 [schnell]**.
7. **Captioning** — a vision model captions each generated image.
8. **Export** — everything is assembled into a downloadable `.docx`.
## Billing
All *paid* AI calls (reasoning, writing, image generation, captioning) run through
**Hugging Face Inference Providers using the HF token you enter in the UI**, so they are
billed to **you**. Nothing is stored server-side.
Get a token at <https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained>
(needs *"Make calls to Inference Providers"* permission).
## Configuration (Space owner)
- **Secret `OPR_API_KEY`** — a free OpenPageRank API key
(<https://www.domcop.com/openpagerank/auth/signup>). Required for authority ranking.
- **Persistent storage** *(optional)* — if enabled, `/data` is used to cache search
results, scores, images and docx between runs. Without it the app still works; the cache
just lives in a local directory and is not persisted.
## Models (fixed defaults)
| Step | Model |
| --- | --- |
| Search terms & image prompts | `openai/gpt-oss-120b` |
| Blog writing | `deepseek-ai/DeepSeek-V3-0324` (fallback `Qwen/Qwen2.5-72B-Instruct`) |
| Image generation | `black-forest-labs/FLUX.1-schnell` |
| Image captioning | `Qwen/Qwen2.5-VL-72B-Instruct` |