diff --git a/CTFd/themes/admin/assets/js/pages/challenges.js b/CTFd/themes/admin/assets/js/pages/challenges.js
index 478a6b417cbb870bc4dd8bbb083ac8ada3d20252..b115578f29428c4361e305d7ec2a0cd7a257f5e2 100644
--- a/CTFd/themes/admin/assets/js/pages/challenges.js
+++ b/CTFd/themes/admin/assets/js/pages/challenges.js
@@ -412,6 +412,15 @@ function bulkEditChallenges(_event) {
           <option value="hidden">Caché</option>
         </select>
       </div>
+      <div class="form-group">
+        <label>Type</label>
+        <select name="type" data-initial="">
+          <option value="">--</option>
+          <option value="standard">Standard</option>
+          <option value="manual">Manuel</option>
+          <option value="manualRecursive">Manuel Récursif</option>
+        </select>
+      </div>
     </form>
     `),
     button: "Soumettre",
diff --git a/CTFd/themes/admin/static/assets/pages/challenges.d31a596d.js b/CTFd/themes/admin/static/assets/pages/challenges.ae541f6c.js
similarity index 89%
rename from CTFd/themes/admin/static/assets/pages/challenges.d31a596d.js
rename to CTFd/themes/admin/static/assets/pages/challenges.ae541f6c.js
index 4d873ee1044d4e5a38fe3d22c067c1ff34d3af51..e5967225bd7b267c0c65a7e553f60439c521762d 100644
--- a/CTFd/themes/admin/static/assets/pages/challenges.d31a596d.js
+++ b/CTFd/themes/admin/static/assets/pages/challenges.ae541f6c.js
@@ -1,4 +1,4 @@
-import{u as E,C as m,j as i,D as p,x as S}from"./main.b0151f5b.js";document.addEventListener("DOMContentLoaded",function(h){document.getElementById("btn-file-input").addEventListener("click",function(t){document.getElementById("thumbsnail-get-path").click()}),document.getElementById("thumbsnail-get-path").addEventListener("change",function(t){const e=t.target.files[0];let a=document.getElementById("thumbsnail-upload-form");const l=new FormData(a);if(l.append("file",e),E.files.upload(l,a,function(r){const f=r.data[0],c=m.config.urlRoot+"/files/"+f.location;document.getElementById("thumbsnail-path").value=c,console.log("Miniature t\xE9l\xE9charg\xE9e avec succ\xE8s:",c);const D=document.getElementById("image-preview");D.src=c,D.style.display="block"}),e){const r=new FileReader;r.onload=function(f){const c=document.getElementById("image-preview");c.src=f.target.result,c.style.display="block"},r.readAsDataURL(e)}});const o=Object.keys(document.categories),d=document.getElementById("categories-selector");o.forEach(t=>{const e=document.createElement("option");e.value=t,e.textContent=t,e.textContent!="D\xE9fi Flash"&&d.appendChild(e)});const s=document.createElement("option");s.value="other",s.textContent="Other (type below)",d.appendChild(s);const n=document.getElementById("categories-selector-input");d.value=="other"||o.length==0?(n.style.display="block",n.name="category"):(n.style.display="none",n.value="",n.name=""),d.addEventListener("change",function(){d.value=="other"||o.length==0?(n.style.display="block",n.name="category"):(n.style.display="none",n.value="",n.name="")});let u=0;document.querySelectorAll("td.id").forEach(function(t){const e=parseInt(t.textContent);!isNaN(e)&&e>u&&(u=e)});const g=u+1;document.getElementById("challenge_id_texte").textContent=g,document.getElementById("challenge_id").value=g;function v(){const t=i("#challenge-create-options-quick").serializeJSON();let e=document.getElementById("categories-selector"),a=document.getElementById("categories-selector-input"),l=document.getElementById("time-selector-input");e.hidden&&t.type!="flash"?(l.hidden=!0,a.hidden=!1,e.hidden=!1):!e.hidden&&t.type=="flash"&&(l.hidden=!1,a.hidden=!0,e.hidden=!0)}function b(t){p({title:"Choisir P\xE9riode",body:`<div class="mb-3" style="text-align: center;">
+import{u as E,C as m,j as i,D as p,x as S}from"./main.b0151f5b.js";document.addEventListener("DOMContentLoaded",function(g){document.getElementById("btn-file-input").addEventListener("click",function(t){document.getElementById("thumbsnail-get-path").click()}),document.getElementById("thumbsnail-get-path").addEventListener("change",function(t){const e=t.target.files[0];let a=document.getElementById("thumbsnail-upload-form");const l=new FormData(a);if(l.append("file",e),E.files.upload(l,a,function(r){const f=r.data[0],c=m.config.urlRoot+"/files/"+f.location;document.getElementById("thumbsnail-path").value=c,console.log("Miniature t\xE9l\xE9charg\xE9e avec succ\xE8s:",c);const v=document.getElementById("image-preview");v.src=c,v.style.display="block"}),e){const r=new FileReader;r.onload=function(f){const c=document.getElementById("image-preview");c.src=f.target.result,c.style.display="block"},r.readAsDataURL(e)}});const o=Object.keys(document.categories),d=document.getElementById("categories-selector");o.forEach(t=>{const e=document.createElement("option");e.value=t,e.textContent=t,e.textContent!="D\xE9fi Flash"&&d.appendChild(e)});const s=document.createElement("option");s.value="other",s.textContent="Other (type below)",d.appendChild(s);const n=document.getElementById("categories-selector-input");d.value=="other"||o.length==0?(n.style.display="block",n.name="category"):(n.style.display="none",n.value="",n.name=""),d.addEventListener("change",function(){d.value=="other"||o.length==0?(n.style.display="block",n.name="category"):(n.style.display="none",n.value="",n.name="")});let u=0;document.querySelectorAll("td.id").forEach(function(t){const e=parseInt(t.textContent);!isNaN(e)&&e>u&&(u=e)});const h=u+1;document.getElementById("challenge_id_texte").textContent=h,document.getElementById("challenge_id").value=h;function D(){const t=i("#challenge-create-options-quick").serializeJSON();let e=document.getElementById("categories-selector"),a=document.getElementById("categories-selector-input"),l=document.getElementById("time-selector-input");e.hidden&&t.type!="flash"?(l.hidden=!0,a.hidden=!1,e.hidden=!1):!e.hidden&&t.type=="flash"&&(l.hidden=!1,a.hidden=!0,e.hidden=!0)}function b(t){p({title:"Choisir P\xE9riode",body:`<div class="mb-3" style="text-align: center;">
               <label>D\xE9but</label>
               <div class="row" style="justify-content: space-around;">
               
@@ -73,7 +73,7 @@ import{u as E,C as m,j as i,D as p,x as S}from"./main.b0151f5b.js";document.addE
 
           <\/script>`,button:"Ok",success:function(){console.log("done")}})}function y(t){const e=i("#challenge-create-options-quick").serializeJSON();if(delete e.challenge_id,delete e.flag_type,e.type!="flash")delete e.startTime,delete e.endTime;else if(e.category="D\xE9fi Flash",e.startTime>=e.endTime)return p({title:"P\xE9riode de temps invalide",body:"Veuillez choisir une p\xE9riode de temps valide",button:"Ok"}),!1;e.description="",m.fetch("/api/v1/challenges",{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)}).then(function(a){return console.log("hello2"),a.json()}).then(function(a){if(a.success){if(a.data.type=="manualRecursive"){const l={value:"R\xE9cursif",challenge:a.data.id};m.api.post_tag_list({},l).then(r=>{})}if(a.data.type=="flash"){const l={value:"Flash",challenge:a.data.id};m.api.post_tag_list({},l).then(r=>{})}setTimeout(function(){window.location.reload(!0)},500)}else{let l="";for(const r in a.errors)l+=a.errors[r].join(`
 `),l+=`
-`;p({title:"Erreur",body:l,button:"Ok"})}})}document.getElementById("submit-button").addEventListener("click",function(t){t.preventDefault(),y()}),document.getElementById("challenge-create-options-quick-selector").addEventListener("keypress",function(t){t.key==="Enter"&&(t.preventDefault(),y())}),document.getElementById("challenge-type").addEventListener("change",function(t){v()}),document.getElementById("time-selector-input").addEventListener("click",function(t){t.preventDefault(),b()})});function I(h){let o=i("input[data-challenge-id]:checked").map(function(){return i(this).data("challenge-id")}),d=o.length===1?"challenge":"challenges";S({title:"Supprimer un d\xE9fi",body:`\xCAtes-vous certain de vouloir supprimer ${o.length} ${d}?`,success:function(){const s=[];for(var n of o)s.push(m.fetch(`/api/v1/challenges/${n}`,{method:"DELETE"}));Promise.all(s).then(u=>{window.location.reload()})}})}function M(h){let o=i("input[data-challenge-id]:checked").map(function(){return i(this).data("challenge-id")});p({title:"Modifier un d\xE9fi",body:i(`
+`;p({title:"Erreur",body:l,button:"Ok"})}})}document.getElementById("submit-button").addEventListener("click",function(t){t.preventDefault(),y()}),document.getElementById("challenge-create-options-quick-selector").addEventListener("keypress",function(t){t.key==="Enter"&&(t.preventDefault(),y())}),document.getElementById("challenge-type").addEventListener("change",function(t){D()}),document.getElementById("time-selector-input").addEventListener("click",function(t){t.preventDefault(),b()})});function M(g){let o=i("input[data-challenge-id]:checked").map(function(){return i(this).data("challenge-id")}),d=o.length===1?"challenge":"challenges";S({title:"Supprimer un d\xE9fi",body:`\xCAtes-vous certain de vouloir supprimer ${o.length} ${d}?`,success:function(){const s=[];for(var n of o)s.push(m.fetch(`/api/v1/challenges/${n}`,{method:"DELETE"}));Promise.all(s).then(u=>{window.location.reload()})}})}function I(g){let o=i("input[data-challenge-id]:checked").map(function(){return i(this).data("challenge-id")});p({title:"Modifier un d\xE9fi",body:i(`
     <form id="challenges-bulk-edit">
       <div class="form-group">
         <label>Cat\xE9gorie</label>
@@ -91,5 +91,14 @@ import{u as E,C as m,j as i,D as p,x as S}from"./main.b0151f5b.js";document.addE
           <option value="hidden">Cach\xE9</option>
         </select>
       </div>
+      <div class="form-group">
+        <label>Type</label>
+        <select name="type" data-initial="">
+          <option value="">--</option>
+          <option value="standard">Standard</option>
+          <option value="manual">Manuel</option>
+          <option value="manualRecursive">Manuel R\xE9cursif</option>
+        </select>
+      </div>
     </form>
-    `),button:"Soumettre",success:function(){let d=i("#challenges-bulk-edit").serializeJSON(!0);const s=[];for(var n of o)s.push(m.fetch(`/api/v1/challenges/${n}`,{method:"PATCH",body:JSON.stringify(d)}));Promise.all(s).then(u=>{window.location.reload()})}})}i(()=>{i("#challenges-delete-button").click(I),i("#challenges-edit-button").click(M)});
+    `),button:"Soumettre",success:function(){let d=i("#challenges-bulk-edit").serializeJSON(!0);const s=[];for(var n of o)s.push(m.fetch(`/api/v1/challenges/${n}`,{method:"PATCH",body:JSON.stringify(d)}));Promise.all(s).then(u=>{window.location.reload()})}})}i(()=>{i("#challenges-delete-button").click(M),i("#challenges-edit-button").click(I)});
diff --git a/CTFd/themes/admin/static/manifest.json b/CTFd/themes/admin/static/manifest.json
index 62f9ca78ebf70bbe70760adef279464f7d606ab4..5a085e98b905eff7487e147c9ca4d30583e10e9d 100644
--- a/CTFd/themes/admin/static/manifest.json
+++ b/CTFd/themes/admin/static/manifest.json
@@ -18,7 +18,7 @@
     ]
   },
   "assets/js/pages/challenges.js": {
-    "file": "assets/pages/challenges.d31a596d.js",
+    "file": "assets/pages/challenges.ae541f6c.js",
     "src": "assets/js/pages/challenges.js",
     "isEntry": true,
     "imports": [
@@ -178,27 +178,22 @@
       "_echarts.common.75806e9f.js"
     ]
   },
-  "CommentBox.css": {
-    "file": "assets/CommentBox.23213b39.css",
-    "src": "CommentBox.css"
-  },
   "assets/js/pages/challenge.css": {
     "file": "assets/challenge.66ec3ebe.css",
     "src": "assets/js/pages/challenge.css"
   },
-  "assets/css/challenge-board.scss": {
-    "file": "assets/challenge-board.44e07e05.css",
-    "src": "assets/css/challenge-board.scss",
-    "isEntry": true
+  "CommentBox.css": {
+    "file": "assets/CommentBox.23213b39.css",
+    "src": "CommentBox.css"
   },
   "assets/css/admin.scss": {
     "file": "assets/admin.3594ea3f.css",
     "src": "assets/css/admin.scss",
     "isEntry": true
   },
-  "assets/css/fonts.scss": {
-    "file": "assets/fonts.ffb05726.css",
-    "src": "assets/css/fonts.scss",
+  "assets/css/challenge-board.scss": {
+    "file": "assets/challenge-board.44e07e05.css",
+    "src": "assets/css/challenge-board.scss",
     "isEntry": true
   },
   "assets/css/codemirror.scss": {
@@ -206,6 +201,11 @@
     "src": "assets/css/codemirror.scss",
     "isEntry": true
   },
+  "assets/css/fonts.scss": {
+    "file": "assets/fonts.ffb05726.css",
+    "src": "assets/css/fonts.scss",
+    "isEntry": true
+  },
   "assets/css/main.scss": {
     "file": "assets/main.088f55c6.css",
     "src": "assets/css/main.scss",
diff --git a/CTFd/themes/admin/templates/challenges/update.html b/CTFd/themes/admin/templates/challenges/update.html
index 2cfbe3a5334e55646f0571622aa30f113ff235bf..b10fc6c44e1d2b6216bf53aa10e4694ba7c28575 100644
--- a/CTFd/themes/admin/templates/challenges/update.html
+++ b/CTFd/themes/admin/templates/challenges/update.html
@@ -90,7 +90,6 @@
 	
 	
 	{% block time %}
-	<input type="hidden" name="type" value="standard">
 	{% endblock %}
 
 	{% block flags %}