Fastshot is an open-source Python-based screenshot tool for Windows, inspired by Snipaste. It provides a versatile and user-friendly interface for capturing and annotating screenshots, making it ideal for research, reading papers, writing code, and various comparison and demonstration scenarios.
- Always on Top: Screenshots stay on top, allowing easy comparison.
- Smooth Zoom and Drag: Effortlessly zoom and drag screenshots.
- Annotation Tools: Hand-drawing and text mode for annotations.
- Clipboard Export: Easily export screenshots to the clipboard.
- OCR Integration: Extract text from images using the built-in OCR plugin powered by PaddleOCR.
You can install Fastshot from PyPI:
pip install fastshot
Once installed, you can start Fastshot from the command line:
fastshot
Ctrl+F1
: Activate screen capturing mode.
Ctrl+P
: Activate paint mode.
Ctrl+T
: Activate text mode.
Esc
: Exit the current mode.
❌ Close
: Close the current window.
💾 Save As...
: Save the current screenshot.
🖌️ Paint
: Activate paint mode.
↩️ Undo
: Undo the last action.
🚪 Exit Edit
: Exit paint or text mode.
📋 Copy
: Copy the current screenshot to the clipboard.
🔤 Text
: Activate text mode.
🔍 OCR: Perform OCR on the current screenshot and copy the result to the clipboard.
Fastshot supports a plugin mechanism that allows developers to extend its functionality. Here is a brief description of how to develop a plugin:
-
Create a Plugin Class: Your plugin should be a Python class with the desired functionality. For example, an OCR plugin might look like this:
from paddleocr import PaddleOCR from PIL import Image import win32clipboard import tkinter as tk class PluginOCR: def __init__(self): self.ocr_engine = PaddleOCR(use_angle_cls=True, lang='en') def ocr(self, image): result = self.ocr_engine.ocr(image, cls=True) ocr_text = "\n".join([line[1][0] for res in result for line in res]) self.copy_to_clipboard(ocr_text) return ocr_text def copy_to_clipboard(self, text): win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT) win32clipboard.CloseClipboard() def show_message(self, message, parent): label = tk.Label(parent, text=message, bg="yellow", fg="black", font=("Helvetica", 10)) label.pack(side="bottom", fill="x") parent.after(3000, label.destroy)
-
Register the Plugin: In the
SnipasteApp
class, you can register your plugin by adding it to the plugin list.class SnipasteApp: def load_plugins(self): plugin_modules = ['fastshot.plugin_ocr'] # Add your plugin module here for module_name in plugin_modules: module = importlib.import_module(module_name) plugin_class = getattr(module, 'PluginOCR') self.plugins[module_name] = plugin_class()
-
Invoke the Plugin: You can invoke the plugin from your application code, such as from a menu item.
def ocr(self): plugin = self.app.plugins.get('fastshot.plugin_ocr') if plugin: img_path = 'temp.png' self.img_label.zoomed_image.save(img_path) result = plugin.ocr(img_path) plugin.show_message("OCR result updated in clipboard", self.img_window)
By following these steps, you can create and integrate custom plugins to extend the functionality of Fastshot.
- Clone the repository:
git clone https://github.com/yourusername/fastshot.git
cd fastshot
- Install the dependencies:
pip install -r requirements.txt
You can run the tests using:
pytest tests/
We welcome contributions! Please read our Contributing Guidelines for more details.
This project is licensed under the Apache License - see the LICENSE file for details.
- ~~tk window force trigger ~~
ppocr[Default]screenpen integration- hyder
transprent windowfixed on top- pyinstaller.
gdt-4o multimodal task(OCR/QA)- UI(PySimpleGUI/WebPortal)
- TTS/STT