{"id":"91cce103-994b-44a7-a0d6-5f4d5d45cbbe","shortId":"RhnpwW","kind":"skill","title":"Xdrop","tagline":"Skills skill by Xixu Me","description":"Use the bundled scripts inside this skill directory.\n\n## Available scripts\n\n- `scripts/upload.mjs` — Upload local files or directories to an Xdrop server and print the share link\n- `scripts/download.mjs` — Download an Xdrop share link, decrypt it locally, and save the files\n\nEnvironment requirements:\n\n- Bun\n- Local filesystem access\n- Network access to the target Xdrop server\n\n## Upload\n\n```bash\nbun scripts/upload.mjs --server <xdrop-site-url> <file-or-directory> [...]\n```\n\nPrefer these flags when relevant:\n\n- `--quiet`: suppress progress output and keep stdout clean\n- `--json`: return `transferId`, `shareUrl`, and `expiresAt`\n- `--expires-in <seconds>`: choose a supported expiry\n- `--api-url <url>`: override the default `<server>/api/v1`\n- `--name <value>`: set the transfer display name\n- `--concurrency <n>`: limit parallel uploads per file\n\nUseful examples:\n\n```bash\nbun scripts/upload.mjs --server http://localhost:8080 ./dist/report.pdf\nbun scripts/upload.mjs --server http://localhost:8080 --quiet ./archive.zip\nbun scripts/upload.mjs --server http://localhost:8080 --expires-in 600 --json ./notes.txt\n```\n\nIf the user wants verification, upload a small temporary file and then confirm the public transfer API or browser can open the returned link.\n\n## Download\n\nRequire the full share link, including `#k=...`. Without the fragment key, the transfer cannot be decrypted.\n\n```bash\nbun scripts/download.mjs \"<share-url>\"\n```\n\nPrefer these flags when relevant:\n\n- `--output <dir>`: choose the destination directory\n- `--quiet`: suppress progress output and keep stdout clean\n- `--json`: return `transferId`, `outputRoot`, and saved file paths\n- `--api-url <url>`: override the default `<share-origin>/api/v1`\n\nUseful examples:\n\n```bash\nbun scripts/download.mjs \"http://localhost:8080/t/abc123#k=...\"\nbun scripts/download.mjs --output ./downloads \"http://localhost:8080/t/abc123#k=...\"\nbun scripts/download.mjs --quiet --json --output ./downloads \"http://localhost:8080/t/abc123#k=...\"\n```\n\nBy default the downloader writes to `./xdrop-<transferId>` and preserves the manifest's relative paths.\n\n## Gotchas\n\n- A download link without the `#k=...` fragment is not decryptable. Ask for the full original share URL.\n- Use `--quiet` whenever another command or caller needs to capture stdout. Progress logs otherwise go to stderr, but the final result still matters.\n\n## Guardrails\n\n- Prefer `--quiet` when another command or script needs to capture stdout.\n- Keep the full share link fragment intact for downloads.\n- Do not bypass the scripts' built-in path sanitization or transfer cleanup behavior with manual ad hoc commands unless the user explicitly asks.","tags":["xdrop","skills","xixu-me"],"capabilities":["skill","source-xixu-me","category-skills"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/xixu-me/skills/xdrop","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under xixu-me/skills","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T02:40:12.391Z","embedding":null,"createdAt":"2026-04-18T20:23:44.325Z","updatedAt":"2026-04-24T02:40:12.391Z","lastSeenAt":"2026-04-24T02:40:12.391Z","tsv":"'/api/v1':95,211 '/archive.zip':123 '/dist/report.pdf':116 '/downloads':223,232 '/notes.txt':134 '/xdrop-':242 '600':132 '8080':115,121,128 '8080/t/abc123':218,225,234 'access':50,52 'ad':328 'anoth':271,295 'api':90,151,206 'api-url':89,205 'ask':261,335 'avail':15 'bash':59,110,176,214 'behavior':325 'browser':153 'built':318 'built-in':317 'bun':47,60,111,117,124,177,215,220,227 'bundl':9 'bypass':314 'caller':274 'cannot':173 'captur':277,301 'category-skills' 'choos':85,185 'clean':75,196 'cleanup':324 'command':272,296,330 'concurr':102 'confirm':147 'decrypt':38,175,260 'default':94,210,237 'destin':187 'directori':14,22,188 'display':100 'download':33,159,239,252,311 'environ':45 'exampl':109,213 'expir':83,130 'expires-in':82,129 'expiresat':81 'expiri':88 'explicit':334 'file':20,44,107,144,203 'filesystem':49 'final':287 'flag':65,181 'fragment':169,257,308 'full':162,264,305 'go':282 'gotcha':250 'guardrail':291 'hoc':329 'includ':165 'insid':11 'intact':309 'json':76,133,197,230 'k':166,219,226,235,256 'keep':73,194,303 'key':170 'limit':103 'link':31,37,158,164,253,307 'local':19,40,48 'localhost':114,120,127,217,224,233 'log':280 'manifest':246 'manual':327 'matter':290 'name':96,101 'need':275,299 'network':51 'open':155 'origin':265 'otherwis':281 'output':71,184,192,222,231 'outputroot':200 'overrid':92,208 'parallel':104 'path':204,249,320 'per':106 'prefer':63,179,292 'preserv':244 'print':28 'progress':70,191,279 'public':149 'quiet':68,122,189,229,269,293 'relat':248 'relev':67,183 'requir':46,160 'result':288 'return':77,157,198 'sanit':321 'save':42,202 'script':10,16,298,316 'scripts/download.mjs':32,178,216,221,228 'scripts/upload.mjs':17,61,112,118,125 'server':26,57,62,113,119,126 'set':97 'share':30,36,163,266,306 'shareurl':79 'skill':2,3,13 'small':142 'source-xixu-me' 'stderr':284 'stdout':74,195,278,302 'still':289 'support':87 'suppress':69,190 'target':55 'temporari':143 'transfer':99,150,172,323 'transferid':78,199 'unless':331 'upload':18,58,105,140 'url':91,207,267 'use':7,108,212,268 'user':137,333 'verif':139 'want':138 'whenev':270 'without':167,254 'write':240 'xdrop':1,25,35,56 'xixu':5","prices":[{"id":"8934b775-cdd7-4c86-8a3c-a9c43a752bc0","listingId":"91cce103-994b-44a7-a0d6-5f4d5d45cbbe","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"xixu-me","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:23:44.325Z"}],"sources":[{"listingId":"91cce103-994b-44a7-a0d6-5f4d5d45cbbe","source":"github","sourceId":"xixu-me/skills/xdrop","sourceUrl":"https://github.com/xixu-me/skills/tree/main/skills/xdrop","isPrimary":false,"firstSeenAt":"2026-04-18T22:19:21.899Z","lastSeenAt":"2026-04-24T00:56:34.138Z"},{"listingId":"91cce103-994b-44a7-a0d6-5f4d5d45cbbe","source":"skills_sh","sourceId":"xixu-me/skills/xdrop","sourceUrl":"https://skills.sh/xixu-me/skills/xdrop","isPrimary":true,"firstSeenAt":"2026-04-18T20:23:44.325Z","lastSeenAt":"2026-04-24T02:40:12.391Z"}],"details":{"listingId":"91cce103-994b-44a7-a0d6-5f4d5d45cbbe","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"xixu-me","slug":"xdrop","source":"skills_sh","category":"skills","skills_sh_url":"https://skills.sh/xixu-me/skills/xdrop"},"updatedAt":"2026-04-24T02:40:12.391Z"}}