Calibre eBook management software with the "calibre-do-not-translate-my-path" plugin pre-installed.
2.1K
Dockerized Calibre eBook management software with the calibre-do-not-translate-my-path plugin pre-installed to prevent path Latinization for CJK (Chinese, Japanese, Korean) and other non-Latin scripts.
This project is built on the excellent work of the LinuxServer.io team:
linuxserver/calibreThis project includes the original calibre-do-not-translate-my-path plugin by Cirn09(古明地小板):
This Docker containerization project includes the original plugin with modifications as detailed below.
In compliance with GPL v3 licensing requirements, this section documents all modifications made to the original plugin source code:
plugin/__init__.py - Extensively refactored (January 2025)plugin/ui.py - Partially refactored (January 2025)plugin/config.py - Unchanged from original__init__.py)Original Design:
Hook class handling all device typesModified Design:
HookHandler - Abstract base classDatabaseHookHandler - Database operationsUSBDeviceHookHandler - USB device handlingSmartDeviceHookHandler - Smart device applicationsMTPDeviceHookHandler - MTP device handlingSaveToDiskHookHandler - Save-to-disk operationsHookManager class - Centralized management of all handlersAdded:
ui.py)Original UI:
Enhanced UI:
Added:
typing moduleAll original functionality is preserved:
These modifications were made to:
Important: The core path sanitization logic remains identical to the original. All modifications are structural improvements that enhance reliability and maintainability without altering the fundamental functionality.
calibre-do-not-translate-my-path plugin preventing path LatinizationThis project uses environment-specific configuration files (.env.local and .env.nas) to manage different deployment scenarios. Choose the appropriate method below based on your environment.
git clone <your-repo-url>
cd calibre-none-latin
mkdir -p config books downloads
For local development and testing:
# Copy the local environment template
cp .env.local .env.local.template
# Edit .env.local with your settings
nano .env.local # or use your preferred editor
Edit .env.local file with your local configuration:
# Local Development Environment Configuration
# User and Group IDs (match your local user)
PUID=1000 # Use: id -u
PGID=1000 # Use: id -g
# Timezone
TZ=Asia/Shanghai # Your timezone
# VNC Password (optional - leave empty for no password)
PASSWORD=Your_Strong_Password
# HTTP Basic Auth Username (defaults to 'abc' if not set)
CUSTOM_USER=abc # Username for web login
# Additional Calibre CLI arguments (optional)
CLI_ARGS=
# Development settings
COMPOSE_PROJECT_NAME=calibre-none-latin-dev
# Build the image locally
./build.sh
# Start with local configuration
docker-compose -f docker-compose.local.yml up -d
For production environments like Synology NAS:
# Copy the NAS environment template
cp .env.nas .env.nas.template
# Edit .env.nas with your production settings
nano .env.nas # or use your preferred editor
Edit .env.nas file with your production configuration:
# NAS Production Environment Configuration
# User and Group IDs (match your NAS user - commonly 1000:100 on Synology)
PUID=1000 # NAS user ID
PGID=100 # NAS group ID (often 100 for Synology)
# Timezone
TZ=Asia/Shanghai # Your timezone
# VNC Password (recommended for production)
PASSWORD=Your_Strong_Password
# HTTP Basic Auth Username (defaults to 'abc' if not set)
CUSTOM_USER=admin # Change to your preferred username
# Additional Calibre CLI arguments (optional)
CLI_ARGS=
# Production settings
COMPOSE_PROJECT_NAME=calibre-none-latin-prod
Edit docker-compose.nas.yml and update volume paths for your NAS:
volumes:
# IMPORTANT: Update these paths to match your NAS directory structure
- /volume1/docker/Calibre/config:/config
- /volume2/webdav/Ebooks:/books
- /volume4/PT3/Ebooks:/downloads
# Deploy with NAS configuration
docker-compose -f docker-compose.nas.yml up -d
| Variable | Description | Example | Required |
|---|---|---|---|
PUID | User ID for file permissions | 1000 | Yes |
PGID | Group ID for file permissions | 1000 (local) or 100 (NAS) | Yes |
TZ | Timezone | Asia/Shanghai | No |
PASSWORD | VNC access password | Your_Strong_Password | No |
CUSTOM_USER | HTTP Basic Auth username | abc (default) | No |
CLI_ARGS | Additional Calibre CLI arguments | `` | No |
COMPOSE_PROJECT_NAME | Docker Compose project name | calibre-none-latin-dev | No |
# Local development
./build.sh # Build image
docker-compose -f docker-compose.local.yml up -d # Start local
# NAS production
docker-compose -f docker-compose.nas.yml up -d # Start NAS
# View logs
docker-compose -f docker-compose.local.yml logs -f # Local logs
docker-compose -f docker-compose.nas.yml logs -f # NAS logs
# Stop services
docker-compose -f docker-compose.local.yml down # Stop local
docker-compose -f docker-compose.nas.yml down # Stop NAS
| Service | Local Port | NAS Port | Container Port | Description |
|---|---|---|---|---|
| Calibre GUI | 8080 | 8082 | 8080 | VNC-based desktop interface for book management |
| Calibre-web | 8081 | 8081 | 8081 | Modern web interface (optional, requires setup) |
| Content Server | 8181 | 8181 | 8181 | External books access service (optional) |
CUSTOM_USER from your .env file (default: abc)PASSWORD from your .env filePASSWORD empty in .env fileNote: The NAS configuration uses port 8082 for the main GUI to avoid conflicts with other applications commonly using port 8080.
All configuration is managed through environment files (.env.local or .env.nas). See the deployment sections above for detailed setup instructions.
| Host Path | Container Path | Description |
|---|---|---|
./config | /config | Calibre configuration and plugins |
./books | /books | Your ebook library |
./downloads | /downloads | Download/export directory |
For production deployments, use Docker secrets for password protection:
# Create password file
echo "your-secure-password" > config/calibre_password.txt
# Ensure proper permissions
chmod 600 config/calibre_password.txt
The NoTrans plugin is automatically installed during container startup. To configure:
CUSTOM_USER in your .env filePASSWORD in your .env filecalibre-none-latin/
├── Dockerfile # Container definition extending linuxserver/calibre
├── docker-compose.yml # Docker Compose service configuration
├── build.sh # Build automation script
├── README.md # This documentation
├── CLAUDE.md # Development guidance
├── plugin/ # NoTrans plugin source files
│ ├── __init__.py # Main plugin logic and hooking system
│ ├── config.py # Configuration management
│ ├── ui.py # User interface and toolbar integration
│ ├── images/ # Plugin icon assets
│ └── translations/ # Internationalization files
├── config/ # Calibre configuration (created on first run)
├── books/ # Ebook library storage (created on first run)
└── downloads/ # Download/export directory (created on first run)
# Start the container
docker-compose -f docker-compose.local.yml up -d
# View logs
docker-compose -f docker-compose.local.yml logs -f calibre-none-latin
# Stop the container
docker-compose -f docker-compose.local.yml down
# Restart with new configuration
docker-compose -f docker-compose.local.yml restart calibre-none-latin
# Rebuild and recreate container
docker-compose -f docker-compose.local.yml up -d --build --force-recreate
# Start the container
docker-compose -f docker-compose.nas.yml up -d
# View logs
docker-compose -f docker-compose.nas.yml logs -f calibre-none-latin
# Stop the container
docker-compose -f docker-compose.nas.yml down
# Restart with new configuration
docker-compose -f docker-compose.nas.yml restart calibre-none-latin
# Rebuild and recreate container (if using local build)
docker-compose -f docker-compose.nas.yml up -d --build --force-recreate
# Check if plugin was installed (replace with your compose file)
docker-compose -f docker-compose.local.yml exec calibre-none-latin ls -la /tmp/NoTrans.zip
# View installation logs
docker-compose -f docker-compose.local.yml logs calibre-none-latin | grep -i notrans
# Manually reinstall plugin
docker-compose -f docker-compose.local.yml exec calibre-none-latin /tmp/install-notrans.sh
docker-compose -f docker-compose.local.yml logs calibre-none-latindocker-compose -f docker-compose.local.yml restart calibre-none-latin/tmp/NoTrans.zip# Set correct ownership
sudo chown -R 1000:1000 config books downloads
# Or update your .env file with correct IDs
echo "PUID=$(id -u)" >> .env.local
echo "PGID=$(id -g)" >> .env.local
docker-compose -f docker-compose.local.yml up -d --force-recreate
CUSTOM_USER value in your .env filePASSWORD value in your .env filePASSWORD= (empty) in .env file to disable authentication# Check Docker logs (replace with your compose file)
docker-compose -f docker-compose.local.yml logs calibre-none-latin
# Verify port availability (adjust ports based on your config)
netstat -tulpn | grep -E ':(8080|8081|8181)' # for local
netstat -tulpn | grep -E ':(8082|8081|8181)' # for NAS
# Reset container
docker-compose -f docker-compose.local.yml down
docker-compose -f docker-compose.local.yml up -d
./plugin/ directory./build.shdocker-compose -f docker-compose.local.yml up -d --force-recreate# Build and test locally
./build.sh
docker-compose -f docker-compose.local.yml up -d
# Access GUI and test functionality
# http://localhost:8080 (local development - Calibre GUI)
# http://localhost:8081 (local development - Calibre-web, if enabled)
# http://localhost:8181 (local development - Content Server, if enabled)
The project uses LinuxServer.io's Calibre image as the base. Regular updates ensure security patches and improvements.
# Check for and apply base image updates
./update-base-image.sh
# If update is available, test the new image
docker run --rm -p 8080:8080 calibre-none-latin:test-YYYYMMDD-HHMMSS
# If tests pass, deploy updated version
docker tag calibre-none-latin:test-YYYYMMDD-HHMMSS calibre-none-latin:latest
./deploy-dockerhub.sh v1.x # Use appropriate version number
/tmp/NoTrans.zip exists)This project is made possible by the excellent work of several open source projects and contributors:
linuxserver/calibreSpecial thanks to users in the Chinese, Japanese, and Korean communities who face path Latinization issues and inspired this solution.
This project is licensed under the GNU General Public License v3.0, the same license as the original plugin.
This Docker container project includes a derivative work of the original NoTrans plugin. In accordance with GPL v3 requirements:
LICENSE fileUnder GPL v3, you are free to:
If you distribute this software or derivatives, you must:
This software is provided "AS IS" without warranty of any kind, as specified in the GPL v3 license.
For the complete license terms, see the LICENSE file in this repository.
Content type
Image
Digest
sha256:f20b3e747…
Size
1.1 GB
Last updated
about 1 year ago
docker pull rushwing/calibre-none-latin