External_components:

Need help with this this please:
ESPHome example says

external_components:
  - source:
      type: git
      url: https://github.com/MichaKersloot/esphome_custom_components
    components: [ esp32_camera ]

This is what on the gihub. GitHub - MichaKersloot/esphome_custom_components: My collection of components for esphome
Yes, I replaced components line with components: [ esp32_camera ]

external_components:
  - source:
      type: git
      url: https://github.com/ssieb/esphome_components
    components: [ component1, component2 ]

But both return error. Looks easy but I can figure out what is missing?

Failed config

external_components: [source /config/esphome/camera.yaml:35]
  - source: 
      type: git
      url: https://github.com/ssieb/custom_components
    components: 
      
      Could not find __init__.py file for component esp32_camera. Please check the component is defined by this source (search path: /data/external_components/d2e825de/components/esp32_camera/__init__.py).
      - esp32_camera

First quest - why are you using an external component for the camera component? Is there a special requirement that the built in component doesn’t provide?

Looks like the log is using this url which is failing.

https://github.com/ssieb/custom_components

I think you want this url instead??

 https://github.com/MichaKersloot/esphome_custom_components

That is a valid repository, even if it doesn’t contain esp32_camera.

Maybe tell us what you are trying to actually do?

With the change to the URL, YAML validation show these errors now:

INFO ESPHome 2025.7.2
INFO Reading configuration /config/esphome/camera.yaml...
ERROR Unable to import component esp32_camera:
Traceback (most recent call last):
  File "/esphome/esphome/loader.py", line 200, in _lookup_module
    module = importlib.import_module(f"esphome.components.{domain}")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/data/external_components/0337b9f5/components/esp32_camera/__init__.py", line 20, in <module>
    from esphome.cpp_helpers import setup_entity
ImportError: cannot import name 'setup_entity' from 'esphome.cpp_helpers' (/esphome/esphome/cpp_helpers.py)
Failed config

esp32_camera: [source /config/esphome/camera.yaml:42]
  
  Component not found: esp32_camera.
  external_clock: 
    pin: GPIO15
    frequency: 20MHz
  i2c_pins: 
    sda: GPIO4
    scl: GPIO5
  data_pins: 
    - GPIO11
    - GPIO9
    - GPIO8
    - GPIO10
    - GPIO12
    - GPIO18
    - GPIO17
    - GPIO16
  vsync_pin: GPIO6
  href_pin: GPIO7
  pixel_clock_pin: GPIO13
  name: My Camera

from this page ESP32 Camera Component — ESPHome
example for camera that I have : ESP32S3_EYE on Freenove ESP32-S3-DevKitC-1:

It looks like something has changed in 2025.7, the example is fine under previous versions but fails on the current version.

You need to contact the author of the component.

Ok, thanks. I have 2025.7.2

This fixed now in the
ESP32 Camera Component

How did you fix this? I’m still getting this same error…

INFO ESPHome 2025.7.5
INFO Reading configuration /config/esphome/kamera.yaml...
ERROR Unable to import component esp32_camera:
Traceback (most recent call last):
  File "/esphome/esphome/loader.py", line 200, in _lookup_module
    module = importlib.import_module(f"esphome.components.{domain}")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/data/external_components/0337b9f5/components/esp32_camera/__init__.py", line 20, in <module>
    from esphome.cpp_helpers import setup_entity
ImportError: cannot import name 'setup_entity' from 'esphome.cpp_helpers' (/esphome/esphome/cpp_helpers.py)
Failed config

esp32_camera: [source /config/esphome/kamera.yaml:12]
  
  Component not found: esp32_camera.
  external_clock: 
    pin: GPIO27
    frequency: 20MHz
  i2c_pins: 
    sda: GPIO25
    scl: GPIO23
  data_pins: 
    - GPIO17
    - GPIO35
    - GPIO34
    - GPIO5
    - GPIO39
    - GPIO18
    - GPIO36
    - GPIO19
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  resolution: 800x600
  agc_gain_ceiling: 32x
  jpeg_quality: 10
  max_framerate: 1Hz
  vertical_flip: True
  ae_level: 2
  name: My Camera

Remove the lines pointing to the external components, clean the build files, then try to install again.

