Ben Lui and Beinn a’ Chlèibh

Munros #66 and #67, with a wet-feet river crossing

munros
walks
Author

Emily Nordmann

Published

September 13, 2026

This blog was written using Claude Fable 5.1 with the data from my Garmin, and then edited by me.

The short version

Infographic for the Ben Lui and Beinn a' Chlèibh walk: headline stats (distance, ascent, total time and high point), a route map on OpenTopoMap tiles with the track coloured by gradient, direction arrows, labelled features in the margins and the three hardest sections marked, an elevation profile with heart rate, and a kilometre-by-kilometre difficulty strip.

Show code
library(tidyverse)
library(flextable)
source("../_munro-toolkit.R")

# The two hills, heights from the Database of British and Irish Hills
summits <- tribble(
  ~name,               ~height, ~lat,     ~lon,
  "Ben Lui",           1130,    56.3977, -4.8114,
  "Beinn a' Chlèibh",   916,    56.3902, -4.8355
)

# Watch data, decoded from the .fit file in data/ (see the notes at the end).
# The barometric altimeter read 1153 m on Ben Lui (map: 1130 m), so the
# whole profile is shifted down 23 m to put the high point at 1130 m.
track   <- munro_read_track("data/track.csv", calibrate_to = 1130)
segs    <- munro_segments(track, width = 250)
hard    <- munro_hard(segs, n = 3)
reached <- munro_summits(track, summits)
stats   <- munro_stats(track, tibble())

# Phone photos have a timestamp but no GPS, so each one is placed on the
# track at the point nearest the time it was taken
photos  <- munro_photos("photos.csv", tr = track)

# The walk in six stages, by distance along the route (km)
stages <- tribble(
  ~stage, ~name,                              ~from, ~to,
  1, "The river and the forest track",         0.0,  1.6,
  2, "Eas Daimh and Fionn Choirein",           1.6,  3.0,
  3, "The north-west ridge",                   3.0,  4.6,
  4, "Ben Lui: summit and macaroni pie",       4.6,  5.0,
  5, "Over to Beinn a' Chlèibh",               5.0,  6.5,
  6, "Down, through the forest, and wet again", 6.5, 10.8
) |>
  munro_stages(tr = track, segs = segs)

# Features to label in the map margins (in addition to the summits, start
# and hard bits, which are added automatically)
features <- tribble(
  ~label,                          ~lat,     ~lon,     ~kind,
  "River Lochy crossing",   56.4078, -4.8560, "river",
  "Eas Daimh waterfall",    56.4039, -4.8424, "note",
  "Lunch stop",             56.3967, -4.8122, "note",
  "Railway underpass",      56.4076, -4.8558, "note"
)

The walk

These have been on our radar for a while but they involve a feet-wet river crossing, which had been putting us off but we finally took the literal plunge. As with anything, prior preparation prevents piss-poor performance, and with a spare pair of walking sandals and a towel we waded across the River Lochy. The walk is quite boggy, but it is mostly all avoidable with a detour into the forest. There was also a short scrambly bit I wasn’t expecting near the summit of Ben Leui but it turned out to score low on the Nordmann Fear of Heights Spicy Chilli Pepper Scale (in prep), so no drama.

Here is the whole thing in one map. On the map the track is coloured by how steep the ground was at that point, the arrows are the direction of travel, the red sections are where the data think it was hardest, and the small blue numbers are where the photos were taken.

Show code
route_map <- munro_map(track, reached, photos = photos, hard = hard,
                       features = features, zoom = 14)
route_map

Route map on OpenTopoMap tiles. The GPS track is coloured by gradient from purple (steep descent) through grey to red (steep ascent), with direction arrows. Features are labelled in the margins either side of the map with leader lines: start and finish in Glen Lochy, the River Lochy crossing, the Eas Daimh waterfall, the two summits, the lunch stop, the three hardest sections and the railway underpass. Blue numbers mark where the photos were taken.

Where it was hard

