---
name: "plowup"
section: "1"
platform: "linux"
package: "plowshare"
version: "2.1.7-4"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/plowup"
---

# plowup(1)

Simple upload manager for file sharing websites

## NAME

plowup - Simple upload manager for file sharing websites

## SYNOPSIS

**plowup** \[*OPTIONS*\]... \[*MODULE\_OPTIONS*\]... *MODULE* *URL*\|*FILE*\[*:DESTNAME*\]...

## DESCRIPTION

**plowup** is a command-line tool designed for automatic upload on file-sharing websites. It acts like a web browser, retrieving pages and filling HTML forms.

Anonymous upload is not allowed by all sites, some of them may require authentication. See specific module options below.

## OPTIONS

### Common options

- **-i,** **--interface=***IFACE*

  If your machine has several network interfaces, force using *IFACE* interface.

- **-r,** **--max-retries=***N*

  Set maximum retries for upload failures. Apply on module exit value: **1** (fatal error), **3** (network error), **7** (captcha error). Default option value is 0 (no retry) and applies for one single upload.

- **-t,** **--timeout=***SECS*

  Cancel upload download after *SECS* seconds of waits. Apply on module exit value: **10** (temporary unavailable error). This error mainly occurs on remote upload operations. Default option value is disabled (no timeout, infinite) and applies for one single upload.

