{"id":48563508,"url":"https://github.com/readicculus/pep_gui","last_synced_at":"2026-04-08T12:36:47.107Z","repository":{"id":39890742,"uuid":"361871379","full_name":"readicculus/pep_gui","owner":"readicculus","description":"AFSC's Polar Ecosystems Program GUI tool for configuring and running kwiver pipelines on multiple datasets.","archived":false,"fork":false,"pushed_at":"2024-08-28T07:47:04.000Z","size":91106,"stargazers_count":3,"open_issues_count":12,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-18T04:37:52.539Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/readicculus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-04-26T19:33:30.000Z","updated_at":"2024-05-28T05:55:57.000Z","dependencies_parsed_at":"2024-04-25T08:34:53.064Z","dependency_job_id":null,"html_url":"https://github.com/readicculus/pep_gui","commit_stats":{"total_commits":220,"total_committers":1,"mean_commits":220.0,"dds":0.0,"last_synced_commit":"f66c071ae5a7114d4225331c5f9708d1dccd2a0e"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/readicculus/pep_gui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/readicculus%2Fpep_gui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/readicculus%2Fpep_gui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/readicculus%2Fpep_gui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/readicculus%2Fpep_gui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/readicculus","download_url":"https://codeload.github.com/readicculus/pep_gui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/readicculus%2Fpep_gui/sbom","scorecard":{"id":766094,"data":{"date":"2025-08-11","repo":{"name":"github.com/readicculus/pep_gui","commit":"8fb2cd28a54a574cb82a73aec6e8d79e5c75d4d7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/14 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build_dist.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Warn: no topLevel permission defined: .github/workflows/pr_test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":3,"reason":"7 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2020-73","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 17 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_dist.yml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:109: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_dist.yml:127: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_dist.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/build_dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr_test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/pr_test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr_test.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/pr_test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr_test.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/readicculus/pep_gui/pr_test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build_dist.yml:54","Warn: pipCommand not pinned by hash: .github/workflows/build_dist.yml:92","Warn: pipCommand not pinned by hash: .github/workflows/build_dist.yml:95","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:35","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:36","Warn: pipCommand not pinned by hash: .github/workflows/pr_test.yml:36","Warn: pipCommand not pinned by hash: .github/workflows/pr_test.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/pr_test.yml:38","Info:   0 out of  14 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   9 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-23T00:50:51.855Z","repository_id":39890742,"created_at":"2025-08-23T00:50:51.855Z","updated_at":"2025-08-23T00:50:51.855Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31556238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-08T12:36:47.011Z","updated_at":"2026-04-08T12:36:47.083Z","avatar_url":"https://github.com/readicculus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e\u003cimg src=\"https://raw.githubusercontent.com/readicculus/pep_gui/master/src/pep_tk/lib/img/icon_80x80.png\" width=\"80\" height=\"80\"/\u003ePolar Ecosystems Program GUI\u003c/h1\u003e\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5770966.svg)](https://doi.org/10.5281/zenodo.5770966)\n[![PyPI version pep-tk](https://badge.fury.io/py/pep-tk.svg)](https://pypi.python.org/pypi/pep-tk/)\n![Tests Workflow](https://github.com/readicculus/pep_gui/actions/workflows/main.yml/badge.svg)\n[![PyPI pyversions](https://img.shields.io/badge/python-%3E%3D3.8-red)](https://pypi.python.org/pypi/pep-tk/)\n\n#### Table of Contents\n  * [Terminology](#terminology)\n  * [The GUI](#the-gui)\n    + [- Setup -](#--setup--)\n    + [- Configuring the application preferences -](#--configuring-the-application-preferences--)\n    + [- Creating a Job -](#--creating-a-job--)\n    + [- Resuming a job -](#--resuming-a-job--)\n    + [- Job progress -](#--job-progress--)\n    + [- Job outputs -](#--job-outputs--)\n  * [Dataset Manifest](#dataset-manifest)\n    + [- Dataset attributes -](#--dataset-attributes--)\n    + [- Example 1 (CSV Format) -](#--example-1-csv-format--)\n    + [- Example 2 (INI Format) -](#--example-2-ini-format--)\n    + [- Example 3 (Relative Paths) -](#--example-3-relative-paths--)\n    + [- Future features -](#--future-features--)\n\n\n#### Terminology\n - **Task** - a task is a unit of work in the GUI and is comprised of running a single dataset through a pipeline.\n - **Job** - a job is one or more tasks, so a job is comprised of running one or more datasets through a pipeline.\n - **Dataset** - a dataset is an image list or a set of image lists which point to images in the dataset.  Images within an image list can be in different directories, or two dataset's image lists could all point to images in the same directory (for example for splitting test and non-test data).  See [Dataset Manifest](#dataset-manifest) for details.\n## The GUI\n### - Setup -\nThis GUI runs kwiver pipelines using VIAME's underlying kwiver.  Some pipelines(anything requiring a transformation file) \nmay require kwiver plugins only available in the SEAL-TK distribution.  \nBinaries for SEAL-TK or VIAME can be found [here](https://github.com/VIAME/VIAME/#installations).\n\n\n```bash\npip install pep_tk\npep_gui # command to run the GUI\n```\nI tested this on Windows11 and succeeded with the above instructions. I recommend creating a conda environment especially on our windows VMs where \nyou may have limited permissions with the global python.\n\nBecause by default this was installed for your user you may need to add the user bin/ path to your PATH variable for pep_gui to work `export PATH=~/.local/bin:$PATH`.  On Windows this worked for me without any changes but if there are issues the pep_gui command should be located in the `Scripts` folder of the python/conda environment you used to install.\n\n\n#### pep_gui command not working\nIf for some reason you are struggling and the pep_gui target doesn't work a simple script like this could be used to launch the GUI.\n```python\n# example my_custom_launcher.py\nfrom pep_tk import launch\n\nlaunch.main()  # launch GUI\n```\n\n### - Configuring the application preferences -\nWhen the application is launched for the first time you will be prompted to configure the following properties.\nAfter that, to modify these properties, go to `File \u003e Properties`.\nHere you can set:\n- Which SEAL-TK directory to use.\n- Which dataset manfieset file to use.\n- The base directory for jobs (new jobs will be created in `/path/to/job_base_dir/`)\n\n![preoperties_window.png](https://raw.githubusercontent.com/readicculus/pep_gui/master/src/pep_tk/lib/img/screenshots/preoperties_window.png)\n### - Creating a Job -\n\u003cimg src=\"https://raw.githubusercontent.com/readicculus/pep_gui/master/src/pep_tk/lib/img/screenshots/create_job.png\" width=\"75%\" height=\"75%\"\u003e\n\nWhen you first launch the program you will be brought to a page to create a job.  To create a job:\n1. Select which datasets you want to run\n2. Select which pipeline to use\n3. Select a unique name for your job\n\n### - Resuming a job -\nResuming a job is usefil if for some reason the GUI or machine you are on crashes mid-job.  In addition if for some reason you were to cancel some tasks in a job, and decide you want to run them later, resuming will re-run any cancelled tasks.\nTo resume a Job click `File \u003e Resume Job` which will open a prompt to select a folder.  Select the folder of the job you would like to resume.\n\n_Since a task is the smallest unit of work, if a task fails half way through, resuming a job will re-run that task from the beginning.  If a task is successful resuming a job will not re-run that task._ \n\n### - Job progress -\n\u003cimg src=\"https://raw.githubusercontent.com/readicculus/pep_gui/master/src/pep_tk/lib/img/screenshots/progress_window.png\" width=\"75%\" height=\"75%\"\u003e\n\nThe job progress GUI allows you to track individual task's progress, to cancel a task, and to see metrics such as seconds/iteration and estimated time to completion.\n### - Job outputs -\n#### Pipeline outputs (processed image lists/detections)\n1. When a task is running, the task's outputs will be written to `job_base_dir/job_name/outputs_pending/`.\n2. When a task is cancelled or an error occurs the task's output files will be moved to `job_base_dir/job_name/outputs_error/`.\n3. When a task is successfully completed the task's output files will be moved to  `job_base_dir/job_name/outputs_success/`.\n#### Logs\nThe `job_base_dir/job_name/logs/` directory contains the underlying kwiver outputs and application logs which are helpful for debugging purposes\n\n\n## Dataset Manifest\nThe dataset manifest is a file that defines all of the datasets available in csv or ini format.  When creating a job you will be able to select and filter which datasets from the dataset manifest to run.\n\nThis format allows us to organize datasets as arbitrary hierarchies.  \n\n### - Dataset attributes -\nCurrently a dataset must have one or more of the following attributes:\n- `dataset_name` - a unique name for this dataset **(required and unique)**\n- `color_image_list` - the color image list txt file **(one required)**\n- `thermal_image_list` - the thermal image list txt file **(one required)**\n    \nAdditional optional attributes are:\n- `transformation_file` - the .h5 transformation file **(optional)**\n\n### - Example 1 (CSV Format) -\nThis format requires `.csv` file extension.\n```csv\ndataset_name, color_image_list, thermal_image_list, transformation_file\nKotz-2019-fl04-CENT, /path/to/kotz/fl04/CENT/color_images.txt, /path/to/kotz/fl04/CENT/thermal_images.txt, /path/to/Homographies/A90_RGB-IR_C_100mm_0deg_20190509_fl4.h5\nKotz-2019-fl04-LEFT, /path/to/kotz/fl04/LEFT/color_images.txt, /path/to/kotz/fl04/LEFT/thermal_images.txt, /path/to/Homographies/A90_RGB-IR_L_100mm_25deg_20190509-11_fl4-7.h5\n```\nThis example defines 2 datasets, exactly the same as the INI example below, which we can select from in the GUI for running pipelines.\n```\nKotz-2019-fl04-CENT\nKotz-2019-fl04-LEFT\n```\n\n### - Example 2 (INI Format) -\nCan use file extension `.ini` or `.cfg` for this format.  The datset_name in INI format is provided by the section name in brackets as shown below.\n```ini\n[Kotz-2019-fl04-CENT]\nthermal_image_list=/path/to/kotz/fl04/CENT/thermal_images.txt\ncolor_image_list=/path/to/kotz/fl04/CENT/thermal_images.txt\ntransformation_file=/path/to/Homographies/A90_RGB-IR_C_100mm_0deg_20190509_fl4.h5\n\n[Kotz-2019-fl04-LEFT]\nthermal_image_list=/path/to/kotz/fl04/LEFT/thermal_images.txt\ncolor_image_list=/path/to/kotz/fl04/LEFT/thermal_images.txt\ntransformation_file=/path/to/Homographies/A90_RGB-IR_L_100mm_25deg_20190509-11_fl4-7.h5\n```\nThis example defines 2 datasets, exactly the same as the CSV example above, which we can select from in the GUI for running pipelines.\n```\nKotz-2019-fl04-CENT\nKotz-2019-fl04-LEFT\n```\n\n### - Example 3 (Relative Paths) -\nYou can use absolute or relative paths.  If using relative paths, the relative path must be relative to the manifest file.\n```ini\n; if this manifest is located at '/path/to/kotz/manifest.cfg'\n; then the two below are equivalent\n[Kotz-2019-fl04-CENT-relative]\nthermal_image_list=fl04/CENT/thermal_images.txt\ncolor_image_list=fl04/CENT/thermal_images.txt\ntransformation_file=/path/to/Homographies/A90_RGB-IR_C_100mm_0deg_20190509_fl4.h5\n\n[Kotz-2019-fl04-CENT-absolute]\nthermal_image_list=/path/to/kotz/fl04/CENT/thermal_images.txt\ncolor_image_list=/path/to/kotz/fl04/CENT/thermal_images.txt\ntransformation_file=/path/to/Homographies/A90_RGB-IR_L_100mm_25deg_20190509-11_fl4-7.h5\n```\n### - Future features -\n  - Ability to define a set of images using wildcards instead of having to define an image list. ex `thermal_image_list: /path/to/kotz/fl04/CENT/*_ir.tif`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freadicculus%2Fpep_gui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freadicculus%2Fpep_gui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freadicculus%2Fpep_gui/lists"}