opencctv.org

Portland's traffic cameras, bridge by bridge

· updated 2026-10-29 · all posts

At 05:29 Portland time this morning the Sellwood Bridge Rivercam had the whole arch lit and doubled in the Willamette, a line of lamps running off along the far bank under a wooded bluff, and nothing moving that I could see. The frame is 1,920 by 1,080 and came down at 91 kB when I pulled it at 13:09 UTC. It is the prettiest thing any camera in Portland was serving at that hour, and it is the odd one out, because it is a weather camera on a 150 second cycle sitting in a city whose road cameras are all 320-pixel stills from the state.

Multnomah County maintains six of the Willamette River bridges in Portland and the state carries the rest. Six of those crossings have a camera named after them, and the pictures run from the top of an arch to a wall of blackberry. The good ones are a lot better than a count of six makes them sound. Here they are, going downriver.

Top of the arch on the Fremont

I-405 at Fremont Bridge (Top of Arch) is mounted where the name says it is, up on the steel above the upper deck, looking straight down the roadway with the hanger cables slicing the frame into strips and the lights of the lower city off to the right. Its 05:38 frame had headlights strung down the deck and the river gone black on either side of it. Elevation 215, milepost 3.16, both printed along the bottom.

This is the one to send someone who thinks a traffic camera is a traffic camera. Nothing else in the set has the height.

Three on the Marquam, two decks

The Marquam carries I-5 over the river on a double deck, and ODOT put a camera on each: Upper Deck West, Upper Deck East and Lower Deck Mid Span. The lower deck one is the interesting frame. You are underneath the upper deck looking north along the girders, so the picture has a ceiling to it, the steelwork marching away in silhouette with the lamps between, and southbound traffic coming through the gap. At 05:38 it had traffic in it and the deck shining under the lamps.

All three refreshed in the same second when I watched them, 13:05:51 GMT on the two upper cameras and 13:05:50 on the lower. ODOT pushes them in a batch, which is worth knowing if you are flicking between two of them expecting to catch different moments.

I-5 at Morrison Bridge is the next one up, and it is pointed at the southbound freeway rather than at the bridge. At 05:53 it had a vehicle going past close enough to blur.

The PBOT camera on the Ross Island

US 26 at Ross Island Bridge is a city camera rather than a state one, and the frame tells you so: "Camera courtesy of PBOT" and "Report issues to 3-1-1" are burnt into a black band at the bottom. It looks east along the Powell approach with blackberry and scrub filling the whole right third of the picture, close enough that you can see individual leaves, and the headlights strung out beyond. At 05:45 there was a single car in the middle of it.

Portland's own feed is a real source in its own right, not a handful of extras. Counted from our source table at 13:06 UTC on 2026-09-30, portland-or had 381 live cameras against TripCheck's 658 statewide, so on the streets inside the city the city is carrying most of it. The bottom band is how you tell which you are looking at without checking anything.

Downriver to St Johns, and the one gap

The US30 at St Johns Bridge Top camera looks down the inside of the north tower, the gothic arches framing the deck, the Willamette and the industrial waterfront behind it. At 05:50 it was mostly fog with the tower lights burning through, which is arguably the better version. Elevation 205, milepost 0.68.

There are two more St Johns cameras on the bridge deck, northbound and southbound, and both were serving ODOT's unavailable card this morning, each stamped 23 September. So the tower camera is the St Johns for now, and it is the one worth having anyway.

Over the Columbia, in colour

I-5 at Interstate Bridge NB (Midspan) is the exception to everything above. It is in colour, the green of the truss is unmistakable, and the camera sits inside the steelwork looking north up the deck. This is the older of the two spans: the northbound section was completed in 1917 at a nickel a vehicle, and the parallel southbound one arrived in 1958. It also prints its own weather: the 06:03 frame read 61.2F and wind SW at 4 mph along the bottom, next to milepost 308.05 and elevation 40. A camera that tells you the temperature at the place it is pointing is a small thing and I like it a lot.

When they actually change

Our camera pages carry a refresh figure, so I checked it against the source this morning rather than trust it. At 13:09 UTC the nine working frames among the cameras above, fetched from ODOT's own camera report at tripcheck.com and from windy's image proxy, carried a Last-Modified between 192 and 2,241 seconds old. Then I sent a HEAD at each of the twelve every minute for the next eleven and a half minutes, to 13:21:19 UTC. Three of them changed their stamp in that window, and the gaps between successive stamps were 1,541, 1,623 and 1,801 seconds. The other nine never moved.

So a TripCheck frame at six in the morning is more like half an hour old than a minute old, and refreshing your browser will not make a new one appear. The three Fremont and Marquam cameras also share their stamp to the second, 13:05:51 GMT on the two upper cameras and 13:05:50 on the lower, so they go out in one batch and flicking between them will not catch different moments either.

One of the three that did move was US30 at St Johns Bridge SB, which has been serving the unavailable card since 23 September. The card gets re-stamped on the same cycle as a real picture. A fresh timestamp is not evidence of a camera.

The Portland page carries 167 cameras as of 2026-09-30, and counting by distance rather than by name there were 113 live inside 5 km of downtown this morning. Eight of those are named for a bridge. Nothing in the set points at the Hawthorne, the Burnside, the Steel, the Broadway or Tilikum Crossing, which between them carry most of the people who actually cross the river, so if you want those you want a person with a window.

What is next

We are going to measure the interval per source and print that, rather than one figure everywhere, starting with TripCheck and the city feed. A countdown that promises a minute against a camera that moves every twenty-five is worse than no countdown at all. The Last-Modified age is the cheap way to get it and a HEAD is enough, which is the part I did not expect - no decoding, no bytes, one header.

What I cannot tell you yet is whether half an hour is a property of TripCheck or a property of six o'clock on a quiet Wednesday. One city, one hour, twelve cameras and three intervals is not enough to put a number in code, and I would want a week of it across a few states before I did. If you know a traffic feed that publishes its own capture interval honestly, I would like to see it - I have not found one yet.

Corrections to [email protected].