Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
R

RedInk

> 前端框架
Open source

Red Ink - A one-stop Xiaohongshu image-and-text generator based on the Nano Banana Pro, "One Sentence, One Image: Generate Xiaohongshu Text and Images."

5.4K stars0 likes0 views
WebsiteGitHub

About

Red Ink - A one-stop Xiaohongshu image-and-text generator based on the Nano Banana Pro, "One Sentence, One Image: Generate Xiaohongshu Text and Images."

--- ## ✨ Showcase ### Type One Sentence, Get Complete Image & Text Posts Step 1: Smart Outline Generation
**Features:** - ✏️ Edit content for each page - Reorder pages (not recommended) - ✨ Custom description per page (highly recommended) Step 2: Cover Page Generation
**Cover Highlights:** - Matches your personal style - Accurate text rendering - Visually consistent and coordinated Step 3: Batch Content Page Generation
**Generation Notes:** - ⚡ Concurrent generation for all pages (up to 15 by default) - ⚠️ Disable high concurrency in settings if your API doesn't support it - Regenerate individual pages you're not satisfied with --- ## ️ Tech Stack
### Backend | Technology | Description | |------|------| | **Language** | Python 3.11+ | | **Framework** | Flask | | **Package Manager** | uv | | **Text AI** | Gemini 3 | | **Image AI** | Nano Banana Pro | ### Frontend | Technology | Description | |------|------| | **Framework** | Vue 3 + TypeScript | | **Build Tool** | Vite | | **State Management** | Pinia | | **Styling** | Modern CSS |
--- ## Deployment ### Option 1: Docker (Recommended) **The simplest way — one command to start:** ```bash docker run -d -p 12398:12398 -v ./history:/app/history -v ./output:/app/output histonemax/redink:latest ``` Visit http://localhost:12398 and configure your API Key in the **Settings** page. **Using docker-compose (optional):** Download [docker-compose.yml](https://github.com/HisMax/RedInk/blob/main/docker-compose.yml), then: ```bash docker-compose up -d ``` **Docker Notes:** - The container does not include any API Keys — configure them in the web UI - Use `-v ./history:/app/history` to persist history - Use `-v ./output:/app/output` to persist generated images - Optional: mount custom config `-v ./text_providers.yaml:/app/text_providers.yaml` --- ### Option 2: Local Development **Prerequisites:** - Python 3.11+ - Node.js 18+ - pnpm - uv ### 1. Clone the Repository ```bash git clone https://github.com/HisMax/RedInk.git cd RedInk ``` ### 2. Configure API Services Copy the config templates: ```bash cp text_providers.yaml.example text_providers.yaml cp image_providers.yaml.example image_providers.yaml ``` Edit the config files with your API Key and service settings, or configure them later via the **Settings** page in the web UI. ### 3. Install Backend Dependencies ```bash uv sync ``` ### 4. Install Frontend Dependencies ```bash cd frontend pnpm install ``` ### 5. Start the Services #### One-Click Start (Recommended) Run the start script to automatically install dependencies and launch both frontend and backend: - **macOS**: `start.sh` or double-click `scripts/start-macos.command` - **Linux**: `./start.sh` - **Windows**: Double-click `start.bat` The browser will automatically open at http://localhost:5173 #### Manual Start **Start Backend:** ```bash uv run python -m backend.app ``` Visit: http://localhost:12398 **Start Frontend:** ```bash cd frontend pnpm dev ``` Visit: http://localhost:5173 --- ## Configuration ### Configuration Methods The project supports two configuration methods: 1. **Web UI (Recommended)**: Visual configuration via the Settings page after starting the service 2. **YAML Files**: Edit config files directly ### Text Generation Config Config file: `text_providers.yaml` ```yaml # Active provider active_provider: openai providers: # OpenAI or compatible API openai: type: openai_compatible api_key: sk-xxxxxxxxxxxxxxxxxxxx base_url: https://api.openai.com/v1 model: gpt-4o # Google Gemini (native API) gemini: type: google_gemini api_key: AIzaxxxxxxxxxxxxxxxxxxxxxxxxx model: gemini-2.0-flash ``` ### Image Generation Config Config file: `image_providers.yaml` ```yaml # Active provider active_provider: gemini providers: # Google Gemini image generation gemini: type: google_genai api_key: AIzaxxxxxxxxxxxxxxxxxxxxxxxxx model: gemini-3-pro-image-preview high_concurrency: false # OpenAI compatible API openai_image: type: image_api api_key: sk-xxxxxxxxxxxxxxxxxxxx base_url: https://your-api-endpoint.com model: dall-e-3 high_concurrency: false ``` ### High Concurrency Mode - **Off (default)**: Images generated one by one — suitable for GCP $300 trial accounts or rate-limited APIs - **On**: Images generated in parallel (up to 15 simultaneously) — faster but requires API support for high concurrency ⚠️ **Not recommended for GCP $300 trial accounts** — may trigger rate limits and cause generation failures. --- ## ⚠️ Notes 1. **API Quota Limits**: - Be aware of Gemini and image generation API call quotas - GCP trial accounts should keep high concurrency disabled 2. **Generation Time**: - Outline generation usually takes 15-30 seconds - Image generation takes time — please be patient (don't leave the page) --- ## Contributing Issues and Pull Requests are welcome! If this project helps you, please give it a Star ⭐ --- ## Changelog ### v1.4.3 (2026-06-30) - ✨ Default outline length changed to 5 pages when the user does not specify a page count - ✨ Added clearer outline generation loading copy: "please wait, this step usually takes 15-30 seconds" - ️ Modularized image provider logic with reusable provider policy, API client, response extractor, rate limiter, and history image merger - Fixed GPT Image and Nano Banana compatible image APIs by omitting `response_format` by default and supporting `b64_json`, data URLs, and temporary image URLs - Added per-record image generation recovery so refreshes or retries reuse existing images instead of spending upstream quota again - Protected history records from empty image overwrites and status regressions; history reads can self-heal from task image folders - ✨ Added structured Problem Details-style API errors and reusable frontend error cards with copyable diagnostics - Fixed provider connection tests for reasoning models that return `reasoning_content` or reasoning tokens without final `content` - Added backend coverage for image API compatibility, history merging, structured errors, cached generation, and reasoning-model connection tests ### v1.4.2 (2026-03-15) - ✨ Added English README as default with language toggle (中文/English) - ✨ Added AI-generated English banner and showcase grid images - ✨ Added Claude Opus 4.5 to acknowledgments - ✨ Added shields.io badges (Stars, License, Docker Pulls, Release) - ✨ Added GitHub Issue/PR templates for standardized contributions - ✨ Added CONTRIBUTING.md and SECURITY.md - Fixed `rstrip('/v1')` incorrectly stripping URL characters (e.g. `api.openai.com` → `api.openai.co`) — 5 occurrences across backend - Fixed image API test connection failing for chat-based endpoints (Doubao/Volcengine) by using configured endpoint_type instead of hardcoded `/v1/models` - Fixed bare `except:` clause replaced with `except Exception:` in history service - Fixed SSE stream reader not released on error in frontend API layer (resource leak) - Fixed 5 uncleared `setTimeout` calls in ContentDisplay component (memory leak) - Fixed duplicate image regeneration requests by tracking in-progress indices - Fixed GenerateView redirect timer not cleared on component unmount ### v1.4.1 (2025-12-29) - ✨ Added one-click start scripts for macOS/Linux/Windows - ✨ Added copywriting generation: auto-generate titles, body text, and tags - Fixed history saving: immediate save after outline generation, auto-save on edit (300ms debounce) - Optimized navigation: force-save unsaved changes before clicking "Start Generation" - Unified startup script port display to 12398 - Cleaned up unused retry decorator code in backend generators - Fixed frontend CSS variable reference issues - Optimized checkHistoryExists API performance with dedicated endpoint - Standardized recordId assignment using setRecordId() method ### v1.4.0 (2025-11-30) - ️ Backend refactored: split monolithic routes into modular blueprints (history, images, generation, outline, config) - ️ Frontend refactored: extracted reusable components (ImageGalleryModal, OutlineModal, ShowcaseBackground, etc.) - ✨ Optimized homepage design, removed redundant content blocks - ✨ Background image preloading with fade-in animation for better loading experience - ✨ History persistence support (Docker deployment) - Fixed history preview and outline viewing - Optimized Modal component visibility control - Added 65 backend unit tests ### v1.3.0 (2025-11-26) - ✨ Added Docker support for one-click deployment - ✨ Published official Docker image to Docker Hub: `histonemax/redink` - Flask auto-detects frontend build artifacts for single-container deployment - Docker image includes blank config templates to protect API Key security - Updated README with Docker deployment instructions ### v1.2.0 (2025-11-26) - ✨ Added copyright info display on all pages - ✨ Improved image regeneration with single image redraw support - ✨ Regenerated images maintain style consistency with full context (cover, outline, user input) - ✨ Fixed image cache issues — regenerated images refresh immediately - ✨ Unified text generation client supporting Google Gemini and OpenAI-compatible APIs with auto-switching - ✨ Added web UI configuration for visual API provider management - ✨ Added high concurrency mode toggle for different API quotas - ✨ API Key masking for security - ✨ Auto-save configuration with instant effect - Adjusted default max_output_tokens to 8000 for broader model compatibility - Optimized frontend routing and page layout for better UX - Simplified config file structure, removed redundant parameters - Optimized history image display with thumbnails to save bandwidth - History regeneration auto-loads cover image from filesystem as reference - Fixed missing `store.updateImage` method causing regeneration failure - Fixed image URL concatenation error during history loading - Fixed raw image parameter handling in download function - Fixed image loading 500 error --- ## Community & Support - **GitHub Issues**: [https://github.com/HisMax/RedInk/issues](https://github.com/HisMax/RedInk/issues) ### Contact the Author - **Email**: [email protected] - **WeChat**: Histone2024 (please state your purpose) - **GitHub**: [@HisMax](https://github.com/HisMax) ### Support the Project ## Star History --- ## License ### Personal Use - CC BY-NC-SA 4.0 This project is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) **You are free to:** - ✅ **Personal Use** — for learning, research, and personal projects - ✅ **Share** — copy and redistribute the material in any medium or format - ✅ **Adapt** — remix, transform, and build upon the material **Under the following terms:** - **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made - **NonCommercial** — You may not use the material for commercial purposes - **ShareAlike** — If you remix, transform, or build upon the material, you must distribute your contributions under the same license ### Commercial License If you wish to use this project for **commercial purposes** (including but not limited to): - Providing paid services - Integrating into commercial products - Operating as a SaaS service - Other for-profit uses **Please contact the author for a commercial license:** - Email: [email protected] - WeChat: Histone2024 (please note "Commercial License Inquiry") The author will provide flexible commercial licensing options based on your sp

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Pythonaiaigccontent-generatordocker

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category前端框架
PricingOpen source

> Related tools

R
React
用于构建用户界面的 JavaScript 库
V
Vue.js
渐进式 JavaScript 框架
N
Next.js
基于 React 的全栈 Web 框架