Files
convert-ui/README.md
Sebastian Krüger 594a0ca314 refactor: remove all document conversion support, keep only media conversions
This commit completely removes document conversion functionality to focus
exclusively on media file conversions (video, audio, images).

Changes:
- Remove all document converter services (pandocService.ts, pdfService.ts, docxService.ts)
- Uninstall document-related packages: marked, turndown, dompurify, jspdf, pdfjs-dist, docx, mammoth, @types/turndown
- Remove document formats (PDF, DOCX, Markdown, HTML, TXT) from formatMappings.ts
- Remove pandoc converter from FileConverter.tsx
- Remove pandoc loader and references from wasmLoader.ts
- Update TypeScript types to remove 'pandoc' from ConverterEngine and 'document' from FileCategory
- Remove pandoc from WASMModuleState interface
- Update README.md to remove all document conversion documentation
- Update UI descriptions to reflect media-only conversions

Supported conversions now:
- Video: MP4, WebM, AVI, MOV, MKV, GIF
- Audio: MP3, WAV, OGG, AAC, FLAC
- Images: PNG, JPG, WebP, GIF, BMP, TIFF, SVG

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 11:35:20 +01:00

220 lines
6.5 KiB
Markdown

# Convert UI
A modern, browser-based file conversion application built with Next.js 16, Tailwind CSS 4, and WebAssembly. Convert videos, audio, and images directly in your browser without uploading files to any server.
## Features
- **🎬 Video Conversion** - Convert between MP4, WebM, AVI, MOV, MKV, and GIF
- **🎵 Audio Conversion** - Convert between MP3, WAV, OGG, AAC, and FLAC
- **🖼️ Image Conversion** - Convert between PNG, JPG, WebP, GIF, BMP, TIFF, and SVG
- **🔒 Privacy First** - All conversions happen locally in your browser, no server uploads
- **⚡ Fast & Efficient** - Powered by WebAssembly for near-native performance
- **🎨 Beautiful UI** - Modern, responsive design with dark/light theme support
- **🔍 Smart Search** - Fuzzy search for quick format selection
- **📝 Conversion History** - Track your recent conversions
- **🎯 Drag & Drop** - Easy file upload with drag-and-drop support
## Tech Stack
- **Next.js 16** - React framework with App Router and static export
- **React 19** - Latest React with concurrent features
- **TypeScript 5** - Type-safe development
- **Tailwind CSS 4** - Utility-first CSS with OKLCH color system
- **FFmpeg.wasm** - Video and audio conversion
- **ImageMagick WASM** - Image processing and conversion
- **Fuse.js** - Fuzzy search for format selection
- **Lucide React** - Beautiful icon library
## Getting Started
### Prerequisites
- Node.js 22+ (managed via nvm)
- pnpm (enabled via corepack)
### Installation
```bash
# Clone the repository
git clone <repository-url>
cd convert-ui
# Install dependencies
pnpm install
# Run development server
pnpm dev
```
Open [http://localhost:3000](http://localhost:3000) to view the app.
### Build for Production
```bash
# Build static export
pnpm build
# Output will be in the /out directory
```
## Project Structure
```
convert-ui/
├── app/ # Next.js App Router
│ ├── layout.tsx # Root layout with theme
│ ├── page.tsx # Main page
│ └── globals.css # Global styles
├── components/
│ ├── converter/ # Converter components
│ │ ├── FileConverter.tsx # Main state manager
│ │ ├── FileUpload.tsx # Drag-and-drop upload
│ │ ├── FormatSelector.tsx # Format selection with search
│ │ ├── ConversionPreview.tsx # Preview and download
│ │ └── ConversionOptions.tsx # Format-specific options
│ ├── layout/
│ │ └── ThemeToggle.tsx # Dark/light theme toggle
│ └── ui/ # Reusable UI components
│ ├── Button.tsx
│ ├── Card.tsx
│ ├── Toast.tsx
│ ├── Progress.tsx
│ ├── Skeleton.tsx
│ └── Input.tsx
├── lib/
│ ├── converters/ # Conversion services
│ │ ├── ffmpegService.ts # Video/audio conversion
│ │ └── imagemagickService.ts # Image conversion
│ ├── wasm/
│ │ └── wasmLoader.ts # WASM module lazy loading
│ ├── storage/
│ │ └── history.ts # Conversion history
│ └── utils/
│ ├── cn.ts # Class name utility
│ ├── fileUtils.ts # File operations
│ ├── formatMappings.ts # Supported formats
│ └── debounce.ts # Debounce utility
└── types/
└── conversion.ts # TypeScript interfaces
```
## Supported Formats
### Video (FFmpeg)
- **Input/Output:** MP4, WebM, AVI, MOV, MKV, GIF
### Audio (FFmpeg)
- **Input/Output:** MP3, WAV, OGG, AAC, FLAC
### Images (ImageMagick)
- **Input/Output:** PNG, JPG, WebP, GIF, BMP, TIFF, SVG
## How It Works
1. **File Upload** - Users can drag-and-drop or click to select a file
2. **Format Detection** - The app automatically detects the input format
3. **Format Selection** - Choose from compatible output formats
4. **Conversion** - WASM modules are loaded on-demand and process the file
5. **Download** - Preview and download the converted file
### WASM Architecture
- **Lazy Loading** - WASM modules are only loaded when needed
- **Memory Management** - Proper cleanup after each conversion
- **Progress Tracking** - Real-time progress updates during conversion
- **Error Handling** - Graceful error handling with user-friendly messages
## Browser Compatibility
- **Chrome/Edge** - Full support
- **Firefox** - Full support
- **Safari** - Full support (with SharedArrayBuffer)
**Note:** Some features require SharedArrayBuffer support. The app sets the required COOP/COEP headers for this.
## Performance
- **File Size Limit** - 500MB (configurable)
- **Conversion Speed** - Varies by file size and format
- Images: < 5s for typical files
- Videos: Depends on length and quality
- **Memory Usage** - Managed automatically with cleanup
## Development
### Scripts
```bash
# Development server with Turbopack
pnpm dev
# Build for production
pnpm build
# Run production server
pnpm start
# Lint code
pnpm lint
```
### Adding New Formats
1. Add format to `lib/utils/formatMappings.ts`
2. Implement converter in appropriate service
3. Update type definitions in `types/conversion.ts`
### Customizing Theme
Colors are defined in `app/globals.css` using OKLCH color space. Modify CSS variables to change the theme:
```css
:root {
--primary: oklch(22.4% 0.053 285.8);
--background: oklch(100% 0 0);
/* ... other colors */
}
```
## Docker Deployment
```bash
# Build Docker image
docker build -t convert-ui .
# Run container
docker run -p 80:80 convert-ui
```
The Dockerfile uses a multi-stage build with Nginx to serve the static export.
## Contributing
Contributions are welcome! Please follow these steps:
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Test thoroughly
5. Submit a pull request
## License
MIT License - See LICENSE file for details
## Acknowledgments
- [FFmpeg.wasm](https://github.com/ffmpegwasm/ffmpeg.wasm) - Video/audio conversion
- [ImageMagick WASM](https://github.com/dlemstra/magick-wasm) - Image processing
- [Next.js](https://nextjs.org/) - React framework
- [Tailwind CSS](https://tailwindcss.com/) - Styling
- [Fuse.js](https://fusejs.io/) - Fuzzy search
## Support
For issues, questions, or suggestions, please open an issue on GitHub.
---
**Made with ❤️ using Next.js 16 and WebAssembly**