diff --git a/docs/en-gb/projects/captcha/api.md b/docs/en-gb/projects/captcha/api.md
new file mode 100644
index 0000000..40498f5
--- /dev/null
+++ b/docs/en-gb/projects/captcha/api.md
@@ -0,0 +1,248 @@
+---
+title: Captcha API
+---
+
+## Package Overview
+
+The library is organised under the base package `com.onixbyte.captcha` with the following structure:
+
+| Package | Description |
+|---------------------------------------------|---------------------------------------|
+| `com.onixbyte.captcha` | Core interfaces |
+| `com.onixbyte.captcha.impl` | Default implementations |
+| `com.onixbyte.captcha.text` | Text producer and renderer interfaces |
+| `com.onixbyte.captcha.text.impl` | Text producer and renderer impls |
+| `com.onixbyte.captcha.text.enums` | Text-related enums |
+| `com.onixbyte.captcha.background` | Background producer interface |
+| `com.onixbyte.captcha.background.impl` | Background producer implementations |
+| `com.onixbyte.captcha.noise` | Noise producer interface |
+| `com.onixbyte.captcha.noise.impl` | Noise producer implementations |
+| `com.onixbyte.captcha.gimpy` | Distortion engine interface |
+| `com.onixbyte.captcha.gimpy.impl` | Distortion engine implementations |
+
+---
+
+## Producer
+
+The top-level interface responsible for creating CAPTCHA images with text drawn on them.
+
+```java
+Producer captcha = DefaultCaptchaProducer.builder()
+ .textProducer(textProducer)
+ .wordRenderer(wordRenderer)
+ .gimpyEngine(gimpyEngine)
+ .backgroundProducer(backgroundProducer)
+ .width(200)
+ .height(50)
+ .borderDrawn(true)
+ .borderColour(Color.BLACK)
+ .borderThickness(1)
+ .build();
+
+String text = captcha.createText();
+BufferedImage image = captcha.createImage(text);
+```
+
+### DefaultCaptchaProducer Builder
+
+| Method | Default Value | Description |
+|---------------------|---------------------------------------------|---------------------------------------|
+| `textProducer` | `DefaultTextProducer.builder().build()` | The text producer to use |
+| `wordRenderer` | `DefaultWordRenderer.builder().build()` | The word renderer to use |
+| `gimpyEngine` | `WaterRipple.builder().build()` | The distortion engine to use |
+| `backgroundProducer`| `DefaultBackgroundProducer.builder().build()`| The background producer to use |
+| `width` | `200` | Width of the CAPTCHA image |
+| `height` | `50` | Height of the CAPTCHA image |
+| `borderDrawn` | `true` | Whether a border is drawn |
+| `borderColour` | `Color.BLACK` | The colour of the border |
+| `borderThickness` | `1` | The thickness of the border |
+
+---
+
+## Text
+
+### TextProducer
+
+Interface for creating CAPTCHA text strings.
+
+```java
+public interface TextProducer {
+ String getText();
+}
+```
+
+#### DefaultTextProducer
+
+Generates random text with configurable length and character set.
+
+```java
+DefaultTextProducer textProducer = DefaultTextProducer.builder()
+ .length(6) // default: 6
+ .chars("ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray()) // default: a-z, A-Z, 0-9
+ .build();
+```
+
+| Method | Default Value | Description |
+|----------|-----------------------------------------------------------|--------------------------------|
+| `length` | `6` | Length of generated text |
+| `chars` | `a-z`, `A-Z`, `0-9` (62 characters) | Characters used for generation |
+
+### WordRenderer
+
+Interface for rendering text onto an image.
+
+```java
+public interface WordRenderer {
+ BufferedImage renderWord(String word, int width, int height);
+}
+```
+
+#### DefaultWordRenderer
+
+Renders text with configurable font, colour, and spacing.
+
+```java
+DefaultWordRenderer wordRenderer = DefaultWordRenderer.builder()
+ .fontSize(40) // default: 40
+ .fonts("Arial", "Courier") // default: Arial, Courier
+ .fontColour(Color.BLACK) // default: Color.BLACK
+ .charSpace(2) // default: 2
+ .fontStyle(FontStyle.BOLD) // default: FontStyle.BOLD
+ .build();
+```
+
+| Method | Default Value | Description |
+|-------------|-----------------------------------|-----------------------------------------|
+| `fontSize` | `40` | Font size in pixels |
+| `fonts` | `["Arial", "Courier"]` | Font families to use (randomly chosen) |
+| `fontColour`| `Color.BLACK` | Font colour |
+| `charSpace` | `2` | Space between characters in pixels |
+| `fontStyle` | `FontStyle.BOLD` | Font style to apply |
+
+### FontStyle
+
+Defines the supported font styles for rendering CAPTCHA text.
+
+| Value | Corresponding AWT Constant | Description |
+|---------------|-------------------------------------|------------------------------|
+| `PLAIN` | `java.awt.Font.PLAIN` | Plain style |
+| `BOLD` | `java.awt.Font.BOLD` | Bold style |
+| `ITALIC` | `java.awt.Font.ITALIC` | Italic style |
+| `BOLD_ITALIC` | `java.awt.Font.BOLD | Font.ITALIC` | Bold and italic combined |
+
+---
+
+## GimpyEngine
+
+Interface for applying image distortion effects.
+
+```java
+public interface GimpyEngine {
+ BufferedImage getDistortedImage(BufferedImage baseImage);
+}
+```
+
+### WaterRipple
+
+Applies a water ripple distortion effect. Extends `AbstractGimpyEngine` and adds noise automatically.
+
+```java
+WaterRipple gimpy = WaterRipple.builder()
+ .noiseProducer(DefaultNoiseProducer.builder().build()) // default: DefaultNoiseProducer
+ .build();
+```
+
+| Method | Default Value | Description |
+|-----------------|---------------------------------------------|------------------------------|
+| `noiseProducer` | `DefaultNoiseProducer.builder().build()` | The noise producer to use |
+
+### FishEyeGimpy
+
+Applies a fish-eye distortion effect with horizontal and vertical lines over the image.
+
+```java
+FishEyeGimpy gimpy = FishEyeGimpy.builder()
+ .build();
+```
+
+### ShadowGimpy
+
+Applies a shadow and ripple effect. Extends `AbstractGimpyEngine` and adds noise automatically.
+
+```java
+ShadowGimpy gimpy = ShadowGimpy.builder()
+ .noiseProducer(DefaultNoiseProducer.builder().build()) // default: DefaultNoiseProducer
+ .build();
+```
+
+| Method | Default Value | Description |
+|-----------------|---------------------------------------------|------------------------------|
+| `noiseProducer` | `DefaultNoiseProducer.builder().build()` | The noise producer to use |
+
+---
+
+## Noise
+
+### NoiseProducer
+
+Interface for adding noise to an image.
+
+```java
+public interface NoiseProducer {
+ void makeNoise(BufferedImage image, float factorOne, float factorTwo,
+ float factorThree, float factorFour);
+}
+```
+
+#### DefaultNoiseProducer
+
+Adds noise curves with configurable colour.
+
+```java
+DefaultNoiseProducer noise = DefaultNoiseProducer.builder()
+ .noiseColour(Color.BLACK) // default: Color.BLACK
+ .build();
+```
+
+| Method | Default Value | Description |
+|---------------|---------------|---------------------|
+| `noiseColour` | `Color.BLACK` | The noise colour |
+
+#### NoNoiseProducer
+
+A no-op implementation that does not add any noise to the image.
+
+```java
+NoiseProducer noise = NoNoiseProducer.builder()
+ .build();
+```
+
+---
+
+## Background
+
+### BackgroundProducer
+
+Interface for adding background to an image.
+
+```java
+public interface BackgroundProducer {
+ BufferedImage addBackground(BufferedImage image);
+}
+```
+
+#### DefaultBackgroundProducer
+
+Creates a gradient background with configurable start and end colours.
+
+```java
+DefaultBackgroundProducer background = DefaultBackgroundProducer.builder()
+ .colourFrom(Color.WHITE) // default: Color.LIGHT_GRAY
+ .colourTo(Color.LIGHT_GRAY) // default: Color.WHITE
+ .build();
+```
+
+| Method | Default Value | Description |
+|--------------|--------------------|---------------------------------|
+| `colourFrom` | `Color.LIGHT_GRAY` | The starting colour of gradient |
+| `colourTo` | `Color.WHITE` | The ending colour of gradient |
diff --git a/docs/en-gb/projects/captcha/index.mdx b/docs/en-gb/projects/captcha/index.mdx
new file mode 100644
index 0000000..b2d29b0
--- /dev/null
+++ b/docs/en-gb/projects/captcha/index.mdx
@@ -0,0 +1,89 @@
+---
+title: Captcha
+---
+
+import { Tabs, Tab } from "@rspress/core/theme"
+
+## Introduction
+
+Captcha is a Java library for generating CAPTCHA images. This project is a spiritual successor to Google's Kaptcha, modernised for contemporary development practices.
+
+With Captcha, you can easily generate customisable CAPTCHA images with various distortion effects, noise, and background options to integrate into your Java applications.
+
+## Features
+
+- **Easy Integration** — Simple builder-based API for quick setup and configuration.
+- **Customisable CAPTCHA Generation** — Configure text length, character sets, font styles, and colours.
+- **Multiple Distortion Effects** — Choose from Water Ripple, Fish Eye, and Shadow effects.
+- **Configurable Noise** — Add noise lines with custom colours, or disable noise entirely.
+- **Gradient Backgrounds** — Customisable gradient background colours.
+- **Clean, Modern Codebase** — Well-documented, type-safe, and easy to extend.
+
+## Installation
+
+
+
+ ```kotlin title="build.gradle.kts"
+ dependencies {
+ implementation("com.onixbyte:captcha:1.0.0")
+ }
+ ```
+
+
+ ```xml title="pom.xml"
+
+
+ com.onixbyte
+ captcha
+ 1.0.0
+
+
+ ```
+
+
+
+## Quick Start
+
+```java
+import com.onixbyte.captcha.Producer;
+import com.onixbyte.captcha.background.BackgroundProducer;
+import com.onixbyte.captcha.background.impl.DefaultBackgroundProducer;
+import com.onixbyte.captcha.gimpy.GimpyEngine;
+import com.onixbyte.captcha.gimpy.impl.WaterRipple;
+import com.onixbyte.captcha.impl.DefaultCaptchaProducer;
+import com.onixbyte.captcha.noise.NoiseProducer;
+import com.onixbyte.captcha.noise.impl.DefaultNoiseProducer;
+import com.onixbyte.captcha.text.TextProducer;
+import com.onixbyte.captcha.text.WordRenderer;
+import com.onixbyte.captcha.text.impl.DefaultTextProducer;
+import com.onixbyte.captcha.text.impl.DefaultWordRenderer;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+public class CaptchaExample {
+
+ public static void main(String[] args) throws IOException {
+ // Create a CAPTCHA producer with default configurations
+ Producer captcha = DefaultCaptchaProducer.builder().build();
+
+ // Generate text and create the image
+ String captchaText = captcha.createText();
+ BufferedImage captchaImage = captcha.createImage(captchaText);
+
+ // Save the image to a file
+ ImageIO.write(captchaImage, "png", new File("captcha.png"));
+
+ System.out.println("CAPTCHA text: " + captchaText);
+ }
+}
+```
+
+This generates a CAPTCHA image with a 6-character random text and saves it as a PNG file.
+
+## License
+
+Captcha is open-source software released under the MIT License.
diff --git a/docs/zh-hans/projects/captcha/api.md b/docs/zh-hans/projects/captcha/api.md
new file mode 100644
index 0000000..60370ad
--- /dev/null
+++ b/docs/zh-hans/projects/captcha/api.md
@@ -0,0 +1,248 @@
+---
+title: Captcha API
+---
+
+## 包结构概览
+
+库的代码组织在基础包 `com.onixbyte.captcha` 下,结构如下:
+
+| 包 | 描述 |
+|---|---|
+| `com.onixbyte.captcha` | 核心接口 |
+| `com.onixbyte.captcha.impl` | 默认实现 |
+| `com.onixbyte.captcha.text` | 文本生成器和渲染器接口 |
+| `com.onixbyte.captcha.text.impl` | 文本生成器和渲染器实现 |
+| `com.onixbyte.captcha.text.enums` | 文本相关枚举 |
+| `com.onixbyte.captcha.background` | 背景生成器接口 |
+| `com.onixbyte.captcha.background.impl` | 背景生成器实现 |
+| `com.onixbyte.captcha.noise` | 噪点生成器接口 |
+| `com.onixbyte.captcha.noise.impl` | 噪点生成器实现 |
+| `com.onixbyte.captcha.gimpy` | 扭曲引擎接口 |
+| `com.onixbyte.captcha.gimpy.impl` | 扭曲引擎实现 |
+
+---
+
+## Producer
+
+负责创建 CAPTCHA 图片并在其上绘制文字的顶层接口。
+
+```java
+Producer captcha = DefaultCaptchaProducer.builder()
+ .textProducer(textProducer)
+ .wordRenderer(wordRenderer)
+ .gimpyEngine(gimpyEngine)
+ .backgroundProducer(backgroundProducer)
+ .width(200)
+ .height(50)
+ .borderDrawn(true)
+ .borderColour(Color.BLACK)
+ .borderThickness(1)
+ .build();
+
+String text = captcha.createText();
+BufferedImage image = captcha.createImage(text);
+```
+
+### DefaultCaptchaProducer Builder
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `textProducer` | `DefaultTextProducer.builder().build()` | 文本生成器 |
+| `wordRenderer` | `DefaultWordRenderer.builder().build()` | 文字渲染器 |
+| `gimpyEngine` | `WaterRipple.builder().build()` | 扭曲引擎 |
+| `backgroundProducer` | `DefaultBackgroundProducer.builder().build()` | 背景生成器 |
+| `width` | `200` | 验证码图片宽度 |
+| `height` | `50` | 验证码图片高度 |
+| `borderDrawn` | `true` | 是否绘制边框 |
+| `borderColour` | `Color.BLACK` | 边框颜色 |
+| `borderThickness` | `1` | 边框厚度 |
+
+---
+
+## Text
+
+### TextProducer
+
+用于创建 CAPTCHA 文本字符串的接口。
+
+```java
+public interface TextProducer {
+ String getText();
+}
+```
+
+#### DefaultTextProducer
+
+生成可配置长度和字符集的随机文本。
+
+```java
+DefaultTextProducer textProducer = DefaultTextProducer.builder()
+ .length(6) // 默认: 6
+ .chars("ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray()) // 默认: a-z, A-Z, 0-9
+ .build();
+```
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `length` | `6` | 生成文本的长度 |
+| `chars` | `a-z`、`A-Z`、`0-9`(共 62 个字符) | 生成文本使用的字符集 |
+
+### WordRenderer
+
+将文字渲染到图片上的接口。
+
+```java
+public interface WordRenderer {
+ BufferedImage renderWord(String word, int width, int height);
+}
+```
+
+#### DefaultWordRenderer
+
+使用可配置的字体、颜色和间距渲染文字。
+
+```java
+DefaultWordRenderer wordRenderer = DefaultWordRenderer.builder()
+ .fontSize(40) // 默认: 40
+ .fonts("Arial", "Courier") // 默认: Arial, Courier
+ .fontColour(Color.BLACK) // 默认: Color.BLACK
+ .charSpace(2) // 默认: 2
+ .fontStyle(FontStyle.BOLD) // 默认: FontStyle.BOLD
+ .build();
+```
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `fontSize` | `40` | 字号(像素) |
+| `fonts` | `["Arial", "Courier"]` | 字体族(随机选择) |
+| `fontColour` | `Color.BLACK` | 字体颜色 |
+| `charSpace` | `2` | 字符间距(像素) |
+| `fontStyle` | `FontStyle.BOLD` | 字体样式 |
+
+### FontStyle
+
+定义 CAPTCHA 文字渲染支持的字体样式。
+
+| 值 | 对应的 AWT 常量 | 描述 |
+|---|---|---|
+| `PLAIN` | `java.awt.Font.PLAIN` | 普通样式 |
+| `BOLD` | `java.awt.Font.BOLD` | 粗体 |
+| `ITALIC` | `java.awt.Font.ITALIC` | 斜体 |
+| `BOLD_ITALIC` | `java.awt.Font.BOLD | Font.ITALIC` | 粗斜体 |
+
+---
+
+## GimpyEngine
+
+用于对图片应用扭曲效果的接口。
+
+```java
+public interface GimpyEngine {
+ BufferedImage getDistortedImage(BufferedImage baseImage);
+}
+```
+
+### WaterRipple
+
+应用水波纹扭曲效果。继承 `AbstractGimpyEngine`,自动添加噪点。
+
+```java
+WaterRipple gimpy = WaterRipple.builder()
+ .noiseProducer(DefaultNoiseProducer.builder().build()) // 默认: DefaultNoiseProducer
+ .build();
+```
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `noiseProducer` | `DefaultNoiseProducer.builder().build()` | 噪点生成器 |
+
+### FishEyeGimpy
+
+应用鱼眼扭曲效果,在图片上绘制水平和垂直线条。
+
+```java
+FishEyeGimpy gimpy = FishEyeGimpy.builder()
+ .build();
+```
+
+### ShadowGimpy
+
+应用阴影和波纹效果。继承 `AbstractGimpyEngine`,自动添加噪点。
+
+```java
+ShadowGimpy gimpy = ShadowGimpy.builder()
+ .noiseProducer(DefaultNoiseProducer.builder().build()) // 默认: DefaultNoiseProducer
+ .build();
+```
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `noiseProducer` | `DefaultNoiseProducer.builder().build()` | 噪点生成器 |
+
+---
+
+## Noise
+
+### NoiseProducer
+
+向图片添加噪点的接口。
+
+```java
+public interface NoiseProducer {
+ void makeNoise(BufferedImage image, float factorOne, float factorTwo,
+ float factorThree, float factorFour);
+}
+```
+
+#### DefaultNoiseProducer
+
+使用可配置的颜色添加噪点曲线。
+
+```java
+DefaultNoiseProducer noise = DefaultNoiseProducer.builder()
+ .noiseColour(Color.BLACK) // 默认: Color.BLACK
+ .build();
+```
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `noiseColour` | `Color.BLACK` | 噪点颜色 |
+
+#### NoNoiseProducer
+
+不向图片添加任何噪点的空实现。
+
+```java
+NoiseProducer noise = NoNoiseProducer.builder()
+ .build();
+```
+
+---
+
+## Background
+
+### BackgroundProducer
+
+向图片添加背景的接口。
+
+```java
+public interface BackgroundProducer {
+ BufferedImage addBackground(BufferedImage image);
+}
+```
+
+#### DefaultBackgroundProducer
+
+创建具有可配置起始和结束颜色的渐变背景。
+
+```java
+DefaultBackgroundProducer background = DefaultBackgroundProducer.builder()
+ .colourFrom(Color.WHITE) // 默认: Color.LIGHT_GRAY
+ .colourTo(Color.LIGHT_GRAY) // 默认: Color.WHITE
+ .build();
+```
+
+| 方法 | 默认值 | 描述 |
+|---|---|---|
+| `colourFrom` | `Color.LIGHT_GRAY` | 渐变起始颜色 |
+| `colourTo` | `Color.WHITE` | 渐变结束颜色 |
diff --git a/docs/zh-hans/projects/captcha/index.mdx b/docs/zh-hans/projects/captcha/index.mdx
new file mode 100644
index 0000000..68dd663
--- /dev/null
+++ b/docs/zh-hans/projects/captcha/index.mdx
@@ -0,0 +1,89 @@
+---
+title: Captcha
+---
+
+import { Tabs, Tab } from "@rspress/core/theme"
+
+## 介绍
+
+Captcha 是一个用于生成 CAPTCHA 验证码图片的 Java 库。本项目是 Google Kaptcha 的精神继承者,按照现代开发实践进行了现代化改造。
+
+通过 Captcha,您可以轻松生成可定制的 CAPTCHA 图片,支持多种扭曲效果、噪点和背景选项,轻松集成到您的 Java 应用中。
+
+## 特性
+
+- **易于集成** — 基于 Builder 的简洁 API,快速完成配置和集成。
+- **可定制的验证码生成** — 配置文本长度、字符集、字体样式和颜色。
+- **多种扭曲效果** — 支持水波纹、鱼眼和阴影效果。
+- **可配置噪点** — 使用自定义颜色添加噪点线条,或完全禁用噪点。
+- **渐变背景** — 可自定义的渐变背景颜色。
+- **简洁现代的代码** — 文档完善、类型安全且易于扩展。
+
+## 安装
+
+
+
+ ```kotlin title="build.gradle.kts"
+ dependencies {
+ implementation("com.onixbyte:captcha:1.0.0")
+ }
+ ```
+
+
+ ```xml title="pom.xml"
+
+
+ com.onixbyte
+ captcha
+ 1.0.0
+
+
+ ```
+
+
+
+## 快速开始
+
+```java
+import com.onixbyte.captcha.Producer;
+import com.onixbyte.captcha.background.BackgroundProducer;
+import com.onixbyte.captcha.background.impl.DefaultBackgroundProducer;
+import com.onixbyte.captcha.gimpy.GimpyEngine;
+import com.onixbyte.captcha.gimpy.impl.WaterRipple;
+import com.onixbyte.captcha.impl.DefaultCaptchaProducer;
+import com.onixbyte.captcha.noise.NoiseProducer;
+import com.onixbyte.captcha.noise.impl.DefaultNoiseProducer;
+import com.onixbyte.captcha.text.TextProducer;
+import com.onixbyte.captcha.text.WordRenderer;
+import com.onixbyte.captcha.text.impl.DefaultTextProducer;
+import com.onixbyte.captcha.text.impl.DefaultWordRenderer;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+public class CaptchaExample {
+
+ public static void main(String[] args) throws IOException {
+ // 使用默认配置创建 CAPTCHA 生产者
+ Producer captcha = DefaultCaptchaProducer.builder().build();
+
+ // 生成文本并创建图片
+ String captchaText = captcha.createText();
+ BufferedImage captchaImage = captcha.createImage(captchaText);
+
+ // 保存图片到文件
+ ImageIO.write(captchaImage, "png", new File("captcha.png"));
+
+ System.out.println("CAPTCHA 文本: " + captchaText);
+ }
+}
+```
+
+以上代码生成一张包含 6 位随机字符的 CAPTCHA 图片,并将其保存为 PNG 文件。
+
+## 许可证
+
+Captcha 是采用 MIT 许可证发布的开源软件。