<h1 align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="images/ResumeGPT-light.png"/>
<source media="(prefers-color-scheme: light)" srcset="images/ResumeGPT.png"/>
<img width="400" src="images/ResumeGPT.png"/>
<br />
</h1>
<div align="center">
<p align="center">
<a href="#features">
<b>Features</b>
</a>
·
<a href="#installation">
<b>Install</b>
</a>
·
<a href="#usage">
<b>Usage</b>
</a>
·
<a href="#discussions">
<b>Discussions</b>
</a>
·
<a href="#contributors">
<b>Contributors</b>
</a>
</p>
<br>
</div>
<br>
<h3 align="center">Tailor your resume to match any job posting effortlessly with ResumeGPT.
</h3>
<br/>
ResumeGPT allows you to simply provide your resume and a job posting link, and it will produce a formatted ATS friendly PDF resume that is optimized and personalize your resume to align with the specific requirements and keywords of the job.
## Features
- Extracts relevant skills, qualifications, and keywords from a job posting.
- Tailors your curent resume to match job requirements.
- Generates professional ATS friendly PDF resumes.
- Allows for user verification and customization before finalizing the resume.
## Installation
```bash
pip install ResumeGPT
```
or:
```bash
pip install git+https://github.com/takline/ResumeGPT.git
```
or:
```bash
git clone https://github.com/takline/ResumeGPT.git
cd ResumeGPT
pip install -r requirements.txt
```
## Usage
- Add your resume to `ResumeGPT/data/sample_resume.yaml` (make sure `ResumeGPT.config.YOUR_RESUME_NAME` is set to your resume filename in the `.data/` folder)
- Provide ResumeGPT with the link to a job posting and it will tailot your resume to the job:
### Single job posting usage
```python
url = "https://[link to your job posting]"
resume_improver = ResumeGPT.services.ResumeImprover(url)
resume_improver.create_draft_tailored_resume()
```
ResumeGPT then creates a new resume YAML file in a new folder named after the job posting (`ResumeGPT/data/[Company_Name_Job_Title]/resume.yaml`) with a YAML key/value: `editing: true`. ResumeGPT will wait for you to update this key to verify the resume updates and allow them to make their own updates until users set `editing=false`. Then ResumeGPT will create a PDF version of their resume.
### Custom resume location usage
Initialize `ResumeImprover` via a `.yaml` filepath.:
```python
resume_improver = ResumeGPT.services.ResumeImprover(url=url, resume_location="custom/path/to/resume.yaml")
resume_improver.create_draft_tailored_resume()
```
### Post-initialization usage
```python
resume_improver.update_resume("./new_resume.yaml")
resume_improver.url = "https://[new link to your job posting]"
resume_improver.download_and_parse_job_post()
resume_improver.create_draft_tailored_resume()
```
### Background usage
You can run multiple ResumeGPT.services.ResumeImprover's concurrently via ResumeGPT's BackgroundRunner class (as it takes a couple of minutes for ResumeImprover to complete a single run):
```python
background_configs = [
{
"url": "https://[link to your job posting 1]",
"auto_open": True,
"manual_review": True,
"resume_location": "/path/to/resume1.yaml",
},
{
"url": "https://[link to your job posting 2]",
"auto_open": False,
"manual_review": False,
"resume_location": "/path/to/resume2.yaml",
},
{
"url": "https://[link to your job posting 3]",
"auto_open": True,
"manual_review": True,
"resume_location": "/path/to/resume3.yaml",
},
]
background_runner = ResumeGPT.services.ResumeImprover.create_draft_tailored_resumes_in_background(background_configs=background_configs)
#Check the status of background tasks (saves the output to `ResumeGPT/data/background_tasks/tasks.log`)
background_runner["background_runner"].check_status()
#Stop all running tasks
background_runner["background_runner"].stop_all_tasks()
#Extract a ResumeImprover
first_resume_improver = background_runner["ResumeImprovers"][0]
```
You will follow the same workflow when using ResumeGPT's BackgroundRunner (ex: verify the resume updates via `editing=false` in each `ResumeGPT/data/[Company_Name_Job_Title]/resume.yaml` file). You can also find logs for the BackgroundRunner in `ResumeGPT/data/background_tasks/tasks.log`.
Once all of the background tasks are complete:
```python
background_runner["background_runner"].check_status()
```
Output:
```
['Task completed.',
'Task completed.',
'Task completed.',
'Task completed.',
'Task completed.',
'Task completed.',
'Task completed.',
'Task completed.',
'Task completed.']
```
Create the pdf for each `ResumeImprovers` instance:
```python
for improver in background_runner["ResumeImprovers"]:
pdf_generator = ResumeGPT.pdf_generation.ResumePDFGenerator()
resume_yaml_path = os.path.join(improver.job_data_location, "resume.yaml")
pdf_generator.generate_resume(improver.job_data_location, ResumeGPT.utils.read_yaml(filename=resume_yaml_path))
```
### ResumeGPT PDF Output
Example ATS friendly resume created by ResumeGPT:
```python
pdf_generator = ResumeGPT.pdf_generation.ResumePDFGenerator()
pdf_generator.generate_resume("/path/to/save/pdf/", ResumeGPT.utils.read_yaml(filename="/path/to/resume/resume.yaml"))
```
<p align="center">
<img src="images/example_resume_output.png" alt="Resume Example" width="400"/>
</p>
## Discussions
Feel free to give feedback, ask questions, report a bug, or suggest improvements:
- [Discussions](https://github.com/takline/ResumeGPT/discussions)
- [Issues](https://github.com/takline/ResumeGPT/issues)
## Contributors
⭐️ Please star, fork, explore, and contribute to ResumeGPT. There's a lot of work room for improvement so any contributions are appreciated.
Raw data
{
"_id": null,
"home_page": "https://github.com/takline/ResumeGPT",
"name": "ResumeGPT",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "Tyler Kline <tylerkline@gmail.com>",
"keywords": "resume, job, application, automation, job search",
"author": "Tyler Kline",
"author_email": "Tyler Kline <tylerkline@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b5/ac/7376d7613b07d68619fff5b07592027afb2db211bb70ea754cf3e4ffc34e/resumegpt-2.1.tar.gz",
"platform": null,
"description": "<h1 align=\"center\">\n <picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"images/ResumeGPT-light.png\"/>\n <source media=\"(prefers-color-scheme: light)\" srcset=\"images/ResumeGPT.png\"/>\n <img width=\"400\" src=\"images/ResumeGPT.png\"/>\n <br />\n</h1>\n\n<div align=\"center\">\n\n<p align=\"center\">\n <a href=\"#features\">\n <b>Features</b>\n </a>\n \u00b7 \n <a href=\"#installation\">\n <b>Install</b>\n </a>\n \u00b7 \n <a href=\"#usage\">\n <b>Usage</b>\n </a>\n \u00b7 \n <a href=\"#discussions\">\n <b>Discussions</b>\n </a>\n \u00b7 \n <a href=\"#contributors\">\n <b>Contributors</b>\n </a>\n\n</p>\n\n\n\n<br>\n\n\n</div>\n\n<br>\n\n<h3 align=\"center\">Tailor your resume to match any job posting effortlessly with ResumeGPT.\n</h3>\n\n<br/>\nResumeGPT allows you to simply provide your resume and a job posting link, and it will produce a formatted ATS friendly PDF resume that is optimized and personalize your resume to align with the specific requirements and keywords of the job. \n\n## Features\n- Extracts relevant skills, qualifications, and keywords from a job posting.\n- Tailors your curent resume to match job requirements.\n- Generates professional ATS friendly PDF resumes.\n- Allows for user verification and customization before finalizing the resume.\n\n## Installation\n\n```bash\npip install ResumeGPT\n```\n\nor:\n\n```bash\npip install git+https://github.com/takline/ResumeGPT.git\n```\n\nor:\n\n\n```bash\ngit clone https://github.com/takline/ResumeGPT.git\ncd ResumeGPT\npip install -r requirements.txt\n```\n\n## Usage\n\n - Add your resume to `ResumeGPT/data/sample_resume.yaml` (make sure `ResumeGPT.config.YOUR_RESUME_NAME` is set to your resume filename in the `.data/` folder)\n - Provide ResumeGPT with the link to a job posting and it will tailot your resume to the job:\n\n### Single job posting usage\n```python\nurl = \"https://[link to your job posting]\"\nresume_improver = ResumeGPT.services.ResumeImprover(url)\nresume_improver.create_draft_tailored_resume()\n```\n\nResumeGPT then creates a new resume YAML file in a new folder named after the job posting (`ResumeGPT/data/[Company_Name_Job_Title]/resume.yaml`) with a YAML key/value: `editing: true`. ResumeGPT will wait for you to update this key to verify the resume updates and allow them to make their own updates until users set `editing=false`. Then ResumeGPT will create a PDF version of their resume.\n\n\n### Custom resume location usage\nInitialize `ResumeImprover` via a `.yaml` filepath.:\n\n```python\nresume_improver = ResumeGPT.services.ResumeImprover(url=url, resume_location=\"custom/path/to/resume.yaml\")\nresume_improver.create_draft_tailored_resume()\n```\n\n### Post-initialization usage\n```python\nresume_improver.update_resume(\"./new_resume.yaml\")\nresume_improver.url = \"https://[new link to your job posting]\"\nresume_improver.download_and_parse_job_post()\nresume_improver.create_draft_tailored_resume()\n```\n\n### Background usage\nYou can run multiple ResumeGPT.services.ResumeImprover's concurrently via ResumeGPT's BackgroundRunner class (as it takes a couple of minutes for ResumeImprover to complete a single run):\n```python\nbackground_configs = [\n {\n \"url\": \"https://[link to your job posting 1]\",\n \"auto_open\": True,\n \"manual_review\": True,\n \"resume_location\": \"/path/to/resume1.yaml\",\n },\n {\n \"url\": \"https://[link to your job posting 2]\",\n \"auto_open\": False,\n \"manual_review\": False,\n \"resume_location\": \"/path/to/resume2.yaml\",\n },\n {\n \"url\": \"https://[link to your job posting 3]\",\n \"auto_open\": True,\n \"manual_review\": True,\n \"resume_location\": \"/path/to/resume3.yaml\",\n },\n]\nbackground_runner = ResumeGPT.services.ResumeImprover.create_draft_tailored_resumes_in_background(background_configs=background_configs)\n#Check the status of background tasks (saves the output to `ResumeGPT/data/background_tasks/tasks.log`)\nbackground_runner[\"background_runner\"].check_status()\n#Stop all running tasks\nbackground_runner[\"background_runner\"].stop_all_tasks()\n#Extract a ResumeImprover\nfirst_resume_improver = background_runner[\"ResumeImprovers\"][0]\n```\n\nYou will follow the same workflow when using ResumeGPT's BackgroundRunner (ex: verify the resume updates via `editing=false` in each `ResumeGPT/data/[Company_Name_Job_Title]/resume.yaml` file). You can also find logs for the BackgroundRunner in `ResumeGPT/data/background_tasks/tasks.log`.\n\nOnce all of the background tasks are complete:\n\n```python\nbackground_runner[\"background_runner\"].check_status()\n```\n\nOutput:\n```\n['Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.',\n 'Task completed.']\n```\n\nCreate the pdf for each `ResumeImprovers` instance:\n\n```python\nfor improver in background_runner[\"ResumeImprovers\"]:\n pdf_generator = ResumeGPT.pdf_generation.ResumePDFGenerator()\n resume_yaml_path = os.path.join(improver.job_data_location, \"resume.yaml\")\n pdf_generator.generate_resume(improver.job_data_location, ResumeGPT.utils.read_yaml(filename=resume_yaml_path))\n```\n\n\n### ResumeGPT PDF Output\nExample ATS friendly resume created by ResumeGPT:\n\n```python\npdf_generator = ResumeGPT.pdf_generation.ResumePDFGenerator()\npdf_generator.generate_resume(\"/path/to/save/pdf/\", ResumeGPT.utils.read_yaml(filename=\"/path/to/resume/resume.yaml\"))\n```\n\n\n<p align=\"center\">\n <img src=\"images/example_resume_output.png\" alt=\"Resume Example\" width=\"400\"/>\n</p>\n\n\n\n\n## Discussions\nFeel free to give feedback, ask questions, report a bug, or suggest improvements:\n\n - [Discussions](https://github.com/takline/ResumeGPT/discussions)\n - [Issues](https://github.com/takline/ResumeGPT/issues)\n\n\n## Contributors\n\u2b50\ufe0f Please star, fork, explore, and contribute to ResumeGPT. There's a lot of work room for improvement so any contributions are appreciated.\n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Tailor your resume to match any job posting effortlessly",
"version": "2.1",
"project_urls": {
"Bug Tracker": "https://github.com/takline/ResumeGPT/issues",
"Homepage": "https://github.com/takline/ResumeGPT"
},
"split_keywords": [
"resume",
" job",
" application",
" automation",
" job search"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5516452c1d52dfabc169e20a2e12450dddb666e44dbd58ff00d8f0a0ef3f5a33",
"md5": "d5cb7bd9c15fed85bc4636ae758b00b8",
"sha256": "a6ae2ba72b2c7892f983d0cf12f4586d84c18522c47e7a0c4a536e9a157f46a5"
},
"downloads": -1,
"filename": "ResumeGPT-2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d5cb7bd9c15fed85bc4636ae758b00b8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 31052,
"upload_time": "2024-10-07T20:26:08",
"upload_time_iso_8601": "2024-10-07T20:26:08.037527Z",
"url": "https://files.pythonhosted.org/packages/55/16/452c1d52dfabc169e20a2e12450dddb666e44dbd58ff00d8f0a0ef3f5a33/ResumeGPT-2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b5ac7376d7613b07d68619fff5b07592027afb2db211bb70ea754cf3e4ffc34e",
"md5": "3a9a4402a7bd3627d9c8758b83a1024a",
"sha256": "1f1f001da1bcf5c54486a99728e0ed0a94f5c50cfbc336b2db327e31ab899ef8"
},
"downloads": -1,
"filename": "resumegpt-2.1.tar.gz",
"has_sig": false,
"md5_digest": "3a9a4402a7bd3627d9c8758b83a1024a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 25524,
"upload_time": "2024-10-07T20:26:09",
"upload_time_iso_8601": "2024-10-07T20:26:09.940377Z",
"url": "https://files.pythonhosted.org/packages/b5/ac/7376d7613b07d68619fff5b07592027afb2db211bb70ea754cf3e4ffc34e/resumegpt-2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-07 20:26:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "takline",
"github_project": "ResumeGPT",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "resumegpt"
}