seqmill is a deterministic, offline command-line toolbox for DNA sequence files in FASTA and FASTQ formats. It is for students, lab members and scripts that need quick sequence statistics, conversions, searches, alignments or FASTQ quality filtering without a bioinformatics suite.
There is nothing to install. Use Python 3.11 or newer and run python -m seqmill from the repository root. To run the checks, install the development tools first with python -m pip install pytest ruff.
Run the commands below as python -m seqmill COMMAND ... from the repository root. File arguments are paths or - for standard input.
usage: seqmill stats FILE...
seqmill revcomp [--width N] FILE...
seqmill translate [--frame F] [--to-stop] [--width N] FILE...
seqmill orfs [--min N] [--strand both|forward|reverse] FILE...
seqmill digest --enzyme NAME[,NAME]... [--circular] FILE...
seqmill align [--mode global|local] [--match N] [--mismatch N] [--gap N] [--width N] A B
seqmill motif [--mismatches N] [--both-strands] PATTERN FILE...
seqmill qc [--trim-end Q] [--min-length N] [--min-quality Q] FILE...
For example, save this supplied fixture as reads.fa in the repository root:
>seq1 first read
ACGTACGTAC
GTNNAC
>seq2
GGGCCC
>seq3 empty
Run python -m seqmill stats reads.fa from the repository root. Its output is:
file records bases min max mean n50 gc% n
reads.fa 3 22 0 16 7.3 16 65.0 2
stats FILE...reports each file's record count, total bases, minimum and maximum sequence lengths, mean length, N50, GC percentage and number ofNbases.revcomp [--width N] FILE...writes reverse-complemented records. FASTA and FASTQ formats are preserved, and FASTQ quality strings are reversed along with their sequences.translate [--frame F] [--to-stop] [--width N] FILE...writes translated proteins as FASTA. Choose any of the six reading frames; negative frames use the reverse complement, and--to-stoptruncates translation before the first stop codon.orfs [--min N] [--strand both|forward|reverse] FILE...reports complete open reading frames from all six frames, or from only the three forward or the three reverse frames with--strand.--minsets the minimum amino-acid length, excluding the stop codon.digest --enzyme NAME[,NAME]... [--circular] FILE...reports restriction fragments for one or more named enzymes. Use--circularto digest sequences as rings.align [--mode global|local] [--match N] [--mismatch N] [--gap N] [--width N] A Baligns the first record from each input, globally or locally, with configurable scores and output width.motif [--mismatches N] [--both-strands] PATTERN FILE...searches for IUPAC DNA motifs, optionally allowing mismatches and checking both strands.qc [--trim-end Q] [--min-length N] [--min-quality Q] FILE...trims and filters FASTQ reads by end quality, length and mean quality, then reports read and trimming counts on standard error.
seqmill exits with 0 on success, 1 for a negative answer (a table command with no rows or a local alignment with no alignment), and 2 for an error. Errors are written to standard error and leave standard output empty.
From the repository root, run the checks with:
python -m ruff check .
python -m pytest -qBuilt with BAKED