Metadata-Version: 2.4
Name: notolog
Version: 1.2.3
Summary: Cross-platform Markdown editor with optional AI assistance, local LLMs, and file encryption
License: MIT
License-File: LICENSE
Keywords: notolog,python,markdown,editor,ai,llm,text,notes,pyside6,qt,gguf,onnx,llama-cpp,local-llm,privacy,encryption,note-taking,syntax-highlighting,ai-assistant,on-device-llm,offline-ai,phi-4,mistral,qwen,writing-assistant,markdown-editor,cross-platform,open-source
Author: Vadim Bakhrenkov
Requires-Python: >=3.10,<3.15
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: Chinese (Simplified)
Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
Classifier: Natural Language :: Finnish
Classifier: Natural Language :: French
Classifier: Natural Language :: Georgian
Classifier: Natural Language :: German
Classifier: Natural Language :: Greek
Classifier: Natural Language :: Hindi
Classifier: Natural Language :: Indonesian
Classifier: Natural Language :: Italian
Classifier: Natural Language :: Japanese
Classifier: Natural Language :: Korean
Classifier: Natural Language :: Latin
Classifier: Natural Language :: Portuguese
Classifier: Natural Language :: Russian
Classifier: Natural Language :: Spanish
Classifier: Natural Language :: Swedish
Classifier: Natural Language :: Turkish
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Text Editors
Classifier: Topic :: Text Editors :: Documentation
Classifier: Topic :: Text Editors :: Text Processing
Classifier: Topic :: Text Processing
Classifier: Topic :: Text Processing :: General
Classifier: Topic :: Text Processing :: Markup :: Markdown
Provides-Extra: llama
Provides-Extra: tts
Requires-Dist: Markdown (>=3.10.3,<4.0.0)
Requires-Dist: PySide6_Essentials (>=6.11.2,<6.12.0)
Requires-Dist: Pygments (>=2.21.0,<3.0.0)
Requires-Dist: cryptography (>=50.0.1,<51.0.0)
Requires-Dist: emoji (>=2.15.0,<3.0.0)
Requires-Dist: llama-cpp-python (>=0.3.35,<0.4.0) ; extra == "llama"
Requires-Dist: numpy (>=2.2.0,<3.0.0)
Requires-Dist: onnxruntime-genai (>=0.11.2,<0.12.0) ; python_version == "3.10"
Requires-Dist: onnxruntime-genai (>=0.15.2,<1.0.0) ; python_version >= "3.11" and python_version < "3.15"
Requires-Dist: packaging (>=26.3,<27.0)
Requires-Dist: psutil (>=7.2.2,<8.0.0)
Requires-Dist: qasync (>=0.28.0,<0.29.0)
Requires-Dist: sounddevice (>=0.5.6,<0.6.0) ; extra == "tts"
Requires-Dist: tomli (>=2.4.1,<3.0.0)
Requires-Dist: tomli_w (>=1.2.0,<2.0.0)
Project-URL: Changelog, https://github.com/notolog/notolog-editor/blob/main/CHANGELOG.md
Project-URL: Documentation, https://notolog.app
Project-URL: Homepage, https://notolog.com
Project-URL: IssueTracker, https://github.com/notolog/notolog-editor/issues
Project-URL: Repository, https://github.com/notolog/notolog-editor
Description-Content-Type: text/markdown

<!-- {"notolog.app": {"created": "2023-12-25 18:59:43.806614", "updated": "2026-08-30 00:00:00.000000"}} -->
# Notolog Editor

<p align="center">
<img src="https://raw.githubusercontent.com/notolog/notolog-editor/main/docs/assets/notolog-logo-blue.png" alt="Notolog Markdown Editor" width="72" height="72" /><br/>
</p>

