SkillAgentSearch skills...

Kainote

Kainote subtitles editor and player

Install / Use

/learn @bjakja/Kainote
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

| Download | Help Us Translate! | Join Discord Server | | :---: | :---: | :---: | | release | Translation status | Discord |

Kainote

Kainote is a powerful subtitle editor designed for a wide range of tasks. It utilizes FFMS2 for high-precision work like typesetting, timing, and advanced editing, and DirectShow for general video playback and minor subtitle adjustments.

Features

  • Comprehensive Format Support: Natively handles ASS, SRT, MPL2, MDVD, and TMP formats. SSA files are automatically converted to ASS upon loading.
  • Versatile Format Conversion: Easily convert subtitles between any of the supported formats.
  • Translation Mode: A dedicated mode that displays the original text alongside the translation field, streamlining the localization process.
  • Efficient Navigation: Quickly seek to lines that have not yet been translated or committed to final.
  • Bulk Tagging: Apply ASS tags to multiple selected lines simultaneously.
  • Visual Tools: Visually adjust tags like \pos, \move, \org, \clip, \iclip, and vector drawings (\p) directly on the video frame.
  • Precision Zoom: Zoom in on the video, even in fullscreen mode, to create highly accurate vector clips and drawings.
  • Integrated Time Shifting: Adjust subtitle timing directly within the main grid and sync changes with the current audio/video position.
  • Advanced Audio Tools: Visualize audio as a spectrum or waveform display. Includes an auto-splitting tool perfect for timing karaoke lyrics.
  • Automation 4 Support: Supported Automation 4 scripts with DependencyControl.
  • Subtitle Comparison: Compare two different subtitle files side-by-side in separate tabs.
  • Advanced Subtitle Filtering: Filter the subtitle view to hide unnecessary lines and focus on your work.

Beta Builds

You can download the latest beta version of Kainote from the link below.

Download Kainote Beta

Please Note: Beta builds are unstable and intended for testing purposes. Features may be incomplete or contain bugs. If you encounter issues or have feedback, please join our Discord server.

Contributing

Translations

Want to see Kainote in your native language? You can help us by contributing translations on Weblate, a user-friendly platform for localization.

Help Translate Kainote on Weblate

Translation status

Support & Community

For questions, help, or to join the community, find us on Discord!

Join the Kainote Discord Server

Building from Source

Prerequisites

Before you begin, you must install the following software:

  • Visual Studio 2022 with the "Desktop development with C++" workload.
    • Note: The solution uses the x64 compiler to build the ICU library, a process that can consume up to 16GB of RAM. Ensure you have sufficient memory or a large page file configured.
  • DirectX SDK (June 2010)
  • Windows 10/11 SDK: This can be installed via the Visual Studio Installer.
  • NASM: Download and install the latest stable version of NASM. The installer must be configured to add nasm.exe to your system's PATH.

1. Initial Project Setup

  1. Download the following libraries and extract their contents directly into the Thirdparty folder. The final paths should look like Thirdparty/boost, Thirdparty/icu, etc.
  2. The solution requires FFMS2 (FFmpeg Source 2), which must be compiled from source. Follow the steps in the next section carefully.

2. Building Dependencies (FFmpeg & FFMS2)

These steps use MSYS2 to create a build environment for compiling the libraries with the Microsoft Visual C++ (MSVC) compiler.

A. Build external codecs AV1 and H266

  1. Download libAOM for AV1 clone it using git git clone https://aomedia.googlesource.com/aom

    • Open a x64 Native Tools Command Prompt for VS 2022 from your Start Menu. Set path to build output folder.
    • type command with path to AOM folder.
    cmake path_to_AOM -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -DAOM_TARGET_CPU=generic -DBUILD_SHARED_LIBS=0 -DENABLE_DOCS=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DENABLE_CCACHE=1 -DCONFIG_AV1_ENCODER=0
    
    • edit aom.pc generated in build folder.
    • set include path to folder containing aom folder from aom source and config from build folder .
    • sat also library folder.
    • place aom.pc to C:\msys64\usr\lib\pkgconfig
  2. Download VVENC for h266 download VVENC from Github https://github.com/fraunhoferhhi/vvenc

    • Open a x64 Native Tools Command Prompt for VS 2022 from your Start Menu. Set path to build output folder.
    • type command with path to VVENC folder.
    cmake path_to_VVENC -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DVVENC_LIBRARY_ONLY=1
    
    • edit libvvenc.pc generated in build folder.
    • set include path to folder containing vvenc.
    • sat also library folder.
    • place libvvenc.pc to C:\msys64\usr\lib\pkgconfig

