Check the first PDF before queuing more textbooks
FreePEP passed 32 tests in our sandbox, but that result doesn't tell you whether a textbook arrived intact. The project's own troubleshooting describes a macOS case where the interface says a task finished and the output folder stays empty. For someone choosing a downloader, inspecting the first file is a more useful acceptance check than trusting the progress display.
The main README is primarily Chinese, and an English guide exists. FreePEP targets China's People's Education Press digital textbook platform. It offers a local WebUI and command-line selection by educational stage, subject and grade. English instructions help you operate it, but the documented catalog selectors still use Chinese names. Its scope is the PEP catalog.
What happened when we ran it
Our sandbox installed FreePEP in 16 seconds, built it in 3 seconds and completed pytest in 5 seconds, with 32 passed and 0 failed of 32. The October 22, 2026 run used commit 973857c. It recorded 56 dependencies occupying 224 MB, and pip-audit reported 0 known vulnerabilities. The audit result describes that recorded scan, not a guarantee about the software or future dependencies.
The checkout contained 29 files, roughly 2,545 lines of source and 0.8 MB. Our configuration recorded 3 CPUs, 8 GB of RAM and image ghcr.io/astral-sh/uv:python3.12-bookworm. The image label doesn't establish the executed Python or operating-system version. The scan found one CI workflow file and a tests directory, with no Dockerfile.
All the recorded steps succeeded. The supplied record contains no completed textbook download, browser interaction or inspection of a generated PDF. Passing repository checks therefore doesn't establish that the publisher's catalog is reachable, that a selected edition is available or that every page ends up in the output. Those are the outcomes a reader still needs to verify.
Chromium needs its own setup step
The English guide starts the WebUI at http://127.0.0.1:8000 through python webui.py, with output under ./downloads. It also requires playwright install chromium after the Python dependencies. Don't stop after the package step and assume the browser is ready. No paid API credential appears in these instructions, but downloading still depends on access to the publisher's platform.
The Chinese FAQ explains why online reading and downloading can behave differently on macOS. Reading opens the publisher's page in your own browser. Downloading uses background Chromium through Playwright. The FAQ says a missing browser executable can interrupt that task while the interface mistakenly reports completion. This is documented upstream behavior, not a failure we observed in the sandbox.
An empty output directory calls for reading the terminal running the WebUI and checking the browser requirement. The FAQ also directs users to exception output if problems persist. It doesn't justify diagnosing every failed job as missing Chromium. Our run supplies no download-error log to diagnose.
The README also documents a portable Windows executable and packaging that includes Chromium. That may suit someone who doesn't want to maintain a Python environment. We didn't evaluate the executable. The measured dependency footprint belongs to our source environment and should not become a size claim for that separate distribution.
The stated use restrictions exclude a commercial archive
The English README prohibits commercial or profitable use. It attributes textbook copyright to PEP and the respective rights holders, asks users to delete downloaded material within 24 hours and points long-term users toward official publications. A permanent commercial textbook archive falls outside that stated use. The repository's MIT code license doesn't itself provide permission to redistribute the textbooks.
For a permitted personal-study task, narrow the selection before starting. The README asks users to throttle requests and avoid fetching the whole catalog at once. Its batch script can organize files by stage and grade, but that convenience is no reason to download books you don't need. Confirm the edition and inspect the first PDF before expanding the job.
The repository's last push was September 19, 2026. The closed macOS empty-output report was updated on October 8. That combination doesn't support calling the project abandoned. It also doesn't establish that every reported failure was fixed: a closed status alone isn't evidence of a matching change or a successful download on your platform.
Component alternatives cover narrower jobs
Playwright for Python automates Chromium, Firefox and WebKit through one API. Use it directly when you're building a permitted browser workflow for a different source. It's already part of FreePEP's approach, so choosing it means taking responsibility for the catalog and PDF workflow yourself. It doesn't provide a replacement PEP application out of the box.
img2pdf converts raster images to PDF. Choose it when you already have permitted page images and only need assembly. It won't retrieve a textbook for you. Neither component is a substitute for the entire FreePEP workflow, and we have no comparative runtime or output-quality measurements for them.
Our editorial scale is 1 for major documented barriers, 2 for substantial limitations, 3 for a usable path with material verification gaps, 4 for detailed supporting evidence within scope, and 5 for broad independent validation. Setup and maturity receive 3 because repository checks passed while the browser download outcome remains unverified. Documentation receives 4 for operating instructions and the specific missing-browser FAQ. Community support is unassessed.
Try one title you have permission to use. Open the PDF in the output folder, compare it with the selected edition and check its pages before trusting a larger queue.

