# JamTools: a Python desktop toolbox for screenshots, OCR and LAN file transfer

> JamTools is a cross platform Python and PyQt5 utility collection that bundles scrolling screenshots, offline text recognition, screen recording, media conversion, keyboard and mouse macro replay and LAN file transfer into one tray application. It ships prebuilt packages for Windows, macOS and Ubuntu, and the source layout shows the packaging is done with cx_Freeze and an optional Cython compile step.

**fandesfyf/JamTools** — JamTools是一个跨平台的小工具集类软件，支持Windows7/8/10/11、Macos、ubuntu系统(其他系统可以直接从源码编译打包)。包含了(滚动/区域)截屏、录屏、文字识别、多种语言互译、多媒体格式转换、鼠标键盘动作录制播放、局域网文件传输、聊天机器人等功能，完全开源!

- Repository: https://github.com/fandesfyf/JamTools
- Stars: 735 · Forks: 113
- Language: Python
- License: NOASSERTION
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/fandesfyf-jamtools

## One tray application that hides its own window

JamTools is a cross platform collection of small utilities written in Python, and the topics attached to the repository list what is inside: screenshot and screen recording, a translator, a format converter, a keyboard recorder, file sharing over a local network, a chatbot, and image and video conversion work driven by ffmpeg. The primary language of the repository is Python and the GUI toolkit is PyQt5.

The most interesting design decision is the small-window mode. The README describes it as the system tray plus a small interface, and in that mode the main window is not shown at all, while the screenshot, the small translation window and the screen recorder are still reachable through hotkeys or the tray. All the output appears in the small window rather than opening the main interface, and double-clicking the tray icon enters the main interface.

That is a different posture from the usual utility suite, where a main window with tabs hosts everything and the tray icon is a secondary entry point. Here the tray is primary and the main window is the exception.

The project also splits some of its modules into separate repositories, which tells you which parts are considered standalone: a screenshot project, a scrolling screenshot project, a video player project, a web-based file transfer project and a client-side file transfer project. The top-level tree in the repository lists the modules that remain: the screenshot, scrolling screenshot, controller, public helper, resource, web transmission and client transmission modules, alongside a translator and a speech module, with a PaddleOCRModel directory and the build scripts.

The project is presented as fully open source, and the repository licence is recorded as a custom licence that GitHub cannot classify, so the LICENSE file is the place to check the terms rather than assuming a standard one.

The project is not archived and the last push was on 2026-09-28. The release history is uneven: 0.14.5 for Ubuntu on 2025-09-26, then 0.14.1B and 0.14.0B for Windows in 2023.

## Screenshots, scrolling capture and recording share one surface

The screenshot module is the entry point for most of the rest, and it is invoked with the Alt+z hotkey.

The screenshot interface supports region capture, polygon capture and scrolling capture, and it can copy either the captured file or the raw image data to the clipboard. There is a toolbar on the left with simple drawing tools such as a pen and an eraser, and the README says that what QQ and WeChat have is present and more. The scrolling capture supports both automatic and manual scrolling, and the project claims a higher stitching accuracy than FSCapture.

Offline text recognition and translation are integrated into the screenshot window, so you can capture and read in one action, and the screenshot can also trigger a recording of the selected region, which is a small feature that saves a second step when you want both.

There is a pinned screenshot mode as well, where a capture is fixed to the screen and can be zoomed with the mouse wheel, given transparency, given a border, kept on top and sent through text recognition.

Screen recording is the Alt+c hotkey and supports setting the recording region, the bitrate, the frame rate, whether to record the mouse, hardware acceleration, and gif as one of the output formats. If no region is chosen it records the full screen, and the recording can be played back directly from the notification when it finishes.

The small-window mode matters here too, because the README says that in that mode the screenshot, the small translation window, the screen recording and the macro record and playback are all reachable, and that most of the features can be called from the system tray.

## Offline OCR is built on PaddleOCR, and translation is wired into everything

The text recognition feature is described as completely offline, and the README states that it is based on paddleocr for offline recognition. The offline part is the important claim, since it means the extraction of text from a screen does not require sending an image to a remote service.

There are three ways to use it. The first is extraction from a screenshot, with a small recognition window already integrated into the screenshot interface. The second is batch recognition, where you upload one or more images and get the text out. The third is the right-drag region text feature, where you press Alt, drag a region with the right mouse button anywhere on the screen, and the tool extracts the text from that region plus a configurable number of pixels above and below the drag path.

Translation is a separate feature with no hotkey of its own, although in minimal mode it can be used from the floating window. It does translation between multiple languages, and it is already integrated into the screenshot and other interfaces so you can translate in place rather than copying text out and pasting it in.

There is also a clipboard watcher, which is more clever than it first sounds. It monitors clipboard content, and within a configurable number of seconds, seven by default, of the clipboard changing, pressing shift+ctrl+z triggers a set of actions: automatic translation between Chinese and English, opening a web page automatically, and copying a Baidu cloud share extraction code. The translation small window can be popped up with alt+x. The details are configurable in the settings centre.

The chatbot is described as an easter egg feature rather than a serious one, and it is a bot from a free Chinese artificial intelligence platform with multi-turn conversation after you supply a custom user id. The README notes the server is a bit slow because the platform is free, mentions that a knowledge base training option is provided, and says the chat history is kept to 50000 bytes by default.

## Macro replay and LAN file transfer are the two heavyweight features

The controller module records and replays every mouse and keyboard action, at variable speed and without a stated limit on repetitions, for automating repetitive operations. It supports simple image comparison as a playback condition, and it can send a recorded action as a tutorial to someone else. The hotkeys are Alt+1 to start recording and Alt+2 to play or stop, with F4 as a force stop, and the README is careful to point out that the 1 is the one above the letter keys, not the number row. The recorded action files carry the .jam extension and can be double-clicked or dragged in to run, which the project compares to a Chinese automation scripting tool.