B. Configure MSYS2 Environment

  1. Install MSYS2: Download msys2-x86_64-{date}.exe from msys2.org and install it to the default location, C:/msys64.
  2. Enable MSVC Toolchain: Edit the file C:/msys64/msys2_shell.cmd. Find the line rem set MSYS2_PATH_TYPE=inherit and uncomment it by removing rem.
  3. Launch the Build Shell:
    • Open a x64 Native Tools Command Prompt for VS 2022 from your Start Menu.
    • Inside this command prompt, execute C:/msys64/msys2_shell.cmd to start the MSYS2 shell. All subsequent commands in this section should be run from this shell.
  4. Install Build Tools: Run the following commands to update the package database and install necessary tools.
    pacman -Syu make diffutils yasm nasm pkg-config
    
  5. Prevent Linker Conflict: MSYS2 has its own link.exe, which conflicts with MSVC's linker. Rename it temporarily:
    mv /usr/bin/link.exe /usr/bin/link.exe.bak
    

C. Build FFmpeg (FFMS2 Prerequisite)

  1. Download FFmpeg: Download the source code for a recent, stable FFmpeg release, like n7.1.1. Unpack it to a simple path, e.g., C:/ffmpeg.
  2. Configure & Build: In your MSYS2 shell, navigate to the FFmpeg directory and run the following commands. The configure script prepares a 64-bit build with minimal features needed for FFMS2.
    # Navigate to the source directory
    cd /c/ffmpeg
    
    # Configure the build for MSVC
    ./configure --toolchain=msvc --enable-gpl --enable-version3 --disable-programs --disable-doc --disable-avdevice --disable-postproc --disable-avfilter --enable-dxva2 --enable-d3d11va
    
    # Compile and install
    make
    make install
    
    This will install the FFmpeg headers and libraries into C:/msys64/usr/local.

D. Update FFMS2 source

  1. FFMS2 update: Source update require to add custom code. Download FFMS2 from GitHub repository. Change it in Thirdparty/FFMS2 folder. Open Visual Studio and add custom code in file API/ffms.h before #endif on end of file.
	//Kainote functions
	FFMS_API(const char*) FFMS_GetTrackName(FFMS_Indexer* Indexer, int Track);
	FFMS_API(const char*) FFMS_GetTrackLanguage(FFMS_Indexer* Indexer, int Track);
	typedef struct FFMS_Chapter {
		const char* Title;
		int64_t Start;
		int64_t End;
	} FFMS_Chapter;
	typedef struct FFMS_Chapters {
		FFMS_Chapter* Chapters;
		int NumOfChapters;
	} FFMS_Chapters;
	FFMS_API(FFMS_Chapters*) FFMS_GetChapters(FFMS_Indexer* Indexer);
	FFMS_API(void) FFMS_FreeChapters(FFMS_Chapters** Chapters);
	typedef struct FFMS_Attachment {
		const char* Filename;
		const char* Mimetype;
		const uint8_t* Data;
		int DataSize;
	} FFMS_Attachment;
	FFMS_API(FFMS_Attachment*) FFMS_GetAttachment(FFMS_Indexer* Indexer, int Track);
	FFMS_API(void) FFMS_FreeAttachment(FFMS_Attachment** Attachment);
	typedef int (FFMS_CC* GetSubtitlesCallback)(int64_t Start, int64_t Duration, int64_t Total, const char* Line, void* ICPrivate);
	FFMS_API(void) FFMS_GetSubtitles(FFMS_Indexer* Indexer, int Track, GetSubtitlesCallback IC, void* ICPrivate);
	FFMS_API(const char*) FFMS_GetSubtitleExtradata(FFMS_Indexer* Indexer, int Track);
	FFMS_API(const char*) FFMS_GetSubtitleFormat(FFMS_Indexer* Indexer, int Track);

Add custom code in file Indexing/Indexing.h on end of struct FFMS_Indexer

	//Kainote functions
	const char* GetTrackName(int Track);
	const char* GetTrackLanguage(int Track);
	FFMS_Chapters* GetChapters();
	FFMS_Attachment* GetAttachment(int Track);
	void GetSubtitles(int Track, GetSubtitlesCallback IC, void* ICPrivate);
	const char* GetSubtitleExtradata(int Track);
	const char* GetSubtitleFormat(int Track);

3. Building Kainote

  1. Configure Project Paths: If you installed the Windows SDK or DirectX SDK to a location other than the C: drive, you mus

Related Skills

View on GitHub
GitHub Stars111
CategoryDevelopment
Updated1d ago
Forks14

Languages

C++

Security Score

95/100

Audited on Apr 4, 2026

No findings