{"id":14981041,"url":"https://github.com/cianlm/labtex","last_synced_at":"2026-03-05T02:04:34.389Z","repository":{"id":57866555,"uuid":"384661923","full_name":"CianLM/labtex","owner":"CianLM","description":"Lab report data analysis and LaTeX file generation","archived":false,"fork":false,"pushed_at":"2025-10-29T07:31:50.000Z","size":5628,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-29T09:09:20.668Z","etag":null,"topics":["laboratory","latex-template","python","pythonpackage"],"latest_commit_sha":null,"homepage":"https://www.cianlm.dev/labtex","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CianLM.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"publiccode":null,"codemeta":null}},"created_at":"2021-07-10T09:38:01.000Z","updated_at":"2025-10-29T07:30:39.000Z","dependencies_parsed_at":"2024-09-24T06:00:51.718Z","dependency_job_id":"494b0b32-a756-435f-aafa-ae4a50781c9b","html_url":"https://github.com/CianLM/labtex","commit_stats":{"total_commits":57,"total_committers":2,"mean_commits":28.5,"dds":0.01754385964912286,"last_synced_commit":"6ade23909cd88bba6103f130e2bd39838b3d95ec"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/CianLM/labtex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CianLM%2Flabtex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CianLM%2Flabtex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CianLM%2Flabtex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CianLM%2Flabtex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CianLM","download_url":"https://codeload.github.com/CianLM/labtex/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CianLM%2Flabtex/sbom","scorecard":{"id":30031,"data":{"date":"2025-08-11","repo":{"name":"github.com/CianLM/labtex","commit":"6ade23909cd88bba6103f130e2bd39838b3d95ec"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/30 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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/publish_conda.yml:1","Warn: no topLevel permission defined: .github/workflows/python-publish.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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: test/venv/lib/python3.8/site-packages/setuptools/cli-32.exe:1","Warn: binary detected: test/venv/lib/python3.8/site-packages/setuptools/cli-64.exe:1","Warn: binary detected: test/venv/lib/python3.8/site-packages/setuptools/cli.exe:1","Warn: binary detected: test/venv/lib/python3.8/site-packages/setuptools/gui-32.exe:1","Warn: binary detected: test/venv/lib/python3.8/site-packages/setuptools/gui-64.exe:1","Warn: binary detected: test/venv/lib/python3.8/site-packages/setuptools/gui.exe:1","Warn: binary detected: test/venv/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/certifi-2019.11.28-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/colorama-0.4.3-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/contextlib2-0.6.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/distlib-0.3.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/distro-1.4.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/html5lib-1.0.1-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/idna-2.8-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/ipaddr-2.2.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/msgpack-0.6.2-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/packaging-20.3-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/pep517-0.8.2-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/pip-20.0.2-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/progress-1.5-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/pyparsing-2.4.6-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/requests-2.22.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/setuptools-44.0.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/six-1.14.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/toml-0.10.0-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/webencodings-0.5.1-py2.py3-none-any.whl:1","Warn: binary detected: test/venv/share/python-wheels/wheel-0.34.2-py2.py3-none-any.whl:1"],"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":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_conda.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/CianLM/labtex/publish_conda.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish_conda.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/CianLM/labtex/publish_conda.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/CianLM/labtex/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/CianLM/labtex/python-publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:28","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:29","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 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"}},{"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"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":"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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"}}]},"last_synced_at":"2025-08-14T18:50:21.987Z","repository_id":57866555,"created_at":"2025-08-14T18:50:21.987Z","updated_at":"2025-08-14T18:50:21.987Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30106188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T01:39:18.192Z","status":"online","status_checked_at":"2026-03-05T02:00:06.710Z","response_time":93,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["laboratory","latex-template","python","pythonpackage"],"created_at":"2024-09-24T14:02:47.032Z","updated_at":"2026-03-05T02:04:34.367Z","avatar_url":"https://github.com/CianLM.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# labtex\n[![](https://img.shields.io/badge/Documentation-007ec6.svg)](https://www.cianlm.dev/labtex)\n[![PyPI](https://img.shields.io/pypi/v/labtex)](https://pypi.org/project/labtex/)\n![Tests](https://github.com/CianLM/labtex/actions/workflows/python-publish.yml/badge.svg)\n[![Downloads](https://static.pepy.tech/personalized-badge/labtex?period=total\u0026units=international_system\u0026left_color=blue\u0026right_color=brightgreen\u0026left_text=Downloads)](https://pepy.tech/project/labtex)\n![License](https://img.shields.io/github/license/cianlm/labtex)\n\nNew extensive [Documentation](https://www.cianlm.dev/labtex)!\n## Purpose\n\nThis package provides a single solution to repetitive analysis tasks in a lab environment. If you are doing error propagation, linear regression or LaTeX tables/figures manually, this package automates the process.\n\n## Features\n\n- Measurement and MeasurementList classes with automatic:\n    - Error propagation\n    - Printing to correct significant figures\n    - Unit parsing, propagation and conversion\n- Linear regression and nonlinear curve fitting\n- A Document class with automatic:\n    - LaTeX table generation in two different styles\n    - Plot generation with matplotlib\n    - Insertion/updating of tables and figures into a LaTeX file\n\n## Installation\n\nUsing `pip` or `pip3` the latest release can be installed with\n```\npip3 install labtex\n```\n\n## Usage\n\nFor ease of use, you can import the package into your file's global namespace with\n```python\nfrom labtex import *\n```\nThe rest of this section will assume the package is imported in this way. Alternatively do `import labtex as lt`.\n\nSingle measurements can be instantiated with `Measurement(value,uncertainty,unit)` where unit is a string that will be parsed.\n```python\nx = Measurement(1.1,0.3,\"m\")\ny = Measurement(2.22,0.4,\"m\")\nz = M(314,10,\"V\")\n```\nwhere `M` is an equivalent shorthand for `Measurement`. Note that the unit parsing supports all combinations of common units, prefixes and powers of units, eg. any of \"nm^2\", \"C^-1\", \"kg m^2 s^-2\", \"J^3\" etc. are supported.\n\nMeasurement instances support all operations (`+-*/` and `**`) as well as math functions with the error and units automatically propagated. Some examples are shown below.\n```python\nprint(x)\n# 1.1 ± 0.3 m\n\nprint(x + y)\n# 3.3 ± 0.5 m\n\nprint(x * z)\n# (35 ± 9) × 10^{1} V m\n\nprint(x ** 2)\n# 1.2 ± 0.7 m^2\n\nprint(Measurement.tan(x / y))\n# 0.5 ± 0.2  \n```\nNotice also that Measurements are rounded to the significant figures as dictated by the uncertainty.\n\nFor a list of measurements, the `MeasurementList` class functions identically to the `Measurement` class, only now taking a list of values. The uncertainty can be a list or a single value for all measurements.\n\n```python\nheights = MeasurementList([185,183,182,194,184,177],5,\"cm\")\n# Note: One could use the shorthand class ML(values,uncertainty,unit)\n\nprint(heights)\n# [185 ± 5, 183 ± 5, 182 ± 5, 194 ± 5, 184 ± 5, 177 ± 5] cm\n\nprint(200 - heights)\n# [15 ± 5, 17 ± 5, 18 ± 5, 6 ± 5, 16 ± 5, 23 ± 5] cm\n```\n`MeasurementList`s also support all operations (`+-*/` and `**`) with themselves and with `Measurement`s. \n\nWith two `MeasurementList` instances, they can be linearly regressed with the `LinearRegression` class.\n```python\nvoltages = MeasurementList([1.3,3,5,7,8.5,10],1,\"V\")\ntemperatures = MeasurementList([23,55,67,82,88,96],[5,3,7,10,5,6],\"K\")\n\nreg = LinearRegression(voltages,temperatures)\n\nprint(lobf)\n# m = 7 ± 1 V^{-1} C\n# c = 27 ± 7 C\n```\nObserve that printing all `Measurement` and `MeasurementList` instances rounds the value to the largest significant figure of the error, as is convention.\n\nTo visualise this linear regression, the `plot` method can be used.\n```python\nfig = linreg.plot(xlabel=\"Voltage, V\", ylabel=\"Temperature, T\", title=\"Voltage and Temperature Plot\")\nfig.show()\n```\nThis generates the following plot, in which the line of best fit is shown, as well as the region of uncertainty (in the linear regression parameters). Notice that the units are automatically included in the axis labels.\n\n![](https://github.com/CianLM/labtex/raw/master/figures/graph1.png)\n\nIn order to include such a figure or a table of the data used in a LaTeX document, the `Document` class can be used. Argument names are not required, they are shown here only for demonstration.\n```python\ndoc = Document(title=\"Lab Report Template\",author=\"CianLM\", filename=\"report.tex\")\n```\nNote that `filename` here can be a preexisting `.tex` file or a new one to be created by labtex.\n\nOnce `doc` has been instantiated, tables and figures may be added to the document with their respective methods. Once again argument names are for demonstration and most are optional anyway.\n\n```python\ndoc.add_table(\n    nameandsymbol = [\"Voltage, V\",\"Temperature, T\"],\n    data = [voltages,temperatures],\n    caption = \"Voltage and Temperature Correlation\"\n)\n```\nThis inserts the following into the `doc` instance.\n```latex\n\\begin{table}[ht]\n    \\centering\n    \\caption{Voltage and Temperature Correlation}\n    \\label{tab:1}\n    \\begin{tabular}{c|cccccc}\n        \\toprule\n            Voltage, V, ($\\pm 1$ V) \u0026 1 \u0026 3 \u0026 5 \u0026 7 \u0026 8 \u0026 10 \\\\ \n            Temperature, T\u0026 $23 \\pm 5 $ \u0026 $55 \\pm 3 $ \u0026 $67 \\pm 7 $ \u0026 $(8 \\pm 1) \\times 10^{1} $ \u0026 $88 \\pm 5 $ \u0026 $96 \\pm 6 $ \\\\ \n        \\bottomrule\n    \\end{tabular}\n\\end{table}\n```\nwhich results in\n\n![](https://github.com/CianLM/labtex/raw/master/figures/readmetable.png)\n\n\nAlternatively if an `upright` table is preferred, this may be specified through the `style` argument.\n```python\ndoc.add_table(\n    nameandsymbol = [\"Voltage, V\", \"Temperature, T\"],\n    data = [voltages,temperatures**2],\n    caption = \"Voltage and Temperature Squared Correlation\",\n    style = \"upright\"\n)\n```\n\nOnce again, this inserts the following into the `doc` instance.\n```latex\n\\begin{table}[ht]\n    \\centering\n    \\caption{Voltage and Temperature Squared Correlation}\n    \\label{tab:2}\n    \\begin{tabular}{*{2}c}\n        \\toprule\n        Voltage, V, ($\\pm 1$ V)  \u0026 Temperature, T \\\\ \n            \\midrule\n              1 \u0026 $(5 \\pm 2) \\times 10^{2} $  \\\\\n              3 \u0026 $(30 \\pm 3) \\times 10^{2} $  \\\\\n              5 \u0026 $(45 \\pm 9) \\times 10^{2} $  \\\\\n              7 \u0026 $(7 \\pm 2) \\times 10^{3} $  \\\\\n              8 \u0026 $(77 \\pm 9) \\times 10^{2} $  \\\\\n              10\u0026 $(9 \\pm 1) \\times 10^{3} $ \\\\\n        \\bottomrule\n    \\end{tabular}\n\\end{table}\n```\nwhich results in\n\n![](https://github.com/CianLM/labtex/raw/master/figures/readmetable2.png)\n\nFor a figure, a similar process occurs. Given any figure object, such as the one generated by `linreg.plot()` above, it can be added with the `doc.add_figure` method. For example, one could do\n```python\nsquarereg = LinearRegression(voltages,temperatures**2)\nfig = squarereg.plot(xlabel=\"Voltage, V\", ylabel=\"Temperature Squared, $T^2$\", title=\"Voltage and Temperature Squared Plot\")\ndoc.add_figure(fig, caption=\"Linear Regression of Voltage and Temperature Squared\")\n# labtex: Wrote to 'figures/graph1.png'.\n```\nThis generates the figure below and saves it to `figures/graph1.png` where the `1` will increment with each figure you add.\n\n![](https://github.com/CianLM/labtex/raw/master/figures/graph3.png)\n\nIf you want a different filename, you can specify with the `filename=...` argument and if you want your graphs elsewhere than `figures/`, you may change `Document.graphfolder` at your convenience.\n\nOnce you have added all your tables and graphs to the `doc` object, you may save this file as shown below. The default write directory is `tex/` relative to root. This directory is also customizable with `Document.texfolder`.\n\n```python\ndoc.save()\n# labtex: Wrote to 'tex/report.tex'.\n```\n\nYou can then edit the generated `.tex` file freely, and run the python file again at any point to add/edit/remove tables and figures. labtex will automatically update the `.tex` file with your changes.\n\nBy default, tables will be inserted after a line starting with `%labtex-tables` and figures will be inserted after a line starting with `%labtex-figures`. If you want to change the comments labtex looks for, you can edit the `Document.tablemarker` and `Document.figuremarker` attributes respectively. If such comments are not found, tables/figures will be inserted at the very end of the document. \n\nFor more advanced usage and guides (such as the creation of the plot below) see the [Documentation](https://www.cianlm.dev/labtex).\n\n![](https://github.com/CianLM/labtex/raw/master/figures/coherence.png)\n## Contributions\n\nThis package is under active development. Feel free to submit a pull request or reach out with feature suggestions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcianlm%2Flabtex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcianlm%2Flabtex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcianlm%2Flabtex/lists"}