commit 6d60a13c062376bf43d3a7f2132732b96164c16b Author: Norbert Takács Date: Sun Apr 5 13:03:06 2026 +0200 boot diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..28f1ba7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c443176 --- /dev/null +++ b/README.md @@ -0,0 +1,166 @@ +# Awesome ThinkCentres + +These machines can be found used for about 100-250 usd/eur. Most often found with 6 core cpu-s (8400t/9400t), single 8gb ram sticks and smaller 256/512gb M.2 nvme drive, and wifi configurations. + +What is this is good for? + +- homelab +- k8s nodes +- NAS/router +- dev/test boxes + +Models covered: + +- M720q +- M920q/x +- P330 tiny (Same as M920q but with 2x m.2, ie like an M920x) + +| | | | | +| ----------------------------------- | --------------------------------------------- | --------------------------------------- | ----------------------------------- | +| ![p330-tiny](images/p330-tiny.webp) | ![p330-tiny-back](images/p330-tiny-back.webp) | ![p330-inside](images/p330-inside.webp) | ![p330-back](images/p330-back.webp) | + + +## Awesome projects + +| Image | Project | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![diy4bay](images/diy4bay.webp) | [4 Bay NAS](https://www.reddit.com/r/homelab/comments/1qllfjn/thinkbox_released_diy_4bay_nas_and_powerful/) | +| | [Kubernetes cluster](https://blog.zolty.systems/posts/2026-02-07-choosing-the-hardware) | +| ![opfsense](images/opfsense.webp) | [OPFsense box/router](https://www.reddit.com/r/homelab/comments/1lvnv72/built_a_opnsense_router_from_a_lenovo_m720q_intel/?utm_source=chatgpt.com) | +| | [CEPH Distributed Storage mesh](https://heck.sh/posts/10g-ceph-mesh-tinyminimicro/) | +| ![thinknas-2bay](images/thinknas-2bay.webp) | [ThinkNAS - 2x HDD enclosure for Lenovo M920q](https://makerworld.com/en/models/1280680-thinknas-2x-hdd-enclosure-for-lenovo-m920q?from=search#profileId-1308483) | +| ![thinknas-4bay](images/thinknas-4bay.webp) | [ThinkNAS - 4x HDD NAS enclosure for Lenovo M920q](https://makerworld.com/en/models/1399535-thinknas-4x-hdd-nas-enclosure-for-lenovo-m920q?from=search#profileId-1451077) | +| ![thinknas-6bay](images/thinknas-6bay.webp) | [ThinkNAS - 6x HDD NAS enclosure for Lenovo M920q](https://makerworld.com/en/models/1737570-thinknas-6x-hdd-nas-enclosure-for-lenovo-m920q#profileId-1846272) | +| ![thinknas](images/thinknas.webp) | [ThinkLab - 6 Bay Home Lab - M920q](https://makerworld.com/en/models/1754167-thinklab-6-bay-home-lab-m920q?from=search#profileId-1865265) | +| ![think-nas](images/think-nas.webp) | [THINK NAS - Lenovo Think Style NAS Case](https://makerworld.com/en/models/1368836-think-nas-lenovo-think-style-nas-case?from=search#profileId-1415019) | + +## Features + +| Model | RAM | Storage | USB | Video | Network | spec sheet | +| ----- | ----------- | ---------------------------- | ------------------------- | --------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- | +| M720q | 2x32GB DDR4 | 2.5" SATA + M.2 2242/2280* | USB 3.1 Gen1/Gen2 + USB-C | HDMI + DP | 1Gbit | [spec sheet](https://psref.lenovo.com/syspool/Sys/PDF/ThinkCentre/ThinkCentre_M720_Tiny/ThinkCentre_M720_Tiny_Spec.pdf) | +| M920q | 2x32GB DDR4 | 2.5" SATA + M.2 2242/2280** | USB 3.1 Gen1/Gen2 + USB-C | HDMI + DP | 1Gbit | [spec sheet](https://psref.lenovo.com/syspool/Sys/PDF/ThinkCentre/ThinkCentre_M920_Tiny/ThinkCentre_M920_Tiny_Spec.PDF) | +| M920x | 2x32GB DDR4 | 2.5" SATA + 2x M.2 2242/2280 | USB 3.1 Gen1/Gen2 + USB-C | HDMI + DP | 1Gbit | [spec sheet](https://static.lenovo.com/shop/emea/content/pdf/ThinkCentre/MSeries/2018/M920x/ThinkCentre%20M920x%20Tiny_DS_EN.pdf) | +| P330 | 2x32GB DDR4 | 2.5" SATA + 2x M.2 2242/2280 | USB 3.1 Gen1/Gen2 + USB-C | HDMI + DP | 1Gbit | [spec sheet](https://psref.lenovo.com/syspool/Sys/PDF/ThinkStation/ThinkStation_P330_Tiny/ThinkStation_P330_Tiny_Spec.pdf) | + +``` +* can be modded with additional M.2 SATA slot +** can be modded with additional M.2 NVME slot +``` + +### Common CPU configurations + +| CPU | Cores | Threads | Why | +| -------------------------------- | ----- | ------- | ----------------------------- | +| i5-8500T | 6 | 6 | best value / very common | +| i5-8400T | 6 | 6 | cheaper alternative | +| i7-8700T | 6 | 12 | highest performance in class | +| i5-9500T | 6 | 6 | newer stepping, stable | +| i5-9600T | 6 | 6 | slightly higher boost | +| i7-9700T | 8 | 8 | 8 cores for heavy workloads | +| i3-8100 | 4 | 4 | low core count, not worth it | +| i3-9100 | 4 | 4 | weak for multi-tasking | +| Celeron / Pentium (G49xx, G54xx) | 2 | 2–4 | too slow for most homelab use | + +## Reviews/info + +| Image | Name | +| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![p330-sth](images/p330-sth.webp) | [ServeTheHome: Lenovo ThinkStation P330 Tiny Review](https://www.servethehome.com/lenovo-thinkstation-p330-tiny-review-intel-nvidia-quadro/) | +| ![m920-sth](images/m920-sth.webp) | [ServeTheHome: Lenovo ThinkCentre M920 and M920q Tiny Guide and Review](https://www.servethehome.com/lenovo-thinkcentre-m920-and-m920q-tiny-guide-and-review/) | +| ![m720q-sth](images/m720q-sth.webp) | [ServeTheHome: Lenovo ThinkCentre M720q Tiny Compact PC Review](https://www.servethehome.com/lenovo-thinkcentre-m720q-tiny-compact-pc-review/) | +| ![thinkcentre-sth-forum](images/thinkcentre-sth-forum.webp) | [ServeTheHome Forum: Lenovo Thinkcentre/ThinkStation Tiny (Project TinyMiniMicro) Reference Thread](https://forums.servethehome.com/index.php?threads/lenovo-thinkcentre-thinkstation-tiny-project-tinyminimicro-reference-thread.34925/) | +| ![upgrade-youtube](images/upgrade-youtube.webp) | [Youtube: Lenovo ThinkCentre M920Q Tiny - Teardown and Upgrade SSD, RAM, CPU in 4K](https://www.youtube.com/watch?v=hHJpXFjRBLw) | + +[Youtube: Lenovo ThinkCentre M920Q Tiny - Teardown and Upgrade SSD, RAM, CPU in 4K](https://www.youtube.com/watch?v=hHJpXFjRBLw) + +### Mods/upgrades + +[M920q extra M.2 nvme](https://github.com/badger707/m920q-dual-NVME) +[M720q extra M.2 sata mod](https://github.com/badger707/m920q-dual-NVME) + +### PCIE Risers + +| Image | Name | Extra Features | Purchase link | License | +| ------------------------------------------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------- | +| ![lenovo-riser](images/lenovo-riser.webp) | Lenovo style riser | | [Aliexpress](https://www.aliexpress.com/item/1005010038222767.html) | Official | +| ![Tinyriser-v2-front-irl](images/Tinyriser-v2-front-irl.webp) | [Tinyriser](https://github.com/a-little-wifi/Tinyriser) | M.2 NVME slot (Vertical) not for SATA drives | [Tindie](https://www.tindie.com/search/?q=tinyriser) | Open source | +| ![tiny5pcie](images/tiny5pcie.webp) | [LenovoTiny5PcieCard](https://github.com/qq8322302/LenovoTiny5PcieCard) | 4x M.2 NVME slot* not for SATA drives | [Taobao](https://item.taobao.com/item.htm?id=993356165215/) | Closed source | +| ![powerriser](images/powerriser.webp) | [PowerRiser](https://github.com/nandfarm/PowerRiser/tree/main) | M.2 NVME slot (Horizontal) not for SATA drives | [Tindie](https://www.tindie.com/products/nandfarm/powerriser-by-nandfarm-pcie-riser-for-tiny5/) | Open source | + +``` +* Requires custom BIOS, and hardware beyond the riser +``` + +### 2.5G Network Interface + +You can replace the M.2 Wifi card for 2.5G Ethernet + +| Image | Name | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| ![i226-2.5g](images/i226-2.5g.webp) | [Industrial Grade M.2 A and E Intel i226V Customized 2.5G Ethernet Server NIC](https://www.aliexpress.com/item/1005008612570820.html) | +| ![i226-srktv](images/i226-srktv.webp) | [M2 E A Key Karte 2.5 Gigabit RJ45 LAN ETHERNET 1G 2.5G Intel I226 SRKTV](https://www.ebay.de/itm/306178342372) | + +## PCIE cards + +To be able to add a pcie card you will need a PCIE expansion riser card. + +The following cards have been reported to fit these machines + +### Networking + +| Image | Name | Purpose | Notes | +| ------------------------------------------------- | ------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------- | +| ![connect3](images/connect3.webp) | Mellanox ConnectX-3 | (single/dual) 10Gbit, 40Gbit, InfiniBand 56Gbit | Sold under many brands, different products have different capabilities | +| ![connect4](images/connect4.webp) | Mellanox ConnectX-4 | (single/dual) 10Gbit, 40Gbit, 50Gbit, 100G, InfiniBand 100Gbit | Sold under many brands, different products have different capabilities | +| ![intel550](images/intel550.webp) | Intel X550 | 2x 10Gbit Ethernet | The ethernet 10Gbit might run too hot without an added fan | +| ![intel520](images/intel520.webp) | Intel X520 | 2x 10Gbit | | +| ![intel710](images/intel710.webp) | Intel X710 | | | +| ![thunderbolt](images/thunderbolt.webp) | Thunderbolt Card | 40 Gbit thunderbolt | | +| ![i350-t4](images/i350-t4.webp) | Intel i350-AM4 | 4x Gbit ethernet | | +| ![FujitsuD2755-A11](images/FujitsuD2755-A11.webp) | Fujitsu D2755-A11 | 2x 10Gbit | | + +### Storage + +| Image | Name | Purpose | Notes | +| --------------------------------- | --------------- | --------------- | ------------------------------------------------------ | +| ![h200perc](images/h200perc.webp) | Dell PERC H200 | 2x SAS (6Gbps) | Can be broken out into 2x 4 Sata with a breakout cable | +| ![tishric](images/tishric.webp) | TISHRIC ASM1166 | 6x SATA (6Gbps) | | + +### GPUs + +| Image | Name | Purpose | Notes | +| --------------------------------- | ---------------- | ------------- | ----- | +| ![quadro](images/quadro.webp) | Quadro K1200 | 4GB VRAM GPU | | +| ![rtxa2000](images/rtxa2000.webp) | RTX A2000 | 12GB VRAM GPU | | +| ![t600](images/t600.webp) | NVIDIA T600/1000 | 4GB/8GB VRAM | | + +### Other + +| Image | Name | Purpose | Notes | +| ------------------------------- | ------------ | -------------------------------------------------- | ----- | +| ![oculink](images/oculink.webp) | Oculink Card | Oculink SFF 8612 interfaces through a PCIe x8 slot | | + +## 3D printed mounts + +### Rack mounts + +| Image | Name | +| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| ![improved-1tiny-dual-rack](images/improved-1tiny-dual-rack.webp) | [Improved Thinkcentre Tiny 1U Rack](https://www.thingiverse.com/thing:6375095) | +| ![mini-pc-rack](images/mini-pc-rack.webp) | [Mini PC server case rack](https://www.thingiverse.com/thing:6651463) | +| ![lenovo-vertical-rack](images/lenovo-vertical-rack.webp) | [Lenovo Tiny Vertical Holder for DeskPi 10" rack](https://makerworld.com/en/models/1216152-lenovo-tiny-vertical-holder-for-deskpi-10-rack?from=search#profileId-1232034) | +| ![tiny-tower](images/tiny-tower.webp) | [ThinkCentre Tiny Tower (v2)](https://makerworld.com/en/models/773096-thinkcentre-tiny-tower-v2?from=search#profileId-709241) | +| ![openrack-1u](images/openrack-1u.webp) | [OpenRack 1U - Lenovo ThinkCentre M720](https://makerworld.com/en/models/1480687-openrack-1u-lenovo-thinkcentre-m720?from=search#profileId-1546016) | +| ![tiny10rack-mount](images/tiny10rack-mount.webp) | [ThinkCentre Tiny 10" Rack Mount](https://makerworld.com/en/models/2533762-thinkcentre-tiny-10-rack-mount?from=search#profileId-2788743) | +| ![10inch-rack-mount](images/10inch-rack-mount.webp) | [thinkcentre 10 inch rackmount](https://makerworld.com/en/models/1141511-thinkcentre-10-inch-rackmount?from=search#profileId-1143992) | + +## HDD caddy-s + +https://www.thingiverse.com/thing:4231309 + +## Where to find/buy + +[LowCostMiniPcs.com](https://www.lowcostminipcs.com) + +Local marketplaces, vinted, craigslist, facebook marketplace. diff --git a/image-to-markdown/index.ts b/image-to-markdown/index.ts new file mode 100644 index 0000000..83e6a1a --- /dev/null +++ b/image-to-markdown/index.ts @@ -0,0 +1,68 @@ +import fs from "fs"; +import path from "path"; +import sharp from "sharp"; + +const PAD_INPUT_DIR = "./input-pad"; +const CROP_INPUT_DIR = "./input-crop"; +const OUTPUT_DIR = "./../images"; +const SIZE = 200; + +function ensureDir(dir: string) { + fs.mkdirSync(dir, { recursive: true }); +} + +async function processFolder(inputDir: string, mode: "pad" | "crop") { + const files = fs.readdirSync(inputDir); + + for (const file of files) { + if (!/\.(png|jpe?g|webp|gif)$/i.test(file)) continue; + + const inputPath = path.join(inputDir, file); + const baseName = path.parse(file).name; + const outputPath = path.join(OUTPUT_DIR, `${baseName}.webp`); + + let image = sharp(inputPath); + + if (mode === "crop") { + image = image.resize({ + width: SIZE, + height: SIZE, + fit: "cover", + position: "centre" + }); + } else { + image = image.resize({ + width: SIZE, + height: SIZE, + fit: "contain", + background: { r: 255, g: 255, b: 255, alpha: 0 } + }); + } + + await image.webp({ lossless: true }).toFile(outputPath); + } +} + +async function run() { + ensureDir(OUTPUT_DIR); + + const results: string[] = []; + + await processFolder(PAD_INPUT_DIR, "pad"); + await processFolder(CROP_INPUT_DIR, "crop"); + + // regenerate markdown after both folders processed + const files = fs.readdirSync(OUTPUT_DIR); + + for (const file of files) { + const baseName = path.parse(file).name; + const mdPath = path.join("./images", file).replace(/\\/g, "/"); + results.push(`![${baseName}](${mdPath})`); + } + + results.forEach((result) => { + console.log(result); + }); +} + +run().catch(console.error); diff --git a/image-to-markdown/input-crop/diy4bay.webp b/image-to-markdown/input-crop/diy4bay.webp new file mode 100644 index 0000000..f8bcbcf Binary files /dev/null and b/image-to-markdown/input-crop/diy4bay.webp differ diff --git a/image-to-markdown/input-crop/i226-2.5g.png b/image-to-markdown/input-crop/i226-2.5g.png new file mode 100644 index 0000000..69c1515 Binary files /dev/null and b/image-to-markdown/input-crop/i226-2.5g.png differ diff --git a/image-to-markdown/input-crop/i226-srktv.webp b/image-to-markdown/input-crop/i226-srktv.webp new file mode 100644 index 0000000..95ab42b Binary files /dev/null and b/image-to-markdown/input-crop/i226-srktv.webp differ diff --git a/image-to-markdown/input-crop/lenovo-riser.png b/image-to-markdown/input-crop/lenovo-riser.png new file mode 100644 index 0000000..c0cc297 Binary files /dev/null and b/image-to-markdown/input-crop/lenovo-riser.png differ diff --git a/image-to-markdown/input-crop/m720q-sth.png b/image-to-markdown/input-crop/m720q-sth.png new file mode 100644 index 0000000..4c3ab93 Binary files /dev/null and b/image-to-markdown/input-crop/m720q-sth.png differ diff --git a/image-to-markdown/input-crop/m920-sth.png b/image-to-markdown/input-crop/m920-sth.png new file mode 100644 index 0000000..e3db2ab Binary files /dev/null and b/image-to-markdown/input-crop/m920-sth.png differ diff --git a/image-to-markdown/input-crop/p330-back.jpg b/image-to-markdown/input-crop/p330-back.jpg new file mode 100644 index 0000000..340c5a4 Binary files /dev/null and b/image-to-markdown/input-crop/p330-back.jpg differ diff --git a/image-to-markdown/input-crop/p330-inside.jpg b/image-to-markdown/input-crop/p330-inside.jpg new file mode 100644 index 0000000..dc61e0e Binary files /dev/null and b/image-to-markdown/input-crop/p330-inside.jpg differ diff --git a/image-to-markdown/input-crop/p330-sth.png b/image-to-markdown/input-crop/p330-sth.png new file mode 100644 index 0000000..6a5232b Binary files /dev/null and b/image-to-markdown/input-crop/p330-sth.png differ diff --git a/image-to-markdown/input-crop/think-nas.png b/image-to-markdown/input-crop/think-nas.png new file mode 100644 index 0000000..a8dce43 Binary files /dev/null and b/image-to-markdown/input-crop/think-nas.png differ diff --git a/image-to-markdown/input-crop/thinkcentre-sth-forum.png b/image-to-markdown/input-crop/thinkcentre-sth-forum.png new file mode 100644 index 0000000..9a07fd9 Binary files /dev/null and b/image-to-markdown/input-crop/thinkcentre-sth-forum.png differ diff --git a/image-to-markdown/input-crop/thunderbolt.jpg b/image-to-markdown/input-crop/thunderbolt.jpg new file mode 100644 index 0000000..b93f975 Binary files /dev/null and b/image-to-markdown/input-crop/thunderbolt.jpg differ diff --git a/image-to-markdown/input-crop/tiny5pcie.png b/image-to-markdown/input-crop/tiny5pcie.png new file mode 100644 index 0000000..dbceb88 Binary files /dev/null and b/image-to-markdown/input-crop/tiny5pcie.png differ diff --git a/image-to-markdown/input-crop/upgrade-youtube.png b/image-to-markdown/input-crop/upgrade-youtube.png new file mode 100644 index 0000000..bb8346c Binary files /dev/null and b/image-to-markdown/input-crop/upgrade-youtube.png differ diff --git a/image-to-markdown/input-pad/10inch-rack-mount.jpg b/image-to-markdown/input-pad/10inch-rack-mount.jpg new file mode 100644 index 0000000..089b909 Binary files /dev/null and b/image-to-markdown/input-pad/10inch-rack-mount.jpg differ diff --git a/image-to-markdown/input-pad/6bay-homelab.jpg b/image-to-markdown/input-pad/6bay-homelab.jpg new file mode 100644 index 0000000..faca0d2 Binary files /dev/null and b/image-to-markdown/input-pad/6bay-homelab.jpg differ diff --git a/image-to-markdown/input-pad/FujitsuD2755-A11.jpeg b/image-to-markdown/input-pad/FujitsuD2755-A11.jpeg new file mode 100644 index 0000000..02bf990 Binary files /dev/null and b/image-to-markdown/input-pad/FujitsuD2755-A11.jpeg differ diff --git a/image-to-markdown/input-pad/Tinyriser-v2-front-irl.jpg b/image-to-markdown/input-pad/Tinyriser-v2-front-irl.jpg new file mode 100644 index 0000000..093bb2b Binary files /dev/null and b/image-to-markdown/input-pad/Tinyriser-v2-front-irl.jpg differ diff --git a/image-to-markdown/input-pad/connect3.jpg b/image-to-markdown/input-pad/connect3.jpg new file mode 100644 index 0000000..c623079 Binary files /dev/null and b/image-to-markdown/input-pad/connect3.jpg differ diff --git a/image-to-markdown/input-pad/connect4.png b/image-to-markdown/input-pad/connect4.png new file mode 100644 index 0000000..8325166 Binary files /dev/null and b/image-to-markdown/input-pad/connect4.png differ diff --git a/image-to-markdown/input-pad/h200perc.jpg b/image-to-markdown/input-pad/h200perc.jpg new file mode 100644 index 0000000..462a703 Binary files /dev/null and b/image-to-markdown/input-pad/h200perc.jpg differ diff --git a/image-to-markdown/input-pad/i350-t4.jpg b/image-to-markdown/input-pad/i350-t4.jpg new file mode 100644 index 0000000..76643b5 Binary files /dev/null and b/image-to-markdown/input-pad/i350-t4.jpg differ diff --git a/image-to-markdown/input-pad/improved-1tiny-dual-rack.png b/image-to-markdown/input-pad/improved-1tiny-dual-rack.png new file mode 100644 index 0000000..b23ad60 Binary files /dev/null and b/image-to-markdown/input-pad/improved-1tiny-dual-rack.png differ diff --git a/image-to-markdown/input-pad/intel520.jpg b/image-to-markdown/input-pad/intel520.jpg new file mode 100644 index 0000000..b506aee Binary files /dev/null and b/image-to-markdown/input-pad/intel520.jpg differ diff --git a/image-to-markdown/input-pad/intel550.jpg b/image-to-markdown/input-pad/intel550.jpg new file mode 100644 index 0000000..2fb69c0 Binary files /dev/null and b/image-to-markdown/input-pad/intel550.jpg differ diff --git a/image-to-markdown/input-pad/intel710.jpg b/image-to-markdown/input-pad/intel710.jpg new file mode 100644 index 0000000..228514f Binary files /dev/null and b/image-to-markdown/input-pad/intel710.jpg differ diff --git a/image-to-markdown/input-pad/lenovo-vertical-rack.png b/image-to-markdown/input-pad/lenovo-vertical-rack.png new file mode 100644 index 0000000..029ae73 Binary files /dev/null and b/image-to-markdown/input-pad/lenovo-vertical-rack.png differ diff --git a/image-to-markdown/input-pad/mini-pc-rack.png b/image-to-markdown/input-pad/mini-pc-rack.png new file mode 100644 index 0000000..6027107 Binary files /dev/null and b/image-to-markdown/input-pad/mini-pc-rack.png differ diff --git a/image-to-markdown/input-pad/oculink.jpg b/image-to-markdown/input-pad/oculink.jpg new file mode 100644 index 0000000..40f9303 Binary files /dev/null and b/image-to-markdown/input-pad/oculink.jpg differ diff --git a/image-to-markdown/input-pad/openrack-1u.JPEG b/image-to-markdown/input-pad/openrack-1u.JPEG new file mode 100644 index 0000000..7103d44 Binary files /dev/null and b/image-to-markdown/input-pad/openrack-1u.JPEG differ diff --git a/image-to-markdown/input-pad/opfsense.webp b/image-to-markdown/input-pad/opfsense.webp new file mode 100644 index 0000000..2bc62a3 Binary files /dev/null and b/image-to-markdown/input-pad/opfsense.webp differ diff --git a/image-to-markdown/input-pad/p330-tiny-back.jpg b/image-to-markdown/input-pad/p330-tiny-back.jpg new file mode 100644 index 0000000..0d7d6b6 Binary files /dev/null and b/image-to-markdown/input-pad/p330-tiny-back.jpg differ diff --git a/image-to-markdown/input-pad/p330-tiny.jpg b/image-to-markdown/input-pad/p330-tiny.jpg new file mode 100644 index 0000000..8831c4f Binary files /dev/null and b/image-to-markdown/input-pad/p330-tiny.jpg differ diff --git a/image-to-markdown/input-pad/powerriser-2.jpg b/image-to-markdown/input-pad/powerriser-2.jpg new file mode 100644 index 0000000..5266425 Binary files /dev/null and b/image-to-markdown/input-pad/powerriser-2.jpg differ diff --git a/image-to-markdown/input-pad/powerriser.jpg b/image-to-markdown/input-pad/powerriser.jpg new file mode 100644 index 0000000..3ac8e3d Binary files /dev/null and b/image-to-markdown/input-pad/powerriser.jpg differ diff --git a/image-to-markdown/input-pad/quadro.jpg b/image-to-markdown/input-pad/quadro.jpg new file mode 100644 index 0000000..4602c31 Binary files /dev/null and b/image-to-markdown/input-pad/quadro.jpg differ diff --git a/image-to-markdown/input-pad/rtxa2000.jpg b/image-to-markdown/input-pad/rtxa2000.jpg new file mode 100644 index 0000000..7c3ad58 Binary files /dev/null and b/image-to-markdown/input-pad/rtxa2000.jpg differ diff --git a/image-to-markdown/input-pad/t600.jpg b/image-to-markdown/input-pad/t600.jpg new file mode 100644 index 0000000..29429e7 Binary files /dev/null and b/image-to-markdown/input-pad/t600.jpg differ diff --git a/image-to-markdown/input-pad/thinknas-2bay.jpg b/image-to-markdown/input-pad/thinknas-2bay.jpg new file mode 100644 index 0000000..bdc3849 Binary files /dev/null and b/image-to-markdown/input-pad/thinknas-2bay.jpg differ diff --git a/image-to-markdown/input-pad/thinknas-4bay.jpg b/image-to-markdown/input-pad/thinknas-4bay.jpg new file mode 100644 index 0000000..ac4085a Binary files /dev/null and b/image-to-markdown/input-pad/thinknas-4bay.jpg differ diff --git a/image-to-markdown/input-pad/thinknas-6bay.jpg b/image-to-markdown/input-pad/thinknas-6bay.jpg new file mode 100644 index 0000000..22a38fa Binary files /dev/null and b/image-to-markdown/input-pad/thinknas-6bay.jpg differ diff --git a/image-to-markdown/input-pad/tiny-tower.JPEG b/image-to-markdown/input-pad/tiny-tower.JPEG new file mode 100644 index 0000000..1f43d50 Binary files /dev/null and b/image-to-markdown/input-pad/tiny-tower.JPEG differ diff --git a/image-to-markdown/input-pad/tiny10rack-mount.png b/image-to-markdown/input-pad/tiny10rack-mount.png new file mode 100644 index 0000000..5010c15 Binary files /dev/null and b/image-to-markdown/input-pad/tiny10rack-mount.png differ diff --git a/image-to-markdown/input-pad/tishric.jpg b/image-to-markdown/input-pad/tishric.jpg new file mode 100644 index 0000000..a2d6835 Binary files /dev/null and b/image-to-markdown/input-pad/tishric.jpg differ diff --git a/image-to-markdown/package-lock.json b/image-to-markdown/package-lock.json new file mode 100644 index 0000000..dcdb5da --- /dev/null +++ b/image-to-markdown/package-lock.json @@ -0,0 +1,857 @@ +{ + "name": "image-to-markdown", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "image-to-markdown", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "node-fetch": "^3.3.2", + "sharp": "^0.34.5", + "ts-node": "^10.9.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT", + "peer": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/image-to-markdown/package.json b/image-to-markdown/package.json new file mode 100644 index 0000000..39edc13 --- /dev/null +++ b/image-to-markdown/package.json @@ -0,0 +1,18 @@ +{ + "name": "image-to-markdown", + "version": "1.0.0", + "main": "index.ts", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "node --loader ts-node/esm index.ts" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "node-fetch": "^3.3.2", + "sharp": "^0.34.5", + "ts-node": "^10.9.2" + } +} diff --git a/images/10inch-rack-mount.webp b/images/10inch-rack-mount.webp new file mode 100644 index 0000000..92b532b Binary files /dev/null and b/images/10inch-rack-mount.webp differ diff --git a/images/6bay-homelab.webp b/images/6bay-homelab.webp new file mode 100644 index 0000000..eedf709 Binary files /dev/null and b/images/6bay-homelab.webp differ diff --git a/images/FujitsuD2755-A11.webp b/images/FujitsuD2755-A11.webp new file mode 100644 index 0000000..c64904d Binary files /dev/null and b/images/FujitsuD2755-A11.webp differ diff --git a/images/Tinyriser-v2-front-irl.webp b/images/Tinyriser-v2-front-irl.webp new file mode 100644 index 0000000..9f9c81a Binary files /dev/null and b/images/Tinyriser-v2-front-irl.webp differ diff --git a/images/connect3.webp b/images/connect3.webp new file mode 100644 index 0000000..4ec4879 Binary files /dev/null and b/images/connect3.webp differ diff --git a/images/connect4.webp b/images/connect4.webp new file mode 100644 index 0000000..2da9e0e Binary files /dev/null and b/images/connect4.webp differ diff --git a/images/diy4bay.webp b/images/diy4bay.webp new file mode 100644 index 0000000..c400bc8 Binary files /dev/null and b/images/diy4bay.webp differ diff --git a/images/h200perc.webp b/images/h200perc.webp new file mode 100644 index 0000000..349e878 Binary files /dev/null and b/images/h200perc.webp differ diff --git a/images/i226-2.5g.webp b/images/i226-2.5g.webp new file mode 100644 index 0000000..bba5244 Binary files /dev/null and b/images/i226-2.5g.webp differ diff --git a/images/i226-srktv.webp b/images/i226-srktv.webp new file mode 100644 index 0000000..8f835b2 Binary files /dev/null and b/images/i226-srktv.webp differ diff --git a/images/i350-t4.webp b/images/i350-t4.webp new file mode 100644 index 0000000..9e3b772 Binary files /dev/null and b/images/i350-t4.webp differ diff --git a/images/improved-1tiny-dual-rack.webp b/images/improved-1tiny-dual-rack.webp new file mode 100644 index 0000000..81365f0 Binary files /dev/null and b/images/improved-1tiny-dual-rack.webp differ diff --git a/images/intel520.webp b/images/intel520.webp new file mode 100644 index 0000000..1fb02b9 Binary files /dev/null and b/images/intel520.webp differ diff --git a/images/intel550.webp b/images/intel550.webp new file mode 100644 index 0000000..4fc6e79 Binary files /dev/null and b/images/intel550.webp differ diff --git a/images/intel710.webp b/images/intel710.webp new file mode 100644 index 0000000..f20cc70 Binary files /dev/null and b/images/intel710.webp differ diff --git a/images/lenovo-riser.webp b/images/lenovo-riser.webp new file mode 100644 index 0000000..feee14b Binary files /dev/null and b/images/lenovo-riser.webp differ diff --git a/images/lenovo-vertical-rack.webp b/images/lenovo-vertical-rack.webp new file mode 100644 index 0000000..570d290 Binary files /dev/null and b/images/lenovo-vertical-rack.webp differ diff --git a/images/m720q-sth.webp b/images/m720q-sth.webp new file mode 100644 index 0000000..dc126a2 Binary files /dev/null and b/images/m720q-sth.webp differ diff --git a/images/m920-sth.webp b/images/m920-sth.webp new file mode 100644 index 0000000..182f934 Binary files /dev/null and b/images/m920-sth.webp differ diff --git a/images/mini-pc-rack.webp b/images/mini-pc-rack.webp new file mode 100644 index 0000000..75c0db4 Binary files /dev/null and b/images/mini-pc-rack.webp differ diff --git a/images/oculink.webp b/images/oculink.webp new file mode 100644 index 0000000..618a030 Binary files /dev/null and b/images/oculink.webp differ diff --git a/images/openrack-1u.webp b/images/openrack-1u.webp new file mode 100644 index 0000000..07d0ca5 Binary files /dev/null and b/images/openrack-1u.webp differ diff --git a/images/opfsense.webp b/images/opfsense.webp new file mode 100644 index 0000000..6a4a76f Binary files /dev/null and b/images/opfsense.webp differ diff --git a/images/p330-back.webp b/images/p330-back.webp new file mode 100644 index 0000000..30184e9 Binary files /dev/null and b/images/p330-back.webp differ diff --git a/images/p330-inside.webp b/images/p330-inside.webp new file mode 100644 index 0000000..fece876 Binary files /dev/null and b/images/p330-inside.webp differ diff --git a/images/p330-sth.webp b/images/p330-sth.webp new file mode 100644 index 0000000..bf2cf29 Binary files /dev/null and b/images/p330-sth.webp differ diff --git a/images/p330-tiny-back.webp b/images/p330-tiny-back.webp new file mode 100644 index 0000000..33fdefc Binary files /dev/null and b/images/p330-tiny-back.webp differ diff --git a/images/p330-tiny.webp b/images/p330-tiny.webp new file mode 100644 index 0000000..074c934 Binary files /dev/null and b/images/p330-tiny.webp differ diff --git a/images/powerriser-2.webp b/images/powerriser-2.webp new file mode 100644 index 0000000..d9ec887 Binary files /dev/null and b/images/powerriser-2.webp differ diff --git a/images/powerriser.webp b/images/powerriser.webp new file mode 100644 index 0000000..e548e6d Binary files /dev/null and b/images/powerriser.webp differ diff --git a/images/quadro.webp b/images/quadro.webp new file mode 100644 index 0000000..56ddee5 Binary files /dev/null and b/images/quadro.webp differ diff --git a/images/rtxa2000.webp b/images/rtxa2000.webp new file mode 100644 index 0000000..2b9d6ee Binary files /dev/null and b/images/rtxa2000.webp differ diff --git a/images/t600.webp b/images/t600.webp new file mode 100644 index 0000000..410b90f Binary files /dev/null and b/images/t600.webp differ diff --git a/images/think-nas.webp b/images/think-nas.webp new file mode 100644 index 0000000..2932625 Binary files /dev/null and b/images/think-nas.webp differ diff --git a/images/thinkcentre-sth-forum.webp b/images/thinkcentre-sth-forum.webp new file mode 100644 index 0000000..ff41ea9 Binary files /dev/null and b/images/thinkcentre-sth-forum.webp differ diff --git a/images/thinknas-2bay.webp b/images/thinknas-2bay.webp new file mode 100644 index 0000000..f16f6ab Binary files /dev/null and b/images/thinknas-2bay.webp differ diff --git a/images/thinknas-4bay.webp b/images/thinknas-4bay.webp new file mode 100644 index 0000000..b70f70a Binary files /dev/null and b/images/thinknas-4bay.webp differ diff --git a/images/thinknas-6bay.webp b/images/thinknas-6bay.webp new file mode 100644 index 0000000..0a05896 Binary files /dev/null and b/images/thinknas-6bay.webp differ diff --git a/images/thinknas.webp b/images/thinknas.webp new file mode 100644 index 0000000..f16f6ab Binary files /dev/null and b/images/thinknas.webp differ diff --git a/images/thunderbolt.webp b/images/thunderbolt.webp new file mode 100644 index 0000000..bbb55a4 Binary files /dev/null and b/images/thunderbolt.webp differ diff --git a/images/tiny-tower.webp b/images/tiny-tower.webp new file mode 100644 index 0000000..ce4be09 Binary files /dev/null and b/images/tiny-tower.webp differ diff --git a/images/tiny10rack-mount.webp b/images/tiny10rack-mount.webp new file mode 100644 index 0000000..072f583 Binary files /dev/null and b/images/tiny10rack-mount.webp differ diff --git a/images/tiny5pcie.webp b/images/tiny5pcie.webp new file mode 100644 index 0000000..9e4c22b Binary files /dev/null and b/images/tiny5pcie.webp differ diff --git a/images/tishric.webp b/images/tishric.webp new file mode 100644 index 0000000..73b474a Binary files /dev/null and b/images/tishric.webp differ diff --git a/images/upgrade-youtube.webp b/images/upgrade-youtube.webp new file mode 100644 index 0000000..a375abd Binary files /dev/null and b/images/upgrade-youtube.webp differ