The profile of the whole day (the stages below zoom in on each part): height above sea level with the ground coloured underneath by gradient, my heart rate in red on the right-hand axis, the summit arrival times and the photo numbers. The three hardest 250 m sections are drawn as a thick rust stroke along the ground.

Show code
# Hand-drawn labels: dx km along and dy m above the ground at dist
profile_callouts <- tribble(
  ~label,                ~dist, ~dy,  ~dx,
  "River crossing",       0.12,  260,  0.3,
  "Eas Daimh waterfall",  1.74,  220,  0.3,
  "Scramble",             4.35,  120,  -0.6,
  "Lunch stop",           4.78,  -80,  0.7,
  "Brownie stop",         6.47,  -90,  0.6
)

profile <- munro_profile(track, segs, summits = reached, hard = hard,
                         callouts = profile_callouts, photos = photos,
                         hard_labels = FALSE)
profile

Elevation profile of the walk. The ground rises from about 200 m to Ben Lui at 1130 m by 4.6 km, drops to a bealach, climbs to Beinn a' Chlèibh at 916 m around 6.5 km and descends back to the start at 10.7 km. A coloured strip under the axis shows gradient, a red line shows heart rate, blue numbers mark photos, and the three hardest sections on the ridge of Ben Lui are drawn as a thick rust stroke.

“Hard” here is a blunt instrument. Each 250 m of the route gets a percentile rank within this walk for two things: how steep it was and my heart rate. Difficulty is the average of the two, scaled to 0 to 100, so 100 would be the stretch that was both the steepest and the highest heart rate of the whole day, and 0 the flattest and calmest. It is not a percentage of anything. That means it can only ever tell you which bits of this walk were hardest relative to the rest of this walk.

Show code
hard |>
  transmute(
    `Hard bit`  = hard,
    `From (km)` = round(start, 2),
    `To (km)`   = round(end, 2),
    `Time`      = format(time_start, "%H:%M"),
    `Gradient`  = paste0(round(gradient), "%"),
    `Climbed`   = paste0(round(gain), " m"),
    `Avg HR`    = round(hr),
    `Difficulty` = round(difficulty * 100)
  ) |>
  flextable() |>
  autofit() |>
  theme_vanilla()

Hard bit

From (km)

To (km)

Time

Gradient

Climbed

Avg HR

Difficulty

1

3.00

3.25

11:24

32%

80 m

125

89

2

3.25

3.50

11:33

34%

84 m

123

86

3

4.25

4.50

12:34

49%

121 m

116

83

This graphic is the same idea kilometre by kilometre. Darker is harder (or higher, or longer) relative to the rest of the walk; difficulty is on the same 0 to 100 scale.

Show code
munro_strip(track)

Heat-map strip with one column per kilometre and rows for metres climbed, metres descended, minutes taken, heart rate and the combined difficulty score. Kilometres 4 and 5 on the ascent of Ben Lui are darkest.

And by stage:

Show code
stages |>
  transmute(
    Stage = paste0(stage, ". ", name),
    `Km` = round(km, 1),
    `Up (m)` = round(gain),
    `Down (m)` = round(loss),
    `Time` = map_chr(mins * 60, munro_hm),
    `Avg HR` = round(avg_hr),
    `Difficulty` = round(difficulty * 100)
  ) |>
  flextable() |>
  autofit() |>
  theme_vanilla()

Stage

Km

Up (m)

Down (m)

Time

Avg HR

Difficulty

1. The river and the forest track

1.6

142

7

56 min

108

41

2. Eas Daimh and Fionn Choirein

1.4

214

1

41 min

118

61

3. The north-west ridge

1.6

614

3

1 h 34

115

82

4. Ben Lui: summit and macaroni pie

0.4

1

155

30 min

92

38

5. Over to Beinn a' Chlèibh

1.5

137

209

1 h 05

104

53

6. Down, through the forest, and wet again

4.2

13

732

2 h 15

98

39

Stage by stage

1. The river and the forest track

1.6 km · 142 m up · 56 min · avg HR 108 · difficulty 41/100

