If you like to take pictures with a device other than your smartphone (say, a camera) and you use Instagram, you've probably come across an annoying limitation: when you go to Instagram in a web browser on a PC, Mac, or Linux computer, you can't post photos!
You can log in as yourself and see your feed, but a few years ago they removed the ability to post photos from any device other than a smartphone. Apparently they felt this would encourage people to post spontaneous, genuine photos that they've just taken, rather than contrived photos that were downloaded to a computer and edited in Photoshop.
This thinking has utterly failed, and most high-traffic Instagram sites post mostly non-smartphone images. But in order to do that, you have to jump through clumsy hoops. I think the most common approach, which I've used many times, is to simply email a photo to yourself, then open the email on your phone, save the image, and post it from there. That's clumsy, and also requires that you have both internet connectivity on your computer, and cell coverage on your phone. So I couldn't use this option on my recent trip to Antarctica, where I had internet connectivity on the ship but no hope of a cell signal.
There is a solution to this mess, which I'm going to explain here. It's still a little but clumsy, but once you get used to the details it's much faster than emailing to yourself every time, and it requires no cell coverage or phone. The solution is based on the fact that Instagram won't let you post photos from a browser running on a computer, but will let you post photos from a browser running on a phone.
And how do they know where your browser is running? The user agent string, of course. This is a standardized mechanism that all browsers use to allow web sites to know which browser is being used, which version, and what operating system it's running on. When Instagram sees a user agent string that says you're running Chrome on Windows, for example, they don't provide an option to upload photos. But if the user agent string says it's Safari running on iOS, they do provide the option to upload a photo.
The cool thing about user agent strings is that they can tell lies. Which leads us to a solution: we'll tell Chrome to lie to Instagram and say we're browsing from a phone, even when we're not!
Here are the details of what you need to do. I've written this up for Chrome on Windows; Chrome is the most popular browser on desktops and laptops these days, but similar concepts apply to any other browser.
First, open your browser and go to Instagram.com and log in with your Instagram credentials. If you click the button to save the password, you'll only have to do this once and then you'll be logged in whenever you go back to the Instagram site in that browser.
Next, right-click on the background of the page, and select the Inspect option:
That will put a bunch of geeky stuff for developers on the right side of the screen - ignore that stuff! The only thing you care about is the settings at the top of the page where you can select which browser we'll claim to be running, and how big to display the page.
In the example above, I've selected "iPhone 6/7/8/Plus" and set the size to 100%. So now Chrome will tell Instagram that we're on an iPhone. (By the way, if you're wondering why this capability even exists, it's for web developers to test how their site looks and behaves on various phone browsers.)
And there's one final detail left: sending this new user agent string to Chrome. To do that, simply refresh the page (the user agent string is sent with every page request). Press F5 or click the refresh button, and you'll see the familiar Instagram phone UI with the option to create a new post:
From there, it works just like on your phone: click the button, pick a photo, select a filter and/or add a caption, and publish it.
After you're done posting to Instagram, you'll want to turn off the developer tools that appeared on the screen when you selected the Inspect option. To do that, just click the X in the top right corner of the developer tools, and you'll be back to your normal browser display.