{"id":34061361,"url":"https://github.com/davidelambert/tealc","last_synced_at":"2026-04-07T11:32:08.390Z","repository":{"id":43160145,"uuid":"459206756","full_name":"davidelambert/tealc","owner":"davidelambert","description":"Tension Estimate cALCulator for stringed instruments.","archived":false,"fork":false,"pushed_at":"2022-03-23T22:39:02.000Z","size":787,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-16T02:02:23.944Z","etag":null,"topics":["python","stringed-instruments","utilities"],"latest_commit_sha":null,"homepage":"","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/davidelambert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-14T15:01:07.000Z","updated_at":"2022-03-21T02:20:55.000Z","dependencies_parsed_at":"2022-09-02T20:52:18.122Z","dependency_job_id":null,"html_url":"https://github.com/davidelambert/tealc","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/davidelambert/tealc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidelambert%2Ftealc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidelambert%2Ftealc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidelambert%2Ftealc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidelambert%2Ftealc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidelambert","download_url":"https://codeload.github.com/davidelambert/tealc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidelambert%2Ftealc/sbom","scorecard":{"id":326465,"data":{"date":"2025-08-11","repo":{"name":"github.com/davidelambert/tealc","commit":"dfc6b63cde0d5eaca6a45dc069591ea9269b07dd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"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":"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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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 'main'"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 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"}}]},"last_synced_at":"2025-08-18T02:35:36.500Z","repository_id":43160145,"created_at":"2025-08-18T02:35:36.501Z","updated_at":"2025-08-18T02:35:36.501Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31511595,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"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":["python","stringed-instruments","utilities"],"created_at":"2025-12-14T04:50:48.631Z","updated_at":"2026-04-07T11:32:08.385Z","avatar_url":"https://github.com/davidelambert.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## tealc\n\n`tealc` is a command-line **T**ension **E**stimate c**ALC**ulator for stringed\ninstruments. Users can calculate tensions for single strings or string sets.\nEstimates are available for most common string materials for acoustic and\nelectric instruments. Tension estimates are based on published data from major\nUS string manufacturers.\n\nTensions estimates should be regarded as just that: *estimates* only,\napproximate tensions under ideal conditions. Variations in acutal string length\ndue to bridge compensation, environmental conditions, string age, and and\nmanufacturing tolerances all affect the actual tension of a string. Use\nestimates from `tealc` as a guide only.\n\n## Requirements\nThe principal requirement is a working Python 3 installation or virtual\nenvironment.\n\nOfficially, _only Linux and Windows are supported_. However, `tealc` can run on\nother systems can run on other platforms such as the BSDs and macOS, provided:\n1. the user has write permissions to the platform's (or environment's) Python\ninstall directory (generally Scripts/), and\n2. the install directory is on the user's `PATH`.\n\n## Installation\n```\npython -m pip install -U tealc\n```\n\n## Usage\n`tealc` contains these subcommands:\n- `tealc string`: Calucate tension estimate for a single string.\n- `tealc set`: Calculate tension estimates for a string set.\n- `tealc file`: Calculate string set tension estimates from a file.\n- `tealc materials`: Print a chart of string material codes and descriptions.\n- `tealc help`: Open the tealc manual.\n\n### tealc string\nUsage: `tealc string [OPTIONS] GAUGE MATERIAL PITCH LENGTH`\n\n#### REQUIRED\n\u003cdl\u003e\n  \u003cdt\u003eGAUGE\u003c/dt\u003e\n  \u003cdd\u003e\n  String gauge in inches, 1/1000in, or mm with the \u003ccode\u003e--si\u003c/code\u003e flag. Inch gauges may\n  optionally be in thousandths of an inch: \u003ccode\u003e11\u003c/code\u003e or \u003ccode\u003e.011\u003c/code\u003e are both valid and\n  produce the same output.\n  \u003c/dd\u003e\n\n  \u003cdt\u003eMATERIAL\u003c/dt\u003e\n  \u003cdd\u003e\n  Short code for string construction material. Options:\n    \n  | code | material |\n  | ---: | :------- |\n  | ps | plain steel |\n  | nps |  nickel plated steel wound |\n  | pb | phosphor bronze wound |\n  | 8020 | 80/20 bronze wound |\n  | 8515 | 85/15 bronze wound |\n  | ss | stainless steel roundwound |\n  | fw | stainless steel flatwound |\n  | pn | pure nickel wound |\n  \u003c/dd\u003e\n\n  \u003cdt\u003ePITCH\u003c/dt\u003e\n  \u003cdd\u003e\n  Tuned pitch of string in scientific pitch notation, from A0-E5.  Middle C is C4, and A440 is A4. Octaves change at C: A2, B2 is followed by C3, D3, ..., A3, B3, C4, ...\n\n  Examples of open-string pitches in standard tunings:\n  - Guitar: E2, A2, D3, G3, B3, E4\n  - Bass: (B0), E1, A1, D2, G2\n  - Mandolin/violin: G3, D4, A4, E5\n  - Banjo: G4, D3, G3, B3, D4\n  \u003c/dd\u003e\n\n  \u003cdt\u003eLENGTH\u003c/dt\u003e\n  \u003cdd\u003e\n  Scale length of the instrument in inches, 1/1000in, or mm with the \u003ccode\u003e--si\u003c/code\u003e flag.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n#### OPTIONAL\n\u003cdl\u003e\n  \u003cdt\u003e--si\u003c/dt\u003e\n  \u003cdd\u003e\n  Supply \u003c/code\u003egauge\u003c/code\u003e and \u003c/code\u003elength\u003c/code\u003e arguments in millimenters.\n  Tension is returned in kilograms (converted from pounds; used in place of Newtons.)\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n#### EXAMPLES\n```\ntealc string .011 ps E4 25.5\n```\n\n```\ntealc string --si 1.37 pb E2 632.5\n```\n\n### tealc set\nusage: `tealc set [OPTIONS]`\n\n#### REQUIRED\n\u003cdl\u003e\n  \u003cdt\u003e-l, --length\u003c/dt\u003e\n  \u003cdd\u003e\n  Scale length, just as in `tealc string`\n  \u003c/dd\u003e\n\n  \u003cdt\u003e-s, --string \u0026lt;GAUGE MATERIAL PITCH\u0026gt;...\u003c/dt\u003e\n  \u003cdd\u003e \n  Repeated option, per string for the entire set. Requiremnts for the sub-arguments in \u003ccode\u003e\u0026lt;GAUGE MATERIAL PITCH\u0026gt;\u003c/code\u003e are just as in \"tealc string\".\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n#### OPTIONAL\n\u003cdl\u003e\n  \u003cdt\u003e--si\u003c/dt\u003e\n  \u003cdd\u003e\n  Supply set-wide \u003ccode\u003e--length\u003c/code\u003e and per-string \u003ccode\u003eGAUGE\u003c/code\u003e arguments in millimenters inctead of inches. Tension is returned in kilograms.\n  \u003c/dd\u003e\n\n  \u003cdt\u003e--title TEXT\u003c/dt\u003e\n  \u003cdd\u003e\n  An optional title for the output chart.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n#### EXAMPLES\n```\ntealc set -l 25.5 -s 10 ps e4 13 -s 13 ps b3 -s 17 ps g3 -s 26 nps d3 \\\n    -s 36 nps a3 46 -s 46 nps e2\n```\n\n```\ntealc set -l 34 -s 45 bfw g2 -s 60 bfw d2 -s 80 bfw a1 -s 105 bfw e1 \\\n    --title \"Bass Flatwound Mediums\"\n```\n\n### tealc file\nusage: `tealc file SETFILE`\n\n#### REQUIRED:\n\u003cdl\u003e\n  \u003cdt\u003eSETFILE\u003c/dt\u003e\n  \u003cdd\u003e\n  A file formatted using the format:\n    \n  ```\n  length = LENGTH\n  GAUGE MATERIAL PITCH\n  [GAUGE MATERIAL PITCH]\n  [...]\n  [si = True or False]\n  ```  \n  \n  An example SETFILE for a common set of light gauge (\"10's\") electric guitar strings on a Fender-scale instrument, with nickel plated steel wound strings, would look like this:\n  ```\n  length = 25.5\n  10 ps e4\n  13 ps b3\n  17 ps g3\n  26 nps d3\n  36 nps a2\n  46 nps e2\n  ```\n\n  The \u003ccode\u003elength = ...\u003c/code\u003e line and at least one \u003ccode\u003eGAUGE MATERIAL PITCH\u003c/code\u003e line are required.\n  \n  \u003ccode\u003esi = False\u003c/code\u003e is not required, and the \u003ccode\u003eSetFileParser.si\u003c/code\u003e attribute defaults to False if no \u003ccode\u003esi = ...\u003c/code\u003e line is included.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n#### OPTIONAL:\n\u003cdl\u003e\n  \u003cdt\u003e--si\u003c/dt\u003e\n  \u003cdd\u003eShow output chart units in mm/kg.\u003c/dd\u003e\n  \u003cdt\u003e--title TEXT\u003c/dt\u003e\n  \u003cdd\u003eAn optional title for the output chart.\u003c/dd\u003e\n\u003c/dl\u003e\n\n#### EXAMPLE:\n```\ntealc file ~/path/to/setfile\n```\n\n### tealc materials\nPrint a chart of material codes and their descriptions.\n\n### tealc help\nPrint a man page style help manual to the terminal (a formatted version of this\n**Usage** section).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidelambert%2Ftealc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidelambert%2Ftealc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidelambert%2Ftealc/lists"}