File transfer over a local network is the other substantial feature, and it has two forms. The client-to-client form needs both machines running JamTools, connects through a connection code, and supports bidirectional transfer of files or folders with resumable transfers and multithreaded transfer. The web form needs only one side to have JamTools installed: you pick a folder, select a network adapter, and it generates a share link that other devices on the same network can open or scan, and if you tick the allow upload box in the web page, uploads are possible, with a password option for the share.

The README reports a measured single-direction transfer rate of about 7MB/s between a phone and a computer on the same hotspot, and 10M/s bidirectional between two computers on a campus network, with the caveat that the figure depends on the network configuration.

The media conversion module is the other large surface. It does cropping and concatenation of images, video and audio, batch resolution and format changes, batch bitrate, frame rate and resolution adjustment on video, batch video compression, format conversion including gif, batch mosaicking and a blur-based watermark removal, audio extraction, removal and mixing, frame extraction, image to video conversion and batch renaming. The README itself says the feature list is long and to explore it.

## Packaging is cx_Freeze with an optional Cython compile pass

The build system is the part of the repository that tells you how much work an install is, and the setup.py file is unusually explicit about it.

The packaging tool is cx_Freeze, with a setup and an Executable defined, and the module list handed to it names the entry points: CoreModels, jamcontroller, WEBFilesTransmitter, clientFilesTransmitter, jamscreenshot, jampublic, jamroll_screenshot, Logger, jamspeak, jamWidgets, jam_transtalater and the PaddleOCRModel package.

The comments in that file describe what running it does. The main.py file exists only to hold the library imports, to avoid packaging errors, and the one-click build script rewrites it automatically. The setup parses the imports of every module in the list, formats the required libraries into main.py so that the packager can find them, and otherwise you would get missing library errors. It also configures the src project directory automatically and then runs the packager by command line. Producing a Windows installer needs an NSIS environment.

Two switches control the behaviour. WithCompile decides whether the sources are compiled, and Debug decides whether the packaged program shows a console window. The version string is in the same file, and the comments state that compiling turns all source files into C and then into pyd files, which protects the source and slightly improves the running speed, and that it requires a configured C and Cython environment.

The repository tree also shows the binary assets the build expects. The bin directory holds ffmpeg and gifsicle executables for macOS, Linux and Windows, which the comments say you have to download yourself. The compiled OpenCV libraries are not in the cloned repository because they are too large, and the notes point you at a full opencv-contrib-python install instead. The html directory holds the web front end for the file transfer feature, with a login page, a download page and an upload page, plus jQuery and spark-md5 for checksums in the browser.

The top-level listing of the repository is a flat set of Python modules with a few platform-specific DLLs, a build directory, an installer spec, a ci_scripts directory and a site-packages directory committed alongside the source.

## Conclusion

JamTools is worth looking at if you want one small utility window instead of seven separate tray applications, since the small-window mode deliberately hides the main interface and exposes the whole feature set through hotkeys and the system tray. It is the wrong tool if you need maintained packages for current operating systems, because the newest listed release for Ubuntu is from September 2025 and the Windows builds date from 2023. Before you build it yourself, verify three things yourself: that the OpenCV libraries the project expects are present, since the cloned repository omits the large prebuilt binaries and the setup notes point you at a full opencv-contrib-python install instead, that the ffmpeg and gifsicle executables in the bin directory are present for the recording and conversion features, and that the licence file permits your use, since the repository licence is recorded as a custom one that GitHub cannot classify and the project is presented as fully open source.

## FAQ

### What is JamTools and which platforms does it support?

JamTools is a cross platform collection of small desktop utilities written in Python with PyQt5, supporting Windows 7, 8, 10 and 11, macOS and Ubuntu, with other systems expected to build from source. The repository licence is recorded as a custom licence that GitHub cannot classify, and the project presents itself as fully open source.

### Does JamTools do text recognition offline?

Yes. The text recognition feature is described as completely offline and is based on paddleocr. You can extract text from a screenshot through the small recognition window, batch process uploaded images, or press Alt and drag a region with the right mouse button anywhere on the screen to pull the text out.

### How does JamTools transfer files over a local network?

In two ways. The client mode needs JamTools on both machines, connects through a connection code and supports bidirectional transfer with resume and multithreading. The web mode needs only one side installed: pick a folder and a network adapter to generate a share link other devices on the same network can open, with optional uploads and a share password.

### How do I build JamTools from source?

The packaging uses cx_Freeze through setup.py, which parses the module imports, rewrites main.py with the required libraries, configures the src directory and runs the packager. Two switches control it, WithCompile for compiling the sources to C and pyd files with Cython, and Debug for a console window, and a Windows installer additionally needs an NSIS environment.

### What are the keyboard shortcuts in JamTools?

Alt+z opens the screenshot, Alt+c starts screen recording, Alt+1 starts macro recording and Alt+2 plays or stops it, with F4 as a force stop. Alt plus a right mouse drag extracts text from a region, alt+x pops up the translation window, and shift+ctrl+z triggers the clipboard actions within a configurable number of seconds of a clipboard change.

## Sources

- [fandesfyf/JamTools on GitHub](https://github.com/fandesfyf/JamTools)
- [Issues](https://github.com/fandesfyf/JamTools/issues)
- [README](https://github.com/fandesfyf/JamTools/blob/main/README.md)
- [Releases](https://github.com/fandesfyf/JamTools/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/fandesfyf-jamtools