[![PyPI - Version](https://img.shields.io/pypi/v/notolog)](https://pypi.org/project/notolog/) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/notolog?logo=anaconda&logoColor=green)](https://anaconda.org/conda-forge/notolog) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/notolog)](https://pypi.org/project/notolog/) [![GitHub License](https://img.shields.io/github/license/notolog/notolog-editor?color=yellow)](https://github.com/notolog/notolog-editor/blob/main/LICENSE) [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/notolog/notolog-editor/tests.yaml?color=green)](https://github.com/notolog/notolog-editor/actions/workflows/tests.yaml) [![PyPI - Downloads](https://img.shields.io/pypi/dm/notolog)](https://pypistats.org/packages/notolog) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/notolog)](https://anaconda.org/conda-forge/notolog)

Notolog is an open-source Markdown editor built with Python and PySide6, featuring AI-powered assistance and local-first privacy.

📖 **[Documentation](https://notolog.app)** | 🪲 **[Report Issues](https://github.com/notolog/notolog-editor/issues)** | 💡 **[Request Features](https://github.com/notolog/notolog-editor/discussions)** | 💬 **[Discussions](https://github.com/notolog/notolog-editor/discussions)**

---

## Quick Install

```sh
pip install notolog
notolog  # Launch the app
```

<details>
<summary>Other installation methods</summary>

**With llama.cpp support:**
```sh
pip install "notolog[llama]"
```

**With Text-to-Speech audio support:**
```sh
pip install "notolog[tts]"
```

**Via Conda:**
```sh
conda install notolog -c conda-forge
```

**Ubuntu/Debian:** Download from [notolog-debian releases](https://github.com/notolog/notolog-debian/releases/latest)

**From source:**
```sh
git clone https://github.com/notolog/notolog-editor.git
cd notolog-editor
python3 -m venv notolog_env && source notolog_env/bin/activate
pip install .
python -m notolog.app
```
</details>

---

![Notolog - Python Markdown Editor - UI Example](https://raw.githubusercontent.com/notolog/notolog-editor/main/docs/assets/images/ui/notolog-ui-example.png)

## Features

- **Markdown Editor** - Real-time syntax highlighting in edit mode (implemented specifically for Notolog), live preview, adaptive line numbers, code blocks
- **AI Assistant** - Supports: OpenAI API, ONNX Runtime GenAI (local), and llama.cpp (local, GGUF models)
- **Text-to-Speech** - Read documents or selections aloud locally with NeMo-Speech.cpp and MagpieTTS
- **File Encryption** - PBKDF2HMAC key derivation with Fernet (AES-128 CBC mode) for optional file encryption
- **Multi-Language** - 19 languages supported
- **Customizable** - 6 built-in themes
- **Cross-Platform** - Windows, macOS, Linux

See the [User Guide](https://notolog.app/user-guide/) for complete feature documentation.


## Requirements

- **Python 3.10–3.14** ([python.org](https://python.org))
- 4 GB RAM minimum (8+ GB for local AI models)


## Installation

Using a virtual environment is recommended:

```sh
python3 -m venv notolog_env
source notolog_env/bin/activate  # Linux/macOS
notolog_env\Scripts\activate     # Windows
pip install notolog
```

For detailed instructions including conda and Debian packages, see [Getting Started](https://notolog.app/getting-started/).


## AI Assistant

Notolog supports three AI backends:

- **OpenAI API** - Cloud-based inference via OpenAI-compatible endpoints
- **On-Device LLM** - Local inference using ONNX Runtime GenAI (e.g. Phi-3, Llama)
- **Module llama.cpp** - Local inference with GGUF quantized models (e.g. Llama, Mistral, Qwen)

See the [AI Assistant Guide](https://notolog.app/ai-assistant/) for setup instructions.


## Text-to-Speech

The built-in Text-to-Speech module reads Markdown documents, selected text, or text from the cursor aloud locally,
with play, pause, and stop controls. It supports spoken heading announcements and separate options to replace inline
and multiline code with short labels.

The context-length slider controls the maximum characters in each speech request. Its far-right position
uses the whole document between heading breaks. Larger contexts increase startup time and memory use;
the runtime's limits still apply. Speech text and generated audio travel through local pipes and memory,
without temporary text or audio files. Operating-system swap, crash dumps, and external recording are
outside this protection.

Install the audio dependencies with `pip install "notolog[tts]"` (sounddevice/PortAudio). Linux pip users
also need their system PortAudio library, such as `libportaudio2` on Debian/Ubuntu, plus `curl` and CA certificates
for model downloads. In **Settings → Text-to-Speech**, enable the
module and use **Get runtime** to find the compatible NeMo-Speech.cpp release. Extract the complete archive,
select `bin/nemo-speech` (`bin/nemo-speech.exe` on Windows), choose a model folder, and download the models.
The runtime and models are installed separately; they are not bundled with Notolog.

Choose the document language in the module settings. English is the default; Spanish, German, French,
Italian, Vietnamese, and Hindi are also supported. Mandarin and Japanese require a runtime built with
support for those languages. Language detection is not automatic, and heading/code labels use English.

See the [Text-to-Speech Guide](docs/text-to-speech.md) for setup, supported models, and troubleshooting.
See [Text-to-Speech third-party notices](ThirdPartyNotices.md#text-to-speech) for runtime, model, and audio
library licenses. Notolog is not affiliated with or endorsed by NVIDIA.


## Development

```sh
git clone https://github.com/notolog/notolog-editor.git
cd notolog-editor
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
python -m notolog.app
```

**Run tests:**
```sh
python dev_install.py test
python -m pytest
```

See [CONTRIBUTING.md](https://github.com/notolog/notolog-editor/blob/main/CONTRIBUTING.md) for guidelines.


## License

Notolog is open-source software licensed under the [MIT License](https://github.com/notolog/notolog-editor/blob/main/LICENSE).

This project uses third-party libraries, each subject to its own license. See [ThirdPartyNotices.md](https://github.com/notolog/notolog-editor/blob/main/ThirdPartyNotices.md) for details.


## Security

Notolog prioritizes data protection and user privacy:

- **Encryption**: File encryption (optional) uses PBKDF2HMAC key derivation with Fernet (AES-128 CBC mode).
- **Auto-Save**: Changes are saved automatically to prevent data loss.
- **Privacy**: No telemetry or tracking. Local-only AI inference options available.

For vulnerability reporting, see [SECURITY.md](https://github.com/notolog/notolog-editor/blob/main/SECURITY.md).


## Disclaimers

### Third-Party AI Services and Libraries

This project integrates third-party AI services and libraries:

- **OpenAI API**: Users are required to supply their own API keys and adhere to OpenAI's applicable terms, policies, and [API documentation](https://platform.openai.com/docs/api-reference).
- **ONNX Runtime GenAI**: Used for local ONNX model inference. More info: [onnxruntime-genai](https://github.com/microsoft/onnxruntime-genai)
- **llama.cpp**: Used for local GGUF model inference via [llama-cpp-python](https://github.com/abetlen/llama-cpp-python).

*Notolog is developed independently and is not affiliated with these organizations or projects.*

### Legal

- **Compliance**: Users are responsible for ensuring their use complies with applicable laws and regulations.
- **Liability**: The developers disclaim liability for misuse or non-compliance with legal or regulatory requirements.
- **Trademarks**: All trademarks and brand names are the property of their respective owners and are used for identification purposes only.

---

⭐ If you find Notolog useful, please consider giving it a star on [GitHub](https://github.com/notolog/notolog-editor)!

---
_This README.md file has been crafted and edited using Notolog Editor._