Zoomed map of stage 1 on OpenTopoMap tiles: the whole route as a faint dashed line, this stage coloured by gradient with direction arrows, its photo numbers in blue, and features labelled in the margins with hand-drawn arrows.

Straight out of the car park and into the River Lochy. Each stage below starts with a zoomed-in map of that section: the rest of the route is the faint dashed line. On the way out it was about knee high. I really wouldn’t like to do these if the water was any higher: there are several burn crossings as well as the river, and the amount of water was impressive despite the river being in the middle-to-low part of its normal range. Then under the railway (the two underpass photos were taken on the way back, but this is where they belong) and up the forestry track beside the Eas Daimh, which is a long way from being a quiet burn.

1. Wading the River Lochy on the way out, about knee high (09:53, 0.1 km, 174 m)

1. Wading the River Lochy on the way out, about knee high (09:53, 0.1 km, 174 m)

2. The railway bridge, with the burn running through the underpass (photo taken on the way back) (10:05, 0.3 km, 177 m)

2. The railway bridge, with the burn running through the underpass (photo taken on the way back) (10:05, 0.3 km, 177 m)

3. Under the railway: the burn goes through, and so do you (photo taken on the way back) (10:05, 0.3 km, 177 m)

3. Under the railway: the burn goes through, and so do you (photo taken on the way back) (10:05, 0.3 km, 177 m)

4. The lower falls of the Eas Daimh (10:22, 0.9 km, 222 m)

4. The lower falls of the Eas Daimh (10:22, 0.9 km, 222 m)

5. Kathleen looking at the Eas Daimh from the footbridge at the top of the forest (10:40, 1.5 km, 288 m)

5. Kathleen looking at the Eas Daimh from the footbridge at the top of the forest (10:40, 1.5 km, 288 m)

2. Eas Daimh and Fionn Choirein

1.4 km · 214 m up · 41 min · avg HR 118 · difficulty 61/100

Zoomed map of stage 2 on OpenTopoMap tiles: the whole route as a faint dashed line, this stage coloured by gradient with direction arrows, its photo numbers in blue, and features labelled in the margins with hand-drawn arrows.

The path leaves the forest at the big waterfall, where we had the first proper break, and then climbs steadily up the corrie towards the foot of the ridge. Nothing steep yet, which the heart rate agrees with, but wet underfoot and the boggy bits are where the forest adventure came in.

6. Eas Daimh, the big waterfall (10:48, 1.7 km, 328 m)

6. Eas Daimh, the big waterfall (10:48, 1.7 km, 328 m)

3. The north-west ridge

1.6 km · 614 m up · 1 h 34 · avg HR 115 · difficulty 82/100

Zoomed map of stage 3 on OpenTopoMap tiles: the whole route as a faint dashed line, this stage coloured by gradient with direction arrows, its photo numbers in blue, and features labelled in the margins with hand-drawn arrows.

All three of the “hard bits” the data picked out sit here: the gradient goes from 30% to around 50% (one metre up for every two along) and stays there for most of a kilometre. We climbed roughly 600 m in 1.6 km, with the cloud coming down to meet us, and the short scrambly bit is somewhere near the top.

7. The north-west ridge of Ben Lui disappearing into the cloud (12:39, 4.4 km, 1045 m)

7. The north-west ridge of Ben Lui disappearing into the cloud (12:39, 4.4 km, 1045 m)

4. Ben Lui: summit and macaroni pie

0.4 km · 155 m down · 30 min · avg HR 92 · difficulty 38/100

Zoomed map of stage 4 on OpenTopoMap tiles: the whole route as a faint dashed line, this stage coloured by gradient with direction arrows, its photo numbers in blue, and features labelled in the margins with hand-drawn arrows.

Summit at 12:57, 3.2 hours after leaving the car. A few minutes on top in the cloud, then lunch just below it on the sheltered side. Summit snack 1: macaroni pie.

8. Looking down from just below the summit of Ben Lui, at the macaroni pie stop (13:20, 4.8 km, 1046 m)

