-{{$Cfg := .Cfg -}}{{$CR := printf "\r"}}20 text/gemini{{$CR}}
+{{$CR := printf "\r"}}20 text/gemini{{$CR}}
 # {{.Title}}
 {{$.T.Get "What"}}: {{.Commit.Hash.String}}
 {{$.T.Get "When"}}: {{.When}}
 ```
 {{end -}}
 {{- if .Images}}
-{{range $idx, $img := .Images}}=> http://{{$Cfg.ImgDomain}}/{{$img.Path}} {{$img.Alt}}
+{{range $idx, $img := .Images}}=> /img/{{$img.Path}} {{$img.Alt}}
 {{end}}
 {{end -}}
 {{- if .Cfg.CommentsEmail}}
 
        "log"
        "net/url"
        "os"
+       "path"
        "strconv"
+       "strings"
        "text/template"
 
        "github.com/go-git/go-git/v5"
                if err != nil {
                        log.Fatalln(err)
                }
+       } else if strings.HasPrefix(u.Path, "/img/") {
+               pth := strings.TrimPrefix(u.Path, "/img/")
+               if strings.Contains(pth, "..") {
+                       log.Fatalln("unacceptable double dots")
+               }
+               typ := ImgTypes[path.Ext(pth)]
+               if typ == "" {
+                       typ = "application/octet-stream"
+               }
+               fd, err := os.Open(path.Join(cfg.ImgPath, pth))
+               if err != nil {
+                       log.Fatalln(err)
+               }
+               bw := bufio.NewWriter(os.Stdout)
+               bw.Write([]byte("20 " + typ + "\r\n"))
+               io.Copy(bw, bufio.NewReader(fd))
+               fd.Close()
+               bw.Flush()
        } else {
                makeGemErr(errors.New("unknown URL action"))
        }