diff --git a/src/tools/token-generator/token-generator.service.ts b/src/tools/token-generator/token-generator.service.ts
index c4a497b8..ad22628a 100644
--- a/src/tools/token-generator/token-generator.service.ts
+++ b/src/tools/token-generator/token-generator.service.ts
@@ -24,5 +24,6 @@ export function createToken({
     + (withSymbols ? '.,;:!?./-"\'#{([-|\\@)]=}*+' : '')
   )).split('').filter(c => !(deniedChars?.includes(c))).join('');
 
-  return shuffleString(allAlphabet.repeat(length)).substring(0, length);
+  const len = length < 1 ? 1 : length;
+  return shuffleString(allAlphabet.repeat(len)).substring(0, len);
 }
diff --git a/src/tools/token-generator/token-generator.tool.vue b/src/tools/token-generator/token-generator.tool.vue
index 912d1f32..3000fea6 100644
--- a/src/tools/token-generator/token-generator.tool.vue
+++ b/src/tools/token-generator/token-generator.tool.vue
@@ -14,7 +14,7 @@ const deniedChars = useQueryParamOrStorage({ name: 'deny', storageName: 'token-g
 const { t } = useI18n();
 
 const [tokens, refreshTokens] = computedRefreshable(() =>
-  Array.from({ length: count.value },
+  Array.from({ length: count.value < 1 ? 1 : count.value },
     () => createToken({
       length: length.value,
       withUppercase: withUppercase.value,
@@ -59,11 +59,12 @@ const { copy } = useCopy({ source: tokens, text: t('tools.token-generator.copied
 
       
         
-        
+        
       
 
       
-        
+        
+