Model or dataset
IvanIsCoding/ResuLLMe avatar
IvanIsCoding/ResuLLMe

ResuLLMe: An LLM Pipeline That Rewrites Your CV and Renders It Through LaTeX

Enhance your résumé with Large Language Models

476 stars134 forksJinjaMIT

At a glance

What is it?
ResuLLMe takes a PDF or Word CV, asks an LLM to improve it against published résumé guidelines, converts the result to JSON Resume, and renders a new PDF with LaTeX. It is a Streamlit app with a Pixi and Docker path, and its real constraint is the quality of the extraction step.
Who is it for?
Adopt ResuLLMe if you already keep your CV in a structured format and want a repeatable way to reshape it, or if you want to fork the LaTeX templates and prompts for your own pipeline. Skip it if you expect a one-click rewrite of a messy scanned PDF, or if you cannot send your work history to OpenAI or Gemini.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 60 days ago.
What is it written in?
Mainly Jinja, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Problem ResuLLMe Targets: Rewriting a CV Without Hand-Editing LaTeX

Most résumé tooling splits into two camps. One camp is visual editors that produce a PDF but leave the content untouched, so the candidate still writes every bullet. The other camp is prompt collections: you paste your CV into a chat window, get prose back, and then have to move it into a document by hand. ResuLLMe sits between them. The README describes it as an app that "uses Large Language Models (LLMs) to tailor résumés" with the stated goal of helping candidates "avoid common mistakes that occur while applying for jobs." The audience is narrow and specific: people who already have a CV in PDF or Word form, who are willing to send it to a hosted model, and who want the output as a typeset PDF rather than a chat transcript. The repository topics list json-resume and latex-resume, which tells you the intended user is comfortable with a structured intermediate format. If your workflow is a single Word document you email to recruiters, the JSON step will feel like overhead rather than a feature.

How the Pipeline Moves a CV From PDF to Typeset PDF

The README lays out three stages. First, ResuLLMe receives your previous CV as a PDF or Word document. Second, the LLM does two jobs: it improves the résumé "following published résumé guidelines by well-reputed schools" and it converts the résumé into JSON Resume format. Third, the app renders that JSON using LaTeX to produce a new PDF. So the LLM output is not free text; it is a structured document that a template consumes. That design choice matters because it means the model has to satisfy a schema, not just sound good. It also means the LaTeX template is the thing that determines how the result looks, and the model only determines what it says. The README notes that both OpenAI and Gemini are supported, so the model provider is a runtime choice rather than a hard dependency. The rendering step is where the project's own history shows: a note states that ResuLLMe "was updated to support macOS and Windows" and that this required switching the LaTeX engine, with the older behavior preserved on the v1 branch. Anyone comparing output against an older tutorial should check which branch they are reading.

The Extraction Step Is Where ResuLLMe Actually Fails

The README includes an explicit warning: "If ResuLLMe fails to extract data from your CV, you can manually download the JSON output, edit it and re-render at the Render JSON Resume tab." That sentence is the most informative line in the document. It admits that parsing a PDF or Word file into structured JSON is lossy, and it provides a manual escape hatch rather than claiming the problem is solved. The failure mode is predictable. Multi-column layouts, tables, text boxes and scanned images are the usual suspects in PDF extraction, and a CV that relies on them can come out with scrambled ordering or dropped sections. The manual JSON path is a reasonable mitigation, but it changes the product: you are no longer using ResuLLMe as an automatic tool, you are using it as a renderer with an optional LLM assist. That is a legitimate use, and arguably the more reliable one, but it is not what the marketing sentence on the homepage suggests. Budget for a review pass on the JSON regardless of how clean your source file looks.

Running ResuLLMe Locally With Pixi or Docker

There are two documented ways to get the app running. The native path requires Pixi, installed with the shell script the README gives: curl -fsSL https://pixi.sh/install.sh | bash. After that, pixi run run-app starts the app, which the README says is available at https://localhost:8501/. The second path is Docker, and the README calls it "the simplest way": docker-compose up -d, with the same localhost:8501 address. Note that the README writes the URL with https even though Streamlit's default port 8501 serves plain HTTP, so if the browser refuses the connection, try http on the same port. The Docker route is the one to prefer for a first look because it avoids installing a package manager on your machine. The Pixi route is the one to prefer if you intend to edit the Jinja templates or the prompts, since you will want the source tree and a reproducible environment. The README does not document environment variables for API keys in the excerpt provided, so where the OpenAI or Gemini credential is supplied is something to confirm in the repository itself before you start.

Why JSON Resume Is the Right Intermediate Format Here

Choosing JSON Resume as the pivot format buys ResuLLMe two things. It decouples the model from the template, so adding a new LaTeX design does not require touching the prompt, and it gives the user a checkpoint they can inspect and edit. The contributing section reflects this: the maintainer lists "Fixes in existing LaTeX templates" and "Adding new LaTeX templates" as particularly useful contributions, alongside improved prompts and support for other LLMs such as Bard, Claude and LLaMA. Templates and prompts are treated as separate extension points, which is consistent with the architecture. The cost of the schema is that the model must fit your experience into fields the schema expects. Projects, publications and unusual role structures may not map cleanly, and the LLM has to guess. A candidate with a conventional employment history will get better results than one with a portfolio-style CV, because the schema was designed around the conventional case. If your background does not fit, the manual JSON editing path is not a workaround, it is the intended workflow.

Where ResuLLMe Sits Against a Plain JSON Resume Toolchain

The obvious alternative is the JSON Resume ecosystem itself: write or export your CV as JSON Resume once, then use an existing theme and a renderer to produce the PDF, with no model in the loop. The difference in approach is the direction of the pipeline. JSON Resume tooling assumes you author structured data and render it. ResuLLMe assumes you have an unstructured document and tries to recover structure from it, then improves the content along the way. The second approach is more convenient at the start and less predictable at the end, because every run depends on a model's interpretation of your source file. If you already maintain structured data, adding an LLM step only introduces variance. If you have a decade of Word documents and no appetite to retype them, the extraction path is the only realistic entry point, and the manual JSON edit is the price of admission. Neither approach is strictly better; they fail in different places.

Licence, Maintenance and What to Verify Before Committing

ResuLLMe is MIT licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. That is a permissive arrangement and it means forking the templates or prompts for internal use is straightforward. It also means the project carries no warranty, and the README's own caveat about extraction failures is a reminder that the output is your responsibility, not the maintainer's. On maintenance, the material shows an active repository: the last push is recent, the default branch is main, and there are no releases retrieved, so the project is consumed from the branch rather than from tagged versions. That matters for reproducibility. If you pin to main, a change to a Jinja template or a prompt can alter your output between runs with no version number to point at. The concrete next step is to clone the repository, run pixi run run-app or docker-compose up -d, process one CV, and open the Render JSON Resume tab to see exactly what the extraction produced before you judge the typeset PDF. The Jinja templates under the repository are where the visual result is decided, and they are also the part most likely to need your own edits.

Editorial conclusion

Adopt ResuLLMe if you already keep your CV in a structured format and want a repeatable way to reshape it, or if you want to fork the LaTeX templates and prompts for your own pipeline. Skip it if you expect a one-click rewrite of a messy scanned PDF, or if you cannot send your work history to OpenAI or Gemini. Before trusting the output, run one CV end to end, download the intermediate JSON at the Render JSON Resume tab, and check whether the extraction preserved your dates, titles and employers.

Official sources

  1. Issues
  2. IvanIsCoding/ResuLLMe on GitHub
  3. License: MIT
  4. Project website
  5. README
Community notes

Community notes