The catalog is broad, but the target is one Chinese publisher
FreePEP's README describes a catalog of more than 780 textbooks from the People's Education Press platform. The app filters that catalog by school stage, subject, grade, or keyword, then downloads page images and joins them into a PDF. Its Web interface is aimed at someone clicking through checkboxes, while the CLI accepts the same choices as arguments. A separate batch script can arrange finished books into school-stage and grade folders.
The project is Chinese-first: its interface labels, catalog fields, issue tracker, and main README use Chinese. A full English README is now present and covers setup, command examples, architecture, and the disclaimer. This remains a tool for PEP's Chinese catalog rather than a general ebook downloader.
A 39-second install still leaves Chromium to fetch
Our commit a13102a environment installed 53 Python packages in 39 seconds and occupied 221 MB. The configured build step then succeeded in 1 second. Source installation has another documented step: Playwright must download its Chromium browser. That browser is needed for the page-fetching and WAF interaction, so a successful package install alone does not leave the downloader ready to retrieve a book.
The repository itself was only 0.7 MB at the measured commit, with 18 files and roughly 2,252 lines of source. Playwright opens a browser, Pillow joins downloaded JPG pages, FastAPI serves the local UI on port 8000, and the output directory must hold temporary images plus the resulting PDFs. The Windows v1.4 archive is about 369 MB because it packages the application and a portable browser for users without Python.
What happened when we ran it
Our sandbox installed FreePEP in 39 seconds and completed its build in 1 second. Pip-audit reported 0 known vulnerabilities across the 53 installed packages. We used a fresh Debian container with 3 CPUs, 8 GB of RAM, no secrets, and an unprivileged user. The checkout consumed 0.7 MB before installation and 221 MB after its Python dependencies were present.
Tests were skipped because commit a13102a exposed no test script or target. That checkout also had 0 CI workflows, no Dockerfile, and no tests directory. We did not download a textbook, solve the publisher's slider, or validate a generated PDF in this run. The result says the dependencies install and the configured build completes; it does not measure download reliability, PDF quality, or how the publisher responds to repeated requests.
v1.4 added CI after the commit we measured
FreePEP v1.4 was published on September 19, 2026, three days after our sandbox run. The current tree adds tests/test_all.py, development requirements, and one GitHub Actions workflow across Python 3.9 through 3.12. Those tests cover local catalog behavior, encryption round trips, an offline skip path, and Web API responses. They do not turn our skipped result into a pass because our lab ran the earlier a13102a commit.
The same release added a high-resolution option and a fallback when an original image returns 404. Its one release asset is a 64-bit Windows ZIP, leaving macOS and Linux users on the source path. There is still no Dockerfile. Pull request 4 proposes Docker Compose and multi-platform builds, but it remained open when checked, so those files should not be treated as part of the supported setup.
Two open reports end with an empty download folder
Issues 5 and 7 describe the most damaging failure for this kind of tool: the UI says a task finished, yet the download directory contains no PDF. Issue 5 concerns a source-based WebUI run and mentions a missing import plus a single-book action that still does nothing. Issue 7 reports the same empty-folder outcome on macOS. Neither report was closed when we checked, so a green notification is not enough evidence that a book was saved.
The README gives one macOS explanation: users who install Python packages but omit playwright install chromium can browse online while background downloads fail. That diagnosis may explain some cases, not every open report. After any job, check that the expected file exists, has a plausible size, and opens through several pages. A bulk queue only multiplies a silent failure if the first PDF was never inspected.
The WAF cookie makes downloads dependent on someone else's site
Issue 9 says the PEP book host returns a verification page with HTTP 200 when the required Alibaba Cloud WAF cookie is absent. FreePEP automates the slider interaction through Playwright, while its local catalog and decryption logic decide which page URLs to request. A change to that verification page, cookie behavior, or image path can break downloads without changing any FreePEP file.
Batch mode defaults to 3 worker threads, and the README demonstrates raising that count to 10. The same README asks users not to download the entire catalog at once and warns against excessive load on PEP's servers. Use the lower setting, start with one title, and stop when verification failures appear.
The README restricts what you should do with the PDFs
The project tells users to delete downloaded material within 24 hours and directs long-term readers toward official copies. It limits the downloader to technical exchange, reverse-engineering learning, and personal educational research, while prohibiting commercial or profitable use. The MIT license applies to FreePEP's code. The README separately says that PEP and other rights holders retain copyright in the downloaded textbooks.
GitHub recorded 1,028 stars, 170 forks, and 5 combined open issues and pull requests on September 23, 2026. The last push was September 19, the same day as v1.4, so this is active software with a fast-growing audience. It is also less than a month old. Use the official platform when online reading is enough; use FreePEP only when a limited local copy is worth managing Chromium, upstream breakage, and the stated usage limits.

