diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php
index 44ec3b26c0da115c5dfaab0e0310211de8b36b9a..4edebdecd36eb1aeb2006be6483de26f100f6465 100644
--- a/app/Models/EpisodeModel.php
+++ b/app/Models/EpisodeModel.php
@@ -268,6 +268,32 @@ class EpisodeModel extends Model
             : false;
     }
 
+    public function getCurrentSeasonNumber(int $podcastId): ?int
+    {
+        $result = $this->select('MAX(season_number) as current_season_number')
+            ->where([
+                'podcast_id' => $podcastId,
+                $this->deletedField => null,
+            ])
+            ->get()
+            ->getResultArray();
+
+        return $result[0]['current_season_number'] ? (int) $result[0]['current_season_number'] : null;
+    }
+
+    public function getNextEpisodeNumber(int $podcastId, ?int $seasonNumber): int
+    {
+        $result = $this->select('MAX(number) as next_episode_number')
+            ->where([
+                'podcast_id' => $podcastId,
+                'season_number' => $seasonNumber,
+                $this->deletedField => null,
+            ])->get()
+            ->getResultArray();
+
+        return (int) $result[0]['next_episode_number'] + 1;
+    }
+
     /**
      * @param mixed[] $data
      *
diff --git a/modules/Admin/Controllers/EpisodeController.php b/modules/Admin/Controllers/EpisodeController.php
index 2d297ff98d66ccb3b84a8d9e03e96be3935feb1b..01dbb051a6f2a39f1ef299d5901ec843c09f6c04 100644
--- a/modules/Admin/Controllers/EpisodeController.php
+++ b/modules/Admin/Controllers/EpisodeController.php
@@ -97,10 +97,12 @@ class EpisodeController extends BaseController
     {
         helper(['form']);
 
+        $currentSeasonNumber = (new EpisodeModel())->getCurrentSeasonNumber($this->podcast->id);
         $data = [
             'podcast' => $this->podcast,
+            'currentSeasonNumber' => $currentSeasonNumber,
+            'nextEpisodeNumber' => (new EpisodeModel())->getNextEpisodeNumber($this->podcast->id, $currentSeasonNumber),
         ];
-
         replace_breadcrumb_params([
             0 => $this->podcast->title,
         ]);
@@ -118,6 +120,10 @@ class EpisodeController extends BaseController
             'chapters_file' => 'ext_in[chapters,json]|permit_empty',
         ];
 
+        if ($this->podcast->type === 'serial') {
+            $rules['episode_number'] = 'required';
+        }
+
         if (! $this->validate($rules)) {
             return redirect()
                 ->back()
@@ -239,6 +245,10 @@ class EpisodeController extends BaseController
             'chapters_file' => 'ext_in[chapters_file,json]|permit_empty',
         ];
 
+        if ($this->podcast->type === 'serial') {
+            $rules['episode_number'] = 'required';
+        }
+
         if (! $this->validate($rules)) {
             return redirect()
                 ->back()
diff --git a/themes/cp_admin/episode/create.php b/themes/cp_admin/episode/create.php
index fdc20326958bf14b0d6c58a26f92d178fc6ab4dc..39a440cf5cfe6d1c0c6b3cb3323fedebe3a44d6c 100644
--- a/themes/cp_admin/episode/create.php
+++ b/themes/cp_admin/episode/create.php
@@ -51,17 +51,20 @@
 </div>
 
 <div class="flex flex-col gap-x-2 gap-y-4 md:flex-row">
-    <Forms.Field 
+    <Forms.Field
         class="flex-1 w-0"
         name="season_number"
         label="<?= lang('Episode.form.season_number') ?>"
         type="number"
+        value="<?= $currentSeasonNumber ?>"
     />
-    <Forms.Field 
+    <Forms.Field
         class="flex-1 w-0"
         name="episode_number"
         label="<?= lang('Episode.form.episode_number') ?>"
         type="number"
+        value="<?= $nextEpisodeNumber ?>"
+        required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>"
     />
 </div>
 
diff --git a/themes/cp_admin/episode/edit.php b/themes/cp_admin/episode/edit.php
index acc4eb423679cf361efa2276ebc2b9057d4696c6..b693cb9a09fabcbb9c482d2a1f53a89b358fb5ad 100644
--- a/themes/cp_admin/episode/edit.php
+++ b/themes/cp_admin/episode/edit.php
@@ -55,19 +55,20 @@
 </div>
 
 <div class="flex flex-col gap-x-2 gap-y-4 md:flex-row">
-    <Forms.Field 
+    <Forms.Field
         class="flex-1 w-0"
         name="season_number"
         label="<?= lang('Episode.form.season_number') ?>"
         type="number"
         value="<?= $episode->season_number ?>"
     />
-    <Forms.Field 
+    <Forms.Field
         class="flex-1 w-0"
         name="episode_number"
         label="<?= lang('Episode.form.episode_number') ?>"
         type="number"
         value="<?= $episode->number ?>"
+        required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>"
     />
 </div>