Automate the tools
What you can do
There’s no server and no API: every tool runs in the browser. But 75 tools can be opened with their
input already filled in, from a link. Anything that can open a web address can use them: a bookmark, a
bookmarklet, Apple Shortcuts, a launcher such as Raycast or Alfred, a command line, a script driving a browser,
or an LLM writing a link for you. The input goes after the #, which browsers never send to a server.
Never put tokens, passwords or other secrets in a link. It stays in your browser history, and in any app that saw it. That’s why tools for secrets and files don’t take links.
Links that fill in a tool
Add #, then each field’s id and value as id=value, joined with &, with each value URL-encoded:
https://toolbox.thoughtasylum.com/cron/#cr-in=*%2F15+9-17+*+*+mon-fri
https://toolbox.thoughtasylum.com/json/#js-indent=2&js-in=%7B%22a%22%3A1%7D
The fields are filled in the order the tool lists them, then the tool runs. Leave out a field to keep its default.
A tick box takes 1 (ticked) or nothing. Changing the part after the # on an open page fills it in again, with
no reload. Links can be up to 4,000 characters. Each tool’s Copy a link to this input button makes one for you
from what’s on the page. The reference below lists every tool’s fields and the values its menus take.
Reading the result
Results appear as the fields fill, with nothing to press. Each tool in the reference names the
elements its result shows in, by id. For a box (textarea or input), read its value; for anything else, its
textContent. Most tools also have a status line ending -msg that reports errors and summaries.
For example, in a script that drives a browser (Playwright here):
await page.goto('https://toolbox.thoughtasylum.com/url/#ue-in=' + encodeURIComponent('a b&c'))
const encoded = await page.locator('#ue-out').inputValue()
The ids belong to each page, not to a published API, so they can change when a tool does. The reference and llms-full.txt always match the site as it is.
Search from the address bar
https://toolbox.thoughtasylum.com/#search= followed by some words opens the site’s search with those words in it, so
https://toolbox.thoughtasylum.com/#search=base64 lists the Base64 tools. Press Enter to open the first, or the arrow keys to choose
another. It matches tools’ names, categories and keywords, not what you paste: every word has to match, and to find
out what an unknown string is, use Identify. The words go after the #, so they stay on your device.
Set it up once, with tb (or any short word you like) as the keyword:
- Chrome and Edge: in Settings › Search engine › Manage search engines and site search, choose Add next
to Site search. Name it
Toolbox, give it the shortcuttband the addresshttps://toolbox.thoughtasylum.com/#search=%s. Then typetb, a space, and your words in the address bar:tb cron. - Firefox: right-click the address bar while on the site and choose Add “Toolbox”, then give it a keyword in
Settings › Search › Search Shortcuts. Or make a bookmark with the address
https://toolbox.thoughtasylum.com/#search=%sand the keywordtb. - Safari can’t add sites’ searches. Use a launcher, or a bookmark to the site.
- Raycast: run Create Quicklink, with the link
https://toolbox.thoughtasylum.com/#search={Query}and the nameToolbox. TypeToolbox, Tab, then your words. - Alfred: in Features › Web Search, choose Add Custom Search, with the address
https://toolbox.thoughtasylum.com/#search={query}and the keywordtb.
Straight to a tool, filled in
The same keyword searches can skip the search and open a tool with your words already in it, using a tool’s link
field from the reference. In Chrome, Edge and Firefox the words go where %s is; in Alfred,
{query}; in Raycast, {Query}. Each encodes what you type for you. For example:
| Keyword | Address | Then type |
|---|---|---|
cron |
https://toolbox.thoughtasylum.com/cron/#cr-in=%s |
cron 0 9 * * 1 to read that schedule |
urlenc |
https://toolbox.thoughtasylum.com/url/#ue-in=%s |
urlenc a b&c to encode it |
ua |
https://toolbox.thoughtasylum.com/user-agent/#ua-in=%s |
ua and a user agent string to break it down |
units |
https://toolbox.thoughtasylum.com/units/#un-in=%s |
units 12 to convert it |
This works only for tools that take links, never for tokens, passwords or files. What you type stays in your browser history, so keep secrets out of it.
Bookmarklets
A bookmarklet is a bookmark whose address is a line of JavaScript. These send the text you’ve selected on any page to a tool. Make a new bookmark and paste one in as its address (on some sites, their own security rules stop bookmarklets from running):
javascript:void open('https://toolbox.thoughtasylum.com/url/#ue-in='+encodeURIComponent(getSelection()))
javascript:void open('https://toolbox.thoughtasylum.com/user-agent/#ua-in='+encodeURIComponent(getSelection()))
javascript:void open('https://toolbox.thoughtasylum.com/case/#cs-in='+encodeURIComponent(getSelection()))
javascript:void open('https://toolbox.thoughtasylum.com/#search='+encodeURIComponent(getSelection()))
For any other tool, change the address and the field id. The last one searches the tools for the selected words.
Shortcuts and the command line
- Apple Shortcuts: get the text (from Receive input, Get Clipboard or Ask for Input), pass it
through URL Encode, then use Text to build the address, such as
https://toolbox.thoughtasylum.com/cron/#cr-in=followed by the encoded text, and finish with Open URLs. -
macOS Terminal:
open "https://toolbox.thoughtasylum.com/url/#ue-in=$(python3 -c 'import sys,urllib.parse;print(urllib.parse.quote(sys.argv[1]))' 'a b&c')" - Linux: the same with
xdg-open. Windows:start "" "<the address>".
The installed app
Once the site is installed as an app, where the browser supports it:
- Share to it. Text or a link shared to the Toolbox from another app opens in Identify, which says what it probably is (mainly Chrome and Edge on Android and ChromeOS). It never goes into an address.
- Open files with it. Chrome and Edge on a computer can offer it for
.eml,.msg,.har,.ics,.pem,.crt, font, caption, GPX and KML,.plist,.mobileconfig,.webloc,.icnsand.epubfiles, which open in the matching tool. - Jump to a tool. Right-click or long-press the app’s icon for Identify, JSON Format, Text Cleaner and Hash / Checksum.
What happens to shared text and files is on the privacy page.
For LLMs and agents
llms.txt is a short index of every tool, and llms-full.txt holds each tool’s help, its link fields with the values they take, and the ids its result shows in. Give either to an assistant and it can write links that open a tool with the input filled in, or drive a browser through them. The same rule applies to it as to you: no secrets in links.
Reference: every tool that takes a link
Aspect Ratio
https://toolbox.thoughtasylum.com/aspect-ratio/#ar-w=…&ar-h=…&ar-ratio=…
Fields:
ar-w(Width): textar-h(Height): textar-ratio(Ratio (to find a side)): text
Result:
#ar-out: its text#ar-msg: the status line
Barcodes
https://toolbox.thoughtasylum.com/barcode/#br-kind=…&br-in=…
Fields:
br-kind(Kind): one ofcode128(Code 128 (any text)),ean13(EAN-13 (products)),upca(UPC-A (products, US)),ean8(EAN-8 (small products)),code39(Code 39 (letters and digits))br-in(Text or number): text
Result:
#br-out: its text#br-msg: the status line
Bingo Cards
https://toolbox.thoughtasylum.com/bingo/#bg-mode=…&bg-n=…&bg-size=…&bg-free=…&bg-list=…
Fields:
bg-mode(Kind of card): one of75(75-ball (5 × 5)),90(90-ball (UK tickets)),words(Your own words)bg-n(How many cards): a number (min 1, max 100)bg-size(Card size): one of3(3 × 3),4(4 × 4),5(5 × 5)bg-free(Free middle square (odd sizes)):1to tick, empty to leave untickedbg-list(Words, one per line): text, may be several lines
Result:
#bg-cards: its text#bg-msg: the status line
Blob Shape
https://toolbox.thoughtasylum.com/blob/#bl-points=…&bl-rand=…&bl-seed=…&bl-size=…&bl-fill=…
Fields:
bl-points(Points): a number (min 3, max 24, step 1)bl-rand(Randomness (0 to 100)): a number (min 0, max 100, step 1)bl-seed(Seed (any text)): textbl-size(Size (pixels)): a number (min 1, step 1)bl-fill(Colour): a colour, #rrggbb
Result:
#bl-svg(SVG): its value#bl-css(CSS): its value#bl-msg: the status line
Box Shadow
https://toolbox.thoughtasylum.com/box-shadow/#bs-mode=…&bs-bg=…&bs-boxc=…&bs-layers=…&bs-sel=…
Fields:
bs-mode(Make a): one ofbox(box-shadow),text(text-shadow)bs-bg(Page colour): a colour, #rrggbbbs-boxc(Shape and text colour): a colour, #rrggbbbs-layers(All layers, one a line: x y blur spread #rrggbb opacity, then inset if wanted): text, may be several linesbs-sel(Layer number): a number (min 1, max 1)
Result:
#bs-css(CSS): its value#bs-msg: the status line
Break Timer
https://toolbox.thoughtasylum.com/break-timer/#bt-mode=…&bt-mins=…&bt-back=…&bt-urgent=…&bt-text=…&bt-urgent-text=…&bt-late=…&bt-work=…&bt-rest=…&bt-rounds=…
Fields:
bt-mode(Timer): one ofbreak(Break countdown),intervals(Intervals),stopwatch(Stopwatch)bt-mins(Minutes): a number (min 0, step any)bt-back(Or back at): textbt-urgent(Urgent for the last (minutes)): a number (min 0, step any)bt-text(Message ({time}: the time to be back)): textbt-urgent-text(Urgent message): textbt-late(When time’s up): textbt-work(Work (seconds)): a number (min 1, step 1)bt-rest(Rest (seconds)): a number (min 0, step 1)bt-rounds(Rounds): a number (min 1, step 1)
It makes sound, so there’s no text result to read.
#bt-msg: the status line
CSS Gradient
https://toolbox.thoughtasylum.com/css-gradient/#gr-type=…&gr-angle=…&gr-shape=…&gr-pos=…&gr-repeat=…&gr-oklch=…&gr-stops=…
Fields:
gr-type(Type): one oflinear(Linear),radial(Radial),conic(Conic)gr-angle(Angle (degrees)): a number (step any)gr-shape(Shape): one ofcircle(Circle),ellipse(Ellipse)gr-pos(Centre (a CSS position, or blank)): textgr-repeat(Repeating):1to tick, empty to leave untickedgr-oklch(Mix colours in oklch):1to tick, empty to leave untickedgr-stops(Colour stops, one a line: a colour, then a position if you want one): text, may be several lines
Result:
#gr-css(CSS): its value#gr-msg: the status line
Caesar / ROT13
https://toolbox.thoughtasylum.com/caesar/#cz-mode=…&cz-k=…&cz-dir=…&cz-in=…
Fields:
cz-mode(Cipher): one ofcaesar(Caesar (letters)),rot5(ROT5 (digits)),rot18(ROT18 (ROT13 and ROT5)),rot47(ROT47 (printable ASCII))cz-k(Shift): a number (min 1, max 25)cz-dir(Direction): one of1(Encrypt (shift forward)),-1(Decrypt (shift back))cz-in(Text): text, may be several lines
Result:
#cz-out(Result): its value#cz-all(Every shift): its text
Calculator
https://toolbox.thoughtasylum.com/calculator/#ca-mode=…&ca-in=…
Fields:
ca-mode(Numbers): one ofint(Exact whole numbers),dec(Decimals)ca-in(Expressions, one per line): text, may be several lines
Result:
#ca-out(Results): its value#ca-msg: the status line
Case & Style
https://toolbox.thoughtasylum.com/case/#cs-in=…
Fields:
cs-in(Text): text, may be several lines
Result:
#cs-case(Case): its text#cs-code(Code and file names): its text#cs-clean(Clean up): its text#cs-fancy(Fancy): its text
Check Digit Validator
https://toolbox.thoughtasylum.com/check-digits/#cg-in=…
Fields:
cg-in(Number or code): text
Result:
#cg-out: its text#cg-rows: its text#cg-msg: the status line
Cipher Cracker
https://toolbox.thoughtasylum.com/crack/#ck-in=…
Fields:
ck-in(Ciphertext): text, may be several lines
Result:
#ck-out: its text#ck-msg: the status line
Classical Ciphers
https://toolbox.thoughtasylum.com/classic/#cl-cipher=…&cl-dir=…&cl-key=…&cl-key2=…&cl-a=…&cl-b=…&cl-shift=…&cl-period=…&cl-width=…&cl-rails=…&cl-bacon=…&cl-in=…
Fields:
cl-cipher(Cipher): one ofatbash(Atbash),affine(Affine),keyword(Keyword substitution),keyedcaesar(Keyed Caesar),polybius(Polybius square),bacon(Bacon),pigpen(Pigpen),vigenere(Vigenère),beaufort(Beaufort),autokey(Autokey),gronsfeld(Gronsfeld),porta(Porta),otp(One-time pad),playfair(Playfair),foursquare(Four-square),bifid(Bifid),trifid(Trifid),nihilist(Nihilist),rail(Rail Fence),columnar(Columnar transposition),double(Double transposition),amsco(AMSCO),route(Route (spiral)),scytale(Scytale),adfgx(ADFGX),adfgvx(ADFGVX)cl-dir(Direction): one ofenc(Encrypt),dec(Decrypt)cl-key(Keyword (a number for Gronsfeld; the pad for a one-time pad)): textcl-key2(Second keyword): textcl-a(a (multiplier)): one of1,3,5,7,9,11,15,17,19,21,23,25cl-b(b (shift)): a number (min 0, max 25)cl-shift(Shift): a number (min 0, max 25)cl-period(Period (0 for the whole text)): a number (min 0, max 50)cl-width(Columns (turns of the rod)): a number (min 2, max 30)cl-rails(Rails): a number (min 2, max 20)cl-bacon(Alphabet): one of26(26 letters),24(24 letters (I = J, U = V))cl-in(Input): text, may be several lines
Result:
#cl-out(Output): its value#cl-msg: the status line
Clip-path
https://toolbox.thoughtasylum.com/clip-path/#cp-shape=…&cp-points=…&cp-cx=…&cp-cy=…&cp-r=…&cp-ry=…&cp-it=…&cp-ir=…&cp-ib=…&cp-il=…&cp-round=…
Fields:
cp-shape(Shape): one ofpolygon(Polygon (points you can move)),circle(Circle),ellipse(Ellipse),inset(Inset (a rectangle))cp-points(Points, one a line (x and y as percentages of the box)): text, may be several linescp-cx(Centre across (%)): a number (step any)cp-cy(Centre down (%)): a number (step any)cp-r(Radius, or width radius for an ellipse (%)): a number (min 0, step any)cp-ry(Height radius (%)): a number (min 0, step any)cp-it(Top (%)): a number (min 0, step any)cp-ir(Right (%)): a number (min 0, step any)cp-ib(Bottom (%)): a number (min 0, step any)cp-il(Left (%)): a number (min 0, step any)cp-round(Corner radius (pixels)): a number (min 0, step any)
Result:
#cp-css(CSS): its value#cp-msg: the status line
Code Format
https://toolbox.thoughtasylum.com/code/#cf-lang=…&cf-indent=…&cf-in=…
Fields:
cf-lang(Language): one ofhtml(HTML),css(CSS),js(JavaScript),sql(SQL),svg(SVG),html-jsx(HTML to JSX),svg-jsx(SVG to JSX)cf-indent(Indent): one of2(2 spaces),4(4 spaces),tab(Tab)cf-in(Code): text, may be several lines
Result:
#cf-out(Result): its value#cf-msg: the status line
Colour Converter
https://toolbox.thoughtasylum.com/colour/#co-in=…
Fields:
co-in(Any CSS colour): text
Result:
#co-out: its text#co-msg: the status line
Contrast Checker
https://toolbox.thoughtasylum.com/contrast/#ct-fg=…&ct-bg=…
Fields:
ct-fg(Text colour): textct-bg(Background): text
Result:
#ct-wcag(WCAG 2): its text#ct-apca(APCA): its text#ct-fix(Nearest passing text colours): its text#ct-msg: the status line
Coordinate Converter
https://toolbox.thoughtasylum.com/coords/#ll-as=…&ll-in=…
Fields:
ll-as(Read as): one ofauto(Work it out),latlon(Latitude and longitude),utm(UTM),mgrs(MGRS),osgb(OS grid reference),plus(Plus Code),geohash(Geohash),maidenhead(Maidenhead locator),link(Map link)ll-in(Position): text
Result:
#ll-rows: its text#ll-msg: the status line
Cron Explainer
https://toolbox.thoughtasylum.com/cron/#cr-in=…
Fields:
cr-in(Cron expression): text
Result:
#cr-next(Next runs): a list#cr-plist(As launchd StartCalendarInterval): its value#cr-msg: the status line
Custom Card Link Builder
https://toolbox.thoughtasylum.com/custom-card/#cc-script=…&cc-mode=…&cc-url=…&cc-map=…&cc-test=…
Fields:
cc-script(Where your redirector.js is): textcc-mode(The card opens): one ofone(One link: the same everywhere, or a page in Learning),many(A different link on each Learning site)cc-url(Link, or a path in Learning starting /): textcc-map(One Learning site per line, then the link to open there): text, may be several linescc-test(Test: the card is used on): text
Result:
#cc-out(JavaScript URL for the card): its value#cc-test-out: its text#cc-msg: the status line
DTMF Tones
https://toolbox.thoughtasylum.com/dtmf/#dt-keys=…&dt-tone=…&dt-gap=…
Fields:
dt-keys(Keys: 0–9, *, #, A–D, and commas for pauses): textdt-tone(Each tone (milliseconds)): a number (min 40, max 1000)dt-gap(Gap (milliseconds)): a number (min 40, max 1000)
It makes sound, so there’s no text result to read.
#dt-msg: the status line
Date Calculator
https://toolbox.thoughtasylum.com/dates/#dc-a=…&dc-b=…&dc-c=…&dc-n=…&dc-unit=…
Fields:
dc-a(From): a date, YYYY-MM-DDdc-b(To): a date, YYYY-MM-DDdc-c(Date): a date, YYYY-MM-DDdc-n(Amount (negative to subtract)): a numberdc-unit(Unit): one ofd(Days),w(Weeks),m(Months),y(Years),b(Business days (Monday to Friday))
Result:
#dc-diff(Between two dates): its text#dc-sum(Add or subtract): its text
Distance & Bearing
https://toolbox.thoughtasylum.com/distance/#db-a=…&db-b=…&db-unit=…&db-brg=…&db-dist=…
Fields:
db-a(Point A): textdb-b(Point B): textdb-unit(Unit): one ofm(Metres),km(Kilometres),mi(Miles),ft(Feet),yd(Yards),nmi(Nautical miles)db-brg(Bearing (degrees from true north)): textdb-dist(Distance): text
Result:
#db-rows: its text#db-prows(Project a waypoint from point A): its text#db-msg: the status line
Easing Curve
https://toolbox.thoughtasylum.com/easing-curve/#ec-kind=…&ec-x1=…&ec-y1=…&ec-x2=…&ec-y2=…&ec-steps=…&ec-jump=…&ec-dur=…
Fields:
ec-kind(Kind): one ofbezier(Curve (cubic-bezier)),bounce(Bounce (linear)),steps(Steps)ec-x1(First handle, x (0 to 1)): a number (min 0, max 1, step 0.01)ec-y1(First handle, y): a number (step 0.01)ec-x2(Second handle, x (0 to 1)): a number (min 0, max 1, step 0.01)ec-y2(Second handle, y): a number (step 0.01)ec-steps(Number of steps): a number (min 1, step 1)ec-jump(Each jump comes): one ofend(at the end of its step),start(at the start of its step)ec-dur(Duration of the preview (seconds)): a number (min 0.1, step any)
Result:
#ec-css(CSS): its value#ec-msg: the status line
Enigma Machine
https://toolbox.thoughtasylum.com/enigma/#eg-model=…&eg-ref=…&eg-thin=…&eg-r0=…&eg-r1=…&eg-r2=…&eg-rings=…&eg-start=…&eg-plugs=…&eg-group=…&eg-in=…
Fields:
eg-model(Model): one ofI(Enigma I (Army, Air Force)),M3(M3 (Navy)),M4(M4 (Navy, four rotors))eg-ref(Reflector): one ofA,B,C,B thin,C thineg-thin(Fourth rotor): one ofBeta,Gammaeg-r0(Left rotor): one ofI,II,III,IV,V,VI,VII,VIIIeg-r1(Middle rotor): one ofI,II,III,IV,V,VI,VII,VIIIeg-r2(Right rotor): one ofI,II,III,IV,V,VI,VII,VIIIeg-rings(Ring settings): texteg-start(Start position): texteg-plugs(Plugboard pairs): texteg-group(Letters only, in groups of five):1to tick, empty to leave untickedeg-in(Input): text, may be several lines
Result:
#eg-out(Output): its value#eg-msg: the status line
Folder Tree
https://toolbox.thoughtasylum.com/folder-tree/#ft-style=…&ft-depth=…&ft-folders=…&ft-first=…&ft-ignore=…&ft-paths=…
Fields:
-
ft-style(Style): one ofunicode(Lines (├──)),ascii(ASCII (–)), markdown(Markdown list),indent(Indented) ft-depth(Levels (0: all)): a number (min 0, step 1)ft-folders(Folders only):1to tick, empty to leave untickedft-first(Folders first):1to tick, empty to leave untickedft-ignore(Ignore): textft-paths(Or paste paths, one per line): text, may be several lines
Result:
#ft-out(Tree): its value#ft-msg: the status line
Geocache Formulas
https://toolbox.thoughtasylum.com/geocache-formula/#gf-vars=…&gf-tpl=…
Fields:
gf-vars(Values: letters and numbers, such as A=3 B=7): text, may be several linesgf-tpl(Formula): text
Result:
#gf-rows: its text#gf-msg: the status line
Git Ignore Tester
https://toolbox.thoughtasylum.com/gitignore/#gi-case=…&gi-in=…&gi-paths=…
Fields:
gi-case(Ignore upper and lower case, as Git does on macOS and Windows (core.ignoreCase)):1to tick, empty to leave untickedgi-in(.gitignore): text, may be several linesgi-paths(Paths to test, one a line, from the folder the .gitignore is in (end a folder with /)): text, may be several lines
Result:
#gi-issues: a list#gi-rows: its text#gi-msg: the status line
HTTP Codes & MIME Types
https://toolbox.thoughtasylum.com/http-codes/#hc-q=…
Fields:
hc-q(Search by code, name, word or file extension): text
Result:
#hc-codes: its text#hc-mime: its text#hc-msg: the status line
JSON Format
https://toolbox.thoughtasylum.com/json/#js-indent=…&js-q=…&js-in=…
Fields:
js-indent(Indent): one of2(2 spaces),4(4 spaces),tab(Tab)js-q(JSONPath query (optional)): textjs-in(JSON): text, may be several lines
Result:
#js-out(Result): its value#js-msg: the status line
JSON ⇄ YAML ⇄ TOML
https://toolbox.thoughtasylum.com/yaml/#ym-from=…&ym-to=…&ym-in=…
Fields:
ym-from(From): one ofjson(JSON),yaml(YAML),toml(TOML)ym-to(To): one ofyaml(YAML),json(JSON),toml(TOML)ym-in(Input): text, may be several lines
Result:
#ym-out(Result): its value#ym-msg: the status line
LMS Settings Checker
https://toolbox.thoughtasylum.com/lms-settings/#ls-in=…&ls-b=…
Fields:
ls-in(Text): text, may be several linesls-b(Or paste it): text, may be several lines
Result:
#ls-msg: its text#ls-msg: the status line
Link Formatter
https://toolbox.thoughtasylum.com/link-format/#lf-fmt=…&lf-in=…
Fields:
lf-fmt(Format): one ofmarkdown(Markdown),reference(Markdown, reference style),html(HTML),bbcode(BBCode (forums)),org(Org mode),asciidoc(AsciiDoc),mediawiki(MediaWiki),rst(reStructuredText),textile(Textile),slack(Slack (API and bots)),plain(Plain text)lf-in(Links, one per line): text, may be several lines
Result:
#lf-out(Result): its value#lf-msg: the status line
List Compare
https://toolbox.thoughtasylum.com/list-compare/#lc-sep=…&lc-ci=…&lc-a=…&lc-b=…
Fields:
lc-sep(Items are separated by): one ofline(lines),comma(commas),tab(tabs),space(spaces)lc-ci(Ignore capitals):1to tick, empty to leave untickedlc-a(List A): text, may be several lineslc-b(List B): text, may be several lines
Result:
#lc-oa(Only in A): its value#lc-ob(Only in B): its value#lc-both(In both): its value#lc-all(In either, once each): its value#lc-msg: the status line
Loan Calculator
https://toolbox.thoughtasylum.com/loan/#ln-amount=…&ln-rate=…&ln-years=…&ln-per=…&ln-extra=…
Fields:
ln-amount(Amount borrowed): textln-rate(Yearly interest rate (%)): textln-years(Term (years)): textln-per(Payments a year): one of12(12 (monthly)),26(26 (every two weeks)),52(52 (weekly)),24(24 (twice a month)),4(4 (quarterly)),2(2 (twice a year)),1(1 (yearly))ln-extra(Extra with each payment): text
Result:
#ln-out: its text#ln-msg: the status line
Lookalike Characters
https://toolbox.thoughtasylum.com/lookalikes/#hg-in=…&hg-cmp=…
Fields:
hg-in(Link, domain or text): text, may be several lineshg-cmp(Compare with (optional)): text
Result:
#hg-issues: a list#hg-kv: its text#hg-rows: its text#hg-msg: the status line
Mac Keyboard Symbols
https://toolbox.thoughtasylum.com/mac-keys/#sc-from=…&sc-in=…
Fields:
sc-from(Written for): one ofmac(A Mac (Ctrl is Control)),windows(Windows or Linux (Ctrl becomes ⌘, Alt ⌥))sc-in(Shortcuts, one a line): text, may be several lines
Result:
#sc-out: its text#sc-msg: the status line
Markdown Format
https://toolbox.thoughtasylum.com/md-format/#mf-bullet=…&mf-italic=…&mf-bold=…&mf-toc=…&mf-in=…
Fields:
mf-bullet(Bullets): one of-(- (hyphen)),*(* (asterisk)),+(+ (plus)),keep(Keep as they are)mf-italic(Italic): one ofkeep(Keep as they are),*(text),_(text)mf-bold(Bold): one ofkeep(Keep as they are),**(text),__(text)mf-toc(Contents): one of2-3(Levels 2–3),1-3(Levels 1–3),2-4(Levels 2–4),1-6(All levels)mf-in(Markdown): text, may be several lines
Result:
#mf-issues: a list#mf-out(Formatted): its value#mf-toc-out(Table of contents): its value#mf-msg: the status line
Markdown Table
https://toolbox.thoughtasylum.com/md-table/#mt-pad=…&mt-in=…
Fields:
mt-pad(Line up the columns):1to tick, empty to leave untickedmt-in(A Markdown table, CSV, rows pasted from a spreadsheet, or JSON): text, may be several lines
Result:
#mt-out(Table): its value#mt-msg: the status line
Mermaid Editor
https://toolbox.thoughtasylum.com/mermaid/#mm-theme=…&mm-transparent=…&mm-rounded=…&mm-in=…
Fields:
mm-theme(Theme): one ofauto(Match the site),light(Light),dark(Dark),neutral(Neutral),print(Print),forest(Forest),ocean(Ocean),blueprint(Blueprint),paper(Paper),pastel(Pastel),midnight(Midnight),high-contrast-light(High contrast light),high-contrast-dark(High contrast dark)mm-transparent(Transparent background):1to tick, empty to leave untickedmm-rounded(Rounded corners):1to tick, empty to leave untickedmm-in(Mermaid text): text, may be several lines
Result:
#mm-msg: its text#mm-msg: the status line
Morse Code
https://toolbox.thoughtasylum.com/morse/#mo-text=…
Fields:
mo-text(Text): text, may be several lines
Result:
#mo-code(Morse): its value#mo-msg: the status line
Number Bases
https://toolbox.thoughtasylum.com/bases/#nb-10=…
Fields:
nb-10(Decimal): text
Result:
#nb-16(Hexadecimal): its value#nb-8(Octal): its value#nb-2(Binary): its value#nb-62(Base62): its value#nb-twos(As a fixed-width integer): its text#nb-msg: the status line
Number Codes
https://toolbox.thoughtasylum.com/number-codes/#nc-in=…
Fields:
nc-in(Text, or a number): text, may be several lines
Result:
#nc-out: its text
Numerals
https://toolbox.thoughtasylum.com/numerals/#nu-in=…
Fields:
nu-in(A number, a Roman numeral or a number in words): text
Result:
#nu-out: its text#nu-msg: the status line
Periodic Table
https://toolbox.thoughtasylum.com/periodic-table/#pt-colour=…&pt-formula=…
Fields:
pt-colour(Colour by): one ofcat(Category),block(Block (s, p, d, f)),mass(Atomic mass),en(Electronegativity),radius(Atomic radius),ie(Ionisation energy),mp(Melting point),bp(Boiling point),density(Density),year(Year discovered)pt-formula(Formula): text
Result:
#pt-fout(Molar mass of a formula): its text#pt-msg: the status line
Permissions
https://toolbox.thoughtasylum.com/chmod/#pm-oct=…
Fields:
pm-oct(Octal): text
Result:
#pm-sym(Symbolic, as ls -l shows it): its value#pm-out: its text#pm-msg: the status line
Picture Alphabets
https://toolbox.thoughtasylum.com/picture-alphabets/#pa-kind=…&pa-in=…
Fields:
pa-kind(Alphabet): one ofpigpen(Pigpen (masonic cipher)),semaphore(Flag semaphore),flags(Maritime signal flags),hexahue(Hexahue (colours)),braille(Braille),runes(Elder Futhark runes),greek(Greek letters)pa-in(Text): text, may be several lines
Result:
#pa-text(In symbols): its value#pa-msg: the status line
Printable Paper
https://toolbox.thoughtasylum.com/paper/#pp-unit=…&pp-kind=…&pp-size=…&pp-orient=…&pp-cw=…&pp-ch=…&pp-pw=…&pp-ph=…&pp-ppi=…&pp-mono=…&pp-margin=…&pp-spacing=…&pp-header=…&pp-every=…&pp-mline=…&pp-staves=…&pp-gap=…&pp-cue=…&pp-summary=…&pp-weight=…&pp-paper=…&pp-paper-c=…&pp-line=…&pp-line-c=…&pp-screen=…&pp-pages=…
Fields:
pp-unit(Lengths in): one ofmm(Millimetres),in(Inches)pp-kind(Kind): one oflined(Lined),legal(Legal pad (yellow, red margin)),squared(Squared (graph)),dots(Dot grid),isometric(Isometric),hex(Hexagons),staff(Music staff),cornell(Cornell notes),handwriting(Handwriting lines)pp-size(Size): one ofa3(A3 (297 × 420 mm)),a4(A4 (210 × 297 mm)),a5(A5 (148 × 210 mm)),a6(A6 (105 × 148 mm)),b5(B5 (176 × 250 mm)),letter(US Letter (8.5 × 11 in)),us-legal(US Legal (8.5 × 14 in)),tabloid(US Tabloid (11 × 17 in)),foolscap(Foolscap (8 × 13 in)),f4(F4 (210 × 330 mm)),supernote-a5x(Supernote A5 X: 1404 × 1872),supernote-a6x(Supernote A6 X, A6 X2 Nomad: 1404 × 1872),supernote-manta(Supernote A5 X2 Manta: 1920 × 2560),remarkable-2(reMarkable 2: 1404 × 1872),remarkable-pro(reMarkable Paper Pro: 1620 × 2160),remarkable-move(reMarkable Paper Pro Move: 954 × 1696),kindle-scribe(Kindle Scribe: 1860 × 2480),boox-note-air(BOOX Note Air (10.3 in): 1860 × 2480),custom(Custom: width and height),custom-px(Custom screen: pixels and density)pp-orient(Turned): one ofportrait(Portrait),landscape(Landscape)pp-cw(Width): a number (min 1, step 1)pp-ch(Height): a number (min 1, step 1)pp-pw(Width (pixels)): a number (min 100, max 10000)pp-ph(Height (pixels)): a number (min 100, max 10000)pp-ppi(Pixels per inch): a number (min 50, max 600)pp-mono(Greyscale screen):1to tick, empty to leave untickedpp-margin(Margin): a number (min 0, step 1)pp-spacing(Spacing): a number (min 0, step 1)pp-header(Header space): a number (min 0, step 1)pp-every(Heavier line every): a number (min 1, max 50)pp-mline(Margin line):1to tick, empty to leave untickedpp-staves(Staves): a number (min 1, max 40)pp-gap(Gap between): a number (min 0, step 1)pp-cue(Cue column): a number (min 0, step 1)pp-summary(Summary box): a number (min 0, step 1)pp-weight(Line weight): one of0.15(Fine),0.25(Normal),0.4(Medium),0.6(Bold)pp-paper(Paper colour): one ofwhite(White),cream(Cream),legal(Yellow legal pad),green(Pale green (engineering)),blue(Pale blue),grey(Grey),custom(Custom)pp-paper-c(Paper colour White Cream Yellow legal pad Pale green (engineering) Pale blue Grey Custom): a colour, #rrggbbpp-line(Line colour): one ofblue(Pale blue),grey(Grey),black(Black),red(Red),custom(Custom)pp-line-c(Line colour Pale blue Grey Black Red Custom): a colour, #rrggbbpp-screen(Paper colour on screen only (not in the PDF)):1to tick, empty to leave untickedpp-pages(Pages in the PDF): a number (min 1, max 50)
Result:
#pp-prev: its text#pp-msg: the status line
Random Picker
https://toolbox.thoughtasylum.com/random/#ra-mode=…&ra-n=…&ra-min=…&ra-max=…&ra-unique=…&ra-wheel=…&ra-dice=…&ra-list=…
Fields:
ra-mode(What to do): one ofpick(Pick from a list),shuffle(Shuffle a list),groups(Split a list into groups),number(Random numbers),dice(Roll dice),coin(Flip coins)ra-n(How many to pick How many groups How many numbers How many coins): a number (min 1)ra-min(Lowest): a numberra-max(Highest): a numberra-unique(No repeats):1to tick, empty to leave untickedra-wheel(Show a spinning wheel):1to tick, empty to leave untickedra-dice(Dice): textra-list(List, one item per line): text, may be several lines
Result:
#ra-out(Result): its value#ra-msg: the status line
Redirect Map Builder
https://toolbox.thoughtasylum.com/redirects/#rd-fmt=…&rd-code=…&rd-in=…
Fields:
rd-fmt(For): one ofapache(Apache (.htaccess)),nginx,netlify(Netlify or Cloudflare Pages (_redirects)),vercel(Vercel (vercel.json)),caddy(Caddy (Caddyfile))rd-code(Status unless the line says): one of301(301 Moved permanently),308(308 Permanent, same method),302(302 Found (temporary)),307(307 Temporary, same method)rd-in(Old and new addresses, one pair a line): text, may be several lines
Result:
#rd-issues: a list#rd-rules(Rules for): its value#rd-msg: the status line
Regex Tester
https://toolbox.thoughtasylum.com/regex/#rx-g=…&rx-i=…&rx-m=…&rx-s=…&rx-u=…&rx-y=…&rxp-in=…&rxt-in=…&rx-rep=…
Fields:
rx-g(g Global):1to tick, empty to leave untickedrx-i(i Ignore case):1to tick, empty to leave untickedrx-m(m Multiline):1to tick, empty to leave untickedrx-s(s Dot matches line breaks):1to tick, empty to leave untickedrx-u(u Unicode):1to tick, empty to leave untickedrx-y(y Sticky):1to tick, empty to leave untickedrxp-in(Pattern): text, may be several linesrxt-in(Text to test): text, may be several linesrx-rep(Replace each match with): text
Result:
#rx-explain(Explanation): its text#rx-matches(Matches): its text#rx-out(Result): its value#rx-msg: the status line
SPF, DKIM & DMARC Checker
https://toolbox.thoughtasylum.com/email-dns/#ed-domain=…&ed-sel=…&ed-in=…
Fields:
ed-domain(Domain (optional)): texted-sel(DKIM selector (optional)): texted-in(Records, one a line): text, may be several lines
Result:
#ed-out: its text#ed-msg: the status line
Semver Range Checker
https://toolbox.thoughtasylum.com/semver/#sr-flavour=…&sr-range=…&sr-vers=…
Fields:
sr-flavour(Rules): one ofnpm(npm (package.json)),cargo(Cargo (Cargo.toml))sr-range(Range): textsr-vers(Versions to test, separated by spaces, commas or lines): text, may be several lines
Result:
#sr-means: its text#sr-rows: its text#sr-msg: the status line
Sound Effect Generator
https://toolbox.thoughtasylum.com/sound-effects/#sg-seed=…&sg-f0=…&sg-reverb=…&sg-echo=…&sg-drive=…&sg-vol=…
Fields:
sg-seed(Seed (blank: random)): textsg-f0(Pitch (Hz)): a number (min 0, step any)sg-reverb(Reverb room): a number (min 0, step any)sg-echo(Echo (seconds)): a number (min 0, step any)sg-drive(Drive): a number (min 0, step any)sg-vol(Volume (%)): a number (min 0, max 100)
It makes sound, so there’s no text result to read.
#sg-msg: the status line
Stack Trace Formatter
https://toolbox.thoughtasylum.com/stack-trace/#sx-in=…
Fields:
sx-in(Stack trace): text, may be several lines
Result:
#sx-text(Formatted): its value#sx-msg: the status line
Subnet Calculator
https://toolbox.thoughtasylum.com/subnet/#sn-split=…&sn-in=…
Fields:
sn-split(Split into subnets of): textsn-in(IP address with a prefix or netmask): text
Result:
#sn-out: its text#sn-list(Subnets): its value#sn-msg: the status line
Sun Times
https://toolbox.thoughtasylum.com/sun/#su-place=…&su-zone=…&su-date=…
Fields:
su-place(Place): textsu-zone(Time zone): one of the choices the page lists for the fields before itsu-date(Date): a date, YYYY-MM-DD
Result:
#su-table(Sun times for the place and date): a table#su-yeartable(Sunrise, sunset and daylight on the first of each month): a table#su-msg: the status line
Tap Tempo & Metronome
https://toolbox.thoughtasylum.com/metronome/#mn-bpm=…&mn-beats=…
Fields:
mn-bpm(Beats a minute): a number (min 20, max 400)mn-beats(Beats to a bar): a number (min 1, max 16)
It makes sound, so there’s no text result to read.
#mn-msg: the status line
Test Data Generator
https://toolbox.thoughtasylum.com/test-data/#td-mode=…&td-rows=…&td-fmt=…&td-table=…&td-seed=…&td-schema=…&td-set=…&td-lines=…&td-width=…
Fields:
td-mode(Make): one ofrows(Rows of fields),chars(Plain characters)td-rows(Rows): a number (min 1, max 10000)td-fmt(Format): one ofcsv(CSV),tsv(TSV (for spreadsheets)),json(JSON),jsonl(JSON Lines),sql(SQL INSERT)td-table(Table): texttd-seed(Seed): texttd-schema(Fields, one per line: name, colon, type and its options): text, may be several linestd-set(Characters): one ofdigits(Digits),alnum(Letters and digits),symbols(Letters, digits and symbols)td-lines(Lines): a number (min 1)td-width(Characters per line): a number (min 1)
Result:
#td-out(Data): its value#td-msg: the status line
Timestamp Converter
https://toolbox.thoughtasylum.com/timestamp/#ts-kind=…&ts-in=…&td-in=…
Fields:
ts-kind(Read as): one ofauto(Unix time, a date, a ULID or an ObjectId),filetime(Windows FILETIME or LDAP time),cocoa(Apple Cocoa / Core Data time),excel(Excel serial date),twitter(X (Twitter) Snowflake ID),discord(Discord Snowflake ID),dotnet(.NET ticks),chrome(Chrome / WebKit time),ntp(NTP time),gps(GPS time),hfs(HFS+ time),fat(FAT / DOS date and time),jd(Julian Day),mjd(Modified Julian Day),firebase(Firebase push ID),tid(Bluesky TID)ts-in(Unix time (seconds, milliseconds, microseconds or nanoseconds) or a date): texttd-in(A duration: seconds, SCORM 1.2 time or ISO 8601): text
Result:
#ts-out: its text#td-out(Durations): its text#ts-msg: the status line
Tone Generator
https://toolbox.thoughtasylum.com/tone-generator/#tg-wave=…&tg-freq=…&tg-to=…&tg-sweep=…&tg-secs=…&tg-vol=…
Fields:
tg-wave(Sound): one ofsine(Sine wave),square(Square wave),triangle(Triangle wave),sawtooth(Sawtooth wave),white(White noise),pink(Pink noise),brown(Brown noise)tg-freq(Frequency: hertz or a note such as A4): texttg-to(Glide to (optional)): texttg-sweep(Glide): one oflog(Evenly in pitch),linear(Evenly in hertz)tg-secs(Seconds): a number (min 0.1, max 600, step any)tg-vol(Volume (%)): a number (min 0, max 100)
It makes sound, so there’s no text result to read.
#tg-msg: the status line
Truth Table
https://toolbox.thoughtasylum.com/truth-table/#tt-in=…
Fields:
tt-in(Expressions, one per line): text, may be several lines
Result:
#tt-out: its text#tt-msg: the status line
Type Scale
https://toolbox.thoughtasylum.com/type-scale/#sz-base=…&sz-ratio=…&sz-custom=…&sz-up=…&sz-down=…&sz-prefix=…&sz-text=…&sz-fluid=…&sz-minvw=…&sz-maxvw=…&sz-maxbase=…&sz-maxratio=…
Fields:
sz-base(Base size (pixels)): a number (min 1, step any)sz-ratio(Ratio): one of1.067(1.067: minor second),1.125(1.125: major second),1.2(1.2: minor third),1.25(1.25: major third),1.333(1.333: perfect fourth),1.414(1.414: augmented fourth),1.5(1.5: perfect fifth),1.618(1.618: golden ratio),custom(Another)sz-custom(Ratio): a number (min 1.001, step any)sz-up(Steps above the base): a number (min 0, max 12)sz-down(Steps below): a number (min 0, max 6)sz-prefix(Name prefix): textsz-text(Sample text): textsz-fluid(Fluid: grow with the screen):1to tick, empty to leave untickedsz-minvw(Narrowest screen (pixels)): a numbersz-maxvw(Widest screen (pixels)): a numbersz-maxbase(Base size on the widest screen): a number (step any)sz-maxratio(Ratio on the widest screen (blank for the same)): a number (step any)
Result:
#sz-rows: its text#sz-css(CSS): its value#sz-msg: the status line
URL Encode / Decode
https://toolbox.thoughtasylum.com/url/#ue-plus=…&ue-in=…
Fields:
ue-plus(When decoding, read + as a space (form data)):1to tick, empty to leave untickedue-in(Text or encoded URL): text, may be several lines
Result:
#ue-out(Result): its value#ue-msg: the status line
URL Inspector
https://toolbox.thoughtasylum.com/url-parts/#up-plus=…&up-in=…
Fields:
up-plus(Read + as a space (web forms)):1to tick, empty to leave untickedup-in(URL): text, may be several lines
Result:
#up-parts: its text#up-params(Query parameters): its text#up-out(Rebuilt URL): its value#up-msg: the status line
UUID Generator
https://toolbox.thoughtasylum.com/uuid/#uu-in=…
Fields:
uu-in(Inspect a UUID, ULID or ObjectId): text
Result:
#uu-info: its text#uu-msg: the status line
Unit Converter
https://toolbox.thoughtasylum.com/units/#un-cat=…&un-unit=…&un-in=…&tt-size=…&tt-su=…&tt-rate=…&tt-ru=…
Fields:
un-cat(Category): one of the choices the page lists for the fields before itun-unit(Unit): one of the choices the page lists for the fields before itun-in(Value): texttt-size(Size): texttt-su(Size unit): one of the choices the page lists for the fields before ittt-rate(Speed): texttt-ru(Speed unit): one of the choices the page lists for the fields before it
Result:
#un-out: its text#tt-msg(Transfer time): its text#un-msg: the status line
User Agent Parser
https://toolbox.thoughtasylum.com/user-agent/#ua-in=…
Fields:
ua-in(User agent): text, may be several lines
Result:
#ua-out: its text#ua-msg: the status line
Web Link Files
https://toolbox.thoughtasylum.com/webloc/#wl-kind=…&wl-url=…&wl-name=…
Fields:
wl-kind(Kind): one ofwebloc(Mac (.webloc)),url(Windows (.url)),desktop(Linux (.desktop)),inetloc(Mac, other internet address (.inetloc)),fileloc(Mac, file on disk (.fileloc))wl-url(Address): textwl-name(Name, for the file): text
Result:
#wl-text(The file’s contents): its value#wl-msg: the status line
World Clock
https://toolbox.thoughtasylum.com/world-clock/#wc-places=…&wc-date=…&wc-sel=…&wc-title=…
Fields:
-
wc-places(Places: IANA time zones, or LabelZone, separated by semicolons): text wc-date(Date): a date, YYYY-MM-DDwc-sel(Chosen time: the hour from midnight on the date in the first place, 0 to 23, or a range such as 9-10): textwc-title(Meeting title (optional)): text
Result:
#wc-table(Hours of the day in each place. Left and right arrows choose an hour; Shift with them stretches the choice.): a table#wc-out(Chosen time in each place): its value#wc-msg: the status line
XML Format
https://toolbox.thoughtasylum.com/xml/#xm-indent=…&xm-q=…&xm-in=…
Fields:
xm-indent(Indent): one of2(2 spaces),4(4 spaces),tab(Tab)xm-q(XPath query (optional)): textxm-in(XML): text, may be several lines
Result:
#xm-out(Result): its value#xm-msg: the status line
docker run to Compose
https://toolbox.thoughtasylum.com/docker-compose/#dk-in=…
Fields:
dk-in(docker run commands): text, may be several lines
Result:
#dk-out(compose.yaml): its value#dk-msg: the status line
launchd Job Builder
https://toolbox.thoughtasylum.com/launchd/#lj-kind=…&lj-label=…&lj-args=…&lj-shell=…&lj-atload=…&lj-interval=…&lj-cron=…&lj-watch=…&lj-keep=…&lj-outfile=…&lj-errfile=…&lj-dir=…&lj-user=…
Fields:
lj-kind(Kind of job): one ofagent(Agent for me (~/Library/LaunchAgents)),global-agent(Agent for every user (/Library/LaunchAgents)),daemon(Daemon, runs without anyone logged in (/Library/LaunchDaemons))lj-label(Label): textlj-args(Program and its arguments, one a line): text, may be several lineslj-shell(Run as a shell command (/bin/zsh -c), for pipes, ~, $VARIABLES and the like):1to tick, empty to leave untickedlj-atload(Run at load (when you log in, or for a daemon when the Mac starts)):1to tick, empty to leave untickedlj-interval(Every N seconds): textlj-cron(On a schedule, as a cron expression): textlj-watch(When any of these paths change, one a line): text, may be several lineslj-keep(Keep it running): one of `` (No),always(Always: restart it whenever it ends),failed(Restart it only when it fails)lj-outfile(Output log file): textlj-errfile(Error log file): textlj-dir(Working folder): textlj-user(Run as user (leave empty for root)): text
Result:
#lj-issues(When it runs): a list#lj-plist(The job’s property list): its value#lj-cmds(Commands to install, run and remove it): its value#lj-msg: the status line
mailto Link Builder
https://toolbox.thoughtasylum.com/mailto/#ml-text=…&ml-to=…&ml-cc=…&ml-bcc=…&ml-subject=…&ml-body=…
Fields:
ml-text(Link text): textml-to(To): textml-cc(Cc): textml-bcc(Bcc): textml-subject(Subject): textml-body(Body): text, may be several lines
Result:
#ml-link(Link): its value#ml-html(HTML): its value#ml-md(Markdown): its value#ml-msg: the status line
robots.txt Tester
https://toolbox.thoughtasylum.com/robots/#rb-agent=…&rb-in=…&rb-urls=…
Fields:
rb-agent(Crawler): textrb-in(robots.txt): text, may be several linesrb-urls(Addresses or paths to test, one a line): text, may be several lines
Result:
#rb-issues: a list#rb-rows: its text#rb-msg: the status line