- Replace Linkwarden with Karakeep for AI-powered bookmarking - Supports links, notes, images, PDFs - AI auto-tagging with Ollama integration - Browser extensions and mobile apps - Full-text search with Meilisearch - Add Ollama for local LLM inference - Run Llama, Mistral, CodeLlama locally - GPU acceleration support (GTX 1070) - OpenAI-compatible API - Integrates with Karakeep for AI features - Add example configuration files for services - Sonarr: config.xml.example - Radarr: config.xml.example - SABnzbd: sabnzbd.ini.example - qBittorrent: qBittorrent.conf.example - Vikunja: config.yml.example - FreshRSS: config.php.example - Fix incomplete FreshRSS compose.yaml - Update README with new services and deployment instructions
543 lines
11 KiB
Markdown
543 lines
11 KiB
Markdown
# Karakeep - Bookmark Everything App
|
|
|
|
AI-powered bookmark manager for links, notes, images, and PDFs with automatic tagging and full-text search.
|
|
|
|
## Overview
|
|
|
|
**Karakeep** (previously known as Hoarder) is a self-hostable bookmark-everything app:
|
|
|
|
- ✅ **Bookmark Everything**: Links, notes, images, PDFs
|
|
- ✅ **AI-Powered**: Automatic tagging and summarization
|
|
- ✅ **Full-Text Search**: Find anything instantly with Meilisearch
|
|
- ✅ **Web Archiving**: Save complete webpages (full page archive)
|
|
- ✅ **Browser Extensions**: Chrome and Firefox support
|
|
- ✅ **Mobile Apps**: iOS and Android apps available
|
|
- ✅ **Ollama Support**: Use local AI models (no cloud required!)
|
|
- ✅ **OCR**: Extract text from images
|
|
- ✅ **Self-Hosted**: Full control of your data
|
|
|
|
## Quick Start
|
|
|
|
### 1. Configure Secrets
|
|
|
|
```bash
|
|
cd ~/homelab/compose/services/karakeep
|
|
|
|
# Edit .env and update:
|
|
# - NEXTAUTH_SECRET (generate with: openssl rand -base64 36)
|
|
# - MEILI_MASTER_KEY (generate with: openssl rand -base64 36)
|
|
nano .env
|
|
```
|
|
|
|
### 2. Deploy
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
### 3. Access
|
|
|
|
Go to: **https://links.fig.systems**
|
|
|
|
**First-time setup:**
|
|
1. Create your admin account
|
|
2. Start bookmarking!
|
|
|
|
## Features
|
|
|
|
### Bookmark Types
|
|
|
|
**1. Web Links**
|
|
- Save any URL
|
|
- Automatic screenshot capture
|
|
- Full webpage archiving
|
|
- Extract title, description, favicon
|
|
- AI-generated summary and tags
|
|
|
|
**2. Notes**
|
|
- Quick text notes
|
|
- Markdown support
|
|
- AI-powered categorization
|
|
- Full-text searchable
|
|
|
|
**3. Images**
|
|
- Upload images directly
|
|
- OCR text extraction (if enabled)
|
|
- AI-based tagging
|
|
- Image search
|
|
|
|
**4. PDFs**
|
|
- Upload PDF documents
|
|
- Full-text indexing
|
|
- Searchable content
|
|
|
|
### AI Features
|
|
|
|
Karakeep can use AI to automatically:
|
|
- **Tag** your bookmarks
|
|
- **Summarize** web content
|
|
- **Extract** key information
|
|
- **Organize** by category
|
|
|
|
**Three AI options:**
|
|
|
|
**1. Ollama (Recommended - Local & Free)**
|
|
```env
|
|
# In .env, uncomment:
|
|
OLLAMA_BASE_URL=http://ollama:11434
|
|
INFERENCE_TEXT_MODEL=llama3.2:3b
|
|
INFERENCE_IMAGE_MODEL=llava:7b
|
|
```
|
|
|
|
**2. OpenAI**
|
|
```env
|
|
OPENAI_API_KEY=sk-...
|
|
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
INFERENCE_TEXT_MODEL=gpt-4o-mini
|
|
```
|
|
|
|
**3. OpenRouter (multiple providers)**
|
|
```env
|
|
OPENAI_API_KEY=sk-or-v1-...
|
|
OPENAI_BASE_URL=https://openrouter.ai/api/v1
|
|
INFERENCE_TEXT_MODEL=anthropic/claude-3.5-sonnet
|
|
```
|
|
|
|
### Web Archiving
|
|
|
|
Karakeep saves complete web pages for offline viewing:
|
|
- **Full HTML archive**
|
|
- **Screenshots** of the page
|
|
- **Extracted text** for search
|
|
- **Works offline** - view archived pages anytime
|
|
|
|
### Search
|
|
|
|
Powered by Meilisearch:
|
|
- **Instant** full-text search
|
|
- **Fuzzy matching** - finds similar terms
|
|
- **Filter by** type, tags, dates
|
|
- **Search across** titles, content, tags, notes
|
|
|
|
### Browser Extensions
|
|
|
|
**Install extensions:**
|
|
- [Chrome Web Store](https://chromewebstore.google.com/detail/karakeep/kbkejgonjhbmhcaofkhdegeoeoemgkdm)
|
|
- [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/karakeep/)
|
|
|
|
**Configure extension:**
|
|
1. Install extension
|
|
2. Click extension icon
|
|
3. Enter server URL: `https://links.fig.systems`
|
|
4. Login with your credentials
|
|
5. Save bookmarks from any page!
|
|
|
|
### Mobile Apps
|
|
|
|
**Download apps:**
|
|
- [iOS App Store](https://apps.apple.com/app/karakeep/id6479258022)
|
|
- [Android Google Play](https://play.google.com/store/apps/details?id=app.karakeep.mobile)
|
|
|
|
**Setup:**
|
|
1. Install app
|
|
2. Open app
|
|
3. Enter server: `https://links.fig.systems`
|
|
4. Login
|
|
5. Bookmark on the go!
|
|
|
|
## Configuration
|
|
|
|
### Basic Settings
|
|
|
|
**Disable public signups:**
|
|
```env
|
|
DISABLE_SIGNUPS=true
|
|
```
|
|
|
|
**Set max file size (100MB default):**
|
|
```env
|
|
MAX_ASSET_SIZE_MB=100
|
|
```
|
|
|
|
**Enable OCR for multiple languages:**
|
|
```env
|
|
OCR_LANGS=eng,spa,fra,deu
|
|
```
|
|
|
|
### Ollama Integration
|
|
|
|
**Prerequisites:**
|
|
1. Deploy Ollama service (see `compose/services/ollama/`)
|
|
2. Pull models: `docker exec ollama ollama pull llama3.2:3b`
|
|
|
|
**Enable in Karakeep:**
|
|
```env
|
|
# In karakeep/.env
|
|
OLLAMA_BASE_URL=http://ollama:11434
|
|
INFERENCE_TEXT_MODEL=llama3.2:3b
|
|
INFERENCE_IMAGE_MODEL=llava:7b
|
|
INFERENCE_LANG=en
|
|
```
|
|
|
|
**Restart:**
|
|
```bash
|
|
docker compose restart
|
|
```
|
|
|
|
**Recommended models:**
|
|
- **Text**: llama3.2:3b (fast, good quality)
|
|
- **Images**: llava:7b (vision model)
|
|
- **Advanced**: llama3.3:70b (slower, better results)
|
|
|
|
### Advanced Settings
|
|
|
|
**Custom logging:**
|
|
```env
|
|
LOG_LEVEL=debug # Options: debug, info, warn, error
|
|
```
|
|
|
|
**Custom data directory:**
|
|
```env
|
|
DATADIR=/custom/path
|
|
```
|
|
|
|
**Chrome timeout (for slow sites):**
|
|
```env
|
|
# Add to compose.yaml environment section
|
|
BROWSER_TIMEOUT=60000 # 60 seconds
|
|
```
|
|
|
|
## Usage Workflows
|
|
|
|
### 1. Bookmark a Website
|
|
|
|
**Via Browser:**
|
|
1. Click Karakeep extension
|
|
2. Bookmark opens automatically
|
|
3. AI generates tags and summary
|
|
4. Edit tags/notes if needed
|
|
5. Save
|
|
|
|
**Via Mobile:**
|
|
1. Open share menu
|
|
2. Select Karakeep
|
|
3. Bookmark saved
|
|
|
|
**Manually:**
|
|
1. Open Karakeep
|
|
2. Click "+" button
|
|
3. Paste URL
|
|
4. Click Save
|
|
|
|
### 2. Quick Note
|
|
|
|
1. Open Karakeep
|
|
2. Click "+" → "Note"
|
|
3. Type your note
|
|
4. AI auto-tags
|
|
5. Save
|
|
|
|
### 3. Upload Image
|
|
|
|
1. Click "+" → "Image"
|
|
2. Upload image file
|
|
3. OCR extracts text (if enabled)
|
|
4. AI generates tags
|
|
5. Save
|
|
|
|
### 4. Search Everything
|
|
|
|
**Simple search:**
|
|
- Type in search box
|
|
- Results appear instantly
|
|
|
|
**Advanced search:**
|
|
- Filter by type (links, notes, images)
|
|
- Filter by tags
|
|
- Filter by date range
|
|
- Sort by relevance or date
|
|
|
|
### 5. Organize with Tags
|
|
|
|
**Auto-tags:**
|
|
- AI generates tags automatically
|
|
- Based on content analysis
|
|
- Can be edited/removed
|
|
|
|
**Manual tags:**
|
|
- Add your own tags
|
|
- Create tag hierarchies
|
|
- Color-code tags
|
|
|
|
**Tag management:**
|
|
- Rename tags globally
|
|
- Merge duplicate tags
|
|
- Delete unused tags
|
|
|
|
## Browser Extension Usage
|
|
|
|
### Quick Bookmark
|
|
|
|
1. **Visit any page**
|
|
2. **Click extension icon** (or keyboard shortcut)
|
|
3. **Automatically saved** with:
|
|
- URL
|
|
- Title
|
|
- Screenshot
|
|
- Full page archive
|
|
- AI tags and summary
|
|
|
|
### Save Selection
|
|
|
|
1. **Highlight text** on any page
|
|
2. **Right-click** → "Save to Karakeep"
|
|
3. **Saves as note** with source URL
|
|
|
|
### Save Image
|
|
|
|
1. **Right-click image**
|
|
2. Select "Save to Karakeep"
|
|
3. **Image uploaded** with AI tags
|
|
|
|
## Mobile App Features
|
|
|
|
- **Share from any app** to Karakeep
|
|
- **Quick capture** - bookmark in seconds
|
|
- **Offline access** to archived content
|
|
- **Search** your entire collection
|
|
- **Browse by tags**
|
|
- **Dark mode** support
|
|
|
|
## Data Management
|
|
|
|
### Backup
|
|
|
|
**Important data locations:**
|
|
```bash
|
|
compose/services/karakeep/
|
|
├── data/ # Uploaded files, archives
|
|
└── meili_data/ # Search index
|
|
```
|
|
|
|
**Backup script:**
|
|
```bash
|
|
#!/bin/bash
|
|
cd ~/homelab/compose/services/karakeep
|
|
tar czf karakeep-backup-$(date +%Y%m%d).tar.gz ./data ./meili_data
|
|
```
|
|
|
|
### Export
|
|
|
|
**Export bookmarks:**
|
|
1. Settings → Export
|
|
2. Choose format:
|
|
- JSON (complete data)
|
|
- HTML (browser-compatible)
|
|
- CSV (spreadsheet)
|
|
3. Download
|
|
|
|
### Import
|
|
|
|
**Import from other services:**
|
|
1. Settings → Import
|
|
2. Select source:
|
|
- Browser bookmarks (HTML)
|
|
- Pocket
|
|
- Raindrop.io
|
|
- Omnivore
|
|
- Instapaper
|
|
3. Upload file
|
|
4. Karakeep processes and imports
|
|
|
|
## Troubleshooting
|
|
|
|
### Karakeep won't start
|
|
|
|
**Check logs:**
|
|
```bash
|
|
docker logs karakeep
|
|
docker logs karakeep-chrome
|
|
docker logs karakeep-meilisearch
|
|
```
|
|
|
|
**Common issues:**
|
|
- Missing `NEXTAUTH_SECRET` in `.env`
|
|
- Missing `MEILI_MASTER_KEY` in `.env`
|
|
- Services not on `karakeep_internal` network
|
|
|
|
### Bookmarks not saving
|
|
|
|
**Check chrome service:**
|
|
```bash
|
|
docker logs karakeep-chrome
|
|
```
|
|
|
|
**Verify chrome is accessible:**
|
|
```bash
|
|
docker exec karakeep curl http://karakeep-chrome:9222
|
|
```
|
|
|
|
**Increase timeout:**
|
|
```env
|
|
# Add to .env
|
|
BROWSER_TIMEOUT=60000
|
|
```
|
|
|
|
### Search not working
|
|
|
|
**Rebuild search index:**
|
|
```bash
|
|
# Stop services
|
|
docker compose down
|
|
|
|
# Remove search data
|
|
rm -rf ./meili_data
|
|
|
|
# Restart (index rebuilds automatically)
|
|
docker compose up -d
|
|
```
|
|
|
|
**Check Meilisearch:**
|
|
```bash
|
|
docker logs karakeep-meilisearch
|
|
```
|
|
|
|
### AI features not working
|
|
|
|
**With Ollama:**
|
|
```bash
|
|
# Verify Ollama is running
|
|
docker ps | grep ollama
|
|
|
|
# Test Ollama connection
|
|
docker exec karakeep curl http://ollama:11434
|
|
|
|
# Check models are pulled
|
|
docker exec ollama ollama list
|
|
```
|
|
|
|
**With OpenAI/OpenRouter:**
|
|
- Verify API key is correct
|
|
- Check API balance/credits
|
|
- Review logs for error messages
|
|
|
|
### Extension can't connect
|
|
|
|
**Verify server URL:**
|
|
- Must be `https://links.fig.systems`
|
|
- Not `http://` or `localhost`
|
|
|
|
**Check CORS:**
|
|
```env
|
|
# Add to .env if needed
|
|
CORS_ALLOW_ORIGINS=https://links.fig.systems
|
|
```
|
|
|
|
**Clear extension data:**
|
|
1. Extension settings
|
|
2. Logout
|
|
3. Clear extension storage
|
|
4. Login again
|
|
|
|
### Mobile app issues
|
|
|
|
**Can't connect:**
|
|
- Use full HTTPS URL
|
|
- Ensure server is accessible externally
|
|
- Check firewall rules
|
|
|
|
**Slow performance:**
|
|
- Check network speed
|
|
- Reduce image quality in app settings
|
|
- Enable "Low data mode"
|
|
|
|
## Performance Optimization
|
|
|
|
### For Large Collections (10,000+ bookmarks)
|
|
|
|
**Increase Meilisearch RAM:**
|
|
```yaml
|
|
# In compose.yaml, add to karakeep-meilisearch:
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 2G
|
|
reservations:
|
|
memory: 1G
|
|
```
|
|
|
|
**Optimize search index:**
|
|
```env
|
|
# In .env
|
|
MEILI_MAX_INDEXING_MEMORY=1048576000 # 1GB
|
|
```
|
|
|
|
### For Slow Archiving
|
|
|
|
**Increase Chrome resources:**
|
|
```yaml
|
|
# In compose.yaml, add to karakeep-chrome:
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 1G
|
|
cpus: '1.0'
|
|
```
|
|
|
|
**Adjust timeouts:**
|
|
```env
|
|
BROWSER_TIMEOUT=90000 # 90 seconds
|
|
```
|
|
|
|
### Database Maintenance
|
|
|
|
**Vacuum (compact) database:**
|
|
```bash
|
|
# Karakeep uses SQLite by default
|
|
docker exec karakeep sqlite3 /data/karakeep.db "VACUUM;"
|
|
```
|
|
|
|
## Comparison with Linkwarden
|
|
|
|
| Feature | Karakeep | Linkwarden |
|
|
|---------|----------|------------|
|
|
| **Bookmark Types** | Links, Notes, Images, PDFs | Links only |
|
|
| **AI Tagging** | Yes (Ollama/OpenAI) | No |
|
|
| **Web Archiving** | Full page + Screenshot | Screenshot only |
|
|
| **Search** | Meilisearch (fuzzy) | Meilisearch |
|
|
| **Browser Extension** | Yes | Yes |
|
|
| **Mobile Apps** | iOS + Android | No official apps |
|
|
| **OCR** | Yes | No |
|
|
| **Collaboration** | Personal focus | Team features |
|
|
| **Database** | SQLite | PostgreSQL |
|
|
|
|
**Why Karakeep?**
|
|
- More bookmark types
|
|
- AI-powered organization
|
|
- Better mobile support
|
|
- Lighter resource usage (SQLite vs PostgreSQL)
|
|
- Active development
|
|
|
|
## Resources
|
|
|
|
- [Official Website](https://karakeep.app)
|
|
- [Documentation](https://docs.karakeep.app)
|
|
- [GitHub Repository](https://github.com/karakeep-app/karakeep)
|
|
- [Demo Instance](https://try.karakeep.app)
|
|
- [Chrome Extension](https://chromewebstore.google.com/detail/karakeep/kbkejgonjhbmhcaofkhdegeoeoemgkdm)
|
|
- [Firefox Extension](https://addons.mozilla.org/en-US/firefox/addon/karakeep/)
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ Deploy Karakeep
|
|
2. ✅ Create admin account
|
|
3. ✅ Install browser extension
|
|
4. ✅ Install mobile app
|
|
5. ⬜ Deploy Ollama for AI features
|
|
6. ⬜ Import existing bookmarks
|
|
7. ⬜ Configure AI models
|
|
8. ⬜ Set up automated backups
|
|
|
|
---
|
|
|
|
**Bookmark everything, find anything!** 🔖
|