Skip to main content

manulint

Catch manuscript reporting and formatting issues before submission — locally, with no API key.

Tests PyPI License: MIT

简体中文 · Example report · Report a bug

manulint reads Word (.docx), Markdown, and plain-text manuscripts. It flags expressions such as p = 0.000, repeated references, broken reference numbering, and low-resolution embedded figures. Select an original-research, review, or case-report profile instead of applying IMRaD to every article.

manulint rule check | score 84/100 | 4 flagged rules / 4 warnings; score is unvalidated
[FLAG] Found 1 rounded p = 0.000 expressions; report p < 0.001 instead.
[FLAG] image1.png (occurrence 1): effective resolution 60 dpi (minimum axis).
[FLAG] Missing reference numbers (first 10): [3].
[FLAG] Repeated reference labels: [4].
[WARN] Found 1 potentially repeated reference entries after removing number labels.

This is an abbreviated excerpt from the synthetic demonstration. The example contains no patient data and supports no scientific claim. The score counts rule flags; it is not a validated measure of publication readiness.

Try it in one command

Python 3.9 or later is required. From an installed package:

python -m manulint.demo --out-dir demo-output

This creates a fictional Markdown manuscript, a Word version with a deliberately low-resolution figure, and demo-output/report.md. It does not download data. Existing example files are preserved; choose a new output directory to run it again.

Install

Install the latest published version:

python -m pip install --upgrade manulint

This README documents 0.1.1. If the latest published version is older, install the repository version to use the profiles and new demonstration:

git clone https://github.com/chenmei24/manulint.git
cd manulint
python -m pip install .

Check your manuscript

manulint paper.docx --md report.md
manulint paper.md --article-type review --language en --md review-report.md
manulint case.docx --article-type case-report --language zh
manulint paper.docx --p-style upper --md report.md
Option Default Effect
--article-type original|review|case-report original Selects generic section and sample-size/test rules
--language en|zh|auto auto Controls punctuation rules and abstract counting; output is English
--p-style lower|upper|either either Warns about p/P case only when a particular style is selected
--md OUT.md none Writes an escaped Markdown report; never use the source path
--cta https://... none Adds an optional service URL to your report
--version — Prints the installed version

Exit codes: 0 means checks completed, including when flags exist. 2 means invalid/empty/unreadable input, an invalid option, or a report-write failure. Exit 0 is not a scientific validation result. No report or score is generated for an empty manuscript.

What is checked

Category Examples Limits
Structure Recognized headings, profile-specific required sections, disclosure headings Generic profiles are not journal templates; absence of a heading is not proof that content is missing
Ethics IRB/ethics-committee and informed-consent keywords; review profile skips these checks Keywords cannot establish ethical adequacy or validate approval, consent, or exemptions
Statistics Rounded p = 0.000, operator spacing, configured p/P case, sample-size/test/CI expressions Does not recalculate results or assess test suitability; sample-size/test checks apply only to original research
Figures Each body drawing resolved by relationship ID; effective DPI is the minimum of horizontal and vertical axes 300 dpi is a screening threshold, not a universal journal requirement; vectors and unsupported images are explicitly skipped
References Missing number labels, repeated labels, order, and matching text after removing labels No DOI lookup, bibliographic verification, or citation-to-reference matching
Language Chinese punctuation in English profiles, repeated spaces, mixed Fig./Figure Does not check grammar; automatic language detection can be wrong
Metadata Abstract count excluding heading and structured labels; English title length Counts English whitespace-delimited words or Chinese characters; journal counting conventions may differ

Important extraction limits

  • Word extraction covers body paragraphs, table text, and modern embedded body drawings, in document order. Headers, footers, text boxes, footnotes, equations, charts, legacy VML pictures, and tracked-change text are not fully assessed.
  • Reusing the same image at different displayed sizes creates separate resolution findings. DPI checks use displayed width and height, not image-file metadata. Cropping and journal-specific figure requirements still need manual review.
  • Section detection expects recognizable English/Chinese headings. A structured abstract is separated using a later Keywords or Introduction heading; without those boundaries its end can be ambiguous. Unusual headings may be missed.
  • Numbered references support [1], (1), 1., and 1). Wrapped continuation lines are joined; author-year duplicates are compared per non-empty line. References stop at recognized later sections or another Markdown heading.
  • Files stay on the local computer. Remote Markdown images are not downloaded. Reports may contain excerpts and filenames from your manuscript, so review them before sharing.

Scoring and interpretation

The score is max(0, 100 - 3 × flagged rules - warnings). These weights are a convenience, have not been validated, and can count related issues more than once. Use the individual findings and the target journal's author instructions. A score of 100 does not establish completeness, scientific quality, ethical adequacy, or acceptance likelihood.

Contribute

Please report a reproducible rule failure with a small synthetic example. Do not upload confidential manuscripts or patient data. See CONTRIBUTING.md for local checks and CHANGELOG.md for changes.

python -m pip install .
python -m unittest discover -s tests -v
python -m manulint.demo --out-dir demo-output

CI is configured for Linux and Windows on Python 3.9, 3.11, and 3.13. Tagged PyPI publication runs the regression suite and distribution checks before trusted publishing.

License

MIT.

Launch tutorials and share images / 推广教程与展示图

Metadata

Release files for manulint 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for manulint 0.1.1
File Size Uploaded Provenance
manulint-0.1.1.tar.gz 21.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for manulint 0.1.1
File Interpreter ABI Platform
manulint-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 39.3 kB

Release files / manulint-0.1.1.tar.gz

Download URL manulint-0.1.1.tar.gz
Size 21.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8433f63c66c9a4e3b0c0dfdd613675a88e8c0a1e12cda8988af7c6f20b343bbc
BLAKE2b-256 checksum
How to use checksums
16fa0bb9ac03db68d071a30e7d20a9f03a2a62c360151856554501824c4a1135
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / manulint-0.1.1-py3-none-any.whl

Download URL manulint-0.1.1-py3-none-any.whl
Size 17.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b0a9eec447787d21e4e8e1cefd422fbcee7060a3e92f021ab173279f6c60794a
BLAKE2b-256 checksum
How to use checksums
9a828fd5f5d598f0e5062f8351ebc221439dd9cbe6c844b007fd32d667678584
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Security for manulint 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for manulint-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page