If it still failing, share here your yaml so other people can duplicate it.

if you use the same camera? This is from documentation and worked for me.

ESP32S3_EYE on Freenove ESP32-S3-DevKitC-1:

# Example configuration entry
external_components:
  - source: github://pr#9630
    components: [ esp32_camera ]

esp32_camera:
  external_clock:
    pin: GPIO15
    frequency: 20MHz
  i2c_pins:
    sda: GPIO4
    scl: GPIO5
  data_pins: [GPIO11, GPIO9, GPIO8, GPIO10, GPIO12, GPIO18, GPIO17, GPIO16]
  vsync_pin: GPIO6
  href_pin: GPIO7
  pixel_clock_pin: GPIO13
  frame_buffer_location: DRAM

  # Image settings
  name: My Camera
  # ...

I have this camera https://lilygo.cc/products/t-journal?srsltid=AfmBOorCYxNehp_-3fHqe8-QkJRNB_wOpCkAvQZE1i6tC9un4px-qxFp
If I remove external component it doesnt give me error but the camera fails to initialise. It was only working when it was used with this external component. I guess it is something with this board mising PSRAM…
Here is yaml

esphome:
  name: kamera
  friendly_name: kamera

external_components:
  - source:
      type: git
      url: https://github.com/MichaKersloot/esphome_custom_components
    components: [ esp32_camera ]
    # refresh: 10min
esp32_camera:
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21

  # Image settings
  resolution: 800x600
  agc_gain_ceiling: 32x
  jpeg_quality: 10
  max_framerate: 1Hz
  vertical_flip: true
  ae_level: 2

  name: My Camera
  # ...
        
esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:


ota:
  platform: esphome
  password: "0d140d484503e5be856bfdaac9fca000"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

 

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Kamera Fallback Hotspot"
    password: "QjwJz0zsMyF0"

captive_portal:

Looks like new ESPHome (2025.10.0) broke it.
Here is the error and actual Yaml.
How to handle this?
Thank you

Compiling .pioenvs/camera/src/esphome/components/esp32_camera/esp32_camera.cpp.o
In file included from src/esphome/components/esp32_camera/esp32_camera.cpp:3:
src/esphome/components/esp32_camera/esp32_camera.h:5:10: fatal error: esp_camera.h: No such file or directory

**************************************************************************
* Looking for esp_camera.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:esp_camera.h"
* Web  > https://registry.platformio.org/search?q=header:%1B%5Bm%1B%5BKesp_camera.h
*
**************************************************************************

    5 | #include <esp_camera.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.
*** [.pioenvs/camera/src/esphome/components/esp32_camera/esp32_camera.cpp.o] Error 1
========================= [FAILED] Took 228.70 seconds =========================
external_components:
  - source: github://pr#9630
    components: [ esp32_camera ]

esp32_camera:
  external_clock:
    pin: GPIO15
    frequency: 20MHz
  i2c_pins:
    sda: GPIO4
    scl: GPIO5
  data_pins: [GPIO11, GPIO9, GPIO8, GPIO10, GPIO12, GPIO18, GPIO17, GPIO16]
  vsync_pin: GPIO6
  href_pin: GPIO7
  pixel_clock_pin: GPIO13
  frame_buffer_location: DRAM

  # Image settings
  name: My Camera
  resolution: 800x600
  jpeg_quality: 10  # max. 63
  max_framerate: 10fps
  idle_framerate: 0.5fps
  vertical_flip: false
  horizontal_mirror: True
  brightness: 2 # -2 to 2
  contrast: 1 # -2 to 2
  special_effect: none
  # exposure settings
  aec_mode: auto
  aec2: false
  ae_level: 0
  aec_value: 300
  # gain settings
  agc_mode: auto
  agc_gain_ceiling: 2x
  agc_value: 0
  # white balance setting
  wb_mode: auto
switch:
  - platform: restart
    name: esp-cam restart

binary_sensor:
  - platform: status
    name: esp-cam status
sensor:
  - platform: wifi_signal
    name: esp-cam WiFi Signal

You could try removing this block and rely on the current camera component - I would assume that the PR you were using has been merged a while back.

Thank you.