A Flask web application that analyzes texting conversations (and other text-dense screenshots) using chess-style move evaluations, Heavily vibe-coded so don't hope for the best readability
git clone https://github.com/ang-or-five/textanalysis.git
cd textanalysis
pip install -r requirements.txtgit clone https://github.com/ang-or-five/textanalysis.git
cd textanalysis
uv pip install -r requirements.txt --system- Copy
.env.exampleto.env - Get a free API key from https://aistudio.google.com/api-keys
- Paste your API key in
.env
python app.pyOpen http://localhost:5000 in your browser.
- Drag and drop or click to upload one or more conversation screenshots
- Select analysis options:
- Concatenate - Treat multiple images as one continuous thread
- OCR Only - Skip image analysis (faster)
- Dense Analysis - Analyze every line in detail
- Click "Analyze"
- Browse results using the different view tabs
Upload a screenshot of a conversation and watch as each message gets evaluated with chess-style ratings:
- Brilliant - Exceptionally clever or witty
- Great Find - Great observation or comeback
- Best - The optimal response
- Excellent - Very well crafted
- Good - Solid, appropriate
- Book - Standard/expected
- Inaccuracy - Slightly off
- Mistake - Poor choice or timing
- Blunder - Major error or cringe
- Missed Win - Missed opportunity
-
Multiple View Modes
- Append Replay - Watch messages appear one-by-one with animated evaluations
- Semi-Annotated - Original image with evaluation icons overlaid
- Full Annotated - Each message shown with evaluation and explanation
- Interactive - Click through messages at your own pace
-
Multi-Image Support
- Upload multiple images at once
- Concatenate mode - Combine multiple screenshots into one continuous analysis
- Navigate between different analyzed images
-
Analysis Options
- Dense Mode - Analyze every single line/message exhaustively
- OCR Only - Faster analysis without sending images to the model
-
Notable Icons - Additional tags like "Winner", "Threat", "Sharp", "Forced", etc.
- Backend: Flask (Python)
- OCR: EasyOCR
- LLM: OpenAI-compatible API (tested with Gemini)
- Image Processing: Pillow, cairosvg
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Web interface |
/api/upload |
POST | Upload image file |
/api/analyze |
POST | Analyze single image |
/api/analyze-multiple |
POST | Analyze multiple images separately |
/api/analyze-concatenated |
POST | Analyze multiple images as one |
./
├── app.py # Flask application
├── requirements.txt # Python dependencies
├── .env # Environment variables (not tracked)
├── .env.example # Example environment variables
├── static/
│ ├── js/
│ │ └── script.js # Frontend JavaScript
│ ├── images/ # Evaluation icons (SVG)
│ ├── uploads/ # Uploaded images (generated)
│ └── analysis/ # Analysis outputs (generated)
└── templates/
└── index.html # Web interface
The system prompt and evaluation schema can be customized in app.py:
EVALUATION_ICONS- Available evaluation ratingsNOTABLE_ICONS- Available notable tagsSYSTEM_PROMPT- Instructions for the LLM
Evaluation icons are ripped from chess.com's analysis interface