photo upload


 * 2020-02-13 undefined: Should this page be renamed to something like "photo publishing"? Or should it be rewritten to purely be about the act of uploading an image file? Or uploading/storage of image files? E.g. photo storage

= photo upload = Photo upload is the act of creating a post whose primary content is a photo, typically captured by a camera on the same device that is creating the post.

For UIs to create a photo post, see:
 * create

POSSE
It is possible to POSSE photo uploads via silo-specific APIs to the following:
 * Flickr
 * Twitter
 * Wikimedia Commons - the API is somewhat complex and undocumented, but for some images that meet the project scope and are licensed under free licenses (CC BY-SA, CC BY, CC0/PD or equivalent)
 * So long as images are not deleted, you are able to store images there indefinitely, hot link them and use Commons to retrieve scaled versions.

Manual POSSEing is possible to the following:
 * Facebook - due to posting APIs being dropped 2018-08-01.
 * Instagram - has never had official posting APIs

PuPuPu
The popular mobile photo site Instagram deliberately lacks an API for uploads. However it does have an API for real-time notifications of uploads.

This presents the opportunity to build a PuPuPu system with Instagram as a publishing client:


 * Instagram
 * -> real-time notification to (and post creation on) your own site
 * -> syndication with permalinks to:
 * Facebook
 * Flickr
 * Twitter
 * Wikimedia Commons (for photos you don't mind contributing as CC BY-SA, CC BY, CC0/PD or equivalent)

Technically this would be Push-Push-Publishing, since the notifications from Instagram are done in real-time using the PuSH protocol.

Implementations
The OwnYourGram service enables you to use Instagram as a publishing client for posting photos to your own site.

HTML5 photo uploads
HTML5 extends the input element to permit pages to declaratively attempt photo uploads with: For documentation on how this works in browsers see:
 * documentation of camera capture on developer.mozilla.org

Mobile upload
Until in-browser approaches mature, it may be necessary to use native apps (either tied to a service and then PESOS, or a wrapper app around personal blogging web apps to provide camera functionality).

HTML5 Mobile browser upload

 * The Current State Of Photo/Video Capture In Mobile Browsers

Other approaches

 * Email as possible approach? Most smart phones have an email client, and/or have "email this photo" support built-into their native/default camera applications. If you could set-up a custom email address (security through obscurity) on your own domain for receiving photo uploads, you could use that to "upload" photos, and then have your indieweb site POSSE out to the above-mentioned silos.


 * OwnCloud has an Android client which can upload new photos taken on the camera to your own installation,


 * Android BotSync will watch a subdirectory on your phone and use the  protocol to transfer new files in that directory to a server, but appears to have some issues with larger files (ie: video).


 * The Android app "FolderSync" appears to be a more full-featured alternative to BotSync.


 * At the IWC Düsseldorf photo session multiple people reported that the Dropbox App works most reliably for photo transfer from mobile


 * With such sync approaches it makes sense for the UI to offer the user the option to pick an image from the recently uploaded ones


 * HTTP uploads (and by extension everything based on them, e.g. Micropub, normal HTML upload forms) by default do not support uploading files bit-by-bit or resuming interrupted uploads, which is a problem esp. for mobile connections. A common solution seems to be to allow multiple requests with offsets to write parts of the file, and server implementations that also write data from aborted requests. (Examples: dropbox API, tus.io protocol (attempt to standardize such a protocol))

Desktop upload
Some browsers support uploading images from a laptop/monitor camera:
 * HTML Media Capture API — W3C Candidate Recommendation, implemented in Chrome desktop, feature request bug for Firefox.