8. Looking down from just below the summit of Ben Lui, at the macaroni pie stop (13:20, 4.8 km, 1046 m)

5. Over to Beinn a’ Chlèibh

1.5 km · 137 m up · 209 m down · 1 h 05 · avg HR 104 · difficulty 53/100

Zoomed map of stage 5 on OpenTopoMap tiles: the whole route as a faint dashed line, this stage coloured by gradient with direction arrows, its photo numbers in blue, and features labelled in the margins with hand-drawn arrows.

Steeply down to the bealach, losing about 340 m, then 120 m back up to Beinn a’ Chlèibh. Summit at 14:17, and a salted caramel chocolate brownie. The cloud lifted while we were on it, so Ben Lui finally showed itself.

9. Beinn a’ Chlèibh summit, Ben Lui behind (14:20, 6.4 km, 903 m)

9. Beinn a’ Chlèibh summit, Ben Lui behind (14:20, 6.4 km, 903 m)

10. Ben Lui from Beinn a’ Chlèibh, cloud finally lifting (14:20, 6.4 km, 903 m)

10. Ben Lui from Beinn a’ Chlèibh, cloud finally lifting (14:20, 6.4 km, 903 m)

6. Down, through the forest, and wet again

4.2 km · 732 m down · 2 h 15 · avg HR 98 · difficulty 39/100

Zoomed map of stage 6 on OpenTopoMap tiles: the whole route as a faint dashed line, this stage coloured by gradient with direction arrows, its photo numbers in blue, and features labelled in the margins with hand-drawn arrows.

Back to the bealach and down Fionn Choirein rather than the ridge, which is steep, wet and grassy and takes longer than the map suggests. Then the forest (fly agaric season, and the forest adventure that keeps you out of the bog), the railway underpass and the river again. We found a shallower crossing on the return that was merely calf height on hobbits.

11. The forest adventure that avoids the bog (position approximate) (15:30, 8.4 km, 467 m)

11. The forest adventure that avoids the bog (position approximate) (15:30, 8.4 km, 467 m)

12. Fly agaric on the way back down through the forest (15:41, 8.6 km, 454 m)

12. Fly agaric on the way back down through the forest (15:41, 8.6 km, 454 m)

13. The River Lochy on the return, a shallower crossing at calf height on hobbits (16:44, 10.5 km, 182 m)

13. The River Lochy on the return, a shallower crossing at calf height on hobbits (16:44, 10.5 km, 182 m)

14. Looking back up Glen Lochy from the car, hills now in sunshine (16:46, 10.5 km, 183 m)

14. Looking back up Glen Lochy from the car, hills now in sunshine (16:46, 10.5 km, 183 m)

Notes on the data

The watch exports a .fit file. There is no CRAN package I trust to read it on Windows, so a small Python script (post/_fit2csv.py) decodes it to a CSV with one row per second: time, position, barometric altitude, distance, the watch’s own speed estimate, heart rate and cadence. Everything else is derived in R:

  • Altitude. The watch measures height with a barometer, which drifts with the weather. On the summit of Ben Lui it read 1,153 m; the map says 1,130 m. The whole profile is shifted down by that 23 m so the high point matches the map. The ascent total is unaffected because it only depends on differences. Altitude is also smoothed with a running median to take the jitter out before ascent is summed, which is why the total here differs a little from Garmin’s own 1,093 m (Garmin applies its own, undocumented, smoothing).
  • Gradient. Change in height over 100 m of distance, so a 50% gradient is 50 m up for every 100 m along.
  • Photos. The phone does not write GPS coordinates into the photos, but it does write the time, so each photo is put on the track at the point nearest to when it was taken. Two photos taken in the same spot get two markers on top of each other, which is why the numbers are nudged apart.
  • Difficulty. The mean of the within-walk percentile ranks of absolute gradient and heart rate for each 250 m segment. It is relative, blunt and does not know about rivers.
  • Stages. Split by distance along the route to match the story rather than anything in the data.