- **--cache=***METHOD*

  Cache policy regarding module storage space. Each module is able to save data (credentials, authentication session, or tokens) in order to be reused later. Available values:

  **none**: module storage file is deleted before each item processing. Temporary directory is used.

  **session** (default): module storage file is deleted at the end of plowup execution. Temporary directory is used.

  **shared**: module storage file is global and located (in *~/.config/plowshare/storage/*). It can be accessed by any other instance of plow\* scripts. Warning: There is no atomicity (or file locking) on concurrent access.

  Example: Multiple file upload using a premium account. If supported by module, login stage could be performed once.

### Captcha options

- **--9kweu=***KEY*

  Use 9kw.eu service to solve captchas.

- **--antigate=***KEY*

  Use Antigate.com service to solve captchas.

- **--captchabhood=***USER:PASSWORD*

  Use Captcha Brotherhood service to solve captchas.

- **--captchacoin=***KEY*

  Use CaptchaCoin service to solve captchas.

- **--deathbycaptcha=***USER:PASSWORD*

  Use Death by Captcha service to solve captchas.

- **--captchamethod=***METHOD*

  Force specific captcha solving method (if unspecified it is autodetected). Available values:

  **imgur**: upload image to Imgur.com service, print image url in console and prompt for manual entering. Useful for NAS and embedded devices.

  **none**: abort if captcha solving is requested (even if automatic solving service is available).

  **online**: use captcha solving website only (9kweu, Antigate, CaptchaBrotherhood, CaptchaCoin or DeathByCaptcha account required).

  **fb**: display image in framebuffer console and prompt for manual entering. Looks for framebuffer viewers: fbi, fim. *FRAMEBUFFER* environment variable can contain device file. Default is */dev/fb0*.

  **nox**: display image in console (text) and prompt for manual entering. Looks for ascii viewers: img2txt, aview, tiv.

  **x11**: display image in an X11 window and prompt for manual entering. Looks for viewers: display, feh, sxiv, qiv. *DISPLAY* environment variable must not be empty.

- **--captchaprogram=***PROGRAM*

  Call external program or script for solving captchas. Provided executable can be located in *PATH* environment variable.

  Three arguments are given:

  **$1** module name (lowercase). For example: *mediafire*.

  **$2** image filename (with full path).

  **$3** hint or captcha type (string). For example: *recaptcha*, *solvemedia* or *digits-4*.

  Return value (on stdout) and exit status:

  **0**: solving success. Captcha Word(s) must be echo'ed.

  **2**: external solver is not able to solve requested captcha. Let plowup continue solving it normally (will consider **--captchamethod** if specified).

  **7**: external solver failed. Note: this exit code is eligible with retry policy (**-r**/**--max-retries**).

  Note: plowup legacy exit errors can also be returned, for example: **1** (fatal) or **3** (network).

### Tuning settings

- **--max-rate=***SPEED*

  Limit upload maximum speed in bytes per second. Suffixes are:

  **k**  for kilobytes (kB i.e. 1000),

  **M**  for megabytes (MB i.e. 1000^2),

  **K** or **Ki**  for kibibytes (KB or KiB i.e. 1024),

  **m** or **Mi**  for mebibytes (mB or MiB i.e. 1024^2).

- **--min-rate=***SPEED*

  Limit upload minimum speed in bytes per second (for a delay of 30 seconds). Suffixes are the same than **--max-rate**.

- **--temp-directory=***DIRECTORY*

  Directory for temporary files: cookies, images, ...

- **--name=***FORMAT*

  Format destination filename (applies on each file argument). Can be useful is you want to append or prepend a string to all your files. Default format string is *"%f"*. Interpreted sequences are:

  - *%%*

    raw % character

  - *%f*

    destination (remote) filename

  - *%g*

    destination (remote) filename (without extension)

  - *%G*

    destination (remote) filename (without extension, greedy)

  - *%h*

    MD5 hash (32-digit hexadecimal number, lowercase letters)

  - *%l*

    source (local) filename

  - *%m*

    module name

  - *%s*

    file size (in bytes)

  - *%x*

    extension (without dot character) of %f (not greedy)

- **--run-before=***PROGRAM*

  Call external program or script before upload file processing. Provided executable can be located in *PATH* environment variable. Messages can be sent to stderr, stdout is trashed.

  Three arguments are given:

  **$1** module name (lowercase). For example: *mediafire*.

  **$2** local filename

  **$3** destination filename

  **$4** cookie (initially empty) file given to upload module function.

  Exit status:

  **0**: script success. plowup continue normally.

  **2**: script explicitly requests skipping current file.

  Note: Any other script exit status like **1** (fatal) or **3** (network) will be ignored (an error message will be reported).

- **--printf=***FORMAT*

  Print results (on stdout) in a given format (for each successful upload). Default format string is *"%L%M%u%n"*. Interpreted sequences are:

  - *%%*

    raw % character

  - *%a*

    admin url or admin code (rare case)

  - *%A*

    same as **%a** but url is escaped for JSON usage

  - *%M*

    empty if **%a** is empty, or alias to "**#ADM %a%n**".

  - *%d*

    delete url

  - *%D*

    same as **%d** but url is escaped for JSON usage

  - *%L*

    empty if **%d** is empty, or alias to "**#DEL %d%n**".

  - *%f*

    destination (remote) filename

  - *%l*

    source (local) filename

  - *%m*

    module name

  - *%n*

    newline

  - *%s*

    filesize (positive integer in bytes)

  - *%t*

    tabulation character

  - *%T*

    24-hour clock time of finished file upload. 8 characters string in the format "**HH:MM:SS**" (invoke */bin/date +%T*).

  - *%u*

    download url

  - *%U*

    same as **%u** but url is escaped for JSON usage

### Logging options

- **-v,** **--verbose=***LEVEL*

  Set output verbosity level:

  **0**  none,

  **1**  errors,

  **2**  notice (default behavior),

  **3**  debug,

  **4**  report (very noisy, log HTML pages).

- **-q, --quiet**

  Alias for **-v0**. Do not print any debug messages.

### Miscellaneous options

- **--no-color**

  Disables log messages (stderr only) output coloring.

- **--no-curlrc**

  Do not use curl config file (~/.curlrc).

- **--curlrc=***FILE*

  Force using an alternate curl configuration file. Replaces ~/.curlrc if it exists. This option has no effect when **--no-curlrc** is defined.

- **--no-plowsharerc**

  Do not consider any configuration file.

- **--plowsharerc=***FILE*

  Force using an alternate configuration file (instead of per-user or systemwide plowshare.conf). This option has no effect when **--no-plowsharerc** is defined.

- **--modules**

  Display all supported module names (one per line) and exit. Useful for wrappers.

### Generic program information

- **-h, --help**

  Display main help and exit.

- **-H, --longhelp**

  Display complete help (with module options) and exit.

- **--version**

  Output version information and exit.

## MODULE OPTIONS

### Common options

- **-a,** **--auth=***USER:PASSWORD*

  Use premium account.

- **-b,** **--auth-free=***USER:PASSWORD*

  Use free account.

- **-d,** **--description=***DESCRIPTION*

  Set file description.

- **--folder=***FOLDER*

  Folder to upload files into. Usually a (leaf) folder name (no hierarchy assumed).

- **-p,** **--link-password=***PASSWORD*

  Protect your files with a password. May require premium account.

- **--email-from=***EMAIL*

  \<From\> field for notification email.

- **--email-to=***EMAIL*

  \<To\> field for notification email.

### Advanced options

- **--async**

  Asynchronous remote upload (only start upload, don't wait for link).

- **--private**

  Do not allow others to download the file.

All switches are not implemented nor required for all modules. See long help message for detailed modules option list.

## FILES

- */etc/plowshare.conf*

  Systemwide configuration file.

- *~/.config/plowshare/plowshare.conf*

  This is the per-user configuration file.

The file format is described in [**plowshare.conf**(5)](/plowshare.conf/5.md).

- *~/.config/plowshare/exec/*

  Additional directory considered when searching for executable. See **--captchaprogram** switch.

- *~/.config/plowshare/modules.d/*

  User directory considered when searching for modules at startup (plowup will try to open **~/.config/plowshare/modules.d/\*/config**). One file per module (hoster).

- *~/.config/plowshare/storage/*

  Directory used for storing data (one file per module) among sessions. See **--cache=shared** switch.

## ENVIRONMENT VARIABLES

The following environment variables may affect plowup:

- *DISPLAY*

  The X11 display server address is considered to display captchas. See **--captchamethod=x11** documentation below.

- *FRAMEBUFFER*

  This variable is considered to display captchas. See **--captchamethod=fb** documentation below.

- *HOME*

  Search for user configuration directory in **~/.config/plowshare** (see FILES section above). If found, **~/.curlrc** will be used (use **--no-curlrc** to disable it).

- *PLOWSHARE\_CURL*

  Specifies an alternate curl command (**$PATH** search is considered). If not defined, **curl** is used.

- *PLOWSHARE\_JS*

  Specifies an alternate js command (**$PATH** search is considered). If not defined, **js** is used.

- *PLOWSHARE\_DEBIAN\_JS*

  When set to **yes** javascript is enabled, otherwise it is blocked per #791467. Note that arbitrary javascript downloaded from the Internet will be run without any sandboxing if this is enabled.

- *XDG\_CONFIG\_HOME*

  The directory to store user configuration files. If not defined, **~/.config** is assumed.

## EXIT CODES

Possible exit codes are:

- 0

  Success.

- 1

  Fatal error. Upstream site updated or unexpected result.

- 2

  No available module (provided module name does not exist).

- 3

  Network error. Mostly curl related.

- 4

  Authentication failed (bad login/password).

- 5

  Timeout reached (refer to **-t**/**--timeout** command-line option).

- 6

  Maximum tries reached (refer to **-r**/**--max-retries** command-line option).

- 7

  Captcha generic error.

- 8

  System generic error.

- 10

  Feature (upload service) seems temporarily unavailable from upstream (user account may be temporarily banned).

- 12

  Authentication required (example: anonymous users can't do remote upload).

- 14

  Can't upload too big file (hoster limitation or requires more permissions).

- 15

  Unknown command line parameter or incompatible options.

- 16

  Asynchronous remote upload started (can't predict final status).

If **plowup** is invoked with multiple files and one or several errors occur, the first error code is returned added with 100.

## AUTHORS

Plowshare was initially written by Arnau Sanchez. See the AUTHORS file for a list of some of the many other contributors.

Plowshare is (C) 2010-2016 The Plowshare Team

## SEE ALSO

[**plowdown**(1)](/plowdown/1.md), [**plowdel**(1)](/plowdel/1.md), [**plowlist**(1)](/plowlist/1.md), [**plowprobe**(1)](/plowprobe/1.md), [**plowshare.conf**(5)](/plowshare.conf/5.md), [**plowmod**(1)](/plowmod/1.md).
