- β‘ Out-of-the-Box: No External Dependencies Required & Support Vercel/Render One-Click Deployment
- β Multiple File Types: Support Text, Pdf, Docx, Excel, Image, Audio etc.
- π¦ Multiple Storage Options: Base64, Local, S3, Cloudflare R2, Min IO, Telegram CDN etc.
- π OCR Support: Extract Text from Image (Require Paddle OCR API)
- π Audio Support: Convert Audio to Text (Require Azure Speech to Text Service)
- Text
- Image (require vision models)
- Audio (require Azure Speech to Text Service)
- Docx (not support .doc)
- Pptx (not support .ppt)
- Xlsx (support .xls)
Image:
programzmh/chatnio-blob-service
docker run -p 8000:8000 programzmh/chatnio-blob-service # with environment variables # docker run -p 8000:8000 -e AZURE_SPEECH_KEY="..." -e AZURE_SPEECH_REGION="..." programzmh/chatnio-blob-service # if you are using `local` storage type, you need to mount volume (/static) to the host # docker run -p 8000:8000 -v /path/to/static:/static programzmh/chatnio-blob-serviceDeploy to Render.com
Select Web Service and Docker Image, then input the image
programzmh/chatnio-blob-serviceand click Create Web Service.β Render.com Includes Free 750 Hours of Usage per Month
The service will be running on http://localhost:8000
git clone --branch=main https://github.com/Deeptrain-Community/chatnio-blob-service cd chatnio-blob-service pip install -r requirements.txt uvicorn main:app # enable hot reload # uvicorn main:app --reloadPOST /upload Upload a file
{ "file": "file", "model": "gpt-4-turbo-preview" // optional (for ocr models detection) }Response
{ "status": true, "type": "pdf", "content": "...", "error": "" }PDF_MAX_IMAGES: Max Images Extracted from a PDF File (Default:10)- 0: Never Extract Images
- -1: Extract All Images
- other: Extract Top N Images
- Tips: The extracted images will be treated as a normal image file and directly processed.
MAX_FILE_SIZE: Max Uploaded File Size MiB (Default:-1, No Limit)- Tips: Size limit is also depend on the server configuration (e.g. Nginx/Apache Config, Vercel Free Plan Limit 5MB Body Size)
CORS_ALLOW_ORIGINS: CORS Allow Origins (Default:*)AZURE_SPEECH_KEY: Azure Speech to Text Service Key (Required for Audio Support)AZURE_SPEECH_REGION: Azure Speech to Text Service Region (Required for Audio Support)
Note
When OCR is enabled, the service will firstly using OCR then store the images.
You can configure the OCR Advanced Config to control the OCR Models Filtering.
-
β¨ No Storage (Default)
- No Storage Required & No External Dependencies
- Base64 Encoding/Decoding
- Support Serverless Deployment Without Storage (e.g. Vercel)
- No Direct URL Access (Base64 not support models like
gpt-4-all)
-
π Local Storage
- Require Server Environment (e.g. VPS, Docker)
- Support Direct URL Access
- Payless Storage Cost
- Config:
- set env
STORAGE_TYPEtolocal(e.g.STORAGE_TYPE=local) - set env
LOCAL_STORAGE_DOMAINto your deployment domain (e.g.LOCAL_STORAGE_DOMAIN=http://blob-service.onrender.com) - if you are using Docker, you need to mount volume
/staticto the host (e.g.-v /path/to/static:/static)
- set env
-
π AWS S3
- Payment Storage Cost
- Support Direct URL Access
- China Mainland User Friendly
- Config:
- set env
STORAGE_TYPEtos3(e.g.STORAGE_TYPE=s3) - set env
S3_ACCESS_KEYto your AWS Access Key ID - set env
S3_SECRET_KEYto your AWS Secret Access Key - set env
S3_BUCKETto your AWS S3 Bucket Name - set env
S3_REGIONto your AWS S3 Region
- set env
-
π Cloudflare R2
- Free Storage Quota (10GB Storage & Zero Outbound Cost)
- Support Direct URL Access
- Config (S3 Compatible):
- set env
STORAGE_TYPEtos3(e.g.STORAGE_TYPE=s3) - set env
S3_ACCESS_KEYto your Cloudflare R2 Access Key ID - set env
S3_SECRET_KEYto your Cloudflare R2 Secret Access Key - set env
S3_BUCKETto your Cloudflare R2 Bucket Name - set env
S3_DOMAINto your Cloudflare R2 Domain Name (e.g.https://<account-id>.r2.cloudflarestorage.com) - set env
S3_DIRECT_URL_DOMAINto your Cloudflare R2 Public URL Access Domain Name (Open Public URL Access, e.g.https://pub-xxx.r2.dev)
- set env
-
π¦ Min IO
- Self Hosted
- Reliable & Flexible Storage
- Config (S3 Compatible):
- set env
STORAGE_TYPEtos3(e.g.STORAGE_TYPE=s3) - set env
S3_SIGN_VERSIONtos3v4(e.g.S3_SIGN_VERSION=s3v4) - set env
S3_ACCESS_KEYto your Min IO Access Key ID - set env
S3_SECRET_KEYto your Min IO Secret Access Key - set env
S3_BUCKETto your Min IO Bucket Name - set env
S3_DOMAINto your Min IO Domain Name (e.g.https://oss.example.com) - [Optional] If you are using CDN, you can set
S3_DIRECT_URL_DOMAINto your Min IO Public URL Access Domain Name (e.g.https://cdn-hk.example.com)
- set env
-
β€ Telegram CDN
- Free Storage (Rate Limit)
- Support Direct URL Access (China Mainland User Unfriendly)
- Config:
- set env
STORAGE_TYPEtotg(e.g.STORAGE_TYPE=tg) - set env
TG_ENDPOINTto your TG-STATE Endpoint (e.g.TG_ENDPOINT=https://tgstate.vercel.app) - [Optional] if you are using password authentication, you can set
TG_PASSWORDto your TG-STATE Password
- set env
Note
OCR Support is based on PaddleOCR API, please deploy the API to use OCR feature.
When OCR is enabled, the service will automatically extract text from the image and skip the original image storage solution below.
OCR_ENABLEDImage OCR Enabled (1for Enabled,0for Disabled, Default is Disabled)OCR_ENDPOINTPaddle OCR Endpoint (Deploy PaddleOCR API)- e.g.: http://example.com:8000
Advanced OCR Config:
Warning
Advanced Config Chat Nio Supported Version >= 4.3.1 or 3.10.9
OCR_SKIP_MODELS: Skip OCR Models List (Commonly for Vision Models)- e.g.: gpt-4-v,gpt-4-vision-preview,gpt-4-turbo, then the service will skip these models and directly store the image.
- Tips: Each model has character inclusion matching, so when you set
gpt-4-vmodel, it will skip all models that contain gpt-4-v (like azure-gpt-4-vision-preview, gpt-4-vision-preview will be also matched).
- Tips: Each model has character inclusion matching, so when you set
- e.g.: gpt-4-v,gpt-4-vision-preview,gpt-4-turbo, then the service will skip these models and directly store the image.
OCR_SPEC_MODELS: Specific OCR Models List (Commonly for Non-Vision Models)- then although the image has marked as
SKIP_MODELS, the service will still ocr process the image with this model first. - for example, when you set
gpt-4-turbotoSKIP_MODELS(becausegpt-4-turbosupport vision and don't need to use OCR,gpt-4-turbo-previewcannot vision and need OCR), commonly the gpt-4-turbo-preview will be marked as gpt-4-turbo and skipped, then you can setgpt-4-turbo-previewtoSPEC_MODELSto force OCR process.
- then although the image has marked as
EXAMPLE OCR Config:
OCR_ENABLED=1 OCR_ENDPOINT=http://example.com:8000 OCR_SKIP_MODELS=vision,gpt-4-v,gpt-4-all,gpt-4-vision-preview,gpt-4-1106-vision-preview,gpt-4-turbo,gemini-pro-vision,gemini-1.5-pro,claude-3,glm-4v OCR_SPEC_MODELS=gpt-4-turbo-preview,claude-3-haiku- ~/config.py: Env Config
- ~/main.py: Entry Point
- ~/utils.py: Utilities
- ~/handlers: File Handlers
- ~/store: Storage Handlers
- ~/static: Static Files (if using local storage)
- Python & FastAPI
Apache License 2.0