Skip to content

PYUDNG/Kemono-Downloader

Repository files navigation

Kemono Downloader

English 简体中文 繁體中文

A modern Kemono downloader userscript featuring a beautiful UI, multiple downloaders, and extensive customization options.

License: GPL v3 Vue 3 TypeScript Vite

If you encounter any errors or have feature suggestions, feel free to open an issue for discussion.

✨ Features

🎨 Modern Interface

  • Modern UI design based on PrimeVue and Tailwind CSS
  • Responsive layout supporting desktop and mobile
  • Dark/Light theme support
  • Multi-language support

📥 Download Features

  • Batch download support
  • Multiple downloader options
  • Intelligent filename handling
  • Download progress display
  • Download task management

⚙️ Customization Settings

  • Custom settings for different downloaders
  • Custom filenames (supports directory structure creation)

🔧 Technical Features

  • Modular architecture design
  • Type-safe TypeScript development
  • Modern Vue 3 Composition API
  • Automated build process
  • Development server with HTTPS support

Screenshots

🚀 Quick Start

Direct Installation (Recommended for Most Users)

Choose one of the following methods:

Build from Source

Prerequisites

This project uses npm as the package manager for development. Other package managers may require manual adaptation.

  • Node.js 18+
  • npm or yarn

Development Setup

  1. Clone the project
git clone https://github.com/PYUDNG/Kemono-Downloader.git
cd kemono-downloader
  1. Install dependencies
npm install
# or
yarn install
  1. Start the development server
npm run dev
# or
yarn dev
  1. Build the userscript
npm run build
# or
yarn build

Installing the Userscript

After building, a kemono-downloader.(min|greasyfork)?.user.js file will be generated in the /dist/ directory. Install it by following these steps:

  • Open any build artifact and copy all its code content
  • Install the Tampermonkey or Violentmonkey browser extension
  • Click "Add new script" in the extension manager
  • Paste the generated userscript content

📁 Project Structure

kemono-downloader/
├── src/
│   ├── components/         # Shared Vue components
│   │   ├── ListItem.vue    # Single-line list item component
│   │   ├── PostsSelector/  # Post selector component
│   │   └── TabLayout/      # Tab layout component
│   ├── modules/            # Feature modules
│   │   ├── api/            # API module
│   │   ├── creator/        # Creator page module
│   │   ├── downloader/     # Downloader module
│   │   ├── post/           # Post page module
│   │   └── settings/       # Settings module
│   ├── utils/              # Utility functions
│   ├── volt/               # PrimeVue component wrappers
│   ├── main.ts             # Application entry point
│   └── loader.ts           # Module loader
├── build-utils/            # Build utilities
├── scripts/                # Build scripts
├── server/                 # Development server configuration
├── package.json            # Project configuration
├── vite.config.ts          # Vite configuration
└── tsconfig.json           # TypeScript configuration

🛠️ Tech Stack

  • Frontend Framework: Vue 3 + TypeScript
  • Build Tool: Vite
  • UI Component Library: PrimeVue
  • Styling Solution: Tailwind CSS
  • Userscript: vite-plugin-monkey
  • State Management: Vue Composition API
  • Internationalization: vue-i18n
  • Utility Libraries: mitt, uuid, dedent## 📦 Build & Deployment

Development Testing

npm run dev

Production Build

npm run build

The production build output will be created in /dist/

🤝 Contribution Guide

You can participate in this project by submitting Issues and Pull Requests.

Submitting an Issue

  • Clearly describe the problem or feature request
  • Provide reproduction steps
  • Include relevant screenshots or logs

Submitting a Pull Request

  1. Fork the project repository
  2. Create a feature branch
  3. Commit code changes
  4. Write clear commit messages
  5. Create a Pull Request

PR Guidelines

Code Standards

This project does not have strict code style requirements, but please ensure your code at least:

  • Includes appropriate comments
  • Passes TypeScript type checking

Commit Standards

Each commit can contain multiple updates, and each update should be written as a list item.
Each update should indicate the update type at the beginning of the list item, separated by an English colon and space (: ):

Update Type Description
feat New feature addition
improvement Improvement to existing features
code No functional changes, only code (including comments) modifications (code optimization, etc.)
performance No functional changes, only performance improvements
bug fix Bug fixes
i18n No code changes, only language pack updates
maintainence Other updates with no code changes, e.g., TODO list updates, dependency updates, etc.
refactor No functional changes, complete code rewrite (refactoring)

If an update corresponds to multiple types, use the most primary type.
Commit messages should be written in English.

Commit message example:

- feat: new download provider `aria2`
- improvement: debounce TextInput for settings
- bug fix: download button no response after multiple clicks
- maintainence: updated TODO
- maintainence: updated README
- refactor: build script

The above commit messages are just examples. In actual commits, for so many updates, try to split them into multiple commits.

📄 License

This project is licensed under the GPL-3.0 license.

🙏 Acknowledgments

✉️ Issues & Feedback

Welcome to reach out via:


Note: This project is for learning and research purposes only. Please comply with the terms of use and copyright regulations of relevant websites.