diff --git a/android/app/build.gradle b/android/app/build.gradle
index e5fb1cab6fc52b2646f12cc4ebbb0902bec6b1a2..877eb33669e7087b2ac4dbb7497c41f3b3b90321 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -44,7 +44,7 @@ android {
 
     defaultConfig {
         applicationId "org.benoitharrault.stopmotion"
-        minSdkVersion flutter.minSdkVersion
+        minSdkVersion 21
         targetSdkVersion 30
         versionCode appVersionCode.toInteger()
         versionName appVersionName
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 91f2d2d15c025322e26378fc097c735fef016324..9b1861e6a8206174d566c341e743713590b0004a 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.benoitharrault.stopmotion">
-   <application
+    <uses-permission android:name="android.permission.CAMERA" />
+    <application
         android:label="stopmotion"
         android:icon="@mipmap/ic_launcher">
         <activity
@@ -11,20 +12,20 @@
             android:hardwareAccelerated="true"
             android:windowSoftInputMode="adjustResize">
             <meta-data
-              android:name="io.flutter.embedding.android.NormalTheme"
-              android:resource="@style/NormalTheme"
-              />
+                android:name="io.flutter.embedding.android.NormalTheme"
+                android:resource="@style/NormalTheme"
+            />
             <meta-data
-              android:name="io.flutter.embedding.android.SplashScreenDrawable"
-              android:resource="@drawable/launch_background"
-              />
+                android:name="io.flutter.embedding.android.SplashScreenDrawable"
+                android:resource="@drawable/launch_background"
+            />
             <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
         <meta-data
             android:name="flutterEmbedding"
             android:value="2" />
     </application>
-</manifest>
+</manifest>
\ No newline at end of file
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 0420a38ccbf0e75d4b9738cb41d3b854cde286c5..579151d3ca5f948d110b81bdeff3e28cbefc494b 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-hdpi/launch_image.png b/android/app/src/main/res/mipmap-hdpi/launch_image.png
index 0420a38ccbf0e75d4b9738cb41d3b854cde286c5..579151d3ca5f948d110b81bdeff3e28cbefc494b 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/launch_image.png and b/android/app/src/main/res/mipmap-hdpi/launch_image.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index c012a51b3b61eaaf64feae75809e8820490fe2b0..a767305e592285b1a6967a27127ec106f0e6fdab 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/launch_image.png b/android/app/src/main/res/mipmap-mdpi/launch_image.png
index c012a51b3b61eaaf64feae75809e8820490fe2b0..a767305e592285b1a6967a27127ec106f0e6fdab 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/launch_image.png and b/android/app/src/main/res/mipmap-mdpi/launch_image.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 33f6455914993deaeff45acee622ddb9073b95c9..073f304eef1481a76d205d9e4f1f7d14590bb88d 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/launch_image.png b/android/app/src/main/res/mipmap-xhdpi/launch_image.png
index 33f6455914993deaeff45acee622ddb9073b95c9..073f304eef1481a76d205d9e4f1f7d14590bb88d 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/launch_image.png and b/android/app/src/main/res/mipmap-xhdpi/launch_image.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 4a575380ab8ea7578f46277ffec318322a1e220f..a0d27afbb9aee3273cefc225a191b2db9827a644 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/launch_image.png b/android/app/src/main/res/mipmap-xxhdpi/launch_image.png
index 4a575380ab8ea7578f46277ffec318322a1e220f..a0d27afbb9aee3273cefc225a191b2db9827a644 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/launch_image.png and b/android/app/src/main/res/mipmap-xxhdpi/launch_image.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index ee01066d00a3e091504da704086fb364f22f6b0f..a5282f34002739e13e72e468acddaa2adde8d126 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png b/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png
index ee01066d00a3e091504da704086fb364f22f6b0f..a5282f34002739e13e72e468acddaa2adde8d126 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png and b/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png differ
diff --git a/android/gradle.properties b/android/gradle.properties
index bc2d95e8567abcfd41c26ebeb95fced48f43e773..818e87b23b224ced309ae5c147e5ed827826e237 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.1
-app.versionCode=1
+app.versionName=0.0.2
+app.versionCode=2
diff --git a/assets/translations/en.json b/assets/translations/en.json
index ef88ee112505950ef959981119bba0c7a6ebfe7d..f53b1cdd7eb11b40a9bfa48b5ced2628de1cb912 100644
--- a/assets/translations/en.json
+++ b/assets/translations/en.json
@@ -2,6 +2,7 @@
   "app_name": "Stop Motion assistant",
 
   "bottom_nav_home": "Home",
+  "bottom_nav_camera": "Camera",
   "bottom_nav_settings": "Settings",
 
   "settings_title": "Settings",
diff --git a/assets/translations/fr.json b/assets/translations/fr.json
index 526084a48c1ae5c3974a47c69abba73013340c47..69be2063cc2af3de1d9ec30788c798a32313653c 100644
--- a/assets/translations/fr.json
+++ b/assets/translations/fr.json
@@ -2,6 +2,7 @@
   "app_name": "Assistant Stop Motion",
 
   "bottom_nav_home": "Accueil",
+  "bottom_nav_camera": "Caméra",
   "bottom_nav_settings": "Réglages",
 
   "settings_title": "Réglages",
diff --git a/fastlane/metadata/android/en-US/changelogs/2.txt b/fastlane/metadata/android/en-US/changelogs/2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d06c5d2db363e4e3ffa75c116a6b57025dab9939
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/2.txt
@@ -0,0 +1 @@
+Add take and save pictures.
diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png
index 02e771f2f8742cef993eb40c7539fb6ec0f70f4a..dcf9dbe0e16a1a01487b7e428bb224e3968f687a 100644
Binary files a/fastlane/metadata/android/en-US/images/icon.png and b/fastlane/metadata/android/en-US/images/icon.png differ
diff --git a/fastlane/metadata/android/fr-FR/changelogs/2.txt b/fastlane/metadata/android/fr-FR/changelogs/2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b24a8fd36e5d23e0073b6cace84a70fb92a5c303
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/2.txt
@@ -0,0 +1 @@
+Ajout de la prise de photos et sauvegarde.
diff --git a/icons/icon.svg b/icons/icon.svg
index ade1c033f53261b8b0925ffb211769a37c000cfa..6f02a9f79b4c3057fd11ae3b9ea1730c896521d4 100644
--- a/icons/icon.svg
+++ b/icons/icon.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg version="1.1" viewBox="0 0 28.747 28.747" xmlns="http://www.w3.org/2000/svg">
     <defs>
-        <filter id="filter6206-7" x="-.072" y="-.072" width="1.144" height="1.144" color-interpolation-filters="sRGB">
+        <filter id="filter6206-7" x="-.072" y="-.072001" width="1.144" height="1.144" color-interpolation-filters="sRGB">
             <feGaussianBlur stdDeviation="0.658125"/>
         </filter>
     </defs>
@@ -75,6 +75,8 @@
         </g>
         <path d="m24.549 1119.5c0.66325 0 1.1979-0.5346 1.1979-1.1979v-0.3333c0 0.6632-0.53461 1.1978-1.1979 1.1978h-20.354c-0.66325 0-1.1979-0.5346-1.1979-1.1978v0.3333c0 0.6633 0.53461 1.1979 1.1979 1.1979z" fill="#1a237e" opacity=".2"/>
     </g>
-    <path d="m21.141 11.764a1.1513 1.1513 0 0 0-1.0798-0.89569c-0.95204 0.0038-1.9043-0.0075-2.8564 0.0065a0.65653 0.65653 0 0 0-0.13626-0.42804c-0.38572-0.49919-0.75993-1.0074-1.1479-1.5046a0.59422 0.59422 0 0 0-0.46814-0.23494c-0.75192-1e-3 -1.5038 0.00401-2.2557 5.128e-4a0.56532 0.56532 0 0 0-0.45536 0.22292c-0.38397 0.50019-0.76394 1.0034-1.1454 1.5056a0.66926 0.66926 0 0 0-0.14077 0.43356c-0.24772-0.0055-0.49543-0.0027-0.74315-0.0013-1.21e-4 -0.02042-6.77e-4 -0.04078-1e-3 -0.06118v-0.1958h-0.11981c-0.0018-0.14287-0.0011-0.28595-0.0019-0.42881-0.53324-3e-3 -1.0668-0.0023-1.6-0.0043-0.00261 0.14436 0.00209 0.28871-0.00334 0.43306h-0.12164c-9.324e-4 0.0317-6.066e-4 0.06344 0 0.09521v0.1633l-0.0048-3.97e-4a1.1764 1.1764 0 0 0-1.2235 0.90684 0.47582 0.47582 0 0 0-0.52749 0.48843 0.48424 0.48424 0 0 0 0.51798 0.47765q0.00115 2.4537-7.529e-4 4.907a2.7779 2.7779 0 0 0 0.028558 0.53025 1.2133 1.2133 0 0 0 1.1602 0.93626c0.8516-0.0036 1.703-2e-3 2.5546-0.0013 0.06838 0.0032 0.14778-0.01828 0.2044 0.03181a4.6428 4.6428 0 0 0 5.431 0.03206 0.2352 0.2352 0 0 1 0.13-0.06337c0.96682-0.0045 1.9334 0.0016 2.9002-0.0027a1.1953 1.1953 0 0 0 1.1159-1.187c2e-3 -1.727-0.0036-3.454 0.0025-5.181a0.49917 0.49917 0 0 0 0.48141-0.42907 0.49272 0.49272 0 0 0-0.49343-0.55153zm-2.5192 3.8332a4.1985 4.1985 0 0 1-0.95655 2.4641 4.3163 4.3163 0 0 1-7.2952-0.94127 4.1969 4.1969 0 0 1-0.37496-2.002 4.3722 4.3722 0 0 1 1.8755-3.2777 4.3074 4.3074 0 0 1 6.7512 3.7568zm1.2326-2.6122a0.73486 0.73486 0 1 1 0.17909-0.82029 0.72723 0.72723 0 0 1-0.17909 0.82029z" stroke-width=".23306"/>
-    <path class="cls-1" d="m14.303 11.474a3.9178 3.9178 0 1 0 3.9178 3.9178 3.9178 3.9178 0 0 0-3.9178-3.9178zm2.3572 6.275a3.3312 3.3312 0 1 1 0.97733-2.3572 3.3219 3.3219 0 0 1-0.97733 2.3572zm-0.13841-4.5761a3.1379 3.1379 0 1 0 0.9191 2.2188 3.1269 3.1269 0 0 0-0.9191-2.2188zm-0.55365 2.3446-2.5547 1.4778a0.1401 0.1401 0 0 1-0.14516 0 0.14179 0.14179 0 0 1-0.07259-0.12575v-2.9522a0.14179 0.14179 0 0 1 0.07259-0.12912 0.1401 0.1401 0 0 1 0.14516 0l2.5547 1.4778a0.14516 0.14516 0 0 1 0 0.25319z" fill-rule="evenodd" stroke-width=".084398"/>
+    <g fill="#fff">
+        <path d="m21.141 11.764a1.1513 1.1513 0 0 0-1.0798-0.89569c-0.95204 0.0038-1.9043-0.0075-2.8564 0.0065a0.65653 0.65653 0 0 0-0.13626-0.42804c-0.38572-0.49919-0.75993-1.0074-1.1479-1.5046a0.59422 0.59422 0 0 0-0.46814-0.23494c-0.75192-1e-3 -1.5038 0.00401-2.2557 5.128e-4a0.56532 0.56532 0 0 0-0.45536 0.22292c-0.38397 0.50019-0.76394 1.0034-1.1454 1.5056a0.66926 0.66926 0 0 0-0.14077 0.43356c-0.24772-0.0055-0.49543-0.0027-0.74315-0.0013-1.21e-4 -0.02042-6.77e-4 -0.04078-1e-3 -0.06118v-0.1958h-0.11981c-0.0018-0.14287-0.0011-0.28595-0.0019-0.42881-0.53324-3e-3 -1.0668-0.0023-1.6-0.0043-0.00261 0.14436 0.00209 0.28871-0.00334 0.43306h-0.12164c-9.324e-4 0.0317-6.066e-4 0.06344 0 0.09521v0.1633l-0.0048-3.97e-4a1.1764 1.1764 0 0 0-1.2235 0.90684 0.47582 0.47582 0 0 0-0.52749 0.48843 0.48424 0.48424 0 0 0 0.51798 0.47765q0.00115 2.4537-7.529e-4 4.907a2.7779 2.7779 0 0 0 0.028558 0.53025 1.2133 1.2133 0 0 0 1.1602 0.93626c0.8516-0.0036 1.703-2e-3 2.5546-0.0013 0.06838 0.0032 0.14778-0.01828 0.2044 0.03181a4.6428 4.6428 0 0 0 5.431 0.03206 0.2352 0.2352 0 0 1 0.13-0.06337c0.96682-0.0045 1.9334 0.0016 2.9002-0.0027a1.1953 1.1953 0 0 0 1.1159-1.187c2e-3 -1.727-0.0036-3.454 0.0025-5.181a0.49917 0.49917 0 0 0 0.48141-0.42907 0.49272 0.49272 0 0 0-0.49343-0.55153zm-2.5192 3.8332a4.1985 4.1985 0 0 1-0.95655 2.4641 4.3163 4.3163 0 0 1-7.2952-0.94127 4.1969 4.1969 0 0 1-0.37496-2.002 4.3722 4.3722 0 0 1 1.8755-3.2777 4.3074 4.3074 0 0 1 6.7512 3.7568zm1.2326-2.6122a0.73486 0.73486 0 1 1 0.17909-0.82029 0.72723 0.72723 0 0 1-0.17909 0.82029z" stroke-width=".23306"/>
+        <path class="cls-1" d="m14.303 11.474a3.9178 3.9178 0 1 0 3.9178 3.9178 3.9178 3.9178 0 0 0-3.9178-3.9178zm2.3572 6.275a3.3312 3.3312 0 1 1 0.97733-2.3572 3.3219 3.3219 0 0 1-0.97733 2.3572zm-0.13841-4.5761a3.1379 3.1379 0 1 0 0.9191 2.2188 3.1269 3.1269 0 0 0-0.9191-2.2188zm-0.55365 2.3446-2.5547 1.4778a0.1401 0.1401 0 0 1-0.14516 0 0.14179 0.14179 0 0 1-0.07259-0.12575v-2.9522a0.14179 0.14179 0 0 1 0.07259-0.12912 0.1401 0.1401 0 0 1 0.14516 0l2.5547 1.4778a0.14516 0.14516 0 0 1 0 0.25319z" fill-rule="evenodd" stroke-width=".084398"/>
+    </g>
 </svg>
diff --git a/lib/cubit/bottom_nav_cubit.dart b/lib/cubit/bottom_nav_cubit.dart
index c633c6515b0fcb4e19a521e45b579f178d605970..8753255ac7acba27b594ea5cfb5b46aafee31625 100644
--- a/lib/cubit/bottom_nav_cubit.dart
+++ b/lib/cubit/bottom_nav_cubit.dart
@@ -3,7 +3,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart';
 class BottomNavCubit extends HydratedCubit<int> {
   BottomNavCubit() : super(0);
 
-  int pagesCount = 2;
+  int pagesCount = 3;
 
   void updateIndex(int index) {
     if (isIndexAllowed(index)) {
diff --git a/lib/main.dart b/lib/main.dart
index 71db40e07d7ac8f23447dda21927b013a46de143..7ce98c62d7c9ae45735ede3e07a831da6a6e0308 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -15,6 +15,7 @@ import 'package:stopmotion/ui/skeleton.dart';
 void main() async {
   /// Initialize packages
   WidgetsFlutterBinding.ensureInitialized();
+
   await EasyLocalization.ensureInitialized();
   final Directory tmpDir = await getTemporaryDirectory();
   Hive.init(tmpDir.toString());
diff --git a/lib/ui/screens/camera.dart b/lib/ui/screens/camera.dart
new file mode 100644
index 0000000000000000000000000000000000000000..69ae81e174377e9567c19d26c1cdc2f92a7d7328
--- /dev/null
+++ b/lib/ui/screens/camera.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+import 'package:unicons/unicons.dart';
+
+import 'package:stopmotion/ui/widgets/take_picture_widget.dart';
+
+class ScreenCamera extends StatelessWidget {
+  const ScreenCamera({super.key});
+
+  static Icon navBarIcon = const Icon(UniconsLine.camera);
+  static String navBarText = 'bottom_nav_camera';
+
+  @override
+  Widget build(BuildContext context) {
+    return Material(
+      color: Theme.of(context).colorScheme.background,
+      child: Column(
+        children: <Widget>[
+          const SizedBox(height: 8),
+          TakePictureWidget(),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart
index d2a1679b84effb6eb7b28cec3e3b8d617430f86b..f3979df590e396ff260fce18ac9629c65bfcb3a6 100644
--- a/lib/ui/skeleton.dart
+++ b/lib/ui/skeleton.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 
 import 'package:stopmotion/cubit/bottom_nav_cubit.dart';
+import 'package:stopmotion/ui/screens/camera.dart';
 import 'package:stopmotion/ui/screens/home.dart';
 import 'package:stopmotion/ui/screens/settings.dart';
 import 'package:stopmotion/ui/widgets/app_bar.dart';
@@ -18,7 +19,8 @@ class _SkeletonScreenState extends State<SkeletonScreen> {
   @override
   Widget build(BuildContext context) {
     List<Widget> pageNavigation = <Widget>[
-      ScreenHome(),
+      const ScreenHome(),
+      const ScreenCamera(),
       const ScreenSettings(),
     ];
 
diff --git a/lib/ui/widgets/bottom_nav_bar.dart b/lib/ui/widgets/bottom_nav_bar.dart
index 1479904149ba72f3a4438adf2872ae23ae340717..9ce8d67088e14107d2d8b2c3082355e5b4de322d 100644
--- a/lib/ui/widgets/bottom_nav_bar.dart
+++ b/lib/ui/widgets/bottom_nav_bar.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 
 import 'package:stopmotion/cubit/bottom_nav_cubit.dart';
+import 'package:stopmotion/ui/screens/camera.dart';
 import 'package:stopmotion/ui/screens/settings.dart';
 import 'package:stopmotion/ui/screens/home.dart';
 
@@ -36,6 +37,10 @@ class BottomNavBar extends StatelessWidget {
               icon: ScreenHome.navBarIcon,
               label: tr(ScreenHome.navBarText),
             ),
+            BottomNavigationBarItem(
+              icon: ScreenCamera.navBarIcon,
+              label: tr(ScreenCamera.navBarText),
+            ),
             BottomNavigationBarItem(
               icon: ScreenSettings.navBarIcon,
               label: tr(ScreenSettings.navBarText),
diff --git a/lib/ui/widgets/take_picture_widget.dart b/lib/ui/widgets/take_picture_widget.dart
new file mode 100644
index 0000000000000000000000000000000000000000..488dd178538f9c3422cf6123023da369084c628b
--- /dev/null
+++ b/lib/ui/widgets/take_picture_widget.dart
@@ -0,0 +1,129 @@
+import 'package:camera/camera.dart';
+import 'package:flutter/material.dart';
+import 'package:image_picker/image_picker.dart';
+import 'package:unicons/unicons.dart';
+
+class TakePictureWidget extends StatefulWidget {
+  const TakePictureWidget({super.key});
+
+  @override
+  TakePictureWidgetState createState() => TakePictureWidgetState();
+}
+
+class TakePictureWidgetState extends State<TakePictureWidget> {
+  CameraController? controller;
+
+  List<String> previousImages = [];
+  String debug = '';
+
+  @override
+  void initState() {
+    loadCamera();
+    super.initState();
+  }
+
+  loadCamera() async {
+    final List<CameraDescription>? cameras = await availableCameras();
+    if (cameras != null) {
+      controller = CameraController(
+        cameras.first,
+        ResolutionPreset.max,
+        enableAudio: false,
+      );
+
+      controller!.initialize().then((_) {
+        if (!mounted) {
+          return;
+        }
+        setState(() {});
+      });
+    } else {
+      print("No camera found.");
+    }
+  }
+
+  @override
+  void dispose() {
+    controller!.dispose();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      children: [
+        Container(
+          height: 300,
+          width: 400,
+          child: controller == null
+              ? Center(child: Text("Loading camera..."))
+              : !controller!.value.isInitialized
+                  ? Center(child: CircularProgressIndicator())
+                  : CameraPreview(controller!),
+        ),
+        Row(
+          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          children: [
+            ElevatedButton.icon(
+              label: Text("Capture (1)"),
+              icon: Icon(UniconsLine.camera),
+              onPressed: () async {
+                try {
+                  if ((controller != null) && (controller!.value.isInitialized)) {
+                    final XFile image = await controller!.takePicture();
+
+                    print('(1)path: ' + image.path);
+                    previousImages.add(image.path);
+                    setState(() {});
+
+                    debug = debug + "\n" + '(1) path: ' + image.path;
+                  }
+                } catch (e) {
+                  debug = debug + "\n" + '(1) error: ' + e.toString();
+                  setState(() {});
+
+                  print(e);
+                }
+              },
+            ),
+            ElevatedButton.icon(
+              label: Text("Capture (2)"),
+              icon: Icon(UniconsLine.camera),
+              onPressed: () async {
+                try {
+                  final ImagePicker _picker = ImagePicker();
+
+                  final XFile? image = await _picker.pickImage(source: ImageSource.camera);
+
+                  print('(2) path: ' + image!.path);
+                  previousImages.add(image.path);
+                  setState(() {});
+
+                  debug = debug + "\n" + '(2) path: ' + image.path;
+                } catch (e) {
+                  debug = debug + "\n" + '(2) error: ' + e.toString();
+                  setState(() {});
+
+                  print(e);
+                }
+              },
+            ),
+          ],
+        ),
+        Text('debug: ' + debug),
+        previousImages.length == 0
+            ? Text('no previous images')
+            : Column(
+                children: previousImages.map((String imagePath) {
+                  return Row(
+                    children: [
+                      // Image.file(File(imagePath)),
+                      Text(imagePath),
+                    ],
+                  );
+                }).toList(),
+              ),
+      ],
+    );
+  }
+}
diff --git a/pubspec.lock b/pubspec.lock
index d54095c61378821fb5ed1ba0ae8819e1fd7e7c12..7d03778bd693a2e32e8fdaf42b23b10e6698c117 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -9,6 +9,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.4.2"
+  async:
+    dependency: transitive
+    description:
+      name: async
+      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.11.0"
   bloc:
     dependency: transitive
     description:
@@ -17,6 +25,46 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "8.1.2"
+  camera:
+    dependency: "direct main"
+    description:
+      name: camera
+      sha256: f3813a634fd1350a9d2a78ee70e5b247cebedc9c58a24560992620e57a8a5600
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.10.5+8"
+  camera_android:
+    dependency: transitive
+    description:
+      name: camera_android
+      sha256: "351429510121d179b9aac5a2e8cb525c3cd6c39f4d709c5f72dfb21726e52371"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.10.8+16"
+  camera_avfoundation:
+    dependency: transitive
+    description:
+      name: camera_avfoundation
+      sha256: "1408600aa45faad05c518afccaabcd58419412ab67755a405b2ddce4f93fa120"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.13+9"
+  camera_platform_interface:
+    dependency: transitive
+    description:
+      name: camera_platform_interface
+      sha256: fdb8b7a40c3564ce2967273445707d58cbff91bc2fa129e8de80af8cc501e793
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.7.1"
+  camera_web:
+    dependency: transitive
+    description:
+      name: camera_web
+      sha256: f18ccfb33b2a7c49a52ad5aa3f07330b7422faaecbdfd9b9fe8e51182f6ad67d
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.3.2+4"
   characters:
     dependency: transitive
     description:
@@ -41,6 +89,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.18.0"
+  cross_file:
+    dependency: transitive
+    description:
+      name: cross_file
+      sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.3.3+8"
   crypto:
     dependency: transitive
     description:
@@ -89,6 +145,38 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "7.0.0"
+  file_selector_linux:
+    dependency: transitive
+    description:
+      name: file_selector_linux
+      sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.2+1"
+  file_selector_macos:
+    dependency: transitive
+    description:
+      name: file_selector_macos
+      sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.3+3"
+  file_selector_platform_interface:
+    dependency: transitive
+    description:
+      name: file_selector_platform_interface
+      sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.6.1"
+  file_selector_windows:
+    dependency: transitive
+    description:
+      name: file_selector_windows
+      sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.3+1"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -107,6 +195,14 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_plugin_android_lifecycle:
+    dependency: transitive
+    description:
+      name: flutter_plugin_android_lifecycle
+      sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.17"
   flutter_web_plugins:
     dependency: transitive
     description: flutter
@@ -120,6 +216,22 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.2.3"
+  http:
+    dependency: transitive
+    description:
+      name: http
+      sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.1.2"
+  http_parser:
+    dependency: transitive
+    description:
+      name: http_parser
+      sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.0.2"
   hydrated_bloc:
     dependency: "direct main"
     description:
@@ -128,6 +240,70 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "9.1.3"
+  image_picker:
+    dependency: "direct main"
+    description:
+      name: image_picker
+      sha256: "340efe08645537d6b088a30620ee5752298b1630f23a829181172610b868262b"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.6"
+  image_picker_android:
+    dependency: transitive
+    description:
+      name: image_picker_android
+      sha256: "1a27bf4cc0330389cebe465bab08fe6dec97e44015b4899637344bb7297759ec"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.8.9+2"
+  image_picker_for_web:
+    dependency: transitive
+    description:
+      name: image_picker_for_web
+      sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.0.2"
+  image_picker_ios:
+    dependency: transitive
+    description:
+      name: image_picker_ios
+      sha256: eac0a62104fa12feed213596df0321f57ce5a572562f72a68c4ff81e9e4caacf
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.8.9"
+  image_picker_linux:
+    dependency: transitive
+    description:
+      name: image_picker_linux
+      sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.2.1+1"
+  image_picker_macos:
+    dependency: transitive
+    description:
+      name: image_picker_macos
+      sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.2.1+1"
+  image_picker_platform_interface:
+    dependency: transitive
+    description:
+      name: image_picker_platform_interface
+      sha256: "0e827c156e3a90edd3bbe7f6de048b39247b16e58173b08a835b7eb00aba239e"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.9.2"
+  image_picker_windows:
+    dependency: transitive
+    description:
+      name: image_picker_windows
+      sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.2.1+1"
   intl:
     dependency: transitive
     description:
@@ -152,6 +328,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.10.0"
+  mime:
+    dependency: transitive
+    description:
+      name: mime
+      sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.4"
   nested:
     dependency: transitive
     description:
@@ -161,7 +345,7 @@ packages:
     source: hosted
     version: "1.0.0"
   path:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: path
       sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
@@ -220,18 +404,18 @@ packages:
     dependency: transitive
     description:
       name: platform
-      sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59"
+      sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
       url: "https://pub.dev"
     source: hosted
-    version: "3.1.3"
+    version: "3.1.4"
   plugin_platform_interface:
     dependency: transitive
     description:
       name: plugin_platform_interface
-      sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8
+      sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.7"
+    version: "2.1.8"
   provider:
     dependency: transitive
     description:
@@ -301,6 +485,30 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.99"
+  source_span:
+    dependency: transitive
+    description:
+      name: source_span
+      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.10.0"
+  stream_transform:
+    dependency: transitive
+    description:
+      name: stream_transform
+      sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.1.0"
+  string_scanner:
+    dependency: transitive
+    description:
+      name: string_scanner
+      sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.2.0"
   synchronized:
     dependency: transitive
     description:
@@ -309,6 +517,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "3.1.0+1"
+  term_glyph:
+    dependency: transitive
+    description:
+      name: term_glyph
+      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.2.1"
   typed_data:
     dependency: transitive
     description:
@@ -345,18 +561,18 @@ packages:
     dependency: transitive
     description:
       name: win32
-      sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574
+      sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
       url: "https://pub.dev"
     source: hosted
-    version: "5.1.1"
+    version: "5.2.0"
   xdg_directories:
     dependency: transitive
     description:
       name: xdg_directories
-      sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2"
+      sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
       url: "https://pub.dev"
     source: hosted
-    version: "1.0.3"
+    version: "1.0.4"
 sdks:
   dart: ">=3.2.0 <4.0.0"
   flutter: ">=3.16.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 5f6f020eb4bdc9493701f99cfe7bf02c17a3cc0d..6589a7ffcb8ec0b330d0e5562ce1441301d1a3bb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: stop motion assistant
 
 publish_to: 'none'
 
-version: 0.0.1+1
+version: 0.0.2+2
 
 environment:
   sdk: '^3.0.0'
@@ -12,11 +12,14 @@ dependencies:
   flutter:
     sdk: flutter
 
+  camera: ^0.10.5+8
   easy_localization: ^3.0.1
   equatable: ^2.0.5
   flutter_bloc: ^8.1.1
-  path_provider: ^2.0.11
   hydrated_bloc: ^9.0.0
+  image_picker: ^1.0.6
+  path: ^1.8.3
+  path_provider: ^2.1.1
   unicons: ^2.1.1
 
 flutter: